Commit f49abdad5afd783b599f690218fb0df8b452bc5f
1 parent
1f9bd74e
upgrade to new GammaLib interface
Showing
4 changed files
with
116 additions
and
39 deletions
src/ctbin/ctbin.cpp
| ... | ... | @@ -227,19 +227,21 @@ void ctbin::bin(void) |
| 227 | 227 | log << num_outside_ebds << std::endl; |
| 228 | 228 | } |
| 229 | 229 | |
| 230 | - // Log observation | |
| 230 | + // Log map | |
| 231 | 231 | if (logTerse()) { |
| 232 | 232 | log << std::endl; |
| 233 | 233 | log.header1("Counts map"); |
| 234 | 234 | log << map << std::endl; |
| 235 | 235 | } |
| 236 | - | |
| 237 | - // Save counts map | |
| 238 | - GFits file; | |
| 239 | - map.write(&file); | |
| 240 | - obs.ebounds().write(&file); | |
| 241 | - obs.gti().write(&file); | |
| 242 | - file.saveto(m_outfile, clobber()); | |
| 236 | + | |
| 237 | + // Create events cube from sky map | |
| 238 | + GCTAEventCube cube(map); | |
| 239 | + | |
| 240 | + // Replace event list by event cube in observation | |
| 241 | + obs.events(&cube); | |
| 242 | + | |
| 243 | + // Save observation | |
| 244 | + obs.save(m_outfile, clobber()); | |
| 243 | 245 | |
| 244 | 246 | // Return |
| 245 | 247 | return; | ... | ... |
src/ctlike/ctlike.cpp
| ... | ... | @@ -104,6 +104,7 @@ ctlike::~ctlike(void) |
| 104 | 104 | ***************************************************************************/ |
| 105 | 105 | void ctlike::run(void) |
| 106 | 106 | { |
| 107 | + log.cout(true); | |
| 107 | 108 | // Get parameters |
| 108 | 109 | get_parameters(); |
| 109 | 110 | |
| ... | ... | @@ -119,6 +120,13 @@ void ctlike::run(void) |
| 119 | 120 | else |
| 120 | 121 | binned(m_cntmap); |
| 121 | 122 | |
| 123 | + // Write observation into logger | |
| 124 | + if (logTerse()) { | |
| 125 | + log << std::endl; | |
| 126 | + log.header1("Observation"); | |
| 127 | + log << m_obs << std::endl; | |
| 128 | + } | |
| 129 | + | |
| 122 | 130 | // Setup models for optimizing. |
| 123 | 131 | m_models = GModels(m_srcmdl); |
| 124 | 132 | m_obs.models(m_models); |
| ... | ... | @@ -265,7 +273,7 @@ void ctlike::unbinned(const std::string& evfile) |
| 265 | 273 | // for analysis |
| 266 | 274 | run.load_unbinned(evfile); |
| 267 | 275 | run.response(m_irf, m_caldb); |
| 268 | - run.roi(roi); | |
| 276 | + run.roi(&roi); | |
| 269 | 277 | run.ebounds(ebds); |
| 270 | 278 | m_obs.append(run); |
| 271 | 279 | ... | ... |
src/ctobssim/ctobssim.cpp
| ... | ... | @@ -108,6 +108,9 @@ void ctobssim::run(void) |
| 108 | 108 | if (logTerse()) { |
| 109 | 109 | log_parameters(); |
| 110 | 110 | log << std::endl; |
| 111 | + log << m_pnt << std::endl; | |
| 112 | + log << m_obs << std::endl; | |
| 113 | + log << m_models << std::endl; | |
| 111 | 114 | } |
| 112 | 115 | |
| 113 | 116 | // Write header |
| ... | ... | @@ -174,6 +177,36 @@ void ctobssim::get_parameters(void) |
| 174 | 177 | // Initialise random number generator |
| 175 | 178 | m_ran.seed(m_seed); |
| 176 | 179 | |
| 180 | + // Set CTA pointing | |
| 181 | + GSkyDir dir; | |
| 182 | + dir.radec_deg(m_ra, m_dec); | |
| 183 | + m_pnt.dir(dir); | |
| 184 | + | |
| 185 | + // Set GTI | |
| 186 | + GGti gti; | |
| 187 | + GTime tstart; | |
| 188 | + GTime tstop; | |
| 189 | + tstart.met(m_tmin); | |
| 190 | + tstop.met(m_tmax); | |
| 191 | + gti.append(tstart, tstop); | |
| 192 | + | |
| 193 | + // Set energy boundaries | |
| 194 | + GEbounds ebds; | |
| 195 | + GEnergy emin; | |
| 196 | + GEnergy emax; | |
| 197 | + emin.TeV(m_emin); | |
| 198 | + emax.TeV(m_emax); | |
| 199 | + ebds.append(emin, emax); | |
| 200 | + | |
| 201 | + // Set observation | |
| 202 | + m_obs.ebounds(ebds); | |
| 203 | + m_obs.gti(gti); | |
| 204 | + m_obs.response(m_irf, m_caldb); | |
| 205 | + m_obs.pointing(m_pnt); | |
| 206 | + | |
| 207 | + // Load models | |
| 208 | + m_models.load(m_infile); | |
| 209 | + | |
| 177 | 210 | // Return |
| 178 | 211 | return; |
| 179 | 212 | } |
| ... | ... | @@ -198,17 +231,14 @@ GPhotons ctobssim::simulate_photons(void) |
| 198 | 231 | tmin.met(m_tmin); |
| 199 | 232 | tmax.met(m_tmax); |
| 200 | 233 | |
| 201 | - // Load models | |
| 202 | - GModels models(m_infile); | |
| 203 | - | |
| 204 | 234 | // Allocate photons |
| 205 | 235 | GPhotons photons; |
| 206 | 236 | |
| 207 | 237 | // Simulate photons for all sky models |
| 208 | - for (int i = 0; i < models.size(); ++i) { | |
| 238 | + for (int i = 0; i < m_models.size(); ++i) { | |
| 209 | 239 | |
| 210 | 240 | // Get sky model (NULL if not a sky model) |
| 211 | - GModelSky* model = dynamic_cast<GModelSky*>(models(i)); | |
| 241 | + GModelSky* model = dynamic_cast<GModelSky*>(m_models(i)); | |
| 212 | 242 | |
| 213 | 243 | // If we have a sky model then simulate photons |
| 214 | 244 | if (model != NULL) { |
| ... | ... | @@ -260,21 +290,15 @@ GPhotons ctobssim::simulate_photons(void) |
| 260 | 290 | ***************************************************************************/ |
| 261 | 291 | GCTAEventList* ctobssim::simulate_events(const GPhotons& photons) |
| 262 | 292 | { |
| 263 | - // Setup CTA response | |
| 264 | - GCTAResponse rsp(m_irf, m_caldb); | |
| 265 | - | |
| 266 | - // Setup CTA pointing | |
| 267 | - GCTAPointing pnt; | |
| 268 | - | |
| 269 | 293 | // Allocate CTA event list |
| 270 | 294 | GCTAEventList* events = new GCTAEventList; |
| 271 | 295 | |
| 272 | 296 | // Reserves space for events |
| 273 | 297 | events->reserve(photons.size()); |
| 274 | 298 | |
| 275 | - // Simulate events | |
| 299 | + // Simulate events from photons | |
| 276 | 300 | for (int i = 0; i < photons.size(); ++i) { |
| 277 | - GCTAEventAtom* event = rsp.mc(m_area, photons[i], pnt, m_ran); | |
| 301 | + GCTAEventAtom* event = m_obs.response()->mc(m_area, photons[i], m_pnt, m_ran); | |
| 278 | 302 | if (event != NULL) |
| 279 | 303 | events->append(*event); |
| 280 | 304 | delete event; |
| ... | ... | @@ -282,9 +306,43 @@ GCTAEventList* ctobssim::simulate_events(const GPhotons& photons) |
| 282 | 306 | |
| 283 | 307 | // Dump simulation results |
| 284 | 308 | if (logNormal()) { |
| 285 | - log << parformat("Simulated events") << str(events->size()) << std::endl; | |
| 309 | + log << parformat("MC source events"); | |
| 310 | + log << str(events->size()) << std::endl; | |
| 286 | 311 | } |
| 287 | 312 | |
| 313 | + // Simulate background events | |
| 314 | + for (int i = 0; i < m_models.size(); ++i) { | |
| 315 | + | |
| 316 | + // Get model (NULL if not a radial acceptance model) | |
| 317 | + GCTAModelRadialAcceptance* model = | |
| 318 | + dynamic_cast<GCTAModelRadialAcceptance*>(m_models(i)); | |
| 319 | + | |
| 320 | + // If we have a radial acceptance model then simulate events | |
| 321 | + if (model != NULL) { | |
| 322 | + | |
| 323 | + // Get simulated event list | |
| 324 | + GCTAEventList* list = model->mc(m_obs, m_ran); | |
| 325 | + | |
| 326 | + // Reserves space for events | |
| 327 | + events->reserve(list->size()+events->size()); | |
| 328 | + | |
| 329 | + // Append events | |
| 330 | + for (int k = 0; k < list->size(); k++) | |
| 331 | + events->append(*(list->pointer(k))); | |
| 332 | + | |
| 333 | + // Dump simulation results | |
| 334 | + if (logNormal()) { | |
| 335 | + log << parformat("MC background events"); | |
| 336 | + log << str(list->size()) << std::endl; | |
| 337 | + } | |
| 338 | + | |
| 339 | + // Free event list | |
| 340 | + delete list; | |
| 341 | + | |
| 342 | + } // endif: model was valid | |
| 343 | + | |
| 344 | + } // endfor: looped over all models | |
| 345 | + | |
| 288 | 346 | // Return event list |
| 289 | 347 | return events; |
| 290 | 348 | } |
| ... | ... | @@ -353,9 +411,13 @@ void ctobssim::set_events_keywords(GFits* file) |
| 353 | 411 | hdu->card("ONTIME", m_tmax-m_tmin, "[s] Total good time including deadtime"); |
| 354 | 412 | hdu->card("LIVETIME", m_tmax-m_tmin, "[s] Total livetime"); |
| 355 | 413 | |
| 414 | + // Set target information | |
| 415 | + //hdu->card("RA_OBJ", m_ra, "[deg] Target Right Ascension"); | |
| 416 | + //hdu->card("DEC_OBJ", m_dec, "[deg] Target Declination"); | |
| 417 | + | |
| 356 | 418 | // Set pointing information |
| 357 | - hdu->card("RA_OBJ", m_ra, "[deg] Target Right Ascension"); | |
| 358 | - hdu->card("DEC_OBJ", m_dec, "[deg] Target Declination"); | |
| 419 | + hdu->card("RA_PNT", m_ra, "[deg] Pointing Right Ascension"); | |
| 420 | + hdu->card("DEC_PNT", m_dec, "[deg] Pointing Declination"); | |
| 359 | 421 | |
| 360 | 422 | // Return |
| 361 | 423 | return; |
| ... | ... | @@ -378,6 +440,8 @@ void ctobssim::init_members(void) |
| 378 | 440 | m_outfile.clear(); |
| 379 | 441 | m_caldb.clear(); |
| 380 | 442 | m_irf.clear(); |
| 443 | + m_obs.clear(); | |
| 444 | + m_pnt.clear(); | |
| 381 | 445 | m_seed = 1; |
| 382 | 446 | m_ra = 0.0; |
| 383 | 447 | m_dec = 0.0; | ... | ... |
src/ctobssim/ctobssim.hpp
| ... | ... | @@ -54,20 +54,23 @@ protected: |
| 54 | 54 | void free_members(void); |
| 55 | 55 | |
| 56 | 56 | // User parameters |
| 57 | - std::string m_infile; //!< Input model | |
| 58 | - std::string m_outfile; //!< Output events file | |
| 59 | - std::string m_caldb; //!< Calibration database repository | |
| 60 | - std::string m_irf; //!< Instrument response function | |
| 61 | - int m_seed; //!< Random number generator seed | |
| 62 | - double m_ra; //!< RA of ROI centre | |
| 63 | - double m_dec; //!< DEC of ROI centre | |
| 64 | - double m_rad; //!< ROI radius | |
| 65 | - double m_tmin; //!< Start time (MET) | |
| 66 | - double m_tmax; //!< Stop time (MET) | |
| 67 | - double m_emin; //!< Lower energy (TeV) | |
| 68 | - double m_emax; //!< Upper energy (TeV) | |
| 69 | - double m_area; //!< Surface area for simulation (cm2) | |
| 70 | - GRan m_ran; //!< Random number generator | |
| 57 | + std::string m_infile; //!< Input model | |
| 58 | + std::string m_outfile; //!< Output events file | |
| 59 | + std::string m_caldb; //!< Calibration database repository | |
| 60 | + std::string m_irf; //!< Instrument response function | |
| 61 | + int m_seed; //!< Random number generator seed | |
| 62 | + double m_ra; //!< RA of pointing direction | |
| 63 | + double m_dec; //!< DEC of pointing direction | |
| 64 | + double m_rad; //!< FOV radius | |
| 65 | + double m_tmin; //!< Start time (MET) | |
| 66 | + double m_tmax; //!< Stop time (MET) | |
| 67 | + double m_emin; //!< Lower energy (TeV) | |
| 68 | + double m_emax; //!< Upper energy (TeV) | |
| 69 | + double m_area; //!< Surface area for simulation (cm2) | |
| 70 | + GRan m_ran; //!< Random number generator | |
| 71 | + GCTAPointing m_pnt; //!< CTA pointing | |
| 72 | + GCTAObservation m_obs; //!< CTA observation | |
| 73 | + GModels m_models; //!< Models | |
| 71 | 74 | }; |
| 72 | 75 | |
| 73 | 76 | #endif /* CTOBSSIM_HPP */ | ... | ... |