GammaLib 2.2.0.dev
Loading...
Searching...
No Matches
GCOSResponse.hpp
Go to the documentation of this file.
1/***************************************************************************
2 * GCOSResponse.hpp - COSI response class *
3 * ----------------------------------------------------------------------- *
4 * copyright (C) 2026 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- *
6 * *
7 * This program is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
19 * *
20 ***************************************************************************/
21/**
22 * @file GCOSResponse.hpp
23 * @brief COSI instrument response function class definition
24 * @author Juergen Knoedlseder
25 */
26
27#ifndef GCOSRESPONSE_HPP
28#define GCOSRESPONSE_HPP
29
30/* __ Includes ___________________________________________________________ */
31#include <stdint.h> // uint16_t
32#include "GNdarray.hpp"
33#include "GBounds.hpp"
34#include "GHdf5.hpp"
35#include "GFilename.hpp"
36#include "GEbounds.hpp"
37#include "GHealpix.hpp"
38#include "GResponse.hpp"
39
40/* __ Forward declaration ________________________________________________ */
41class GEvent;
42class GPhoton;
43class GEnergy;
44class GTime;
45class GSource;
46class GObservation;
47class GModelSky;
48
49/* __ Constants __________________________________________________________ */
50
51
52/***********************************************************************//**
53 * @class GCOSResponse
54 *
55 * @brief COSI instrument response function class
56 *
57 * The COSI instrument response function class defines the function
58 * that translates from physical quantities to measured quantities.
59 *
60 * @todo Complete the class description.
61 ***************************************************************************/
62class GCOSResponse : public GResponse {
63
64public:
65 // Constructors and destructors
66 GCOSResponse(void);
67 GCOSResponse(const GFilename& filename);
68 GCOSResponse(const GCOSResponse& rsp);
69 virtual ~GCOSResponse(void);
70
71 // Operators
72 virtual GCOSResponse& operator=(const GCOSResponse & rsp);
73
74 // Implement pure virtual base class methods
75 virtual void clear(void);
76 virtual GCOSResponse* clone(void) const;
77 virtual std::string classname(void) const;
78 virtual bool use_edisp(void) const;
79 virtual bool use_tdisp(void) const;
80 virtual double irf(const GEvent& event,
81 const GPhoton& photon,
82 const GObservation& obs) const;
83 virtual double nroi(const GModelSky& model,
84 const GEnergy& obsEng,
85 const GTime& obsTime,
86 const GObservation& obs) const;
87 virtual GEbounds ebounds(const GEnergy& obsEnergy) const;
88 virtual std::string print(const GChatter& chatter = NORMAL) const;
89
90 // Other Methods
91 const GFilename& rspfile(void) const;
92 const GHdf5& hdf5(void) const;
93 const GHealpix& src_dirs(void) const;
94 const GEbounds& src_ebounds(void) const;
95 const GBounds& src_polarisations(void) const;
96 const GHealpix& obs_dirs(void) const;
97 const GBounds& obs_phis(void) const;
98 const GEbounds& obs_ebounds(void) const;
99 const GNdarray& eff_areas(void) const;
100 int get_response_chunk(const int& idir,
101 const int& ieng = 0,
102 const int& ipol = 0) const;
103 void load(const GFilename& filename);
104 void save(const GFilename& filename,
105 const bool& clobber = false) const;
106 void read(const GFits& fits);
107 void write(GFits& fits) const;
108
109private:
110 // Private methods
111 void init_members(void);
112 void copy_members(const GCOSResponse& rsp);
113 void free_members(void);
114 void read_response(FILE* fptr);
116 const GXmlElement* dataspace,
117 const GXmlElement* datatype,
118 const GXmlElement* datalayout);
120 const GXmlElement* dataspace,
121 const GXmlElement* datatype,
122 const GXmlElement* datalayout,
123 const std::string& unit);
125 const GXmlElement* dataspace,
126 const GXmlElement* datatype,
127 const GXmlElement* datalayout);
128 void read_response_matrix(FILE* fptr,
129 const GXmlElement* dataspace,
130 const GXmlElement* datatype,
131 const GXmlElement* datalayout,
132 const GXmlElement* datafilter);
134 const GXmlElement* get_response_chunk_key(const int& idir,
135 const int& ieng = 0,
136 const int& ipol = 0) const;
137 int get_response_chunk_index(const int& idir,
138 const int& ieng = 0,
139 const int& ipol = 0) const;
140 int flat_index(const int& idir,
141 const int& ieng = 0,
142 const int& ipol = 0) const;
143
144 // Private data members
145 GFilename m_rspfile; //!< Response file name
146 GHdf5 m_hdf5; //!< HDF5 file
147 GHealpix m_src_dirs; //!< Sky projection for source photons
148 GEbounds m_src_ebounds; //!< Energy boundaries for source photons
149 GBounds m_src_pols; //!< Boundaries for observed polarisation
150 GHealpix m_obs_dirs; //!< Sky projection for observed events
151 GBounds m_obs_phis; //!< Boundaries for observed scatter angles
152 GEbounds m_obs_ebounds; //!< Energy boundaries for observed events
153 GNdarray m_eff_areas; //!< Array of effective areas
154
155 // Private data members for response chunk handling
156 const GXmlElement* m_rsp_chunk_dataspace; //!< Data space
157 const GXmlElement* m_rsp_chunk_datatype; //!< Data type
158 const GXmlElement* m_rsp_chunk_datalayout; //!< Data layout
159 const GXmlElement* m_rsp_chunk_datafilter; //!< Data filter
160 mutable std::vector<int> m_rsp_chunk_indices; //!< Loaded indices
161 mutable std::vector<std::vector<uint16_t> > m_rsp_chunks; //!< Loaded chunks
162};
163
164
165/***********************************************************************//**
166 * @brief Return class name
167 *
168 * @return String containing the class name ("GCOSResponse").
169 ***************************************************************************/
170inline
171std::string GCOSResponse::classname(void) const
172{
173 return ("GCOSResponse");
174}
175
176
177/***********************************************************************//**
178 * @brief Signal if energy dispersion will be used
179 *
180 * @return False.
181 *
182 * @todo Implement method as needed.
183 ***************************************************************************/
184inline
186{
187 return false;
188}
189
190
191/***********************************************************************//**
192 * @brief Signal if time dispersion will be used
193 *
194 * @return False.
195 *
196 * @todo Implement method as needed.
197 ***************************************************************************/
198inline
200{
201 return false;
202}
203
204
205/***********************************************************************//**
206 * @brief Return response file name
207 *
208 * @return Response file name.
209 *
210 * Returns the file name from which the response was loaded. This may either
211 * be a HDF5 file or a FITS file.
212 ***************************************************************************/
213inline
215{
216 // Return response file name
217 return (m_rspfile);
218}
219
220
221/***********************************************************************//**
222 * @brief Return HDF5 file
223 *
224 * @return HDF5 file.
225 *
226 * Returns the HDF5 file that was loaded from a COSI response file.
227 ***************************************************************************/
228inline
229const GHdf5& GCOSResponse::hdf5(void) const
230{
231 return (m_hdf5);
232}
233
234
235/***********************************************************************//**
236 * @brief Return HealPix projection of true photon directions
237 *
238 * @return HealPix projection of true photon directions.
239 *
240 * Returns the HealPix projection of true photon directions that was loaded
241 * from a COSI response file.
242 ***************************************************************************/
243inline
245{
246 return (m_src_dirs);
247}
248
249
250/***********************************************************************//**
251 * @brief Return true photon energy boundaries
252 *
253 * @return True photon energy boundaries.
254 *
255 * Returns the true photon energy boundaries that were loaded from a COSI
256 * response file.
257 ***************************************************************************/
258inline
260{
261 return (m_src_ebounds);
262}
263
264
265/***********************************************************************//**
266 * @brief Return true polarisation angle boundaries
267 *
268 * @return True polarisation angle boundaries.
269 *
270 * Returns the true polarisation angle boundaries that were loaded from a
271 * COSI response file.
272 ***************************************************************************/
273inline
275{
276 return (m_src_pols);
277}
278
279
280/***********************************************************************//**
281 * @brief Return HealPix projection of measured scatter directions
282 *
283 * @return HealPix projection of measured scatter directions.
284 *
285 * Returns the HealPix projection of measured scatter directions that was
286 * loaded from a COSI response file.
287 ***************************************************************************/
288inline
290{
291 return (m_obs_dirs);
292}
293
294
295/***********************************************************************//**
296 * @brief Return measured scatter angle boundaries
297 *
298 * @return Measured scatter angle boundaries.
299 *
300 * Returns the measured scatter angle boundaries that were loaded from a
301 * COSI response file.
302 ***************************************************************************/
303inline
305{
306 return (m_obs_phis);
307}
308
309
310/***********************************************************************//**
311 * @brief Return measured event energy boundaries
312 *
313 * @return Measured event energy boundaries.
314 *
315 * Returns the measured event energy boundaries that were loaded from a COSI
316 * response file.
317 ***************************************************************************/
318inline
320{
321 return (m_obs_ebounds);
322}
323
324
325/***********************************************************************//**
326 * @brief Return effective area array
327 *
328 * @return Effective area array.
329 *
330 * Returns the effective area array that was loaded from a COSI response
331 * file.
332 ***************************************************************************/
333inline
335{
336 return (m_eff_areas);
337}
338
339#endif /* GCOSRESPONSE_HPP */
Boundaries class interface definition.
Energy boundaries class interface definition.
Filename class interface definition.
HDF5 file handling class definition.
HealPix projection class definition.
N-dimensional array class interface definition.
Abstract response base class definition.
GChatter
Definition GTypemaps.hpp:33
@ NORMAL
Definition GTypemaps.hpp:36
Boundaries container class.
Definition GBounds.hpp:59
COSI instrument response function class.
const GEbounds & obs_ebounds(void) const
Return measured event energy boundaries.
const GXmlElement * m_rsp_chunk_dataspace
Data space.
const GXmlElement * get_response_chunk_key(const int &idir, const int &ieng=0, const int &ipol=0) const
const GBounds & src_polarisations(void) const
Return true polarisation angle boundaries.
GCOSResponse(void)
Void constructor.
GBounds m_obs_phis
Boundaries for observed scatter angles.
GHdf5 m_hdf5
HDF5 file.
virtual void clear(void)
Clear instance.
virtual double irf(const GEvent &event, const GPhoton &photon, const GObservation &obs) const
const GHdf5 & hdf5(void) const
Return HDF5 file.
GEbounds m_src_ebounds
Energy boundaries for source photons.
void copy_members(const GCOSResponse &rsp)
const GXmlElement * m_rsp_chunk_datatype
Data type.
void read_response_matrix(FILE *fptr, const GXmlElement *dataspace, const GXmlElement *datatype, const GXmlElement *datalayout, const GXmlElement *datafilter)
GEbounds read_ebounds(FILE *fptr, const GXmlElement *dataspace, const GXmlElement *datatype, const GXmlElement *datalayout, const std::string &unit)
int get_response_chunk(const int &idir, const int &ieng=0, const int &ipol=0) const
const GHealpix & obs_dirs(void) const
Return HealPix projection of measured scatter directions.
void free_members(void)
virtual double nroi(const GModelSky &model, const GEnergy &obsEng, const GTime &obsTime, const GObservation &obs) const
const GXmlElement * m_rsp_chunk_datafilter
Data filter.
virtual bool use_edisp(void) const
Signal if energy dispersion will be used.
const GNdarray & eff_areas(void) const
Return effective area array.
virtual std::string print(const GChatter &chatter=NORMAL) const
Print content of object.
void set_response_chunk_pointers(void)
const GHealpix & src_dirs(void) const
Return HealPix projection of true photon directions.
const GXmlElement * m_rsp_chunk_datalayout
Data layout.
GNdarray read_ndarray(FILE *fptr, const GXmlElement *dataspace, const GXmlElement *datatype, const GXmlElement *datalayout)
void save(const GFilename &filename, const bool &clobber=false) const
void init_members(void)
GEbounds m_obs_ebounds
Energy boundaries for observed events.
GFilename m_rspfile
Response file name.
virtual bool use_tdisp(void) const
Signal if time dispersion will be used.
GBounds read_bounds(FILE *fptr, const GXmlElement *dataspace, const GXmlElement *datatype, const GXmlElement *datalayout)
virtual GCOSResponse & operator=(const GCOSResponse &rsp)
Assignment operator.
void read(const GFits &fits)
GHealpix m_obs_dirs
Sky projection for observed events.
GNdarray m_eff_areas
Array of effective areas.
virtual ~GCOSResponse(void)
Destructor.
const GFilename & rspfile(void) const
Return response file name.
int get_response_chunk_index(const int &idir, const int &ieng=0, const int &ipol=0) const
GHealpix m_src_dirs
Sky projection for source photons.
void write(GFits &fits) const
int flat_index(const int &idir, const int &ieng=0, const int &ipol=0) const
virtual std::string classname(void) const
Return class name.
std::vector< int > m_rsp_chunk_indices
Loaded indices.
void read_response(FILE *fptr)
virtual GEbounds ebounds(const GEnergy &obsEnergy) const
const GEbounds & src_ebounds(void) const
Return true photon energy boundaries.
virtual GCOSResponse * clone(void) const
Clone instance.
GBounds m_src_pols
Boundaries for observed polarisation.
const GBounds & obs_phis(void) const
Return measured scatter angle boundaries.
void load(const GFilename &filename)
std::vector< std::vector< uint16_t > > m_rsp_chunks
Loaded chunks.
Energy boundaries container class.
Definition GEbounds.hpp:60
Class that handles energies in a unit independent way.
Definition GEnergy.hpp:48
Abstract interface for the event classes.
Definition GEvent.hpp:71
Filename class.
Definition GFilename.hpp:62
FITS file class.
Definition GFits.hpp:63
COSI instrument response function class.
Definition GHdf5.hpp:107
HealPix projection class interface definition.
Definition GHealpix.hpp:50
Sky model class.
N-dimensional array class.
Definition GNdarray.hpp:44
Abstract observation base class.
Class that handles photons.
Definition GPhoton.hpp:47
Abstract instrument response base class.
Definition GResponse.hpp:77
Class that handles gamma-ray sources.
Definition GSource.hpp:53
Time class.
Definition GTime.hpp:55
XML element node class.