Commit 73586a8dbe70fdf69171ce1d8efc00a5a11a8159
1 parent
8308d2fb
Add set_obs_bounds() method that queries observation boundaries (emin,emax,rad) …
…in case that those are not provided in the event list.
Showing
3 changed files
with
69 additions
and
0 deletions
pyext/ctool.i
| ... | ... | @@ -103,6 +103,7 @@ public: |
| 103 | 103 | // Protected support methods |
| 104 | 104 | void set_response(GObservations& obs); |
| 105 | 105 | void set_obs_response(GCTAObservation* obs); |
| 106 | + void set_obs_bounds(GObservations& obs); | |
| 106 | 107 | GSkyDir get_mean_pointing(const GObservations& obs); |
| 107 | 108 | size_t get_current_rss(void); |
| 108 | 109 | }; | ... | ... |
src/support/ctool.cpp
| ... | ... | @@ -356,6 +356,9 @@ GObservations ctool::get_observations(const bool& get_response) |
| 356 | 356 | |
| 357 | 357 | } // endif: response was required |
| 358 | 358 | |
| 359 | + // Set observation boundary parameters (emin, emax, rad) | |
| 360 | + set_obs_bounds(obs); | |
| 361 | + | |
| 359 | 362 | // Signal that XML file should be used for storage |
| 360 | 363 | m_use_xml = true; |
| 361 | 364 | |
| ... | ... | @@ -805,6 +808,70 @@ void ctool::set_obs_response(GCTAObservation* obs) |
| 805 | 808 | |
| 806 | 809 | |
| 807 | 810 | /***********************************************************************//** |
| 811 | + * @brief Set observation boundaries | |
| 812 | + * | |
| 813 | + * @param[in,out] obs Observation container | |
| 814 | + * | |
| 815 | + ***************************************************************************/ | |
| 816 | +void ctool::set_obs_bounds(GObservations& obs) | |
| 817 | +{ | |
| 818 | + // Setup response for all observations | |
| 819 | + for (int i = 0; i < obs.size(); ++i) { | |
| 820 | + | |
| 821 | + // Is this observation a CTA observation? | |
| 822 | + GCTAObservation* cta = dynamic_cast<GCTAObservation*>(obs[i]); | |
| 823 | + | |
| 824 | + // Yes ... | |
| 825 | + if (cta != NULL) { | |
| 826 | + | |
| 827 | + // Get pointer on event list | |
| 828 | + GCTAEventList* list = const_cast<GCTAEventList*>(dynamic_cast<const GCTAEventList*>(cta->events())); | |
| 829 | + | |
| 830 | + // Continue only if it's valid | |
| 831 | + if (list != NULL) { | |
| 832 | + | |
| 833 | + // If there are no energy boundaries then read the user | |
| 834 | + // parameters and add them | |
| 835 | + if (list->ebounds().is_empty()) { | |
| 836 | + | |
| 837 | + // If there are "emin" and "emax" parameters then use them | |
| 838 | + if (has_par("emin") && has_par("emax")) { | |
| 839 | + double emin = (*this)["emin"].real(); | |
| 840 | + double emax = (*this)["emax"].real(); | |
| 841 | + GEbounds ebounds(GEnergy(emin, "TeV"), GEnergy(emax, "TeV")); | |
| 842 | + list->ebounds(ebounds); | |
| 843 | + } | |
| 844 | + | |
| 845 | + } | |
| 846 | + | |
| 847 | + // If there is no ROI then read the user parameters and add | |
| 848 | + // them | |
| 849 | + if (list->roi().radius() == 0) { | |
| 850 | + | |
| 851 | + // If there is a "rad" parameter then use it | |
| 852 | + if (has_par("rad")) { | |
| 853 | + double rad = (*this)["rad"].real(); | |
| 854 | + GCTARoi roi(GCTAInstDir(cta->pointing().dir()), rad); | |
| 855 | + list->roi(roi); | |
| 856 | + } | |
| 857 | + | |
| 858 | + } | |
| 859 | + | |
| 860 | + } // endif: list was valid | |
| 861 | + | |
| 862 | + } // endif: observation was CTA | |
| 863 | + | |
| 864 | + } // endfor: looped over observations | |
| 865 | + | |
| 866 | + | |
| 867 | + // Return | |
| 868 | + return; | |
| 869 | +} | |
| 870 | + | |
| 871 | + | |
| 872 | + | |
| 873 | + | |
| 874 | +/***********************************************************************//** | |
| 808 | 875 | * @brief Derives mean pointing from CTA observations |
| 809 | 876 | * |
| 810 | 877 | * @param[in] obs Observation container. | ... | ... |
src/support/ctool.hpp
| ... | ... | @@ -85,6 +85,7 @@ protected: |
| 85 | 85 | // Protected support methods |
| 86 | 86 | void set_response(GObservations& obs); |
| 87 | 87 | void set_obs_response(GCTAObservation* obs); |
| 88 | + void set_obs_bounds(GObservations& obs); | |
| 88 | 89 | GSkyDir get_mean_pointing(const GObservations& obs); |
| 89 | 90 | size_t get_current_rss(void); |
| 90 | 91 | ... | ... |