ctmodel.hpp
6.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/***************************************************************************
* ctmodel - Model cube generation tool *
* ----------------------------------------------------------------------- *
* copyright (C) 2012-2014 by Juergen Knoedlseder *
* ----------------------------------------------------------------------- *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
***************************************************************************/
/**
* @file ctmodel.hpp
* @brief Model cube generation tool definition
* @author Juergen Knoedlseder
*/
#ifndef CTMODEL_HPP
#define CTMODEL_HPP
/* __ Includes ___________________________________________________________ */
#include "GammaLib.hpp"
#include "GCTALib.hpp"
#include "ctool.hpp"
/* __Definitions _________________________________________________________ */
#define CTMODEL_NAME "ctmodel"
#define CTMODEL_VERSION "00-03-00"
/***********************************************************************//**
* @class ctmodel
*
* @brief Model cube generation tool
*
* This class creates counts model map(s). The definition of the counts model
* can be taken from a predefined observation container, from the counts maps
* found in an observation definition XML file, from an individual counts
* map, or from the parameter definition.
*
* Results are stored in an observation container that can be written to disk
* in form of FITS files (model maps) and an updated observation definition
* XML file.
***************************************************************************/
class ctmodel : public ctool {
public:
// Constructors and destructors
ctmodel(void);
explicit ctmodel(const GObservations& obs);
ctmodel(int argc, char *argv[]);
ctmodel(const ctmodel& app);
virtual ~ctmodel(void);
// Operators
ctmodel& operator=(const ctmodel& app);
// Methods
void clear(void);
void run(void);
void save(void);
const GObservations& obs(void) const;
const GCTAEventCube& cube(void) const;
void cube(const GCTAEventCube& cube);
protected:
// Protected methods
void init_members(void);
void copy_members(const ctmodel& app);
void free_members(void);
void get_parameters(void);
void setup_obs(void);
void init_cube(void);
void fill_cube(const GCTAObservation* obs);
bool has_cube(void) const;
// User parameters
std::string m_infile; //!< Input counts cube
std::string m_obsfile; //!< Event list, counts map or observation definition XML file
std::string m_outfile; //!< Output model cube
std::string m_caldb; //!< Calibration database
std::string m_irf; //!< Instrument response functions
std::string m_srcmdl; //!< Source model
double m_ra; //!< RA of pointing direction
double m_dec; //!< DEC of pointing direction
double m_deadc; //!< Deadtime correction factor
double m_tmin; //!< Start time
double m_tmax; //!< Stop time
std::string m_ebinalg; //!< Algorithm for energy binning
std::string m_ebinfile; //!< FITS-file containing energy binning
double m_emin; //!< Lower energy
double m_emax; //!< Upper energy
int m_enumbins; //!< Number of energy bins
std::string m_proj; //!< WCS projection
std::string m_coordsys; //!< Coordinate system
double m_xref; //!< Longitude reference coordinate
double m_yref; //!< Latitude reference coordinate
double m_binsz; //!< Pixel size
int m_nxpix; //!< Number of pixels in longitude
int m_nypix; //!< Number of pixels in latitude
bool m_apply_edisp; //!< Apply energy dispersion?
// Protected members
GObservations m_obs; //!< Observation container
GCTAEventCube m_cube; //!< Model cube
GEbounds m_ebounds; //!< Energy boundaries
GGti m_gti; //!< Model cube GTIs
bool m_has_cube; //!< Signal if cube has been set or loaded
};
/***********************************************************************//**
* @brief Return observation container
*
* @return Reference to observation container.
***************************************************************************/
inline
const GObservations& ctmodel::obs(void) const
{
return m_obs;
}
/***********************************************************************//**
* @brief Return model cube
*
* @return Reference to model cube.
***************************************************************************/
inline
const GCTAEventCube& ctmodel::cube(void) const
{
return m_cube;
}
/***********************************************************************//**
* @brief Signal if cube has been set or loaded
*
* @return True if cube has been set or loaded.
***************************************************************************/
inline
bool ctmodel::has_cube(void) const
{
return m_has_cube;
}
#endif /* CTMODEL_HPP */