Commit b24969ce6d43bf45a7e6d6cd1fc952a931cc5cdc
1 parent
3a3d9ecd
Add energy dispersion handling.
The edisp parameter now allows to switch on or off the handling of energy dispersion. By default, energy dispersion is switched off.
Showing
2 changed files
with
82 additions
and
56 deletions
src/ctmodel/ctmodel.cpp
| @@ -246,6 +246,18 @@ void ctmodel::run(void) | @@ -246,6 +246,18 @@ void ctmodel::run(void) | ||
| 246 | log << std::endl; | 246 | log << std::endl; |
| 247 | } | 247 | } |
| 248 | 248 | ||
| 249 | + // Set energy dispersion flag for all CTA observations and save old | ||
| 250 | + // values in save_edisp vector | ||
| 251 | + std::vector<bool> save_edisp; | ||
| 252 | + save_edisp.assign(m_obs.size(), false); | ||
| 253 | + for (int i = 0; i < m_obs.size(); ++i) { | ||
| 254 | + GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); | ||
| 255 | + if (obs != NULL) { | ||
| 256 | + save_edisp[i] = obs->response().apply_edisp(); | ||
| 257 | + obs->response().apply_edisp(m_apply_edisp); | ||
| 258 | + } | ||
| 259 | + } | ||
| 260 | + | ||
| 249 | // Write observation(s) into logger | 261 | // Write observation(s) into logger |
| 250 | if (logTerse()) { | 262 | if (logTerse()) { |
| 251 | log << std::endl; | 263 | log << std::endl; |
| @@ -325,6 +337,14 @@ void ctmodel::run(void) | @@ -325,6 +337,14 @@ void ctmodel::run(void) | ||
| 325 | log << m_obs << std::endl; | 337 | log << m_obs << std::endl; |
| 326 | } | 338 | } |
| 327 | 339 | ||
| 340 | + // Restore energy dispersion flag for all CTA observations | ||
| 341 | + for (int i = 0; i < m_obs.size(); ++i) { | ||
| 342 | + GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); | ||
| 343 | + if (obs != NULL) { | ||
| 344 | + obs->response().apply_edisp(save_edisp[i]); | ||
| 345 | + } | ||
| 346 | + } | ||
| 347 | + | ||
| 328 | // Return | 348 | // Return |
| 329 | return; | 349 | return; |
| 330 | } | 350 | } |
| @@ -436,6 +456,9 @@ void ctmodel::get_parameters(void) | @@ -436,6 +456,9 @@ void ctmodel::get_parameters(void) | ||
| 436 | } | 456 | } |
| 437 | } | 457 | } |
| 438 | 458 | ||
| 459 | + // Get other parameters | ||
| 460 | + m_apply_edisp = (*this)["edisp"].boolean(); | ||
| 461 | + | ||
| 439 | // Return | 462 | // Return |
| 440 | return; | 463 | return; |
| 441 | } | 464 | } |
| @@ -686,19 +709,20 @@ void ctmodel::init_members(void) | @@ -686,19 +709,20 @@ void ctmodel::init_members(void) | ||
| 686 | m_srcmdl.clear(); | 709 | m_srcmdl.clear(); |
| 687 | m_proj.clear(); | 710 | m_proj.clear(); |
| 688 | m_coordsys.clear(); | 711 | m_coordsys.clear(); |
| 689 | - m_ra = 0.0; | ||
| 690 | - m_dec = 0.0; | ||
| 691 | - m_deadc = 1.0; | ||
| 692 | - m_tmin = 0.0; | ||
| 693 | - m_tmax = 0.0; | ||
| 694 | - m_emin = 0.0; | ||
| 695 | - m_emax = 0.0; | ||
| 696 | - m_enumbins = 0; | ||
| 697 | - m_xref = 0.0; | ||
| 698 | - m_yref = 0.0; | ||
| 699 | - m_binsz = 0.0; | ||
| 700 | - m_nxpix = 0; | ||
| 701 | - m_nypix = 0; | 712 | + m_ra = 0.0; |
| 713 | + m_dec = 0.0; | ||
| 714 | + m_deadc = 1.0; | ||
| 715 | + m_tmin = 0.0; | ||
| 716 | + m_tmax = 0.0; | ||
| 717 | + m_emin = 0.0; | ||
| 718 | + m_emax = 0.0; | ||
| 719 | + m_enumbins = 0; | ||
| 720 | + m_xref = 0.0; | ||
| 721 | + m_yref = 0.0; | ||
| 722 | + m_binsz = 0.0; | ||
| 723 | + m_nxpix = 0; | ||
| 724 | + m_nypix = 0; | ||
| 725 | + m_apply_edisp = false; | ||
| 702 | 726 | ||
| 703 | // Initialise protected members | 727 | // Initialise protected members |
| 704 | m_obs.clear(); | 728 | m_obs.clear(); |
| @@ -722,27 +746,28 @@ void ctmodel::init_members(void) | @@ -722,27 +746,28 @@ void ctmodel::init_members(void) | ||
| 722 | void ctmodel::copy_members(const ctmodel& app) | 746 | void ctmodel::copy_members(const ctmodel& app) |
| 723 | { | 747 | { |
| 724 | // Copy attributes | 748 | // Copy attributes |
| 725 | - m_infile = app.m_infile; | ||
| 726 | - m_outfile = app.m_outfile; | ||
| 727 | - m_prefix = app.m_prefix; | ||
| 728 | - m_caldb = app.m_caldb; | ||
| 729 | - m_irf = app.m_irf; | ||
| 730 | - m_srcmdl = app.m_srcmdl; | ||
| 731 | - m_proj = app.m_proj; | ||
| 732 | - m_coordsys = app.m_coordsys; | ||
| 733 | - m_ra = app.m_ra; | ||
| 734 | - m_dec = app.m_dec; | ||
| 735 | - m_deadc = app.m_deadc; | ||
| 736 | - m_tmin = app.m_tmin; | ||
| 737 | - m_tmax = app.m_tmax; | ||
| 738 | - m_emin = app.m_emin; | ||
| 739 | - m_emax = app.m_emax; | ||
| 740 | - m_enumbins = app.m_enumbins; | ||
| 741 | - m_xref = app.m_xref; | ||
| 742 | - m_yref = app.m_yref; | ||
| 743 | - m_binsz = app.m_binsz; | ||
| 744 | - m_nxpix = app.m_nxpix; | ||
| 745 | - m_nypix = app.m_nypix; | 749 | + m_infile = app.m_infile; |
| 750 | + m_outfile = app.m_outfile; | ||
| 751 | + m_prefix = app.m_prefix; | ||
| 752 | + m_caldb = app.m_caldb; | ||
| 753 | + m_irf = app.m_irf; | ||
| 754 | + m_srcmdl = app.m_srcmdl; | ||
| 755 | + m_proj = app.m_proj; | ||
| 756 | + m_coordsys = app.m_coordsys; | ||
| 757 | + m_ra = app.m_ra; | ||
| 758 | + m_dec = app.m_dec; | ||
| 759 | + m_deadc = app.m_deadc; | ||
| 760 | + m_tmin = app.m_tmin; | ||
| 761 | + m_tmax = app.m_tmax; | ||
| 762 | + m_emin = app.m_emin; | ||
| 763 | + m_emax = app.m_emax; | ||
| 764 | + m_enumbins = app.m_enumbins; | ||
| 765 | + m_xref = app.m_xref; | ||
| 766 | + m_yref = app.m_yref; | ||
| 767 | + m_binsz = app.m_binsz; | ||
| 768 | + m_nxpix = app.m_nxpix; | ||
| 769 | + m_nypix = app.m_nypix; | ||
| 770 | + m_apply_edisp = app.m_apply_edisp; | ||
| 746 | 771 | ||
| 747 | // Copy protected members | 772 | // Copy protected members |
| 748 | m_obs = app.m_obs; | 773 | m_obs = app.m_obs; |
src/ctmodel/ctmodel.hpp
| @@ -61,7 +61,7 @@ public: | @@ -61,7 +61,7 @@ public: | ||
| 61 | virtual ~ctmodel(void); | 61 | virtual ~ctmodel(void); |
| 62 | 62 | ||
| 63 | // Operators | 63 | // Operators |
| 64 | - ctmodel& operator= (const ctmodel& app); | 64 | + ctmodel& operator=(const ctmodel& app); |
| 65 | 65 | ||
| 66 | // Methods | 66 | // Methods |
| 67 | void clear(void); | 67 | void clear(void); |
| @@ -85,27 +85,28 @@ protected: | @@ -85,27 +85,28 @@ protected: | ||
| 85 | const std::string& outfile) const; | 85 | const std::string& outfile) const; |
| 86 | 86 | ||
| 87 | // User parameters | 87 | // User parameters |
| 88 | - std::string m_infile; //!< Input counts map or XML file | ||
| 89 | - std::string m_outfile; //!< Output model map or XML file | ||
| 90 | - std::string m_prefix; //!< Prefix for multiple model maps | ||
| 91 | - std::string m_caldb; //!< Calibration database | ||
| 92 | - std::string m_irf; //!< Instrument response functions | ||
| 93 | - std::string m_srcmdl; //!< Source model | ||
| 94 | - double m_ra; //!< RA of pointing direction | ||
| 95 | - double m_dec; //!< DEC of pointing direction | ||
| 96 | - double m_deadc; //!< Deadtime correction factor | ||
| 97 | - double m_tmin; //!< Start time | ||
| 98 | - double m_tmax; //!< Stop time | ||
| 99 | - double m_emin; //!< Lower energy | ||
| 100 | - double m_emax; //!< Upper energy | ||
| 101 | - int m_enumbins; //!< Number of energy bins | ||
| 102 | - std::string m_proj; //!< WCS projection | ||
| 103 | - std::string m_coordsys; //!< Coordinate system | ||
| 104 | - double m_xref; //!< Longitude reference coordinate | ||
| 105 | - double m_yref; //!< Latitude reference coordinate | ||
| 106 | - double m_binsz; //!< Pixel size | ||
| 107 | - int m_nxpix; //!< Number of pixels in longitude | ||
| 108 | - int m_nypix; //!< Number of pixels in latitude | 88 | + std::string m_infile; //!< Input counts map or XML file |
| 89 | + std::string m_outfile; //!< Output model map or XML file | ||
| 90 | + std::string m_prefix; //!< Prefix for multiple model maps | ||
| 91 | + std::string m_caldb; //!< Calibration database | ||
| 92 | + std::string m_irf; //!< Instrument response functions | ||
| 93 | + std::string m_srcmdl; //!< Source model | ||
| 94 | + double m_ra; //!< RA of pointing direction | ||
| 95 | + double m_dec; //!< DEC of pointing direction | ||
| 96 | + double m_deadc; //!< Deadtime correction factor | ||
| 97 | + double m_tmin; //!< Start time | ||
| 98 | + double m_tmax; //!< Stop time | ||
| 99 | + double m_emin; //!< Lower energy | ||
| 100 | + double m_emax; //!< Upper energy | ||
| 101 | + int m_enumbins; //!< Number of energy bins | ||
| 102 | + std::string m_proj; //!< WCS projection | ||
| 103 | + std::string m_coordsys; //!< Coordinate system | ||
| 104 | + double m_xref; //!< Longitude reference coordinate | ||
| 105 | + double m_yref; //!< Latitude reference coordinate | ||
| 106 | + double m_binsz; //!< Pixel size | ||
| 107 | + int m_nxpix; //!< Number of pixels in longitude | ||
| 108 | + int m_nypix; //!< Number of pixels in latitude | ||
| 109 | + bool m_apply_edisp; //!< Apply energy dispersion? | ||
| 109 | 110 | ||
| 110 | // Protected members | 111 | // Protected members |
| 111 | GObservations m_obs; //!< Observation container | 112 | GObservations m_obs; //!< Observation container |