Commit 352ab4d324b1244578165849869255b78730c0c3
1 parent
b6c5a749
Added support of 'edispcube' parameter to all ctools
Showing
23 changed files
with
144 additions
and
122 deletions
cscripts/cslightcrv.py
| ... | ... | @@ -104,7 +104,9 @@ class cslightcrv(ctools.cscript): |
| 104 | 104 | pars.append(gammalib.GApplicationPar("srcname","s","a","Crab","","","Source name")) |
| 105 | 105 | pars.append(gammalib.GApplicationPar("expcube","f","a","NONE","","","Input exposure cube file (only needed for stacked analysis)")) |
| 106 | 106 | pars.append(gammalib.GApplicationPar("psfcube","f","a","NONE","","","Input PSF cube file (only needed for stacked analysis)")) |
| 107 | + pars.append(gammalib.GApplicationPar("edispcube","f","a","NONE","","","Input energy dispersion cube file (only needed for stacked analysis)")) | |
| 107 | 108 | pars.append(gammalib.GApplicationPar("bkgcube","s","a","NONE","","","Input background cube file (only needed for stacked analysis)")) |
| 109 | + pars.append(gammalib.GApplicationPar("edisp","b","h","no","","","Apply energy dispersion?")) | |
| 108 | 110 | pars.append(gammalib.GApplicationPar("caldb","s","a","prod2","","","Calibration database")) |
| 109 | 111 | pars.append(gammalib.GApplicationPar("irf","s","a","South_0.5h","","","Instrument response function")) |
| 110 | 112 | pars.append(gammalib.GApplicationPar("outfile","f","a","lightcurve.fits","","","Output light curve file")) |
| ... | ... | @@ -190,6 +192,9 @@ class cslightcrv(ctools.cscript): |
| 190 | 192 | # Get source name |
| 191 | 193 | self.m_srcname = self["srcname"].string() |
| 192 | 194 | |
| 195 | + # Get energy dispersion flag | |
| 196 | + self.m_edisp = self["edisp"].boolean() | |
| 197 | + | |
| 193 | 198 | # Get time boundaries |
| 194 | 199 | self.create_tbounds() |
| 195 | 200 | |
| ... | ... | @@ -472,12 +477,35 @@ class cslightcrv(ctools.cscript): |
| 472 | 477 | |
| 473 | 478 | # Set new binned observation |
| 474 | 479 | obs = bin.obs() |
| 475 | - | |
| 480 | + | |
| 481 | + # Get new models | |
| 482 | + models = bkgcube.models() | |
| 483 | + | |
| 476 | 484 | # Set precomputed binned response |
| 477 | 485 | obs[0].response(expcube.expcube(), psfcube.psfcube(), bkgcube.bkgcube()) |
| 478 | 486 | |
| 479 | - # Get new models | |
| 480 | - models = bkgcube.models() | |
| 487 | +# # Check if we need to include energy dispersion | |
| 488 | +# if self.m_edisp: | |
| 489 | +# | |
| 490 | +# # Create edisp cube | |
| 491 | +# edispcube = ctools.ctedispcube(select.obs()) | |
| 492 | +# edispcube["incube"] = "NONE" | |
| 493 | +# edispcube["usepnt"] = False | |
| 494 | +# edispcube["ebinalg"] = "LOG" | |
| 495 | +# edispcube["xref"] = self.m_xref | |
| 496 | +# edispcube["yref"] = self.m_yref | |
| 497 | +# edispcube["binsz"] = self.m_binsz | |
| 498 | +# edispcube["nxpix"] = self.m_nxpix | |
| 499 | +# edispcube["nypix"] = self.m_nypix | |
| 500 | +# edispcube["enumbins"] = self.m_ebins | |
| 501 | +# edispcube["emin"] = self.m_emin | |
| 502 | +# edispcube["emax"] = self.m_emax | |
| 503 | +# edispcube["coordsys"] = self.m_coordsys | |
| 504 | +# edispcube["proj"] = self.m_proj | |
| 505 | +# edispcube.run() | |
| 506 | +# | |
| 507 | +# # Set precomputed binned response including energy dispersion | |
| 508 | +# obs[0].response(expcube.expcube(), psfcube.psfcube(), edispcube.edispcube(), bkgcube.bkgcube()) | |
| 481 | 509 | |
| 482 | 510 | # Fix background models if required |
| 483 | 511 | if self.m_fix_bkg: |
| ... | ... | @@ -495,6 +523,7 @@ class cslightcrv(ctools.cscript): |
| 495 | 523 | |
| 496 | 524 | # Likelihood |
| 497 | 525 | like = ctools.ctlike(obs) |
| 526 | + like["edisp"] = self.m_edisp | |
| 498 | 527 | like.run() |
| 499 | 528 | |
| 500 | 529 | # Skip bin if no event was present | ... | ... |
cscripts/cspull.py
| ... | ... | @@ -52,6 +52,7 @@ class cspull(ctools.cscript): |
| 52 | 52 | self.m_exposure = None |
| 53 | 53 | self.m_psfcube = None |
| 54 | 54 | self.m_bckcube = None |
| 55 | + self.m_edispcube = None | |
| 55 | 56 | self.m_stackmodels = None |
| 56 | 57 | self.m_coordsys = "CEL" |
| 57 | 58 | self.m_proj = "TAN" |
| ... | ... | @@ -246,6 +247,30 @@ class cspull(ctools.cscript): |
| 246 | 247 | psfcube["proj"] = self.m_proj |
| 247 | 248 | psfcube.run() |
| 248 | 249 | |
| 250 | + if self.m_edisp: | |
| 251 | + | |
| 252 | + # Get stacked Edisp | |
| 253 | + edispcube = ctools.ctpsfcube(self.obs) | |
| 254 | + edispcube["incube"] = "NONE" | |
| 255 | + edispcube["usepnt"] = True | |
| 256 | + edispcube["ebinalg"] = "LOG" | |
| 257 | + edispcube["binsz"] = self.m_binsz*10.0 | |
| 258 | + edispcube["nxpix"] = self.m_npix/10 | |
| 259 | + edispcube["nypix"] = self.m_npix/10 | |
| 260 | + edispcube["enumbins"] = self.m_enumbins | |
| 261 | + edispcube["emin"] = self["emin"].real() | |
| 262 | + edispcube["emax"] = self["emax"].real() | |
| 263 | + edispcube["coordsys"] = self.m_coordsys | |
| 264 | + edispcube["proj"] = self.m_proj | |
| 265 | + edispcube.run() | |
| 266 | + | |
| 267 | + # Store result | |
| 268 | + self.m_edispcube = edispcube.edispcube().copy() | |
| 269 | + | |
| 270 | + # Logging | |
| 271 | + if self.logTerse(): | |
| 272 | + self.log("Computed Edisp cube\n") | |
| 273 | + | |
| 249 | 274 | # Notify Psf computation |
| 250 | 275 | if self.logTerse(): |
| 251 | 276 | self.log("Computed Psf cube\n") |
| ... | ... | @@ -391,7 +416,10 @@ class cspull(ctools.cscript): |
| 391 | 416 | |
| 392 | 417 | # If stacked, add stacked responses and model |
| 393 | 418 | if self.obs.size() > 1 and self.m_enumbins > 0: |
| 394 | - obs[0].response(self.m_exposure, self.m_psfcube, self.m_bckcube) | |
| 419 | + if self.m_edisp: | |
| 420 | + obs[0].response(self.m_exposure, self.m_psfcube, self.m_edispcube, self.m_bckcube) | |
| 421 | + else: | |
| 422 | + obs[0].response(self.m_exposure, self.m_psfcube, self.m_bckcube) | |
| 395 | 423 | obs.models(self.m_stackmodels) |
| 396 | 424 | |
| 397 | 425 | # Determine number of events in simulation | ... | ... |
cscripts/csresmap.py
| ... | ... | @@ -108,6 +108,7 @@ class csresmap(ctools.cscript): |
| 108 | 108 | pars.append(gammalib.GApplicationPar("modcube","f","a","NONE","","","Input model cube file (generated with ctmodel)")) |
| 109 | 109 | pars.append(gammalib.GApplicationPar("expcube","f","a","NONE","","","Input exposure cube file (only needed for stacked analysis)")) |
| 110 | 110 | pars.append(gammalib.GApplicationPar("psfcube","f","a","NONE","","","Input PSF cube file (only needed for stacked analysis)")) |
| 111 | + pars.append(gammalib.GApplicationPar("edispcube","f","a","NONE","","","Input energy dispersion cube file (only needed for stacked analysis)")) | |
| 111 | 112 | pars.append(gammalib.GApplicationPar("bkgcube","f","a","NONE","","","Input background cube file (only needed for stacked analysis)")) |
| 112 | 113 | pars.append(gammalib.GApplicationPar("inmodel","f","a","$CTOOLS/share/models/crab.xml","","","Input model XML file")) |
| 113 | 114 | pars.append(gammalib.GApplicationPar("caldb","s","a","prod2","","","Calibration database")) | ... | ... |
cscripts/csspec.py
| ... | ... | @@ -105,6 +105,7 @@ class csspec(ctools.cscript): |
| 105 | 105 | pars.append(gammalib.GApplicationPar("srcname","s","a","Crab","","","Source name")) |
| 106 | 106 | pars.append(gammalib.GApplicationPar("expcube","f","a","NONE","","","Input exposure cube file (only needed for stacked analysis)")) |
| 107 | 107 | pars.append(gammalib.GApplicationPar("psfcube","f","a","NONE","","","Input PSF cube file (only needed for stacked analysis)")) |
| 108 | + pars.append(gammalib.GApplicationPar("edispcube","f","a","NONE","","","Input energy dispersion cube file (only needed for stacked analysis)")) | |
| 108 | 109 | pars.append(gammalib.GApplicationPar("bkgcube","f","a","NONE","","","Input background cube file (only needed for stacked analysis)")) |
| 109 | 110 | pars.append(gammalib.GApplicationPar("caldb","s","a","prod2","","","Calibration database")) |
| 110 | 111 | pars.append(gammalib.GApplicationPar("irf","s","a","South_0.5h","","","Instrument response function")) | ... | ... |
cscripts/cstsdist.py
| ... | ... | @@ -99,6 +99,7 @@ class cstsdist(ctools.cscript): |
| 99 | 99 | pars.append(gammalib.GApplicationPar("srcname","s","a","Crab","","","Source name")) |
| 100 | 100 | pars.append(gammalib.GApplicationPar("expcube","s","a","NONE","","","Input exposure cube file (only needed for stacked analysis)")) |
| 101 | 101 | pars.append(gammalib.GApplicationPar("psfcube","s","a","NONE","","","Input PSF cube file (only needed for stacked analysis)")) |
| 102 | + pars.append(gammalib.GApplicationPar("edispcube","f","a","NONE","","","Input energy dispersion cube file (only needed for stacked analysis)")) | |
| 102 | 103 | pars.append(gammalib.GApplicationPar("bkgcube","s","a","NONE","","","Input background cube file (only needed for stacked analysis)")) |
| 103 | 104 | pars.append(gammalib.GApplicationPar("caldb","s","a","prod2","","","Calibration database")) |
| 104 | 105 | pars.append(gammalib.GApplicationPar("irf","s","a","South_0.5h","","","Instrument response function")) | ... | ... |
src/ctbutterfly/ctbutterfly.par
| ... | ... | @@ -22,6 +22,7 @@ inmodel, f, a, "$CTOOLS/share/models/crab.xml",,, "Input model XML file" |
| 22 | 22 | srcname, s, a, "Crab",,,"Source of interest" |
| 23 | 23 | expcube, f, a, "NONE",,, "Input exposure cube file (only needed for stacked analysis)" |
| 24 | 24 | psfcube, f, a, "NONE",,, "Input PSF cube file (only needed for stacked analysis)" |
| 25 | +edispcube, f, a, "NONE",,, "Input energy dispersion cube file (only needed for stacked analysis)" | |
| 25 | 26 | bkgcube, f, a, "NONE",,, "Input background cube file (only needed for stacked analysis)" |
| 26 | 27 | caldb, s, a, "prod2",,, "Calibration database" |
| 27 | 28 | irf, s, a, "South_0.5h",,, "Instrument response function" | ... | ... |
src/ctedispcube/ctedispcube.cpp
| ... | ... | @@ -216,18 +216,6 @@ void ctedispcube::run(void) |
| 216 | 216 | log << std::endl; |
| 217 | 217 | } |
| 218 | 218 | |
| 219 | - // Set energy dispersion flag for all CTA observations and save old | |
| 220 | - // values in save_edisp vector | |
| 221 | -// std::vector<bool> save_edisp; | |
| 222 | -// save_edisp.assign(m_obs.size(), false); | |
| 223 | -// for (int i = 0; i < m_obs.size(); ++i) { | |
| 224 | -// GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); | |
| 225 | -// if (obs != NULL) { | |
| 226 | -// save_edisp[i] = obs->response()->apply_edisp(); | |
| 227 | -// obs->response()->apply_edisp(m_apply_edisp); | |
| 228 | -// } | |
| 229 | -// } | |
| 230 | - | |
| 231 | 219 | // Write observation(s) into logger |
| 232 | 220 | if (logTerse()) { |
| 233 | 221 | log << std::endl; |
| ... | ... | @@ -246,31 +234,23 @@ void ctedispcube::run(void) |
| 246 | 234 | log.header1("Generate EDISP cube"); |
| 247 | 235 | } |
| 248 | 236 | |
| 249 | - // Fill EDISP | |
| 237 | + // Fill Edisp | |
| 250 | 238 | m_edispcube.fill(m_obs, &log); |
| 251 | 239 | |
| 252 | - // Restore energy dispersion flag for all CTA observations | |
| 253 | -// for (int i = 0; i < m_obs.size(); ++i) { | |
| 254 | -// GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); | |
| 255 | -// if (obs != NULL) { | |
| 256 | -// obs->response()->apply_edisp(save_edisp[i]); | |
| 257 | -// } | |
| 258 | -// } | |
| 259 | - | |
| 260 | 240 | // Return |
| 261 | 241 | return; |
| 262 | 242 | } |
| 263 | 243 | |
| 264 | 244 | |
| 265 | 245 | /***********************************************************************//** |
| 266 | - * @brief Save EDISP cube | |
| 246 | + * @brief Save Edisp cube | |
| 267 | 247 | ***************************************************************************/ |
| 268 | 248 | void ctedispcube::save(void) |
| 269 | 249 | { |
| 270 | 250 | // Write header |
| 271 | 251 | if (logTerse()) { |
| 272 | 252 | log << std::endl; |
| 273 | - log.header1("Save EDISP cube"); | |
| 253 | + log.header1("Save Edisp cube"); | |
| 274 | 254 | } |
| 275 | 255 | |
| 276 | 256 | // Get output filename |
| ... | ... | @@ -281,7 +261,7 @@ void ctedispcube::save(void) |
| 281 | 261 | |
| 282 | 262 | // Log filename |
| 283 | 263 | if (logTerse()) { |
| 284 | - log << "Save EDISP cube into file \""+m_outcube+"\"."; | |
| 264 | + log << "Save Edisp cube into file \""+m_outcube+"\"."; | |
| 285 | 265 | log << std::endl; |
| 286 | 266 | } |
| 287 | 267 | |
| ... | ... | @@ -308,7 +288,6 @@ void ctedispcube::init_members(void) |
| 308 | 288 | { |
| 309 | 289 | // Initialise members |
| 310 | 290 | m_outcube.clear(); |
| 311 | -// m_apply_edisp = false; | |
| 312 | 291 | |
| 313 | 292 | // Initialise protected members |
| 314 | 293 | m_obs.clear(); |
| ... | ... | @@ -328,7 +307,6 @@ void ctedispcube::copy_members(const ctedispcube& app) |
| 328 | 307 | { |
| 329 | 308 | // Copy attributes |
| 330 | 309 | m_outcube = app.m_outcube; |
| 331 | -// m_apply_edisp = app.m_apply_edisp; | |
| 332 | 310 | |
| 333 | 311 | // Copy protected members |
| 334 | 312 | m_obs = app.m_obs; |
| ... | ... | @@ -396,14 +374,11 @@ void ctedispcube::get_parameters(void) |
| 396 | 374 | // Load event cube from filename |
| 397 | 375 | GCTAEventCube cube(incube); |
| 398 | 376 | |
| 399 | - // Define edisp cube | |
| 377 | + // Define Edisp cube | |
| 400 | 378 | m_edispcube = GCTACubeEdisp(cube, mmax, migrabins); |
| 401 | 379 | |
| 402 | 380 | } // endelse: cube loaded from file |
| 403 | 381 | |
| 404 | - // Read energy dispersion flag | |
| 405 | -// m_apply_edisp = (*this)["edisp"].boolean(); | |
| 406 | - | |
| 407 | 382 | // Read output filename (if needed) |
| 408 | 383 | if (read_ahead()) { |
| 409 | 384 | m_outcube = (*this)["outcube"].filename(); | ... | ... |
src/ctedispcube/ctedispcube.hpp
| ... | ... | @@ -69,12 +69,11 @@ protected: |
| 69 | 69 | void get_parameters(void); |
| 70 | 70 | |
| 71 | 71 | // User parameters |
| 72 | - GFilename m_outcube; //!< Output EDISP cube file name | |
| 73 | - bool m_apply_edisp; //!< Apply energy dispersion? | |
| 72 | + GFilename m_outcube; //!< Output Edisp cube file name | |
| 74 | 73 | |
| 75 | 74 | // Protected members |
| 76 | 75 | GObservations m_obs; //!< Observation container |
| 77 | - GCTACubeEdisp m_edispcube; //!< EDISP cube | |
| 76 | + GCTACubeEdisp m_edispcube; //!< Edisp cube | |
| 78 | 77 | }; |
| 79 | 78 | |
| 80 | 79 | ... | ... |
src/ctedispcube/ctedispcube.par
| ... | ... | @@ -21,8 +21,7 @@ inobs, f, a, "NONE",,, "Input event list or observation definition XML file" |
| 21 | 21 | incube, f, a, "NONE",,, "Input counts cube file to extract PSF cube definition" |
| 22 | 22 | caldb, s, a, "prod2",,, "Calibration database" |
| 23 | 23 | irf, s, a, "South_0.5h",,, "Instrument response function" |
| 24 | -edisp, b, h, no,,, "Apply energy dispersion?" | |
| 25 | -outcube, f, a, "psfcube.fits",,, "Output PSF cube file" | |
| 24 | +outcube, f, a, "edispcube.fits",,, "Output PSF cube file" | |
| 26 | 25 | |
| 27 | 26 | # |
| 28 | 27 | # Energy binning parameters |
| ... | ... | @@ -58,4 +57,4 @@ chatter, i, h, 2,0,4, "Chattiness of output" |
| 58 | 57 | clobber, b, h, yes,,, "Overwrite existing output files with new output files?" |
| 59 | 58 | debug, b, h, no,,, "Debugging mode activated" |
| 60 | 59 | mode, s, h, "ql",,, "Mode of automatic parameters" |
| 61 | -logfile, f, h, "ctpsfcube.log",,, "Log filename" | |
| 60 | +logfile, f, h, "ctedispcube.log",,, "Log filename" | ... | ... |
src/cterror/cterror.par
| ... | ... | @@ -23,6 +23,7 @@ inmodel, f, a, "$CTOOLS/share/models/crab.xml",,, "Input model XML file" |
| 23 | 23 | srcname, s, a, "Crab",,, "Source of interest" |
| 24 | 24 | expcube, f, a, "NONE",,, "Input exposure cube file (only needed for stacked analysis)" |
| 25 | 25 | psfcube, f, a, "NONE",,, "Input PSF cube file (only needed for stacked analysis)" |
| 26 | +edispcube,f, a, "NONE",,, "Input energy dispersion cube file (only needed for stacked analysis)" | |
| 26 | 27 | bkgcube, f, a, "NONE",,, "Input background cube file (only needed for stacked analysis)" |
| 27 | 28 | caldb, s, a, "prod2",,, "Calibration database" |
| 28 | 29 | irf, s, a, "South_0.5h",,, "Instrument response function" | ... | ... |
src/ctexpcube/ctexpcube.cpp
| ... | ... | @@ -217,18 +217,6 @@ void ctexpcube::run(void) |
| 217 | 217 | log << std::endl; |
| 218 | 218 | } |
| 219 | 219 | |
| 220 | - // Set energy dispersion flag for all CTA observations and save old | |
| 221 | - // values in save_edisp vector | |
| 222 | - std::vector<bool> save_edisp; | |
| 223 | - save_edisp.assign(m_obs.size(), false); | |
| 224 | - for (int i = 0; i < m_obs.size(); ++i) { | |
| 225 | - GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); | |
| 226 | - if (obs != NULL) { | |
| 227 | - save_edisp[i] = obs->response()->apply_edisp(); | |
| 228 | - obs->response()->apply_edisp(m_apply_edisp); | |
| 229 | - } | |
| 230 | - } | |
| 231 | - | |
| 232 | 220 | // Write observation(s) into logger |
| 233 | 221 | if (logTerse()) { |
| 234 | 222 | log << std::endl; |
| ... | ... | @@ -250,14 +238,6 @@ void ctexpcube::run(void) |
| 250 | 238 | // Fill exposure |
| 251 | 239 | m_expcube.fill(m_obs, &log); |
| 252 | 240 | |
| 253 | - // Restore energy dispersion flag for all CTA observations | |
| 254 | - for (int i = 0; i < m_obs.size(); ++i) { | |
| 255 | - GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); | |
| 256 | - if (obs != NULL) { | |
| 257 | - obs->response()->apply_edisp(save_edisp[i]); | |
| 258 | - } | |
| 259 | - } | |
| 260 | - | |
| 261 | 241 | // Optionally publish exposure cube |
| 262 | 242 | if (m_publish) { |
| 263 | 243 | publish(); |
| ... | ... | @@ -348,7 +328,6 @@ void ctexpcube::init_members(void) |
| 348 | 328 | { |
| 349 | 329 | // Initialise members |
| 350 | 330 | m_outcube.clear(); |
| 351 | - m_apply_edisp = false; | |
| 352 | 331 | m_publish = false; |
| 353 | 332 | |
| 354 | 333 | // Initialise protected members |
| ... | ... | @@ -369,7 +348,6 @@ void ctexpcube::copy_members(const ctexpcube& app) |
| 369 | 348 | { |
| 370 | 349 | // Copy attributes |
| 371 | 350 | m_outcube = app.m_outcube; |
| 372 | - m_apply_edisp = app.m_apply_edisp; | |
| 373 | 351 | m_publish = app.m_publish; |
| 374 | 352 | |
| 375 | 353 | // Copy protected members |
| ... | ... | @@ -414,9 +392,6 @@ void ctexpcube::get_parameters(void) |
| 414 | 392 | |
| 415 | 393 | } // endif: there was no observation in the container |
| 416 | 394 | |
| 417 | - // Read energy dispersion flag | |
| 418 | - m_apply_edisp = (*this)["edisp"].boolean(); | |
| 419 | - | |
| 420 | 395 | // Get the incube filename |
| 421 | 396 | std::string incube = (*this)["incube"].filename(); |
| 422 | 397 | ... | ... |
src/ctexpcube/ctexpcube.hpp
src/ctexpcube/ctexpcube.par
| ... | ... | @@ -21,7 +21,6 @@ inobs, f, a, "NONE",,, "Input event list or observation definition XML file" |
| 21 | 21 | incube, f, a, "NONE",,, "Input counts cube file to extract exposure cube definition" |
| 22 | 22 | caldb, s, a, "prod2",,, "Calibration database" |
| 23 | 23 | irf, s, a, "South_0.5h",,, "Instrument response function" |
| 24 | -edisp, b, h, no,,, "Apply energy dispersion?" | |
| 25 | 24 | outcube, f, a, "expcube.fits",,, "Output exposure cube file" |
| 26 | 25 | |
| 27 | 26 | # | ... | ... |
src/ctlike/ctlike.par
| ... | ... | @@ -21,6 +21,7 @@ inobs, f, a, "events.fits",,, "Input event list, counts cube or observ |
| 21 | 21 | inmodel, f, a, "$CTOOLS/share/models/crab.xml",,, "Input model XML file" |
| 22 | 22 | expcube, f, a, "NONE",,, "Input exposure cube file (only needed for stacked analysis)" |
| 23 | 23 | psfcube, f, a, "NONE",,, "Input PSF cube file (only needed for stacked analysis)" |
| 24 | +edispcube, f, a, "NONE",,, "Input energy dispersion cube file (only needed for stacked analysis)" | |
| 24 | 25 | bkgcube, f, a, "NONE",,, "Input background cube file (only needed for stacked analysis)" |
| 25 | 26 | caldb, s, a, "prod2",,, "Calibration database" |
| 26 | 27 | irf, s, a, "South_0.5h",,, "Instrument response function" | ... | ... |
src/ctmodel/ctmodel.par
| ... | ... | @@ -22,6 +22,7 @@ incube, f, a, "NONE",,, "Input counts cube file to extract model cube definiti |
| 22 | 22 | inmodel, f, a, "$CTOOLS/share/models/crab.xml",,, "Input model XML file" |
| 23 | 23 | expcube, f, a, "NONE",,, "Input exposure cube file (only needed for stacked analysis)" |
| 24 | 24 | psfcube, f, a, "NONE",,, "Input PSF cube file (only needed for stacked analysis)" |
| 25 | +edispcube,f, a, "NONE",,, "Input energy dispersion cube file (only needed for stacked analysis)" | |
| 25 | 26 | bkgcube, f, a, "NONE",,, "Input background cube file (only needed for stacked analysis)" |
| 26 | 27 | caldb, s, a, "prod2",,, "Calibration database" |
| 27 | 28 | irf, s, a, "South_0.5h",,, "Instrument response function" | ... | ... |
src/ctpsfcube/ctpsfcube.cpp
| ... | ... | @@ -216,18 +216,6 @@ void ctpsfcube::run(void) |
| 216 | 216 | log << std::endl; |
| 217 | 217 | } |
| 218 | 218 | |
| 219 | - // Set energy dispersion flag for all CTA observations and save old | |
| 220 | - // values in save_edisp vector | |
| 221 | - std::vector<bool> save_edisp; | |
| 222 | - save_edisp.assign(m_obs.size(), false); | |
| 223 | - for (int i = 0; i < m_obs.size(); ++i) { | |
| 224 | - GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); | |
| 225 | - if (obs != NULL) { | |
| 226 | - save_edisp[i] = obs->response()->apply_edisp(); | |
| 227 | - obs->response()->apply_edisp(m_apply_edisp); | |
| 228 | - } | |
| 229 | - } | |
| 230 | - | |
| 231 | 219 | // Write observation(s) into logger |
| 232 | 220 | if (logTerse()) { |
| 233 | 221 | log << std::endl; |
| ... | ... | @@ -249,14 +237,6 @@ void ctpsfcube::run(void) |
| 249 | 237 | // Fill PSF |
| 250 | 238 | m_psfcube.fill(m_obs, &log); |
| 251 | 239 | |
| 252 | - // Restore energy dispersion flag for all CTA observations | |
| 253 | - for (int i = 0; i < m_obs.size(); ++i) { | |
| 254 | - GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); | |
| 255 | - if (obs != NULL) { | |
| 256 | - obs->response()->apply_edisp(save_edisp[i]); | |
| 257 | - } | |
| 258 | - } | |
| 259 | - | |
| 260 | 240 | // Return |
| 261 | 241 | return; |
| 262 | 242 | } |
| ... | ... | @@ -308,7 +288,6 @@ void ctpsfcube::init_members(void) |
| 308 | 288 | { |
| 309 | 289 | // Initialise members |
| 310 | 290 | m_outcube.clear(); |
| 311 | - m_apply_edisp = false; | |
| 312 | 291 | |
| 313 | 292 | // Initialise protected members |
| 314 | 293 | m_obs.clear(); |
| ... | ... | @@ -328,7 +307,6 @@ void ctpsfcube::copy_members(const ctpsfcube& app) |
| 328 | 307 | { |
| 329 | 308 | // Copy attributes |
| 330 | 309 | m_outcube = app.m_outcube; |
| 331 | - m_apply_edisp = app.m_apply_edisp; | |
| 332 | 310 | |
| 333 | 311 | // Copy protected members |
| 334 | 312 | m_obs = app.m_obs; |
| ... | ... | @@ -401,9 +379,6 @@ void ctpsfcube::get_parameters(void) |
| 401 | 379 | |
| 402 | 380 | } // endelse: cube loaded from file |
| 403 | 381 | |
| 404 | - // Read energy dispersion flag | |
| 405 | - m_apply_edisp = (*this)["edisp"].boolean(); | |
| 406 | - | |
| 407 | 382 | // Read output filename (if needed) |
| 408 | 383 | if (read_ahead()) { |
| 409 | 384 | m_outcube = (*this)["outcube"].filename(); | ... | ... |
src/ctpsfcube/ctpsfcube.hpp
src/ctpsfcube/ctpsfcube.par
| ... | ... | @@ -21,7 +21,6 @@ inobs, f, a, "NONE",,, "Input event list or observation definition XML file" |
| 21 | 21 | incube, f, a, "NONE",,, "Input counts cube file to extract PSF cube definition" |
| 22 | 22 | caldb, s, a, "prod2",,, "Calibration database" |
| 23 | 23 | irf, s, a, "South_0.5h",,, "Instrument response function" |
| 24 | -edisp, b, h, no,,, "Apply energy dispersion?" | |
| 25 | 24 | outcube, f, a, "psfcube.fits",,, "Output PSF cube file" |
| 26 | 25 | |
| 27 | 26 | # | ... | ... |
src/cttsmap/cttsmap.par
| ... | ... | @@ -17,35 +17,36 @@ |
| 17 | 17 | # |
| 18 | 18 | # General parameters |
| 19 | 19 | #=================== |
| 20 | -inobs, f, a, "events.fits",,, "Input event list, counts cube or observation definition XML file" | |
| 21 | -inmodel, f, a, "$CTOOLS/share/models/crab.xml",,, "Input model XML file" | |
| 22 | -srcname, s, a, "Crab",,, "Test source name" | |
| 23 | -expcube, f, a, "NONE",,, "Input exposure cube file (only needed for stacked analysis)" | |
| 24 | -psfcube, f, a, "NONE",,, "Input PSF cube file (only needed for stacked analysis)" | |
| 25 | -bkgcube, f, a, "NONE",,, "Input background cube file (only needed for stacked analysis)" | |
| 26 | -caldb, s, a, "prod2",,, "Calibration database" | |
| 27 | -irf, s, a, "South_0.5h",,, "Instrument response function" | |
| 28 | -edisp, b, h, no,,, "Apply energy dispersion?" | |
| 29 | -outmap, f, a, "tsmap.fits",,, "Output Test Statistic map file" | |
| 20 | +inobs, f, a, "events.fits",,, "Input event list, counts cube or observation definition XML file" | |
| 21 | +inmodel, f, a, "$CTOOLS/share/models/crab.xml",,, "Input model XML file" | |
| 22 | +srcname, s, a, "Crab",,, "Test source name" | |
| 23 | +expcube, f, a, "NONE",,, "Input exposure cube file (only needed for stacked analysis)" | |
| 24 | +psfcube, f, a, "NONE",,, "Input PSF cube file (only needed for stacked analysis)" | |
| 25 | +edispcube, f, a, "NONE",,, "Input energy dispersion cube file (only needed for stacked analysis)" | |
| 26 | +bkgcube, f, a, "NONE",,, "Input background cube file (only needed for stacked analysis)" | |
| 27 | +caldb, s, a, "prod2",,, "Calibration database" | |
| 28 | +irf, s, a, "South_0.5h",,, "Instrument response function" | |
| 29 | +edisp, b, h, no,,, "Apply energy dispersion?" | |
| 30 | +outmap, f, a, "tsmap.fits",,, "Output Test Statistic map file" | |
| 30 | 31 | |
| 31 | 32 | # |
| 32 | 33 | # Spatial binning parameters |
| 33 | 34 | #=========================== |
| 34 | -usepnt, b, h, no,,, "Use pointing instead of xref/yref parameters?" | |
| 35 | -nxpix, i, a, 200,,, "Size of the X axis in pixels" | |
| 36 | -nypix, i, a, 200,,, "Size of the Y axis in pixels" | |
| 37 | -binsz, r, a, 0.02,,, "Image scale (in degrees/pixel)" | |
| 38 | -coordsys, s, a, "CEL", CEL|GAL,,"Coordinate system (CEL - celestial, GAL - galactic)" | |
| 39 | -xref, r, a, 83.63,0,360, "First coordinate of image center in degrees (RA or galactic l)" | |
| 40 | -yref, r, a, 22.01,-90,90, "Second coordinate of image center in degrees (DEC or galactic b)" | |
| 41 | -proj, s, a, "CAR", AIT|AZP|CAR|MER|MOL|STG|TAN,, "Projection method" | |
| 35 | +usepnt, b, h, no,,, "Use pointing instead of xref/yref parameters?" | |
| 36 | +nxpix, i, a, 200,,, "Size of the X axis in pixels" | |
| 37 | +nypix, i, a, 200,,, "Size of the Y axis in pixels" | |
| 38 | +binsz, r, a, 0.02,,, "Image scale (in degrees/pixel)" | |
| 39 | +coordsys, s, a, "CEL", CEL|GAL,,"Coordinate system (CEL - celestial, GAL - galactic)" | |
| 40 | +xref, r, a, 83.63,0,360, "First coordinate of image center in degrees (RA or galactic l)" | |
| 41 | +yref, r, a, 22.01,-90,90, "Second coordinate of image center in degrees (DEC or galactic b)" | |
| 42 | +proj, s, a, "CAR", AIT|AZP|CAR|MER|MOL|STG|TAN,, "Projection method" | |
| 42 | 43 | |
| 43 | 44 | # |
| 44 | 45 | # Parameters for splitting and speed purpose |
| 45 | 46 | #=========================== |
| 46 | -binmin, i, h, -1,,, "First bin to compute" | |
| 47 | -binmax, i, h, -1,,, "Last bin to compute" | |
| 48 | -logL0, r, h, 0.0,,, "LogLikelihood value of null hypothesis" | |
| 47 | +binmin, i, h, -1,,, "First bin to compute" | |
| 48 | +binmax, i, h, -1,,, "Last bin to compute" | |
| 49 | +logL0, r, h, 0.0,,, "LogLikelihood value of null hypothesis" | |
| 49 | 50 | |
| 50 | 51 | # |
| 51 | 52 | # Standard parameters | ... | ... |
src/ctulimit/ctulimit.par
| ... | ... | @@ -22,6 +22,7 @@ inmodel, f, a, "$CTOOLS/share/models/crab.xml",,, "Input model XML file" |
| 22 | 22 | srcname, s, a, "Crab",,, "Source of interest" |
| 23 | 23 | expcube, f, a, "NONE",,, "Input exposure cube file (only needed for stacked analysis)" |
| 24 | 24 | psfcube, f, a, "NONE",,, "Input PSF cube file (only needed for stacked analysis)" |
| 25 | +edispcube,f, a, "NONE",,, "Input energy dispersion cube file (only needed for stacked analysis)" | |
| 25 | 26 | bkgcube, f, a, "NONE",,, "Input background cube file (only needed for stacked analysis)" |
| 26 | 27 | caldb, s, a, "prod2",,, "Calibration database" |
| 27 | 28 | irf, s, a, "South_0.5h",,, "Instrument response function" | ... | ... |
src/support/ctool.cpp
| ... | ... | @@ -862,11 +862,12 @@ void ctool::set_obs_response(GCTAObservation* obs) |
| 862 | 862 | // If the observation contains a counts cube, then first check whether |
| 863 | 863 | // the expcube and psfcube parameters exist and are not NONE |
| 864 | 864 | if (dynamic_cast<const GCTAEventCube*>(obs->events()) != NULL) { |
| 865 | - if (has_par("expcube") && has_par("psfcube") && has_par("bkgcube")) { | |
| 865 | + if (has_par("expcube") && has_par("psfcube") && has_par("bkgcube") && has_par("edispcube")) { | |
| 866 | 866 | |
| 867 | 867 | // Get filenames |
| 868 | 868 | std::string expcube = (*this)["expcube"].filename(); |
| 869 | 869 | std::string psfcube = (*this)["psfcube"].filename(); |
| 870 | + std::string edispcube = (*this)["edispcube"].filename(); | |
| 870 | 871 | std::string bkgcube = (*this)["bkgcube"].filename(); |
| 871 | 872 | |
| 872 | 873 | // Extract response information if available |
| ... | ... | @@ -880,8 +881,15 @@ void ctool::set_obs_response(GCTAObservation* obs) |
| 880 | 881 | GCTACubePsf psf(psfcube); |
| 881 | 882 | GCTACubeBackground background(bkgcube); |
| 882 | 883 | |
| 883 | - // Set reponse | |
| 884 | - obs->response(exposure, psf, background); | |
| 884 | + // Optionally load Edisp cube | |
| 885 | + if (edispcube != "NONE" && (gammalib::strip_whitespace(edispcube) != "")) { | |
| 886 | + GCTACubeEdisp edisp(edispcube); | |
| 887 | + obs->response(exposure, psf, edisp, background); | |
| 888 | + } | |
| 889 | + else { | |
| 890 | + // Set reponse | |
| 891 | + obs->response(exposure, psf, background); | |
| 892 | + } | |
| 885 | 893 | |
| 886 | 894 | // Signal response availability |
| 887 | 895 | has_response = true; | ... | ... |
test/test_cscripts.sh.in
| ... | ... | @@ -405,6 +405,7 @@ fi |
| 405 | 405 | inobs="data/crab_cntmap_small.fits.gz" \ |
| 406 | 406 | expcube="data/crab_expcube.fits.gz" \ |
| 407 | 407 | psfcube="data/crab_psfcube.fits.gz" \ |
| 408 | + edispcube="data/crab_edispcube.fits.gz" \ | |
| 408 | 409 | bkgcube="data/crab_bkgcube.fits.gz" \ |
| 409 | 410 | inmodel="data/crab_bkgcube.xml" \ |
| 410 | 411 | ebinalg="LOG" \ | ... | ... |
test/test_ctools.sh
| ... | ... | @@ -293,8 +293,8 @@ $ctedispcube inobs="data/crab_events.fits" \ |
| 293 | 293 | xref=83.63 \ |
| 294 | 294 | yref=22.01 \ |
| 295 | 295 | proj="CAR" \ |
| 296 | - mmax=10.0 \ | |
| 297 | - migrabins=100 | |
| 296 | + mmax=3.0 \ | |
| 297 | + migrabins=10 | |
| 298 | 298 | $ECHO -n "." |
| 299 | 299 | if [ -s "edispcube1.fits" ] |
| 300 | 300 | then |
| ... | ... | @@ -310,8 +310,8 @@ $ctedispcube inobs="events.fits" \ |
| 310 | 310 | outcube="edispcube2.fits" \ |
| 311 | 311 | caldb="irf" \ |
| 312 | 312 | irf="cta_dummy_irf" \ |
| 313 | - mmax=10.0 \ | |
| 314 | - migrabins=5 | |
| 313 | + mmax=3.0 \ | |
| 314 | + migrabins=3 | |
| 315 | 315 | $ECHO -n "." |
| 316 | 316 | if [ -s "edispcube2.fits" ] |
| 317 | 317 | then |
| ... | ... | @@ -401,6 +401,7 @@ $ctmodel inobs="cntmap1.fits" \ |
| 401 | 401 | expcube="NONE" \ |
| 402 | 402 | psfcube="NONE" \ |
| 403 | 403 | bkgcube="NONE" \ |
| 404 | + edispcube="NONE" \ | |
| 404 | 405 | caldb="irf" \ |
| 405 | 406 | irf="cta_dummy_irf" \ |
| 406 | 407 | inmodel="data/crab.xml" |
| ... | ... | @@ -420,6 +421,7 @@ $ctmodel inobs="cntmap2.fits" \ |
| 420 | 421 | outcube="modmap2.fits" \ |
| 421 | 422 | expcube="expcube2.fits" \ |
| 422 | 423 | psfcube="psfcube2.fits" \ |
| 424 | + edispcube="edispcube2.fits" \ | |
| 423 | 425 | bkgcube="bkgcube2.fits" \ |
| 424 | 426 | caldb="irf" \ |
| 425 | 427 | irf="cta_dummy_irf" \ |
| ... | ... | @@ -440,6 +442,7 @@ $ctmodel inobs="NONE" \ |
| 440 | 442 | outcube="modmap3.fits" \ |
| 441 | 443 | expcube="NONE" \ |
| 442 | 444 | psfcube="NONE" \ |
| 445 | + edispcube="NONE" \ | |
| 443 | 446 | bkgcube="NONE" \ |
| 444 | 447 | caldb="irf" \ |
| 445 | 448 | irf="cta_dummy_irf" \ |
| ... | ... | @@ -505,6 +508,7 @@ $ctlike inobs="cntmap1.fits" \ |
| 505 | 508 | outmodel="results_binned.xml" \ |
| 506 | 509 | expcube="NONE" \ |
| 507 | 510 | psfcube="NONE" \ |
| 511 | + edispcube="NONE" \ | |
| 508 | 512 | bkgcube="NONE" \ |
| 509 | 513 | caldb="irf" \ |
| 510 | 514 | irf="cta_dummy_irf" |
| ... | ... | @@ -539,6 +543,7 @@ $ctlike inobs="cntmap2.fits" \ |
| 539 | 543 | outmodel="results_binned_cube_background.xml" \ |
| 540 | 544 | expcube="expcube2.fits" \ |
| 541 | 545 | psfcube="psfcube2.fits" \ |
| 546 | + edispcube="NONE" \ | |
| 542 | 547 | bkgcube="bkgcube2.fits" \ |
| 543 | 548 | caldb="irf" \ |
| 544 | 549 | irf="cta_dummy_irf" |
| ... | ... | @@ -550,9 +555,32 @@ else |
| 550 | 555 | $ECHO " results_binned_cube_background.xml file is not found" |
| 551 | 556 | exit 1 |
| 552 | 557 | fi |
| 558 | + | |
| 559 | + | |
| 560 | +# | |
| 561 | +# Run 4 | |
| 562 | +$ctlike inobs="cntmap2.fits" \ | |
| 563 | + inmodel="bkgcube2.xml" \ | |
| 564 | + outmodel="results_binned_cube_background_edisp.xml" \ | |
| 565 | + expcube="expcube2.fits" \ | |
| 566 | + psfcube="psfcube2.fits" \ | |
| 567 | + edispcube="edispcube2.fits" \ | |
| 568 | + bkgcube="bkgcube2.fits" \ | |
| 569 | + edisp="yes" | |
| 570 | + caldb="irf" \ | |
| 571 | + irf="cta_dummy_irf" | |
| 572 | +$ECHO -n "." | |
| 573 | +if [ -s "results_binned_cube_background_edisp.xml" ] | |
| 574 | +then | |
| 575 | + $ECHO -n "." | |
| 576 | +else | |
| 577 | + $ECHO " results_binned_cube_background_edisp.xml file is not found" | |
| 578 | + exit 1 | |
| 579 | +fi | |
| 553 | 580 | $ECHO " ok" |
| 554 | 581 | |
| 555 | 582 | |
| 583 | + | |
| 556 | 584 | # |
| 557 | 585 | # Test cttsmap |
| 558 | 586 | # ============ | ... | ... |