Commit 035f022c63820e60f5af7584cd0354090794c6cd
1 parent
24f4336c
Support pickling of COMPTEL classes (#1938)
Showing
51 changed files
with
1035 additions
and
195 deletions
NEWS
| @@ -92,6 +92,16 @@ The following methods have been added: | @@ -92,6 +92,16 @@ The following methods have been added: | ||
| 92 | - GCTAModelRadialAcceptance::temporal(GModelTemporal*) | 92 | - GCTAModelRadialAcceptance::temporal(GModelTemporal*) |
| 93 | - GCTAModelIrfBackground::spectral(GModelSpectral*) | 93 | - GCTAModelIrfBackground::spectral(GModelSpectral*) |
| 94 | - GCTAModelIrfBackground::temporal(GModelTemporal*) | 94 | - GCTAModelIrfBackground::temporal(GModelTemporal*) |
| 95 | +- GCOMD1Response::write(GFitsBinTable&) | ||
| 96 | +- GCOMD2Response::write(GFitsBinTable&) | ||
| 97 | +- GCOMEventBin::index(int&) | ||
| 98 | +- GCOMEventBin::dir(GCOMInstDir&) | ||
| 99 | +- GCOMEventBin::energy(GEnergy&) | ||
| 100 | +- GCOMEventBin::time(GTime&) | ||
| 101 | +- GCOMEventBin::counts(double&) | ||
| 102 | +- GCOMEventBin::solidangle(double&) | ||
| 103 | +- GCOMEventBin::ewidth(GEnergy&) | ||
| 104 | +- GCOMEventBin::ontime(double&) | ||
| 95 | 105 | ||
| 96 | The following methods have been removed: | 106 | The following methods have been removed: |
| 97 | - GSkyRegionMap::filename() | 107 | - GSkyRegionMap::filename() |
inst/com/include/GCOMD1Response.hpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMD1Response.hpp - COMPTEL D1 module response class * | 2 | * GCOMD1Response.hpp - COMPTEL D1 module response class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -37,6 +37,7 @@ | @@ -37,6 +37,7 @@ | ||
| 37 | 37 | ||
| 38 | /* __ Forward declarations _______________________________________________ */ | 38 | /* __ Forward declarations _______________________________________________ */ |
| 39 | class GFitsTable; | 39 | class GFitsTable; |
| 40 | +class GFitsBinTable; | ||
| 40 | 41 | ||
| 41 | 42 | ||
| 42 | /***********************************************************************//** | 43 | /***********************************************************************//** |
| @@ -65,6 +66,7 @@ public: | @@ -65,6 +66,7 @@ public: | ||
| 65 | const GCaldb& caldb(void) const; | 66 | const GCaldb& caldb(void) const; |
| 66 | void load(const std::string& sdaname); | 67 | void load(const std::string& sdaname); |
| 67 | void read(const GFitsTable& table); | 68 | void read(const GFitsTable& table); |
| 69 | + void write(GFitsBinTable& table); | ||
| 68 | double position(const double& etrue) const; | 70 | double position(const double& etrue) const; |
| 69 | double sigma(const double& etrue) const; | 71 | double sigma(const double& etrue) const; |
| 70 | double amplitude(const double& etrue) const; | 72 | double amplitude(const double& etrue) const; |
inst/com/include/GCOMD2Response.hpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMD2Response.hpp - COMPTEL D2 module response class * | 2 | * GCOMD2Response.hpp - COMPTEL D2 module response class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -38,6 +38,7 @@ | @@ -38,6 +38,7 @@ | ||
| 38 | 38 | ||
| 39 | /* __ Forward declarations _______________________________________________ */ | 39 | /* __ Forward declarations _______________________________________________ */ |
| 40 | class GFitsTable; | 40 | class GFitsTable; |
| 41 | +class GFitsBinTable; | ||
| 41 | 42 | ||
| 42 | 43 | ||
| 43 | /***********************************************************************//** | 44 | /***********************************************************************//** |
| @@ -66,6 +67,7 @@ public: | @@ -66,6 +67,7 @@ public: | ||
| 66 | const GCaldb& caldb(void) const; | 67 | const GCaldb& caldb(void) const; |
| 67 | void load(const std::string& sdbname); | 68 | void load(const std::string& sdbname); |
| 68 | void read(const GFitsTable& table); | 69 | void read(const GFitsTable& table); |
| 70 | + void write(GFitsBinTable& table); | ||
| 69 | double position(const double& etrue) const; | 71 | double position(const double& etrue) const; |
| 70 | double sigma(const double& etrue) const; | 72 | double sigma(const double& etrue) const; |
| 71 | double amplitude(const double& etrue) const; | 73 | double amplitude(const double& etrue) const; |
inst/com/include/GCOMEventBin.hpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMEventBin.hpp - COMPTEL event bin class * | 2 | * GCOMEventBin.hpp - COMPTEL event bin class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2016 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -78,6 +78,13 @@ public: | @@ -78,6 +78,13 @@ public: | ||
| 78 | const double& solidangle(void) const; | 78 | const double& solidangle(void) const; |
| 79 | const GEnergy& ewidth(void) const; | 79 | const GEnergy& ewidth(void) const; |
| 80 | const double& ontime(void) const; | 80 | const double& ontime(void) const; |
| 81 | + void index(const int& index); | ||
| 82 | + void dir(const GCOMInstDir& dir); | ||
| 83 | + void energy(const GEnergy& energy); | ||
| 84 | + void time(const GTime& time); | ||
| 85 | + void solidangle(const double& solidangle); | ||
| 86 | + void ewidth(const GEnergy& ewidth); | ||
| 87 | + void ontime(const double& ontime); | ||
| 81 | 88 | ||
| 82 | protected: | 89 | protected: |
| 83 | // Protected methods | 90 | // Protected methods |
| @@ -111,77 +118,6 @@ std::string GCOMEventBin::classname(void) const | @@ -111,77 +118,6 @@ std::string GCOMEventBin::classname(void) const | ||
| 111 | 118 | ||
| 112 | 119 | ||
| 113 | /***********************************************************************//** | 120 | /***********************************************************************//** |
| 114 | - * @brief Return instrument direction | ||
| 115 | - * | ||
| 116 | - * @return Instrument direction. | ||
| 117 | - * | ||
| 118 | - * Returns the instrument direction of the event bin. | ||
| 119 | - ***************************************************************************/ | ||
| 120 | -inline | ||
| 121 | -const GCOMInstDir& GCOMEventBin::dir(void) const | ||
| 122 | -{ | ||
| 123 | - return (*m_dir); | ||
| 124 | -} | ||
| 125 | - | ||
| 126 | - | ||
| 127 | -/***********************************************************************//** | ||
| 128 | - * @brief Return energy | ||
| 129 | - * | ||
| 130 | - * @return Energy. | ||
| 131 | - * | ||
| 132 | - * Returns the energy of the event bin. | ||
| 133 | - ***************************************************************************/ | ||
| 134 | -inline | ||
| 135 | -const GEnergy& GCOMEventBin::energy(void) const | ||
| 136 | -{ | ||
| 137 | - return (*m_energy); | ||
| 138 | -} | ||
| 139 | - | ||
| 140 | - | ||
| 141 | -/***********************************************************************//** | ||
| 142 | - * @brief Return time | ||
| 143 | - * | ||
| 144 | - * @return Time. | ||
| 145 | - * | ||
| 146 | - * Returns the time of the event bin. | ||
| 147 | - ***************************************************************************/ | ||
| 148 | -inline | ||
| 149 | -const GTime& GCOMEventBin::time(void) const | ||
| 150 | -{ | ||
| 151 | - return (*m_time); | ||
| 152 | -} | ||
| 153 | - | ||
| 154 | - | ||
| 155 | -/***********************************************************************//** | ||
| 156 | - * @brief Return number of counts | ||
| 157 | - * | ||
| 158 | - * @return Number of counts. | ||
| 159 | - * | ||
| 160 | - * Returns the number of counts in the event bin. | ||
| 161 | - ***************************************************************************/ | ||
| 162 | -inline | ||
| 163 | -double GCOMEventBin::counts(void) const | ||
| 164 | -{ | ||
| 165 | - return (*m_counts); | ||
| 166 | -} | ||
| 167 | - | ||
| 168 | - | ||
| 169 | -/***********************************************************************//** | ||
| 170 | - * @brief Set number of counts | ||
| 171 | - * | ||
| 172 | - * @param[in] counts Number of counts. | ||
| 173 | - * | ||
| 174 | - * Set the number of counts in the event bin. | ||
| 175 | - ***************************************************************************/ | ||
| 176 | -inline | ||
| 177 | -void GCOMEventBin::counts(const double& counts) | ||
| 178 | -{ | ||
| 179 | - *m_counts = counts; | ||
| 180 | - return; | ||
| 181 | -} | ||
| 182 | - | ||
| 183 | - | ||
| 184 | -/***********************************************************************//** | ||
| 185 | * @brief Return bin index | 121 | * @brief Return bin index |
| 186 | * | 122 | * |
| 187 | * @return Bin index. | 123 | * @return Bin index. |
| @@ -197,44 +133,18 @@ const int& GCOMEventBin::index(void) const | @@ -197,44 +133,18 @@ const int& GCOMEventBin::index(void) const | ||
| 197 | 133 | ||
| 198 | 134 | ||
| 199 | /***********************************************************************//** | 135 | /***********************************************************************//** |
| 200 | - * @brief Return solid angle | 136 | + * @brief Set bin index |
| 201 | * | 137 | * |
| 202 | - * @return Solid angle. | ||
| 203 | - * | ||
| 204 | - * Returns the solid angle of the event bin. | ||
| 205 | - ***************************************************************************/ | ||
| 206 | -inline | ||
| 207 | -const double& GCOMEventBin::solidangle(void) const | ||
| 208 | -{ | ||
| 209 | - return (*m_solidangle); | ||
| 210 | -} | ||
| 211 | - | ||
| 212 | - | ||
| 213 | -/***********************************************************************//** | ||
| 214 | - * @brief Return energy width | ||
| 215 | - * | ||
| 216 | - * @return Energy width. | ||
| 217 | - * | ||
| 218 | - * Returns the energy width of the event bin. | ||
| 219 | - ***************************************************************************/ | ||
| 220 | -inline | ||
| 221 | -const GEnergy& GCOMEventBin::ewidth(void) const | ||
| 222 | -{ | ||
| 223 | - return (*m_ewidth); | ||
| 224 | -} | ||
| 225 | - | ||
| 226 | - | ||
| 227 | -/***********************************************************************//** | ||
| 228 | - * @brief Return ontime | ||
| 229 | - * | ||
| 230 | - * @return Ontime. | 138 | + * @return Bin index. |
| 231 | * | 139 | * |
| 232 | - * Returns the ontime of the event bin. | 140 | + * Set the index of the event bin if the bin is part of an event cube. If |
| 141 | + * the event is not part of an event cube the index should be set to -1. | ||
| 233 | ***************************************************************************/ | 142 | ***************************************************************************/ |
| 234 | inline | 143 | inline |
| 235 | -const double& GCOMEventBin::ontime(void) const | 144 | +void GCOMEventBin::index(const int& index) |
| 236 | { | 145 | { |
| 237 | - return (*m_ontime); | 146 | + m_index = index; |
| 147 | + return; | ||
| 238 | } | 148 | } |
| 239 | 149 | ||
| 240 | #endif /* GCOMEVENTBIN_HPP */ | 150 | #endif /* GCOMEVENTBIN_HPP */ |
inst/com/include/GCOMIaq.hpp
| @@ -55,8 +55,8 @@ public: | @@ -55,8 +55,8 @@ public: | ||
| 55 | // Constructors and destructors | 55 | // Constructors and destructors |
| 56 | GCOMIaq(void); | 56 | GCOMIaq(void); |
| 57 | GCOMIaq(const GCOMIaq& iaq); | 57 | GCOMIaq(const GCOMIaq& iaq); |
| 58 | - GCOMIaq(const double& phigeo_max, const double& phigeo_bin_size, | ||
| 59 | - const double& phibar_max, const double& phibar_bin_size); | 58 | + GCOMIaq(const double& phigeo_max, const double& phigeo_bin_size, |
| 59 | + const double& phibar_max, const double& phibar_bin_size); | ||
| 60 | ~GCOMIaq(void); | 60 | ~GCOMIaq(void); |
| 61 | 61 | ||
| 62 | // Operators | 62 | // Operators |
inst/com/include/GCOMObservation.hpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMObservation.hpp - COMPTEL observation class * | 2 | * GCOMObservation.hpp - COMPTEL observation class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -66,6 +66,7 @@ class GCOMObservation : public GObservation { | @@ -66,6 +66,7 @@ class GCOMObservation : public GObservation { | ||
| 66 | public: | 66 | public: |
| 67 | // Constructors and destructors | 67 | // Constructors and destructors |
| 68 | GCOMObservation(void); | 68 | GCOMObservation(void); |
| 69 | + explicit GCOMObservation(const GXmlElement& xml); | ||
| 69 | GCOMObservation(const GFilename& drename, | 70 | GCOMObservation(const GFilename& drename, |
| 70 | const GFilename& drbname, | 71 | const GFilename& drbname, |
| 71 | const GFilename& drgname, | 72 | const GFilename& drgname, |
inst/com/include/GCOMResponse.hpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMResponse.hpp - COMPTEL Response class * | 2 | * GCOMResponse.hpp - COMPTEL Response class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -42,6 +42,7 @@ class GEnergy; | @@ -42,6 +42,7 @@ class GEnergy; | ||
| 42 | class GTime; | 42 | class GTime; |
| 43 | class GObservation; | 43 | class GObservation; |
| 44 | class GFitsImage; | 44 | class GFitsImage; |
| 45 | +class GFitsImageFloat; | ||
| 45 | 46 | ||
| 46 | 47 | ||
| 47 | /***********************************************************************//** | 48 | /***********************************************************************//** |
| @@ -89,6 +90,7 @@ public: | @@ -89,6 +90,7 @@ public: | ||
| 89 | const std::string& rspname(void) const; | 90 | const std::string& rspname(void) const; |
| 90 | void load(const std::string& rspname); | 91 | void load(const std::string& rspname); |
| 91 | void read(const GFitsImage& hdu); | 92 | void read(const GFitsImage& hdu); |
| 93 | + void write(GFitsImageFloat& image) const; | ||
| 92 | 94 | ||
| 93 | private: | 95 | private: |
| 94 | // Private methods | 96 | // Private methods |
inst/com/include/GCOMTim.hpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMTim.hpp - COMPTEL Good Time Intervals class * | 2 | * GCOMTim.hpp - COMPTEL Good Time Intervals class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knodlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knodlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -51,6 +51,7 @@ class GCOMTim : public GBase { | @@ -51,6 +51,7 @@ class GCOMTim : public GBase { | ||
| 51 | public: | 51 | public: |
| 52 | // Constructors and destructors | 52 | // Constructors and destructors |
| 53 | GCOMTim(void); | 53 | GCOMTim(void); |
| 54 | + explicit GCOMTim(const GGti& gti); | ||
| 54 | GCOMTim(const GCOMTim& tim); | 55 | GCOMTim(const GCOMTim& tim); |
| 55 | GCOMTim(const GFilename& filename, const std::string& usage = "", | 56 | GCOMTim(const GFilename& filename, const std::string& usage = "", |
| 56 | const std::string& mode = ""); | 57 | const std::string& mode = ""); |
inst/com/pyext/GCOMD1Response.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMD1Response.i - COMPTEL D1 module response class * | 2 | * GCOMD1Response.i - COMPTEL D1 module response class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -54,6 +54,7 @@ public: | @@ -54,6 +54,7 @@ public: | ||
| 54 | const GCaldb& caldb(void) const; | 54 | const GCaldb& caldb(void) const; |
| 55 | void load(const std::string& sdaname); | 55 | void load(const std::string& sdaname); |
| 56 | void read(const GFitsTable& hdu); | 56 | void read(const GFitsTable& hdu); |
| 57 | + void write(GFitsBinTable& table); | ||
| 57 | double position(const double& etrue) const; | 58 | double position(const double& etrue) const; |
| 58 | double sigma(const double& etrue) const; | 59 | double sigma(const double& etrue) const; |
| 59 | double amplitude(const double& etrue) const; | 60 | double amplitude(const double& etrue) const; |
| @@ -72,4 +73,14 @@ public: | @@ -72,4 +73,14 @@ public: | ||
| 72 | GCOMD1Response copy() { | 73 | GCOMD1Response copy() { |
| 73 | return (*self); | 74 | return (*self); |
| 74 | } | 75 | } |
| 76 | +%pythoncode { | ||
| 77 | + def __getstate__(self): | ||
| 78 | + table = gammalib.GFitsBinTable() | ||
| 79 | + self.write(table) | ||
| 80 | + state = (table,) | ||
| 81 | + return state | ||
| 82 | + def __setstate__(self, state): | ||
| 83 | + self.__init__() | ||
| 84 | + self.read(state[0]) | ||
| 85 | +} | ||
| 75 | }; | 86 | }; |
inst/com/pyext/GCOMD2Response.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMD2Response.i - COMPTEL D2 module response class * | 2 | * GCOMD2Response.i - COMPTEL D2 module response class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -54,6 +54,7 @@ public: | @@ -54,6 +54,7 @@ public: | ||
| 54 | const GCaldb& caldb(void) const; | 54 | const GCaldb& caldb(void) const; |
| 55 | void load(const std::string& sdaname); | 55 | void load(const std::string& sdaname); |
| 56 | void read(const GFitsTable& hdu); | 56 | void read(const GFitsTable& hdu); |
| 57 | + void write(GFitsBinTable& table); | ||
| 57 | double position(const double& etrue) const; | 58 | double position(const double& etrue) const; |
| 58 | double sigma(const double& etrue) const; | 59 | double sigma(const double& etrue) const; |
| 59 | double amplitude(const double& etrue) const; | 60 | double amplitude(const double& etrue) const; |
| @@ -76,4 +77,14 @@ public: | @@ -76,4 +77,14 @@ public: | ||
| 76 | GCOMD2Response copy() { | 77 | GCOMD2Response copy() { |
| 77 | return (*self); | 78 | return (*self); |
| 78 | } | 79 | } |
| 80 | +%pythoncode { | ||
| 81 | + def __getstate__(self): | ||
| 82 | + table = gammalib.GFitsBinTable() | ||
| 83 | + self.write(table) | ||
| 84 | + state = (table,) | ||
| 85 | + return state | ||
| 86 | + def __setstate__(self, state): | ||
| 87 | + self.__init__() | ||
| 88 | + self.read(state[0]) | ||
| 89 | +} | ||
| 79 | }; | 90 | }; |
inst/com/pyext/GCOMDri.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMDri.i - COMPTEL Data Space class * | 2 | * GCOMDri.i - COMPTEL Data Space class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -116,4 +116,15 @@ public: | @@ -116,4 +116,15 @@ public: | ||
| 116 | GCOMDri copy() { | 116 | GCOMDri copy() { |
| 117 | return (*self); | 117 | return (*self); |
| 118 | } | 118 | } |
| 119 | +%pythoncode { | ||
| 120 | + def __getstate__(self): | ||
| 121 | + fits = gammalib.GFits() | ||
| 122 | + self.write(fits) | ||
| 123 | + state = (fits,) | ||
| 124 | + return state | ||
| 125 | + def __setstate__(self, state): | ||
| 126 | + self.__init__() | ||
| 127 | + if not state[0].is_empty(): | ||
| 128 | + self.read(state[0][0]) | ||
| 129 | +} | ||
| 119 | }; | 130 | }; |
inst/com/pyext/GCOMEventAtom.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMEventAtom.i - COMPTEL event atom class * | 2 | * GCOMEventAtom.i - COMPTEL event atom class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -87,4 +87,28 @@ public: | @@ -87,4 +87,28 @@ public: | ||
| 87 | GCOMEventAtom copy() { | 87 | GCOMEventAtom copy() { |
| 88 | return (*self); | 88 | return (*self); |
| 89 | } | 89 | } |
| 90 | +%pythoncode { | ||
| 91 | + def __getstate__(self): | ||
| 92 | + state = (self.dir(), self.energy(), self.time(), | ||
| 93 | + self.e1(), self.e2(), self.phibar(), self.theta(), | ||
| 94 | + self.phi(), self.eha(), self.psd(), self.tof(), | ||
| 95 | + self.modcom(), self.reflag(), self.veto()) | ||
| 96 | + return state | ||
| 97 | + def __setstate__(self, state): | ||
| 98 | + self.__init__() | ||
| 99 | + self.dir(state[0]) | ||
| 100 | + self.energy(state[1]) | ||
| 101 | + self.time(state[2]) | ||
| 102 | + self.e1(state[3]) | ||
| 103 | + self.e2(state[4]) | ||
| 104 | + self.phibar(state[5]) | ||
| 105 | + self.theta(state[6]) | ||
| 106 | + self.phi(state[7]) | ||
| 107 | + self.eha(state[8]) | ||
| 108 | + self.psd(state[9]) | ||
| 109 | + self.tof(state[10]) | ||
| 110 | + self.modcom(state[11]) | ||
| 111 | + self.reflag(state[12]) | ||
| 112 | + self.veto(state[13]) | ||
| 113 | +} | ||
| 90 | }; | 114 | }; |
inst/com/pyext/GCOMEventBin.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMEventBin.i - COMPTEL event bin class * | 2 | * GCOMEventBin.i - COMPTEL event bin class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2015 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -58,6 +58,13 @@ public: | @@ -58,6 +58,13 @@ public: | ||
| 58 | const double& solidangle(void) const; | 58 | const double& solidangle(void) const; |
| 59 | const GEnergy& ewidth(void) const; | 59 | const GEnergy& ewidth(void) const; |
| 60 | const double& ontime(void) const; | 60 | const double& ontime(void) const; |
| 61 | + void index(const int& index); | ||
| 62 | + void dir(const GCOMInstDir& dir); | ||
| 63 | + void energy(const GEnergy& energy); | ||
| 64 | + void time(const GTime& time); | ||
| 65 | + void solidangle(const double& solidangle); | ||
| 66 | + void ewidth(const GEnergy& ewidth); | ||
| 67 | + void ontime(const double& ontime); | ||
| 61 | }; | 68 | }; |
| 62 | 69 | ||
| 63 | 70 | ||
| @@ -68,4 +75,21 @@ public: | @@ -68,4 +75,21 @@ public: | ||
| 68 | GCOMEventBin copy() { | 75 | GCOMEventBin copy() { |
| 69 | return (*self); | 76 | return (*self); |
| 70 | } | 77 | } |
| 78 | +%pythoncode { | ||
| 79 | + def __getstate__(self): | ||
| 80 | + state = (self.index(), self.dir(), self.energy(), self.time(), | ||
| 81 | + self.counts(), self.solidangle(), self.ewidth(), | ||
| 82 | + self.ontime()) | ||
| 83 | + return state | ||
| 84 | + def __setstate__(self, state): | ||
| 85 | + self.__init__() | ||
| 86 | + if state[0] == -1: | ||
| 87 | + self.dir(state[1]) | ||
| 88 | + self.energy(state[2]) | ||
| 89 | + self.time(state[3]) | ||
| 90 | + self.counts(state[4]) | ||
| 91 | + self.solidangle(state[5]) | ||
| 92 | + self.ewidth(state[6]) | ||
| 93 | + self.ontime(state[7]) | ||
| 94 | +} | ||
| 71 | }; | 95 | }; |
inst/com/pyext/GCOMEventCube.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMEventCube.i - COMPTEL event bin container class * | 2 | * GCOMEventCube.i - COMPTEL event bin container class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -66,9 +66,6 @@ public: | @@ -66,9 +66,6 @@ public: | ||
| 66 | * @brief GCOMEventCube class extension | 66 | * @brief GCOMEventCube class extension |
| 67 | ***************************************************************************/ | 67 | ***************************************************************************/ |
| 68 | %extend GCOMEventCube { | 68 | %extend GCOMEventCube { |
| 69 | - GCOMEventCube copy() { | ||
| 70 | - return (*self); | ||
| 71 | - } | ||
| 72 | GCOMEventBin* __getitem__(int index) { | 69 | GCOMEventBin* __getitem__(int index) { |
| 73 | if (index >= 0 && index < self->size()) { | 70 | if (index >= 0 && index < self->size()) { |
| 74 | return (*self)[index]; | 71 | return (*self)[index]; |
| @@ -85,4 +82,18 @@ public: | @@ -85,4 +82,18 @@ public: | ||
| 85 | throw GException::out_of_range("__setitem__(int)", index, self->size()); | 82 | throw GException::out_of_range("__setitem__(int)", index, self->size()); |
| 86 | } | 83 | } |
| 87 | } | 84 | } |
| 85 | + GCOMEventCube copy() { | ||
| 86 | + return (*self); | ||
| 87 | + } | ||
| 88 | +%pythoncode { | ||
| 89 | + def __getstate__(self): | ||
| 90 | + fits = gammalib.GFits() | ||
| 91 | + self.write(fits) | ||
| 92 | + state = (fits,) | ||
| 93 | + return state | ||
| 94 | + def __setstate__(self, state): | ||
| 95 | + self.__init__() | ||
| 96 | + if not state[0].is_empty(): | ||
| 97 | + self.read(state[0]) | ||
| 98 | +} | ||
| 88 | }; | 99 | }; |
inst/com/pyext/GCOMEventList.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMEventList.i - COMPTEL event list class * | 2 | * GCOMEventList.i - COMPTEL event list class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -26,7 +26,6 @@ | @@ -26,7 +26,6 @@ | ||
| 26 | %{ | 26 | %{ |
| 27 | /* Put headers and other declarations here that are needed for compilation */ | 27 | /* Put headers and other declarations here that are needed for compilation */ |
| 28 | #include "GCOMEventList.hpp" | 28 | #include "GCOMEventList.hpp" |
| 29 | -#include "GTools.hpp" | ||
| 30 | %} | 29 | %} |
| 31 | 30 | ||
| 32 | 31 | ||
| @@ -129,4 +128,15 @@ public: | @@ -129,4 +128,15 @@ public: | ||
| 129 | GCOMEventList copy() { | 128 | GCOMEventList copy() { |
| 130 | return (*self); | 129 | return (*self); |
| 131 | } | 130 | } |
| 131 | +%pythoncode { | ||
| 132 | + def __getstate__(self): | ||
| 133 | + fits = gammalib.GFits() | ||
| 134 | + self.write(fits) | ||
| 135 | + state = (fits,) | ||
| 136 | + return state | ||
| 137 | + def __setstate__(self, state): | ||
| 138 | + self.__init__() | ||
| 139 | + if not state[0].is_empty(): | ||
| 140 | + self.read(state[0]) | ||
| 141 | +} | ||
| 132 | }; | 142 | }; |
inst/com/pyext/GCOMIaq.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMIaq.i - COMPTEL instrument response representation * | 2 | * GCOMIaq.i - COMPTEL instrument response representation * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -40,8 +40,8 @@ public: | @@ -40,8 +40,8 @@ public: | ||
| 40 | // Constructors and destructors | 40 | // Constructors and destructors |
| 41 | GCOMIaq(void); | 41 | GCOMIaq(void); |
| 42 | GCOMIaq(const GCOMIaq& iaq); | 42 | GCOMIaq(const GCOMIaq& iaq); |
| 43 | - GCOMIaq(const double& phigeo_max, const double& phigeo_bin_size, | ||
| 44 | - const double& phibar_max, const double& phibar_bin_size); | 43 | + GCOMIaq(const double& phigeo_max, const double& phigeo_bin_size, |
| 44 | + const double& phibar_max, const double& phibar_bin_size); | ||
| 45 | ~GCOMIaq(void); | 45 | ~GCOMIaq(void); |
| 46 | 46 | ||
| 47 | // Methods | 47 | // Methods |
inst/com/pyext/GCOMInstDir.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMInstDir.i - COMPTEL instrument direction class * | 2 | * GCOMInstDir.i - COMPTEL instrument direction class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -62,4 +62,11 @@ public: | @@ -62,4 +62,11 @@ public: | ||
| 62 | GCOMInstDir copy() { | 62 | GCOMInstDir copy() { |
| 63 | return (*self); | 63 | return (*self); |
| 64 | } | 64 | } |
| 65 | +%pythoncode { | ||
| 66 | + def __getstate__(self): | ||
| 67 | + state = (self.dir(), self.phibar()) | ||
| 68 | + return state | ||
| 69 | + def __setstate__(self, state): | ||
| 70 | + self.__init__(state[0], state[1]) | ||
| 71 | +} | ||
| 65 | }; | 72 | }; |
inst/com/pyext/GCOMModelDRBFitting.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMModelDRBFitting.i - COMPTEL DRB model fitting class * | 2 | * GCOMModelDRBFitting.i - COMPTEL DRB model fitting class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2016 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -66,4 +66,16 @@ public: | @@ -66,4 +66,16 @@ public: | ||
| 66 | GCOMModelDRBFitting copy() { | 66 | GCOMModelDRBFitting copy() { |
| 67 | return (*self); | 67 | return (*self); |
| 68 | } | 68 | } |
| 69 | +%pythoncode { | ||
| 70 | + def __getstate__(self): | ||
| 71 | + xml = gammalib.GXmlElement() | ||
| 72 | + self.write(xml) | ||
| 73 | + state = (xml,) | ||
| 74 | + return state | ||
| 75 | + def __setstate__(self, state): | ||
| 76 | + if state[0][0].elements('node') == 0: | ||
| 77 | + self.__init__() | ||
| 78 | + else: | ||
| 79 | + self.__init__(state[0][0]) | ||
| 80 | +} | ||
| 69 | }; | 81 | }; |
inst/com/pyext/GCOMOad.i
| @@ -78,4 +78,22 @@ public: | @@ -78,4 +78,22 @@ public: | ||
| 78 | GCOMOad copy() { | 78 | GCOMOad copy() { |
| 79 | return (*self); | 79 | return (*self); |
| 80 | } | 80 | } |
| 81 | +%pythoncode { | ||
| 82 | + def __getstate__(self): | ||
| 83 | + state = (self.tstart(), self.tstop(), self.zaxis(), self.xaxis(), | ||
| 84 | + self.tjd(), self.tics(), self.gcaz(), self.gcel(), | ||
| 85 | + self.georad()) | ||
| 86 | + return state | ||
| 87 | + def __setstate__(self, state): | ||
| 88 | + self.__init__() | ||
| 89 | + self.tstart(state[0]) | ||
| 90 | + self.tstop(state[1]) | ||
| 91 | + self.zaxis(state[2]) | ||
| 92 | + self.xaxis(state[3]) | ||
| 93 | + self.tjd(state[4]) | ||
| 94 | + self.tics(state[5]) | ||
| 95 | + self.gcaz(state[6]) | ||
| 96 | + self.gcel(state[7]) | ||
| 97 | + self.georad(state[8]) | ||
| 98 | +} | ||
| 81 | }; | 99 | }; |
inst/com/pyext/GCOMOads.i
| @@ -121,4 +121,15 @@ public: | @@ -121,4 +121,15 @@ public: | ||
| 121 | GCOMOads copy() { | 121 | GCOMOads copy() { |
| 122 | return (*self); | 122 | return (*self); |
| 123 | } | 123 | } |
| 124 | +%pythoncode { | ||
| 125 | + def __getstate__(self): | ||
| 126 | + state = tuple([x for x in self]), | ||
| 127 | + return state | ||
| 128 | + def __setstate__(self, state): | ||
| 129 | + self.__init__() | ||
| 130 | + size = len(state[0]) | ||
| 131 | + self.reserve(size) | ||
| 132 | + for x in state[0]: | ||
| 133 | + self.append(x) | ||
| 134 | +} | ||
| 124 | }; | 135 | }; |
inst/com/pyext/GCOMObservation.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMObservation.i - COMPTEL observation class * | 2 | * GCOMObservation.i - COMPTEL observation class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -38,10 +38,14 @@ class GCOMObservation : public GObservation { | @@ -38,10 +38,14 @@ class GCOMObservation : public GObservation { | ||
| 38 | public: | 38 | public: |
| 39 | // Constructors and destructors | 39 | // Constructors and destructors |
| 40 | GCOMObservation(void); | 40 | GCOMObservation(void); |
| 41 | + explicit GCOMObservation(const GXmlElement& xml); | ||
| 41 | GCOMObservation(const GFilename& drename, | 42 | GCOMObservation(const GFilename& drename, |
| 42 | const GFilename& drbname, | 43 | const GFilename& drbname, |
| 43 | const GFilename& drgname, | 44 | const GFilename& drgname, |
| 44 | const GFilename& drxname); | 45 | const GFilename& drxname); |
| 46 | + GCOMObservation(const GFilename& evpname, | ||
| 47 | + const GFilename& timname, | ||
| 48 | + const std::vector<GFilename>& oadnames); | ||
| 45 | GCOMObservation(const GCOMObservation& obs); | 49 | GCOMObservation(const GCOMObservation& obs); |
| 46 | virtual ~GCOMObservation(void); | 50 | virtual ~GCOMObservation(void); |
| 47 | 51 | ||
| @@ -92,4 +96,16 @@ public: | @@ -92,4 +96,16 @@ public: | ||
| 92 | GCOMObservation copy() { | 96 | GCOMObservation copy() { |
| 93 | return (*self); | 97 | return (*self); |
| 94 | } | 98 | } |
| 99 | +%pythoncode { | ||
| 100 | + def __getstate__(self): | ||
| 101 | + xml = gammalib.GXmlElement() | ||
| 102 | + self.write(xml) | ||
| 103 | + state = (xml,) | ||
| 104 | + return state | ||
| 105 | + def __setstate__(self, state): | ||
| 106 | + if state[0].elements() > 0: | ||
| 107 | + self.__init__(state[0]) | ||
| 108 | + else: | ||
| 109 | + self.__init__() | ||
| 110 | +} | ||
| 95 | }; | 111 | }; |
inst/com/pyext/GCOMResponse.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMResponse.i - COMPTEL Response class * | 2 | * GCOMResponse.i - COMPTEL Response class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -66,6 +66,7 @@ public: | @@ -66,6 +66,7 @@ public: | ||
| 66 | const std::string& rspname(void) const; | 66 | const std::string& rspname(void) const; |
| 67 | void load(const std::string& rspname); | 67 | void load(const std::string& rspname); |
| 68 | void read(const GFitsImage& hdu); | 68 | void read(const GFitsImage& hdu); |
| 69 | + void write(GFitsImageFloat& image) const; | ||
| 69 | }; | 70 | }; |
| 70 | 71 | ||
| 71 | 72 | ||
| @@ -76,4 +77,14 @@ public: | @@ -76,4 +77,14 @@ public: | ||
| 76 | GCOMResponse copy() { | 77 | GCOMResponse copy() { |
| 77 | return (*self); | 78 | return (*self); |
| 78 | } | 79 | } |
| 80 | +%pythoncode { | ||
| 81 | + def __getstate__(self): | ||
| 82 | + image = gammalib.GFitsImageFloat() | ||
| 83 | + self.write(image) | ||
| 84 | + state = (image,) | ||
| 85 | + return state | ||
| 86 | + def __setstate__(self, state): | ||
| 87 | + self.__init__() | ||
| 88 | + self.read(state[0]) | ||
| 89 | +} | ||
| 79 | }; | 90 | }; |
inst/com/pyext/GCOMRoi.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMRoi.i - COMPTEL region of interest class * | 2 | * GCOMRoi.i - COMPTEL region of interest class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -69,4 +69,11 @@ public: | @@ -69,4 +69,11 @@ public: | ||
| 69 | GCOMRoi copy() { | 69 | GCOMRoi copy() { |
| 70 | return (*self); | 70 | return (*self); |
| 71 | } | 71 | } |
| 72 | +%pythoncode { | ||
| 73 | + def __getstate__(self): | ||
| 74 | + state = (self.centre(), self.radius(), self.phibar_min(), self.phibar_max()) | ||
| 75 | + return state | ||
| 76 | + def __setstate__(self, state): | ||
| 77 | + self.__init__(state[0], state[1], state[2], state[3]) | ||
| 78 | +} | ||
| 72 | }; | 79 | }; |
inst/com/pyext/GCOMTim.i
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMTim.i - COMPTEL Good Time Intervals class * | 2 | * GCOMTim.i - COMPTEL Good Time Intervals class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knodlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knodlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -39,6 +39,7 @@ class GCOMTim : public GBase { | @@ -39,6 +39,7 @@ class GCOMTim : public GBase { | ||
| 39 | public: | 39 | public: |
| 40 | // Constructors and destructors | 40 | // Constructors and destructors |
| 41 | GCOMTim(void); | 41 | GCOMTim(void); |
| 42 | + explicit GCOMTim(const GGti& gti); | ||
| 42 | GCOMTim(const GCOMTim& tim); | 43 | GCOMTim(const GCOMTim& tim); |
| 43 | GCOMTim(const GFilename& filename, const std::string& usage = "", | 44 | GCOMTim(const GFilename& filename, const std::string& usage = "", |
| 44 | const std::string& mode = ""); | 45 | const std::string& mode = ""); |
| @@ -67,4 +68,11 @@ public: | @@ -67,4 +68,11 @@ public: | ||
| 67 | GCOMTim copy() { | 68 | GCOMTim copy() { |
| 68 | return (*self); | 69 | return (*self); |
| 69 | } | 70 | } |
| 71 | +%pythoncode { | ||
| 72 | + def __getstate__(self): | ||
| 73 | + state = (self.gti(),) | ||
| 74 | + return state | ||
| 75 | + def __setstate__(self, state): | ||
| 76 | + self.__init__(state[0]) | ||
| 77 | +} | ||
| 70 | }; | 78 | }; |
inst/com/src/GCOMD1Response.cpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMD1Response.cpp - COMPTEL D1 module response class * | 2 | * GCOMD1Response.cpp - COMPTEL D1 module response class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -30,6 +30,10 @@ | @@ -30,6 +30,10 @@ | ||
| 30 | #endif | 30 | #endif |
| 31 | #include "GMath.hpp" | 31 | #include "GMath.hpp" |
| 32 | #include "GCOMD1Response.hpp" | 32 | #include "GCOMD1Response.hpp" |
| 33 | +#include "GFitsTable.hpp" | ||
| 34 | +#include "GFitsBinTable.hpp" | ||
| 35 | +#include "GFitsTableFloatCol.hpp" | ||
| 36 | +#include "GFitsTableDoubleCol.hpp" | ||
| 33 | 37 | ||
| 34 | /* __ Method name definitions ____________________________________________ */ | 38 | /* __ Method name definitions ____________________________________________ */ |
| 35 | 39 | ||
| @@ -359,6 +363,63 @@ void GCOMD1Response::read(const GFitsTable& table) | @@ -359,6 +363,63 @@ void GCOMD1Response::read(const GFitsTable& table) | ||
| 359 | 363 | ||
| 360 | 364 | ||
| 361 | /***********************************************************************//** | 365 | /***********************************************************************//** |
| 366 | + * @brief Write COMPTEL D1 module response. | ||
| 367 | + * | ||
| 368 | + * @param[in] table FITS table. | ||
| 369 | + * | ||
| 370 | + * Write the COMPTEL D1 module response into a SDA FITS table. | ||
| 371 | + ***************************************************************************/ | ||
| 372 | +void GCOMD1Response::write(GFitsBinTable& table) | ||
| 373 | +{ | ||
| 374 | + // Set extension name | ||
| 375 | + table.extname("SDA"); | ||
| 376 | + | ||
| 377 | + // Set number of entries | ||
| 378 | + int num = m_energies.size(); | ||
| 379 | + | ||
| 380 | + // Allocate columns | ||
| 381 | + GFitsTableFloatCol col_energy("ENERGY", num); | ||
| 382 | + GFitsTableDoubleCol col_position("POSITION", num); | ||
| 383 | + GFitsTableDoubleCol col_width("WIDTH", num); | ||
| 384 | + GFitsTableDoubleCol col_amplitude("AMPLITUDE", num); | ||
| 385 | + GFitsTableDoubleCol col_emin("EMIN", num); | ||
| 386 | + GFitsTableDoubleCol col_ewidth("EWIDTH", num); | ||
| 387 | + GFitsTableDoubleCol col_emax("EMAX", num); | ||
| 388 | + | ||
| 389 | + // Set column units | ||
| 390 | + col_energy.unit("MeV"); | ||
| 391 | + col_position.unit("MeV"); | ||
| 392 | + col_width.unit("MeV"); | ||
| 393 | + col_emin.unit("MeV"); | ||
| 394 | + col_ewidth.unit("MeV"); | ||
| 395 | + col_emax.unit("MeV"); | ||
| 396 | + | ||
| 397 | + // Copy data from vectors into table | ||
| 398 | + for (int i = 0; i < num; ++i) { | ||
| 399 | + col_energy(i) = m_energies[i]; | ||
| 400 | + col_position(i) = m_positions[i]; | ||
| 401 | + col_width(i) = m_sigmas[i]; | ||
| 402 | + col_amplitude(i) = m_amplitudes[i]; | ||
| 403 | + col_emin(i) = m_emins[i]; | ||
| 404 | + col_ewidth(i) = m_ewidths[i]; | ||
| 405 | + col_emax(i) = m_emaxs[i]; | ||
| 406 | + } | ||
| 407 | + | ||
| 408 | + // Append columns to table | ||
| 409 | + table.append(col_energy); | ||
| 410 | + table.append(col_position); | ||
| 411 | + table.append(col_width); | ||
| 412 | + table.append(col_amplitude); | ||
| 413 | + table.append(col_emin); | ||
| 414 | + table.append(col_ewidth); | ||
| 415 | + table.append(col_emax); | ||
| 416 | + | ||
| 417 | + // Return | ||
| 418 | + return; | ||
| 419 | +} | ||
| 420 | + | ||
| 421 | + | ||
| 422 | +/***********************************************************************//** | ||
| 362 | * @brief Print COMPTEL D1 module response information | 423 | * @brief Print COMPTEL D1 module response information |
| 363 | * | 424 | * |
| 364 | * @param[in] chatter Chattiness. | 425 | * @param[in] chatter Chattiness. |
inst/com/src/GCOMD2Response.cpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMD2Response.cpp - COMPTEL D2 module response class * | 2 | * GCOMD2Response.cpp - COMPTEL D2 module response class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -31,6 +31,10 @@ | @@ -31,6 +31,10 @@ | ||
| 31 | #include "GMath.hpp" | 31 | #include "GMath.hpp" |
| 32 | #include "GIntegral.hpp" | 32 | #include "GIntegral.hpp" |
| 33 | #include "GCOMD2Response.hpp" | 33 | #include "GCOMD2Response.hpp" |
| 34 | +#include "GFitsTable.hpp" | ||
| 35 | +#include "GFitsBinTable.hpp" | ||
| 36 | +#include "GFitsTableFloatCol.hpp" | ||
| 37 | +#include "GFitsTableDoubleCol.hpp" | ||
| 34 | 38 | ||
| 35 | /* __ Method name definitions ____________________________________________ */ | 39 | /* __ Method name definitions ____________________________________________ */ |
| 36 | 40 | ||
| @@ -352,6 +356,75 @@ void GCOMD2Response::read(const GFitsTable& table) | @@ -352,6 +356,75 @@ void GCOMD2Response::read(const GFitsTable& table) | ||
| 352 | 356 | ||
| 353 | 357 | ||
| 354 | /***********************************************************************//** | 358 | /***********************************************************************//** |
| 359 | + * @brief Write COMPTEL D2 module response. | ||
| 360 | + * | ||
| 361 | + * @param[in] table FITS table. | ||
| 362 | + * | ||
| 363 | + * Write the COMPTEL D2 module response into a SDB FITS table. | ||
| 364 | + ***************************************************************************/ | ||
| 365 | +void GCOMD2Response::write(GFitsBinTable& table) | ||
| 366 | +{ | ||
| 367 | + // Set extension name | ||
| 368 | + table.extname("SDB"); | ||
| 369 | + | ||
| 370 | + // Set number of entries | ||
| 371 | + int num = m_energies.size(); | ||
| 372 | + | ||
| 373 | + // Allocate columns | ||
| 374 | + GFitsTableFloatCol col_energy("ENERGY", num); | ||
| 375 | + GFitsTableDoubleCol col_position("POSITION", num); | ||
| 376 | + GFitsTableDoubleCol col_width("WIDTH", num); | ||
| 377 | + GFitsTableDoubleCol col_amplitude("AMPLITUDE", num); | ||
| 378 | + GFitsTableDoubleCol col_escape1("ESCAPE1", num); | ||
| 379 | + GFitsTableDoubleCol col_escape2("ESCAPE2", num); | ||
| 380 | + GFitsTableDoubleCol col_tail("TAIL", num); | ||
| 381 | + GFitsTableDoubleCol col_background("BACKGROUND", num); | ||
| 382 | + GFitsTableDoubleCol col_emin("EMIN", num); | ||
| 383 | + GFitsTableDoubleCol col_ewidth("EWIDTH", num); | ||
| 384 | + GFitsTableDoubleCol col_emax("EMAX", num); | ||
| 385 | + | ||
| 386 | + // Set column units | ||
| 387 | + col_energy.unit("MeV"); | ||
| 388 | + col_position.unit("MeV"); | ||
| 389 | + col_width.unit("MeV"); | ||
| 390 | + col_emin.unit("MeV"); | ||
| 391 | + col_ewidth.unit("MeV"); | ||
| 392 | + col_emax.unit("MeV"); | ||
| 393 | + | ||
| 394 | + // Copy data from vectors into table | ||
| 395 | + for (int i = 0; i < num; ++i) { | ||
| 396 | + col_energy(i) = m_energies[i]; | ||
| 397 | + col_position(i) = m_positions[i]; | ||
| 398 | + col_width(i) = m_sigmas[i]; | ||
| 399 | + col_amplitude(i) = m_amplitudes[i]; | ||
| 400 | + col_escape1(i) = m_escapes1[i]; | ||
| 401 | + col_escape2(i) = m_escapes2[i]; | ||
| 402 | + col_tail(i) = m_tails[i]; | ||
| 403 | + col_background(i) = m_backgrounds[i]; | ||
| 404 | + col_emin(i) = m_emins[i]; | ||
| 405 | + col_ewidth(i) = m_ewidths[i]; | ||
| 406 | + col_emax(i) = m_emaxs[i]; | ||
| 407 | + } | ||
| 408 | + | ||
| 409 | + // Append columns to table | ||
| 410 | + table.append(col_energy); | ||
| 411 | + table.append(col_position); | ||
| 412 | + table.append(col_width); | ||
| 413 | + table.append(col_amplitude); | ||
| 414 | + table.append(col_escape1); | ||
| 415 | + table.append(col_escape2); | ||
| 416 | + table.append(col_tail); | ||
| 417 | + table.append(col_background); | ||
| 418 | + table.append(col_emin); | ||
| 419 | + table.append(col_ewidth); | ||
| 420 | + table.append(col_emax); | ||
| 421 | + | ||
| 422 | + // Return | ||
| 423 | + return; | ||
| 424 | +} | ||
| 425 | + | ||
| 426 | + | ||
| 427 | +/***********************************************************************//** | ||
| 355 | * @brief Print COMPTEL D2 module response information | 428 | * @brief Print COMPTEL D2 module response information |
| 356 | * | 429 | * |
| 357 | * @param[in] chatter Chattiness. | 430 | * @param[in] chatter Chattiness. |
inst/com/src/GCOMDri.cpp
| @@ -861,7 +861,9 @@ void GCOMDri::write(GFits& fits, const std::string& extname) const | @@ -861,7 +861,9 @@ void GCOMDri::write(GFits& fits, const std::string& extname) const | ||
| 861 | GFitsHDU *image = m_dri.write(fits, extname); | 861 | GFitsHDU *image = m_dri.write(fits, extname); |
| 862 | 862 | ||
| 863 | // Write DRI attributes | 863 | // Write DRI attributes |
| 864 | - write_attributes(image); | 864 | + if (image != NULL) { |
| 865 | + write_attributes(image); | ||
| 866 | + } | ||
| 865 | 867 | ||
| 866 | // Return | 868 | // Return |
| 867 | return; | 869 | return; |
| @@ -1124,7 +1126,9 @@ void GCOMDri::read_attributes(const GFitsHDU* hdu) | @@ -1124,7 +1126,9 @@ void GCOMDri::read_attributes(const GFitsHDU* hdu) | ||
| 1124 | GTime tstop = com_time(hdu->integer("VIEDAY"), hdu->integer("VIETIM")); | 1126 | GTime tstop = com_time(hdu->integer("VIEDAY"), hdu->integer("VIETIM")); |
| 1125 | 1127 | ||
| 1126 | // Set Good Time Intervals | 1128 | // Set Good Time Intervals |
| 1127 | - m_gti = GGti(tstart, tstop); | 1129 | + if (tstop > tstart) { |
| 1130 | + m_gti = GGti(tstart, tstop); | ||
| 1131 | + } | ||
| 1128 | 1132 | ||
| 1129 | // Optionally read Phibar attributes | 1133 | // Optionally read Phibar attributes |
| 1130 | if (hdu->has_card("CDELT3") && | 1134 | if (hdu->has_card("CDELT3") && |
inst/com/src/GCOMEventBin.cpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMEventBin.cpp - COMPTEL event bin class * | 2 | * GCOMEventBin.cpp - COMPTEL event bin class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2016 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -34,6 +34,20 @@ | @@ -34,6 +34,20 @@ | ||
| 34 | #include "GTools.hpp" | 34 | #include "GTools.hpp" |
| 35 | 35 | ||
| 36 | /* __ Method name definitions ____________________________________________ */ | 36 | /* __ Method name definitions ____________________________________________ */ |
| 37 | +#define G_DIR_GET "GCOMEventBin::dir()" | ||
| 38 | +#define G_ENERGY_GET "GCOMEventBin::energy()" | ||
| 39 | +#define G_TIME_GET "GCOMEventBin::time()" | ||
| 40 | +#define G_COUNTS_GET "GCOMEventBin::counts()" | ||
| 41 | +#define G_SOLIDANGLE_GET "GCOMEventBin::solidangle()" | ||
| 42 | +#define G_EWIDTH_GET "GCOMEventBin::ewidth()" | ||
| 43 | +#define G_ONTIME_GET "GCOMEventBin::ontime()" | ||
| 44 | +#define G_DIR_SET "GCOMEventBin::dir(GCOMInstDir&)" | ||
| 45 | +#define G_ENERGY_SET "GCOMEventBin::energy(GEnergy&)" | ||
| 46 | +#define G_TIME_SET "GCOMEventBin::time(GTime&)" | ||
| 47 | +#define G_COUNTS_SET "GCOMEventBin::counts(double&)" | ||
| 48 | +#define G_SOLIDANGLE_SET "GCOMEventBin::solidangle(double&)" | ||
| 49 | +#define G_EWIDTH_SET "GCOMEventBin::ewidth(GEnergy&)" | ||
| 50 | +#define G_ONTIME_SET "GCOMEventBin::ontime(double&)" | ||
| 37 | 51 | ||
| 38 | /* __ Macros _____________________________________________________________ */ | 52 | /* __ Macros _____________________________________________________________ */ |
| 39 | 53 | ||
| @@ -190,6 +204,98 @@ double GCOMEventBin::size(void) const | @@ -190,6 +204,98 @@ double GCOMEventBin::size(void) const | ||
| 190 | 204 | ||
| 191 | 205 | ||
| 192 | /***********************************************************************//** | 206 | /***********************************************************************//** |
| 207 | + * @brief Return instrument direction of event bin | ||
| 208 | + * | ||
| 209 | + * @return Instrument direction of event bin | ||
| 210 | + * | ||
| 211 | + * @exception GException::invalid_value | ||
| 212 | + * Invalid instrument direction pointer. | ||
| 213 | + * | ||
| 214 | + * Returns reference to the instrument direction of the event bin. | ||
| 215 | + ***************************************************************************/ | ||
| 216 | +const GCOMInstDir& GCOMEventBin::dir(void) const | ||
| 217 | +{ | ||
| 218 | + // Throw an exception if instrument direction pointer is not valid | ||
| 219 | + if (m_dir == NULL) { | ||
| 220 | + std::string msg = "No valid instrument direction found in event bin"; | ||
| 221 | + throw GException::invalid_value(G_DIR_GET, msg); | ||
| 222 | + } | ||
| 223 | + | ||
| 224 | + // Return instrument direction | ||
| 225 | + return *m_dir; | ||
| 226 | +} | ||
| 227 | + | ||
| 228 | + | ||
| 229 | +/***********************************************************************//** | ||
| 230 | + * @brief Return energy of event bin | ||
| 231 | + * | ||
| 232 | + * @return Energy of event bin | ||
| 233 | + * | ||
| 234 | + * @exception GException::invalid_value | ||
| 235 | + * Invalid energy pointer. | ||
| 236 | + * | ||
| 237 | + * Returns reference to the energy of the event bin. | ||
| 238 | + ***************************************************************************/ | ||
| 239 | +const GEnergy& GCOMEventBin::energy(void) const | ||
| 240 | +{ | ||
| 241 | + // Throw an exception if energy pointer is not valid | ||
| 242 | + if (m_energy == NULL) { | ||
| 243 | + std::string msg = "No valid energy found in event bin"; | ||
| 244 | + throw GException::invalid_value(G_ENERGY_GET, msg); | ||
| 245 | + } | ||
| 246 | + | ||
| 247 | + // Return energy | ||
| 248 | + return *m_energy; | ||
| 249 | +} | ||
| 250 | + | ||
| 251 | + | ||
| 252 | +/***********************************************************************//** | ||
| 253 | + * @brief Return time of event bin | ||
| 254 | + * | ||
| 255 | + * @return Time of event bin | ||
| 256 | + * | ||
| 257 | + * @exception GException::invalid_value | ||
| 258 | + * Invalid time pointer. | ||
| 259 | + * | ||
| 260 | + * Returns reference to the time of the event bin. | ||
| 261 | + ***************************************************************************/ | ||
| 262 | +const GTime& GCOMEventBin::time(void) const | ||
| 263 | +{ | ||
| 264 | + // Throw an exception if time pointer is not valid | ||
| 265 | + if (m_energy == NULL) { | ||
| 266 | + std::string msg = "No valid time found in event bin"; | ||
| 267 | + throw GException::invalid_value(G_TIME_GET, msg); | ||
| 268 | + } | ||
| 269 | + | ||
| 270 | + // Return time | ||
| 271 | + return *m_time; | ||
| 272 | +} | ||
| 273 | + | ||
| 274 | + | ||
| 275 | +/***********************************************************************//** | ||
| 276 | + * @brief Return number of counts in event bin | ||
| 277 | + * | ||
| 278 | + * @return Number of counts in event bin | ||
| 279 | + * | ||
| 280 | + * @exception GCTAException::invalid_value | ||
| 281 | + * Invalid counts pointer. | ||
| 282 | + * | ||
| 283 | + * Returns reference to the number of counts in the event bin. | ||
| 284 | + ***************************************************************************/ | ||
| 285 | +double GCOMEventBin::counts(void) const | ||
| 286 | +{ | ||
| 287 | + // Throw an exception if counts pointer is not valid | ||
| 288 | + if (m_counts == NULL) { | ||
| 289 | + std::string msg = "No valid counts found in event bin"; | ||
| 290 | + throw GException::invalid_value(G_COUNTS_GET, msg); | ||
| 291 | + } | ||
| 292 | + | ||
| 293 | + // Return counts | ||
| 294 | + return *m_counts; | ||
| 295 | +} | ||
| 296 | + | ||
| 297 | + | ||
| 298 | +/***********************************************************************//** | ||
| 193 | * @brief Return error in number of counts | 299 | * @brief Return error in number of counts |
| 194 | * | 300 | * |
| 195 | * @return Error in number of counts in event bin. | 301 | * @return Error in number of counts in event bin. |
| @@ -213,6 +319,257 @@ double GCOMEventBin::error(void) const | @@ -213,6 +319,257 @@ double GCOMEventBin::error(void) const | ||
| 213 | 319 | ||
| 214 | 320 | ||
| 215 | /***********************************************************************//** | 321 | /***********************************************************************//** |
| 322 | + * @brief Return solid angle of event bin | ||
| 323 | + * | ||
| 324 | + * @return Solid angle of event bin | ||
| 325 | + * | ||
| 326 | + * @exception GException::invalid_value | ||
| 327 | + * Invalid solid angle pointer. | ||
| 328 | + * | ||
| 329 | + * Returns reference to the solid angle of the event bin. | ||
| 330 | + ***************************************************************************/ | ||
| 331 | +const double& GCOMEventBin::solidangle(void) const | ||
| 332 | +{ | ||
| 333 | + // Throw an exception if counts pointer is not valid | ||
| 334 | + if (m_solidangle == NULL) { | ||
| 335 | + std::string msg = "No valid solid angle found in event bin"; | ||
| 336 | + throw GException::invalid_value(G_SOLIDANGLE_GET, msg); | ||
| 337 | + } | ||
| 338 | + | ||
| 339 | + // Return solid angle | ||
| 340 | + return *m_solidangle; | ||
| 341 | +} | ||
| 342 | + | ||
| 343 | + | ||
| 344 | +/***********************************************************************//** | ||
| 345 | + * @brief Return energy width of event bin | ||
| 346 | + * | ||
| 347 | + * @return Energy width of event bin | ||
| 348 | + * | ||
| 349 | + * @exception GException::invalid_value | ||
| 350 | + * Invalid energy width pointer. | ||
| 351 | + * | ||
| 352 | + * Returns reference to the energy width of the event bin. | ||
| 353 | + ***************************************************************************/ | ||
| 354 | +const GEnergy& GCOMEventBin::ewidth(void) const | ||
| 355 | +{ | ||
| 356 | + // Throw an exception if energy width pointer is not valid | ||
| 357 | + if (m_ewidth == NULL) { | ||
| 358 | + std::string msg = "No valid energy width found in event bin"; | ||
| 359 | + throw GException::invalid_value(G_EWIDTH_GET, msg); | ||
| 360 | + } | ||
| 361 | + | ||
| 362 | + // Return energy width | ||
| 363 | + return *m_ewidth; | ||
| 364 | +} | ||
| 365 | + | ||
| 366 | + | ||
| 367 | +/***********************************************************************//** | ||
| 368 | + * @brief Return ontime of event bin | ||
| 369 | + * | ||
| 370 | + * @return Ontime of event bin | ||
| 371 | + * | ||
| 372 | + * @exception GException::invalid_value | ||
| 373 | + * Invalid ontime pointer. | ||
| 374 | + * | ||
| 375 | + * Returns reference to the ontime of the event bin. | ||
| 376 | + ***************************************************************************/ | ||
| 377 | +const double& GCOMEventBin::ontime(void) const | ||
| 378 | +{ | ||
| 379 | + // Throw an exception if energy width pointer is not valid | ||
| 380 | + if (m_ontime == NULL) { | ||
| 381 | + std::string msg = "No valid ontime found in event bin"; | ||
| 382 | + throw GException::invalid_value(G_ONTIME_GET, msg); | ||
| 383 | + } | ||
| 384 | + | ||
| 385 | + // Return ontime | ||
| 386 | + return *m_ontime; | ||
| 387 | +} | ||
| 388 | + | ||
| 389 | + | ||
| 390 | +/***********************************************************************//** | ||
| 391 | + * @brief Set instrument direction of event bin | ||
| 392 | + * | ||
| 393 | + * @param[in] dir Instrument direction of event bin | ||
| 394 | + * | ||
| 395 | + * @exception GException::invalid_value | ||
| 396 | + * No memory available to hold instrument direction. | ||
| 397 | + * | ||
| 398 | + * Sets the instrument direction of the event bin. | ||
| 399 | + ***************************************************************************/ | ||
| 400 | +void GCOMEventBin::dir(const GCOMInstDir& dir) | ||
| 401 | +{ | ||
| 402 | + // Throw an exception if no memory has been allocated | ||
| 403 | + if (m_dir == NULL) { | ||
| 404 | + std::string msg = "No memory available to hold instrument direction."; | ||
| 405 | + throw GException::invalid_value(G_DIR_SET, msg); | ||
| 406 | + } | ||
| 407 | + | ||
| 408 | + // Set instrument direction | ||
| 409 | + *m_dir = dir; | ||
| 410 | + | ||
| 411 | + // Return | ||
| 412 | + return; | ||
| 413 | +} | ||
| 414 | + | ||
| 415 | + | ||
| 416 | +/***********************************************************************//** | ||
| 417 | + * @brief Set energy of event bin | ||
| 418 | + * | ||
| 419 | + * @param[in] energy Energy of event bin | ||
| 420 | + * | ||
| 421 | + * @exception GException::invalid_value | ||
| 422 | + * No memory available to hold energy. | ||
| 423 | + * | ||
| 424 | + * Sets the energy of the event bin. | ||
| 425 | + ***************************************************************************/ | ||
| 426 | +void GCOMEventBin::energy(const GEnergy& energy) | ||
| 427 | +{ | ||
| 428 | + // Throw an exception if no memory has been allocated | ||
| 429 | + if (m_energy == NULL) { | ||
| 430 | + std::string msg = "No memory available to hold energy."; | ||
| 431 | + throw GException::invalid_value(G_ENERGY_SET, msg); | ||
| 432 | + } | ||
| 433 | + | ||
| 434 | + // Set energy | ||
| 435 | + *m_energy = energy; | ||
| 436 | + | ||
| 437 | + // Return | ||
| 438 | + return; | ||
| 439 | +} | ||
| 440 | + | ||
| 441 | + | ||
| 442 | +/***********************************************************************//** | ||
| 443 | + * @brief Set time of event bin | ||
| 444 | + * | ||
| 445 | + * @param[in] time Time of event bin | ||
| 446 | + * | ||
| 447 | + * @exception GException::invalid_value | ||
| 448 | + * No memory available to hold instrument direction. | ||
| 449 | + * | ||
| 450 | + * Sets the time of the event bin. | ||
| 451 | + ***************************************************************************/ | ||
| 452 | +void GCOMEventBin::time(const GTime& time) | ||
| 453 | +{ | ||
| 454 | + // Throw an exception if no memory has been allocated | ||
| 455 | + if (m_time == NULL) { | ||
| 456 | + std::string msg = "No memory available to hold time."; | ||
| 457 | + throw GException::invalid_value(G_TIME_SET, msg); | ||
| 458 | + } | ||
| 459 | + | ||
| 460 | + // Set time | ||
| 461 | + *m_time = time; | ||
| 462 | + | ||
| 463 | + // Return | ||
| 464 | + return; | ||
| 465 | +} | ||
| 466 | + | ||
| 467 | + | ||
| 468 | +/***********************************************************************//** | ||
| 469 | + * @brief Set number of counts in event bin | ||
| 470 | + * | ||
| 471 | + * @param[in] counts Number of counts. | ||
| 472 | + * | ||
| 473 | + * @exception GException::invalid_value | ||
| 474 | + * No memory available to hold counts. | ||
| 475 | + * | ||
| 476 | + * Set the number of counts in the event bin. | ||
| 477 | + ***************************************************************************/ | ||
| 478 | +void GCOMEventBin::counts(const double& counts) | ||
| 479 | +{ | ||
| 480 | + // Throw an exception if counts pointer is not valid | ||
| 481 | + if (m_counts == NULL) { | ||
| 482 | + std::string msg = "No memory available to hold counts."; | ||
| 483 | + throw GException::invalid_value(G_COUNTS_SET, msg); | ||
| 484 | + } | ||
| 485 | + | ||
| 486 | + // Set number of counts in event bin | ||
| 487 | + *m_counts = counts; | ||
| 488 | + | ||
| 489 | + // Return | ||
| 490 | + return; | ||
| 491 | +} | ||
| 492 | + | ||
| 493 | + | ||
| 494 | +/***********************************************************************//** | ||
| 495 | + * @brief Set solid angle of event bin | ||
| 496 | + * | ||
| 497 | + * @param[in] solidangle Solid angle of event bin | ||
| 498 | + * | ||
| 499 | + * @exception GException::invalid_value | ||
| 500 | + * No memory available to hold solid angle. | ||
| 501 | + * | ||
| 502 | + * Sets the solid angle of the event bin. | ||
| 503 | + ***************************************************************************/ | ||
| 504 | +void GCOMEventBin::solidangle(const double& solidangle) | ||
| 505 | +{ | ||
| 506 | + // Throw an exception if no memory has been allocated | ||
| 507 | + if (m_solidangle == NULL) { | ||
| 508 | + std::string msg = "No memory available to hold solid angle."; | ||
| 509 | + throw GException::invalid_value(G_SOLIDANGLE_SET, msg); | ||
| 510 | + } | ||
| 511 | + | ||
| 512 | + // Set solid angle | ||
| 513 | + *m_solidangle = solidangle; | ||
| 514 | + | ||
| 515 | + // Return | ||
| 516 | + return; | ||
| 517 | +} | ||
| 518 | + | ||
| 519 | + | ||
| 520 | +/***********************************************************************//** | ||
| 521 | + * @brief Set energy width of event bin | ||
| 522 | + * | ||
| 523 | + * @param[in] ewidth Energy width of event bin | ||
| 524 | + * | ||
| 525 | + * @exception GException::invalid_value | ||
| 526 | + * No memory available to hold energy width. | ||
| 527 | + * | ||
| 528 | + * Sets the energy width of the event bin. | ||
| 529 | + ***************************************************************************/ | ||
| 530 | +void GCOMEventBin::ewidth(const GEnergy& ewidth) | ||
| 531 | +{ | ||
| 532 | + // Throw an exception if no memory has been allocated | ||
| 533 | + if (m_ewidth == NULL) { | ||
| 534 | + std::string msg = "No memory available to hold energy width."; | ||
| 535 | + throw GException::invalid_value(G_EWIDTH_SET, msg); | ||
| 536 | + } | ||
| 537 | + | ||
| 538 | + // Set energy width | ||
| 539 | + *m_ewidth = ewidth; | ||
| 540 | + | ||
| 541 | + // Return | ||
| 542 | + return; | ||
| 543 | +} | ||
| 544 | + | ||
| 545 | + | ||
| 546 | +/***********************************************************************//** | ||
| 547 | + * @brief Set ontime of event bin | ||
| 548 | + * | ||
| 549 | + * @param[in] ontime Ontime of event bin (sec). | ||
| 550 | + * | ||
| 551 | + * @exception GException::invalid_value | ||
| 552 | + * No memory available to hold ontime. | ||
| 553 | + * | ||
| 554 | + * Sets the ontime of the event bin. | ||
| 555 | + ***************************************************************************/ | ||
| 556 | +void GCOMEventBin::ontime(const double& ontime) | ||
| 557 | +{ | ||
| 558 | + // Throw an exception if no memory has been allocated | ||
| 559 | + if (m_ontime == NULL) { | ||
| 560 | + std::string msg = "No memory available to hold ontime."; | ||
| 561 | + throw GException::invalid_value(G_ONTIME_SET, msg); | ||
| 562 | + } | ||
| 563 | + | ||
| 564 | + // Set solid angle | ||
| 565 | + *m_ontime = ontime; | ||
| 566 | + | ||
| 567 | + // Return | ||
| 568 | + return; | ||
| 569 | +} | ||
| 570 | + | ||
| 571 | + | ||
| 572 | +/***********************************************************************//** | ||
| 216 | * @brief Print event information | 573 | * @brief Print event information |
| 217 | * | 574 | * |
| 218 | * @param[in] chatter Chattiness (defaults to NORMAL). | 575 | * @param[in] chatter Chattiness (defaults to NORMAL). |
inst/com/src/GCOMEventList.cpp
| @@ -333,7 +333,7 @@ void GCOMEventList::read(const GFits& file) | @@ -333,7 +333,7 @@ void GCOMEventList::read(const GFits& file) | ||
| 333 | * | 333 | * |
| 334 | * @param[in] file FITS file. | 334 | * @param[in] file FITS file. |
| 335 | * | 335 | * |
| 336 | - * Write the LCOMPTELAT event list into FITS file. | 336 | + * Write the COMPTEL event list into FITS file. |
| 337 | * | 337 | * |
| 338 | * @todo Implement method. | 338 | * @todo Implement method. |
| 339 | ***************************************************************************/ | 339 | ***************************************************************************/ |
inst/com/src/GCOMModelDRBFitting.cpp
| @@ -77,7 +77,7 @@ GCOMModelDRBFitting::GCOMModelDRBFitting(void) : GModelData() | @@ -77,7 +77,7 @@ GCOMModelDRBFitting::GCOMModelDRBFitting(void) : GModelData() | ||
| 77 | 77 | ||
| 78 | 78 | ||
| 79 | /***********************************************************************//** | 79 | /***********************************************************************//** |
| 80 | - * @brief Constructor | 80 | + * @brief XML constructor |
| 81 | * | 81 | * |
| 82 | * @param[in] xml XML element. | 82 | * @param[in] xml XML element. |
| 83 | * | 83 | * |
inst/com/src/GCOMObservation.cpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMObservation.cpp - COMPTEL Observation class * | 2 | * GCOMObservation.cpp - COMPTEL Observation class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -85,6 +85,27 @@ GCOMObservation::GCOMObservation(void) : GObservation() | @@ -85,6 +85,27 @@ GCOMObservation::GCOMObservation(void) : GObservation() | ||
| 85 | 85 | ||
| 86 | 86 | ||
| 87 | /***********************************************************************//** | 87 | /***********************************************************************//** |
| 88 | + * @brief XML constructor | ||
| 89 | + * | ||
| 90 | + * @param[in] xml XML element. | ||
| 91 | + * | ||
| 92 | + * Constructs a COMPTEL observation from the information that is found in an | ||
| 93 | + * XML element. | ||
| 94 | + ***************************************************************************/ | ||
| 95 | +GCOMObservation::GCOMObservation(const GXmlElement& xml) : GObservation() | ||
| 96 | +{ | ||
| 97 | + // Initialise members | ||
| 98 | + init_members(); | ||
| 99 | + | ||
| 100 | + // Read XML | ||
| 101 | + read(xml); | ||
| 102 | + | ||
| 103 | + // Return | ||
| 104 | + return; | ||
| 105 | +} | ||
| 106 | + | ||
| 107 | + | ||
| 108 | +/***********************************************************************//** | ||
| 88 | * @brief Binned observation constructor | 109 | * @brief Binned observation constructor |
| 89 | * | 110 | * |
| 90 | * @param[in] drename Event cube name. | 111 | * @param[in] drename Event cube name. |
| @@ -487,7 +508,7 @@ void GCOMObservation::write(GXmlElement& xml) const | @@ -487,7 +508,7 @@ void GCOMObservation::write(GXmlElement& xml) const | ||
| 487 | par->attribute("file", gammalib::xml_file_reduce(xml, m_drxname)); | 508 | par->attribute("file", gammalib::xml_file_reduce(xml, m_drxname)); |
| 488 | 509 | ||
| 489 | // Set IAQ parameter | 510 | // Set IAQ parameter |
| 490 | - par = gammalib::xml_need_par(G_WRITE, xml, "DRX"); | 511 | + par = gammalib::xml_need_par(G_WRITE, xml, "IAQ"); |
| 491 | par->attribute("value", m_response.rspname()); | 512 | par->attribute("value", m_response.rspname()); |
| 492 | 513 | ||
| 493 | } // endif: observation was binned | 514 | } // endif: observation was binned |
inst/com/src/GCOMResponse.cpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMResponse.cpp - COMPTEL Response class * | 2 | * GCOMResponse.cpp - COMPTEL Response class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2012-2017 by Juergen Knoedlseder * | 4 | + * copyright (C) 2012-2018 by Juergen Knoedlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -41,6 +41,7 @@ | @@ -41,6 +41,7 @@ | ||
| 41 | #include "GTime.hpp" | 41 | #include "GTime.hpp" |
| 42 | #include "GObservation.hpp" | 42 | #include "GObservation.hpp" |
| 43 | #include "GFitsImage.hpp" | 43 | #include "GFitsImage.hpp" |
| 44 | +#include "GFitsImageFloat.hpp" | ||
| 44 | #include "GModelSky.hpp" | 45 | #include "GModelSky.hpp" |
| 45 | #include "GModelSpatialPointSource.hpp" | 46 | #include "GModelSpatialPointSource.hpp" |
| 46 | #include "GCOMResponse.hpp" | 47 | #include "GCOMResponse.hpp" |
| @@ -592,47 +593,107 @@ void GCOMResponse::load(const std::string& rspname) | @@ -592,47 +593,107 @@ void GCOMResponse::load(const std::string& rspname) | ||
| 592 | ***************************************************************************/ | 593 | ***************************************************************************/ |
| 593 | void GCOMResponse::read(const GFitsImage& image) | 594 | void GCOMResponse::read(const GFitsImage& image) |
| 594 | { | 595 | { |
| 595 | - // Store IAQ dimensions | ||
| 596 | - m_phigeo_bins = image.naxes(0); | ||
| 597 | - m_phibar_bins = image.naxes(1); | ||
| 598 | - | ||
| 599 | - // Store IAQ axes definitions | ||
| 600 | - m_phigeo_ref_value = image.real("CRVAL1"); | ||
| 601 | - m_phigeo_ref_pixel = image.real("CRPIX1"); | ||
| 602 | - m_phigeo_bin_size = image.real("CDELT1"); | ||
| 603 | - m_phibar_ref_value = image.real("CRVAL2"); | ||
| 604 | - m_phibar_ref_pixel = image.real("CRPIX2"); | ||
| 605 | - m_phibar_bin_size = image.real("CDELT2"); | ||
| 606 | - | ||
| 607 | - // Get axes minima (values of first bin) | ||
| 608 | - m_phigeo_min = m_phigeo_ref_value + (1.0-m_phigeo_ref_pixel) * m_phigeo_bin_size; | ||
| 609 | - m_phibar_min = m_phibar_ref_value + (1.0-m_phibar_ref_pixel) * m_phibar_bin_size; | ||
| 610 | - | ||
| 611 | - // Compute IAQ size. Continue only if size is positive | ||
| 612 | - int size = m_phigeo_bins * m_phibar_bins; | ||
| 613 | - if (size > 0) { | ||
| 614 | - | ||
| 615 | - // Allocate memory for IAQ | ||
| 616 | - m_iaq.assign(size, 0.0); | ||
| 617 | - | ||
| 618 | - // Copy over IAQ values | ||
| 619 | - for (int i = 0; i < size; ++i) { | ||
| 620 | - m_iaq[i] = image.pixel(i); | 596 | + // Continue only if there are two image axis |
| 597 | + if (image.naxis() == 2) { | ||
| 598 | + | ||
| 599 | + // Store IAQ dimensions | ||
| 600 | + m_phigeo_bins = image.naxes(0); | ||
| 601 | + m_phibar_bins = image.naxes(1); | ||
| 602 | + | ||
| 603 | + // Store IAQ axes definitions | ||
| 604 | + m_phigeo_ref_value = image.real("CRVAL1"); | ||
| 605 | + m_phigeo_ref_pixel = image.real("CRPIX1"); | ||
| 606 | + m_phigeo_bin_size = image.real("CDELT1"); | ||
| 607 | + m_phibar_ref_value = image.real("CRVAL2"); | ||
| 608 | + m_phibar_ref_pixel = image.real("CRPIX2"); | ||
| 609 | + m_phibar_bin_size = image.real("CDELT2"); | ||
| 610 | + | ||
| 611 | + // Get axes minima (values of first bin) | ||
| 612 | + m_phigeo_min = m_phigeo_ref_value + (1.0-m_phigeo_ref_pixel) * m_phigeo_bin_size; | ||
| 613 | + m_phibar_min = m_phibar_ref_value + (1.0-m_phibar_ref_pixel) * m_phibar_bin_size; | ||
| 614 | + | ||
| 615 | + // Compute IAQ size. Continue only if size is positive | ||
| 616 | + int size = m_phigeo_bins * m_phibar_bins; | ||
| 617 | + if (size > 0) { | ||
| 618 | + | ||
| 619 | + // Allocate memory for IAQ | ||
| 620 | + m_iaq.assign(size, 0.0); | ||
| 621 | + | ||
| 622 | + // Copy over IAQ values | ||
| 623 | + for (int i = 0; i < size; ++i) { | ||
| 624 | + m_iaq[i] = image.pixel(i); | ||
| 625 | + } | ||
| 626 | + | ||
| 627 | + } // endif: size was positive | ||
| 628 | + | ||
| 629 | + // Convert IAQ matrix from probability per Phigeo bin into a | ||
| 630 | + // probability per steradian | ||
| 631 | + double omega0 = gammalib::fourpi * | ||
| 632 | + std::sin(0.5 * m_phigeo_bin_size * gammalib::deg2rad); | ||
| 633 | + for (int iphigeo = 0; iphigeo < m_phigeo_bins; ++iphigeo) { | ||
| 634 | + double phigeo = iphigeo * m_phigeo_bin_size + m_phigeo_min; | ||
| 635 | + double omega = omega0 * std::sin(phigeo * gammalib::deg2rad); | ||
| 636 | + for (int iphibar = 0; iphibar < m_phibar_bins; ++iphibar) { | ||
| 637 | + m_iaq[iphigeo+iphibar*m_phigeo_bins] /= omega; | ||
| 638 | + } | ||
| 621 | } | 639 | } |
| 622 | 640 | ||
| 623 | - } // endif: size was positive | ||
| 624 | - | ||
| 625 | - // Convert IAQ matrix from probability per Phigeo bin into a | ||
| 626 | - // probability per steradian | ||
| 627 | - double omega0 = gammalib::fourpi * | ||
| 628 | - std::sin(0.5 * m_phigeo_bin_size * gammalib::deg2rad); | ||
| 629 | - for (int iphigeo = 0; iphigeo < m_phigeo_bins; ++iphigeo) { | ||
| 630 | - double phigeo = iphigeo * m_phigeo_bin_size + m_phigeo_min; | ||
| 631 | - double omega = omega0 * std::sin(phigeo * gammalib::deg2rad); | ||
| 632 | - for (int iphibar = 0; iphibar < m_phibar_bins; ++iphibar) { | ||
| 633 | - m_iaq[iphigeo+iphibar*m_phigeo_bins] /= omega; | 641 | + } // endif: image had two axes |
| 642 | + | ||
| 643 | + // Return | ||
| 644 | + return; | ||
| 645 | +} | ||
| 646 | + | ||
| 647 | + | ||
| 648 | +/***********************************************************************//** | ||
| 649 | + * @brief Write COMPTEL response into FITS image. | ||
| 650 | + * | ||
| 651 | + * @param[in] image FITS image. | ||
| 652 | + * | ||
| 653 | + * Writes the COMPTEL response into an IAQ FITS file. | ||
| 654 | + ***************************************************************************/ | ||
| 655 | +void GCOMResponse::write(GFitsImageFloat& image) const | ||
| 656 | +{ | ||
| 657 | + // Continue only if response is not empty | ||
| 658 | + if (m_phigeo_bins > 0 && m_phibar_bins > 0) { | ||
| 659 | + | ||
| 660 | + // Initialise image | ||
| 661 | + image = GFitsImageFloat(m_phigeo_bins, m_phibar_bins); | ||
| 662 | + | ||
| 663 | + // Convert IAQ matrix from probability per steradian into | ||
| 664 | + //probability per Phigeo bin | ||
| 665 | + double omega0 = gammalib::fourpi * | ||
| 666 | + std::sin(0.5 * m_phigeo_bin_size * gammalib::deg2rad); | ||
| 667 | + for (int iphigeo = 0; iphigeo < m_phigeo_bins; ++iphigeo) { | ||
| 668 | + double phigeo = iphigeo * m_phigeo_bin_size + m_phigeo_min; | ||
| 669 | + double omega = omega0 * std::sin(phigeo * gammalib::deg2rad); | ||
| 670 | + for (int iphibar = 0; iphibar < m_phibar_bins; ++iphibar) { | ||
| 671 | + int i = iphigeo + iphibar*m_phigeo_bins; | ||
| 672 | + image(iphigeo, iphibar) = m_iaq[i] * omega; | ||
| 673 | + } | ||
| 634 | } | 674 | } |
| 635 | - } | 675 | + |
| 676 | + // Set header keywords | ||
| 677 | + image.card("CTYPE1", "Phigeo", "Geometrical scatter angle"); | ||
| 678 | + image.card("CRVAL1", m_phigeo_ref_value, | ||
| 679 | + "[deg] Geometrical scatter angle for reference bin"); | ||
| 680 | + image.card("CDELT1", m_phigeo_bin_size, | ||
| 681 | + "[deg] Geometrical scatter angle bin size"); | ||
| 682 | + image.card("CRPIX1", m_phigeo_ref_pixel, | ||
| 683 | + "Reference bin of geometrical scatter angle"); | ||
| 684 | + image.card("CTYPE2", "Phibar", "Compton scatter angle"); | ||
| 685 | + image.card("CRVAL2", m_phibar_ref_value, | ||
| 686 | + "[deg] Compton scatter angle for reference bin"); | ||
| 687 | + image.card("CDELT2", m_phibar_bin_size, "[deg] Compton scatter angle bin size"); | ||
| 688 | + image.card("CRPIX2", m_phibar_ref_pixel, | ||
| 689 | + "Reference bin of Compton scatter angle"); | ||
| 690 | + image.card("BUNIT", "Probability per bin", "Unit of bins"); | ||
| 691 | + image.card("TELESCOP", "GRO", "Name of telescope"); | ||
| 692 | + image.card("INSTRUME", "COMPTEL", "Name of instrument"); | ||
| 693 | + image.card("ORIGIN", "GammaLib", "Origin of FITS file"); | ||
| 694 | + image.card("OBSERVER", "Unknown", "Observer that created FITS file"); | ||
| 695 | + | ||
| 696 | + } // endif: response was not empty | ||
| 636 | 697 | ||
| 637 | // Return | 698 | // Return |
| 638 | return; | 699 | return; |
inst/com/src/GCOMTim.cpp
| 1 | /*************************************************************************** | 1 | /*************************************************************************** |
| 2 | * GCOMTim.cpp - COMPTEL Good Time Intervals class * | 2 | * GCOMTim.cpp - COMPTEL Good Time Intervals class * |
| 3 | * ----------------------------------------------------------------------- * | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2017 by Juergen Knodlseder * | 4 | + * copyright (C) 2017-2018 by Juergen Knodlseder * |
| 5 | * ----------------------------------------------------------------------- * | 5 | * ----------------------------------------------------------------------- * |
| 6 | * * | 6 | * * |
| 7 | * This program is free software: you can redistribute it and/or modify * | 7 | * This program is free software: you can redistribute it and/or modify * |
| @@ -63,6 +63,24 @@ GCOMTim::GCOMTim(void) | @@ -63,6 +63,24 @@ GCOMTim::GCOMTim(void) | ||
| 63 | 63 | ||
| 64 | 64 | ||
| 65 | /***********************************************************************//** | 65 | /***********************************************************************//** |
| 66 | + * @brief Good Time Interval constructor | ||
| 67 | + * | ||
| 68 | + * @param[in] gti Good Time Intervals. | ||
| 69 | + ***************************************************************************/ | ||
| 70 | +GCOMTim::GCOMTim(const GGti& gti) | ||
| 71 | +{ | ||
| 72 | + // Initialise class members | ||
| 73 | + init_members(); | ||
| 74 | + | ||
| 75 | + // Set GTIs | ||
| 76 | + m_gti = gti; | ||
| 77 | + | ||
| 78 | + // Return | ||
| 79 | + return; | ||
| 80 | +} | ||
| 81 | + | ||
| 82 | + | ||
| 83 | +/***********************************************************************//** | ||
| 66 | * @brief Copy constructor | 84 | * @brief Copy constructor |
| 67 | * | 85 | * |
| 68 | * @param[in] tim COMPTEL Good Time Intervals. | 86 | * @param[in] tim COMPTEL Good Time Intervals. |
inst/com/test/caldb/data/cgro/comptel/bcf/m10371_sda.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/m10564_sdb.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/m16845_iaq.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/module_status.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/plaw2_0.75-1MeV_iaq.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/plaw2_1-3MeV_iaq.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/plaw2_10-30MeV_iaq.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/plaw2_3-10MeV_iaq.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/r00004_ict.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/u09517_iaq.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/u47512_iaq.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/u47569_iaq.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/u47741_iaq.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/bcf/u48091_iaq.fits.gz
0 → 100644
No preview for this file type
inst/com/test/caldb/data/cgro/comptel/caldb.indx
0 → 100644
No preview for this file type
inst/com/test/test_COM.py
| 1 | # ========================================================================== | 1 | # ========================================================================== |
| 2 | # This module performs unit tests for the GammaLib COMPTEL module. | 2 | # This module performs unit tests for the GammaLib COMPTEL module. |
| 3 | # | 3 | # |
| 4 | -# Copyright (C) 2012-2015 Juergen Knoedlseder | 4 | +# Copyright (C) 2012-2018 Juergen Knoedlseder |
| 5 | # | 5 | # |
| 6 | # This program is free software: you can redistribute it and/or modify | 6 | # This program is free software: you can redistribute it and/or modify |
| 7 | # it under the terms of the GNU General Public License as published by | 7 | # it under the terms of the GNU General Public License as published by |
| @@ -17,7 +17,9 @@ | @@ -17,7 +17,9 @@ | ||
| 17 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | 17 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 18 | # | 18 | # |
| 19 | # ========================================================================== | 19 | # ========================================================================== |
| 20 | +import os | ||
| 20 | import gammalib | 21 | import gammalib |
| 22 | +import test_support | ||
| 21 | 23 | ||
| 22 | 24 | ||
| 23 | # ====================================== # | 25 | # ====================================== # |
| @@ -25,12 +27,12 @@ import gammalib | @@ -25,12 +27,12 @@ import gammalib | ||
| 25 | # ====================================== # | 27 | # ====================================== # |
| 26 | class Test(gammalib.GPythonTestSuite): | 28 | class Test(gammalib.GPythonTestSuite): |
| 27 | """ | 29 | """ |
| 28 | - Test class for GammaLib COMPTEL module. | 30 | + Test class for GammaLib COMPTEL module |
| 29 | """ | 31 | """ |
| 30 | # Constructor | 32 | # Constructor |
| 31 | def __init__(self): | 33 | def __init__(self): |
| 32 | """ | 34 | """ |
| 33 | - Constructor. | 35 | + Constructor |
| 34 | """ | 36 | """ |
| 35 | # Call base class constructor | 37 | # Call base class constructor |
| 36 | gammalib.GPythonTestSuite.__init__(self) | 38 | gammalib.GPythonTestSuite.__init__(self) |
| @@ -38,24 +40,127 @@ class Test(gammalib.GPythonTestSuite): | @@ -38,24 +40,127 @@ class Test(gammalib.GPythonTestSuite): | ||
| 38 | # Return | 40 | # Return |
| 39 | return | 41 | return |
| 40 | 42 | ||
| 41 | - # Set test functions | ||
| 42 | - def set(self): | 43 | + # Test class pickeling |
| 44 | + def _test_pickeling(self): | ||
| 43 | """ | 45 | """ |
| 44 | - Set all test functions. | 46 | + Test class pickeling |
| 45 | """ | 47 | """ |
| 46 | - # Set test name | ||
| 47 | - self.name("COMPTEL") | 48 | + # Set CALDB |
| 49 | + os.environ['CALDB'] = os.environ['TEST_COM_DATA']+'/../caldb' | ||
| 48 | 50 | ||
| 49 | - # Append tests | ||
| 50 | - self.append(self.test, "COMPTEL dummy test") | 51 | + # Perform pickeling tests of empty classes |
| 52 | + test_support._pickeling(self, gammalib.GCOMD1Response()) | ||
| 53 | + test_support._pickeling(self, gammalib.GCOMD2Response()) | ||
| 54 | + test_support._pickeling(self, gammalib.GCOMDri()) | ||
| 55 | + test_support._pickeling(self, gammalib.GCOMEventAtom()) | ||
| 56 | + test_support._pickeling(self, gammalib.GCOMEventBin()) | ||
| 57 | + test_support._pickeling(self, gammalib.GCOMEventCube()) | ||
| 58 | + test_support._pickeling(self, gammalib.GCOMEventList()) | ||
| 59 | + #test_support._pickeling(self, gammalib.GCOMIaq()) | ||
| 60 | + #test_support._pickeling(self, gammalib.GCOMInstChars()) | ||
| 61 | + test_support._pickeling(self, gammalib.GCOMInstDir()) | ||
| 62 | + test_support._pickeling(self, gammalib.GCOMModelDRBFitting()) | ||
| 63 | + test_support._pickeling(self, gammalib.GCOMOad()) | ||
| 64 | + test_support._pickeling(self, gammalib.GCOMOads()) | ||
| 65 | + test_support._pickeling(self, gammalib.GCOMObservation()) | ||
| 66 | + test_support._pickeling(self, gammalib.GCOMResponse()) | ||
| 67 | + test_support._pickeling(self, gammalib.GCOMRoi()) | ||
| 68 | + #test_support._pickeling(self, gammalib.GCOMSelection()) | ||
| 69 | + #test_support._pickeling(self, gammalib.GCOMStatus()) | ||
| 70 | + test_support._pickeling(self, gammalib.GCOMTim()) | ||
| 71 | + | ||
| 72 | + # Setup test | ||
| 73 | + caldb = gammalib.GCaldb('cgro','comptel') | ||
| 74 | + dir = gammalib.GSkyDir() | ||
| 75 | + instdir = gammalib.GCOMInstDir(dir, 10.0) | ||
| 76 | + energy = gammalib.GEnergy(1.0,'MeV') | ||
| 77 | + time = gammalib.GTime(1.0,'sec') | ||
| 78 | + map = gammalib.GSkyMap('CAR','GAL',0.0,0.0,1.0,1.0,10,10,10) | ||
| 79 | + dri = gammalib.GCOMDri(map, 0.0, 2.0, 10) | ||
| 80 | + atom = gammalib.GCOMEventAtom() | ||
| 81 | + ebds = gammalib.GEbounds(1,gammalib.GEnergy(0.75,'MeV'),gammalib.GEnergy(30.0,'MeV')) | ||
| 82 | + gti = gammalib.GGti(gammalib.GTime(1.0,'secs'),gammalib.GTime(3.0,'secs')) | ||
| 83 | + dre = gammalib.GCOMDri(map, 0.0, 2.0, 10) | ||
| 84 | + obs = gammalib.GObservations(os.environ['TEST_COM_DATA']+'/obs.xml') | ||
| 85 | + model = gammalib.GModels(os.environ['TEST_COM_DATA']+'/crab.xml') | ||
| 86 | + dre.ebounds(ebds) | ||
| 87 | + dre.gti(gti) | ||
| 88 | + atom.dir(instdir) | ||
| 89 | + atom.energy(energy) | ||
| 90 | + atom.time(time) | ||
| 91 | + atom.e1(100.0) | ||
| 92 | + atom.e2(200.0) | ||
| 93 | + atom.phibar(11.1) | ||
| 94 | + atom.theta(22.2) | ||
| 95 | + atom.phi(33.3) | ||
| 96 | + atom.eha(44.4) | ||
| 97 | + atom.psd(55.5) | ||
| 98 | + atom.tof(66.6) | ||
| 99 | + atom.modcom(1) | ||
| 100 | + atom.reflag(2) | ||
| 101 | + atom.veto(3) | ||
| 102 | + list = gammalib.GCOMEventList() | ||
| 103 | + list.append(atom) | ||
| 104 | + bin = gammalib.GCOMEventBin() | ||
| 105 | + bin.dir(instdir) | ||
| 106 | + bin.energy(energy) | ||
| 107 | + bin.time(time) | ||
| 108 | + bin.counts(11.0) | ||
| 109 | + bin.solidangle(11.0) | ||
| 110 | + bin.ewidth(energy) | ||
| 111 | + bin.ontime(111.0) | ||
| 112 | + oad = gammalib.GCOMOad() | ||
| 113 | + oad.tstart(gammalib.GTime(1.0,'secs')) | ||
| 114 | + oad.tstop(gammalib.GTime(3.0,'secs')) | ||
| 115 | + oad.zaxis(dir) | ||
| 116 | + oad.xaxis(dir) | ||
| 117 | + oad.tjd(1000) | ||
| 118 | + oad.tics(100) | ||
| 119 | + oad.gcaz(10.0) | ||
| 120 | + oad.gcel(20.0) | ||
| 121 | + oad.georad(30.0) | ||
| 122 | + oads = gammalib.GCOMOads() | ||
| 123 | + oads.append(oad) | ||
| 124 | + | ||
| 125 | + # Take provision for rounding errors | ||
| 126 | + fits = gammalib.GFits() | ||
| 127 | + dre.write(fits) | ||
| 128 | + dre.read(fits[0]) | ||
| 129 | + | ||
| 130 | + # Perform pickeling tests of filled classes | ||
| 131 | + test_support._pickeling(self, gammalib.GCOMD1Response(caldb,'DEFAULT')) | ||
| 132 | + test_support._pickeling(self, gammalib.GCOMD2Response(caldb,'DEFAULT')) | ||
| 133 | + test_support._pickeling(self, gammalib.GCOMDri(dri)) | ||
| 134 | + test_support._pickeling(self, gammalib.GCOMEventAtom(atom)) | ||
| 135 | + test_support._pickeling(self, gammalib.GCOMEventBin(bin)) | ||
| 136 | + test_support._pickeling(self, gammalib.GCOMEventCube(dre)) | ||
| 137 | + test_support._pickeling(self, gammalib.GCOMEventList(list)) | ||
| 138 | + #test_support._pickeling(self, gammalib.GCOMIaq()) | ||
| 139 | + #test_support._pickeling(self, gammalib.GCOMInstChars(caldb,'DEFAULT')) | ||
| 140 | + test_support._pickeling(self, gammalib.GCOMInstDir(instdir)) | ||
| 141 | + test_support._pickeling(self, gammalib.GCOMModelDRBFitting(model['Background'])) | ||
| 142 | + test_support._pickeling(self, gammalib.GCOMOad(oad)) | ||
| 143 | + test_support._pickeling(self, gammalib.GCOMOads(oads)) | ||
| 144 | + test_support._pickeling(self, gammalib.GCOMObservation(obs[0])) | ||
| 145 | + test_support._pickeling(self, gammalib.GCOMResponse(caldb, 'UNH(1.0-3.0)MeV')) | ||
| 146 | + test_support._pickeling(self, gammalib.GCOMRoi(instdir, 10.0, 1.0, 5.0)) | ||
| 147 | + #test_support._pickeling(self, gammalib.GCOMSelection()) | ||
| 148 | + #test_support._pickeling(self, gammalib.GCOMStatus()) | ||
| 149 | + test_support._pickeling(self, gammalib.GCOMTim(gti)) | ||
| 51 | 150 | ||
| 52 | # Return | 151 | # Return |
| 53 | return | 152 | return |
| 54 | 153 | ||
| 55 | - # Test function | ||
| 56 | - def test(self): | 154 | + # Set test functions |
| 155 | + def set(self): | ||
| 57 | """ | 156 | """ |
| 58 | - Test function. | 157 | + Set all test functions |
| 59 | """ | 158 | """ |
| 159 | + # Set test name | ||
| 160 | + self.name('COMPTEL') | ||
| 161 | + | ||
| 162 | + # Append tests | ||
| 163 | + self.append(self._test_pickeling, 'Test COMPTEL class pickeling') | ||
| 164 | + | ||
| 60 | # Return | 165 | # Return |
| 61 | return | 166 | return |
inst/cta/src/GCTAEventBin.cpp
| @@ -277,7 +277,7 @@ const GTime& GCTAEventBin::time(void) const | @@ -277,7 +277,7 @@ const GTime& GCTAEventBin::time(void) const | ||
| 277 | * | 277 | * |
| 278 | * @return Number of counts in event bin | 278 | * @return Number of counts in event bin |
| 279 | * | 279 | * |
| 280 | - * @exception GCTAException::no_member | 280 | + * @exception GCTAException::invalid_value |
| 281 | * Invalid counts pointer. | 281 | * Invalid counts pointer. |
| 282 | * | 282 | * |
| 283 | * Returns reference to the number of counts in the event bin. | 283 | * Returns reference to the number of counts in the event bin. |
pyext/Makefile.am
| @@ -165,6 +165,25 @@ if WITH_INST_CTA | @@ -165,6 +165,25 @@ if WITH_INST_CTA | ||
| 165 | testdc1cta_DATA = $(testdc1cta) | 165 | testdc1cta_DATA = $(testdc1cta) |
| 166 | endif | 166 | endif |
| 167 | 167 | ||
| 168 | +# Distribute COM test data (optionally) | ||
| 169 | +if WITH_INST_COM | ||
| 170 | + testdatacom = $(top_srcdir)/inst/com/test/data/obs.xml \ | ||
| 171 | + $(top_srcdir)/inst/com/test/data/crab.xml \ | ||
| 172 | + $(top_srcdir)/inst/com/test/data/m32171_drx.fits.gz \ | ||
| 173 | + $(top_srcdir)/inst/com/test/data/m34997_drg.fits.gz \ | ||
| 174 | + $(top_srcdir)/inst/com/test/data/m50439_dre.fits.gz | ||
| 175 | + testdatacomdir = $(pyexecdir)/gammalib/tests/com/data | ||
| 176 | + testdatacom_DATA = $(testdatacom) | ||
| 177 | + testcaldbcom = $(top_srcdir)/inst/com/test/caldb/data/cgro/comptel/caldb.indx | ||
| 178 | + testcaldbcomdir = $(pyexecdir)/gammalib/tests/com/caldb/data/cgro/comptel | ||
| 179 | + testcaldbcom_DATA = $(testcaldbcom) | ||
| 180 | + testirfcom = $(top_srcdir)/inst/com/test/caldb/data/cgro/comptel/bcf/m10371_sda.fits.gz \ | ||
| 181 | + $(top_srcdir)/inst/com/test/caldb/data/cgro/comptel/bcf/m10564_sdb.fits.gz \ | ||
| 182 | + $(top_srcdir)/inst/com/test/caldb/data/cgro/comptel/bcf/u47569_iaq.fits.gz | ||
| 183 | + testirfcomdir = $(pyexecdir)/gammalib/tests/com/caldb/data/cgro/comptel/bcf | ||
| 184 | + testirfcom_DATA = $(testirfcom) | ||
| 185 | +endif | ||
| 186 | + | ||
| 168 | # If building of Python wrappers was requested then add them to the build | 187 | # If building of Python wrappers was requested then add them to the build |
| 169 | # source | 188 | # source |
| 170 | if BUILD_WRAPPERS | 189 | if BUILD_WRAPPERS |