GCTAAeffArf.hpp
7.73 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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
/***************************************************************************
* GCTAAeffArf.hpp - CTA ARF effective area class *
* ----------------------------------------------------------------------- *
* copyright (C) 2012-2016 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 GCTAAeffArf.hpp
* @brief CTA ARF effective area class definition
* @author Juergen Knoedlseder
*/
#ifndef GCTAAEFFARF_HPP
#define GCTAAEFFARF_HPP
/* __ Includes ___________________________________________________________ */
#include <string>
#include <vector>
#include "GNodeArray.hpp"
#include "GFilename.hpp"
#include "GCTAAeff.hpp"
/* __ Forward declarations _______________________________________________ */
class GFitsTable;
class GCTAResponseIrf;
/***********************************************************************//**
* @class GCTAAeffArf
*
* @brief CTA ARF effective area class
*
* This class implements the CTA effective area response that is defined by
* an auxiliary response function (ARF) file.
***************************************************************************/
class GCTAAeffArf : public GCTAAeff {
public:
// Constructors and destructors
GCTAAeffArf(void);
explicit GCTAAeffArf(const GFilename& filename);
GCTAAeffArf(const GCTAAeffArf& cta);
virtual ~GCTAAeffArf(void);
// Operators
GCTAAeffArf& operator=(const GCTAAeffArf& aeff);
double operator()(const double& logE,
const double& theta = 0.0,
const double& phi = 0.0,
const double& zenith = 0.0,
const double& azimuth = 0.0,
const bool& etrue = true) const;
// Implemented pure virtual methods
void clear(void);
GCTAAeffArf* clone(void) const;
std::string classname(void) const;
void load(const GFilename& filename);
GFilename filename(void) const;
double max(const double& logE,
const double& zenith,
const double& azimuth,
const bool& etrue = true) const;
std::string print(const GChatter& chatter = NORMAL) const;
// Methods
int size(void) const;
void sigma(const double& sigma);
const double& sigma(void) const;
void thetacut(const double& thetacut);
const double& thetacut(void) const;
void scale(const double& scale);
const double& scale(void) const;
void read(const GFitsTable& table);
void remove_thetacut(const GCTAResponseIrf& rsp);
private:
// Methods
void init_members(void);
void copy_members(const GCTAAeffArf& aeff);
void free_members(void);
// Members
GFilename m_filename; //!< Name of Aeff response file
GNodeArray m_logE; //!< log(E) nodes for Aeff interpolation
std::vector<double> m_aeff; //!< Effective area in cm2
double m_sigma; //!< Sigma for offset angle computation (0=none)
double m_thetacut; //!< Theta cut for ARF
double m_scale; //!< Scale for ARF
};
/***********************************************************************//**
* @brief Return class name
*
* @return String containing the class name ("GCTAAeffArf").
***************************************************************************/
inline
std::string GCTAAeffArf::classname(void) const
{
return ("GCTAAeffArf");
}
/***********************************************************************//**
* @brief Return filename
*
* @return Returns filename from which effective area was loaded.
***************************************************************************/
inline
GFilename GCTAAeffArf::filename(void) const
{
return m_filename;
}
/***********************************************************************//**
* @brief Return number of node energies in response
*
* @return Number of node energies.
***************************************************************************/
inline
int GCTAAeffArf::size(void) const
{
return (m_logE.size());
}
/***********************************************************************//**
* @brief Set sigma for offset angle dependence
*
* @param[in] sigma Sigma for offset angle dependence.
*
* Sets the sigma parameter for the offset angle dependence of the effective
* area. If @p sigma is 0 (which is the default value), no offset angle
* dependency will be assumed.
***************************************************************************/
inline
void GCTAAeffArf::sigma(const double& sigma)
{
m_sigma = sigma;
return;
}
/***********************************************************************//**
* @brief Return sigma for offset angle dependence
*
* @return Sigma for offset angle dependence.
***************************************************************************/
inline
const double& GCTAAeffArf::sigma(void) const
{
return (m_sigma);
}
/***********************************************************************//**
* @brief Set theta cut angle
*
* @param[in] thetacut Set theta cut angle.
*
* Sets the theta cut angle which defines the energy independent cut that
* has been assumed in deriving the ARF values. If @p thetacut os 0 (which
* is the default value), not thetacut will be applied.
***************************************************************************/
inline
void GCTAAeffArf::thetacut(const double& thetacut)
{
m_thetacut = thetacut;
return;
}
/***********************************************************************//**
* @brief Return theta cut angle
*
* @return Theta cut angle.
***************************************************************************/
inline
const double& GCTAAeffArf::thetacut(void) const
{
return (m_thetacut);
}
/***********************************************************************//**
* @brief Set effective area scaling factor
*
* @param[in] scale Set effective area scaling factor.
*
* Sets the scaling factor for the effective area (by default is 1).
***************************************************************************/
inline
void GCTAAeffArf::scale(const double& scale)
{
m_scale = scale;
return;
}
/***********************************************************************//**
* @brief Return effective area scaling factor
*
* @return Effective area scaling factor.
***************************************************************************/
inline
const double& GCTAAeffArf::scale(void) const
{
return (m_scale);
}
#endif /* GCTAAEFFARF_HPP */