ctobssim.hpp
9.05 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
/***************************************************************************
* ctobssim - Observation simulator tool *
* ----------------------------------------------------------------------- *
* copyright (C) 2011-2020 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 ctobssim.hpp
* @brief Observation simulator tool definition
* @author Juergen Knoedlseder
*/
#ifndef CTOBSSIM_HPP
#define CTOBSSIM_HPP
/* __ Includes ___________________________________________________________ */
#include "GammaLib.hpp"
#include "GCTALib.hpp"
#include "ctobservation.hpp"
/* __Definitions _________________________________________________________ */
#define CTOBSSIM_NAME "ctobssim"
/***********************************************************************//**
* @class ctobssim
*
* @brief Observation simulator tool
*
* This class simulates CTA observation(s) using Monte Carlo sampling of the
* source and background models. The class supports simulation of data of
* multiple CTA observations in one shot. If multiple CTA observations are
* processed and the save method is called, events FITS files will be written
* for each observation.
***************************************************************************/
class ctobssim : public ctobservation {
public:
// Constructors and destructors
ctobssim(void);
explicit ctobssim(const GObservations& obs);
ctobssim(int argc, char *argv[]);
ctobssim(const ctobssim& app);
virtual ~ctobssim(void);
// Operators
ctobssim& operator=(const ctobssim& app);
// Methods
void clear(void);
void run(void);
void save(void);
void publish(const std::string& name = "");
const double& max_rate(void) const;
void max_rate(const double& max_rate);
void models(const GModels& models);
protected:
// Protected methods
void init_members(void);
void copy_members(const ctobssim& app);
void free_members(void);
void get_parameters(void);
void simulate_source(GCTAObservation* obs,
const GModels& models,
GRan& ran,
GLog* wrklog = NULL);
void simulate_interval(GCTAObservation* obs,
const GCTAResponseIrf* rsp,
GCTAEventList* events,
const GModels& models,
const GTime& tmin,
const GTime& tmax,
const GEnergy& etrue_min,
const GEnergy& etrue_max,
const GEnergy& ereco_min,
const GEnergy& ereco_max,
const GSkyDir& dir,
const double& rad,
const double& area,
GRan& ran,
GLog* wrklog,
int& indent,
std::vector<int>& nphotons,
std::vector<int>& nevents);
void simulate_time_slice(GCTAObservation* obs,
const GCTAResponseIrf* rsp,
GCTAEventList* events,
const GModelSky* model,
const int& mc_id,
const GTime& tstart,
const GTime& tstop,
const GEnergy& etrue_min,
const GEnergy& etrue_max,
const GEnergy& ereco_min,
const GEnergy& ereco_max,
const GSkyDir& dir,
const double& rad,
const double& area,
GRan& ran,
GLog* wrklog,
int& indent,
int& nphotons,
int& nevents);
GEbounds get_ebounds(const GEbounds& ebounds) const;
double get_area(GCTAObservation* obs,
const GEnergy& emin,
const GEnergy& emax) const;
double get_model_flux(const GModelSky* model,
const GEnergy& emin,
const GEnergy& emax,
const GSkyDir& centre,
const double& radius,
const int& indent,
GLog* wrklog);
void simulate_background(GCTAObservation* obs,
const GModels& models,
GRan& ran,
GLog* wrklog = NULL);
void set_mc_id_names(GCTAObservation* obs,
const GModels& models,
GLog* wrklog = NULL);
void save_fits(void);
void save_xml(void);
std::string outfile(const int& index);
// User parameters
std::string m_outevents; //!< Output events file
std::string m_prefix; //!< Prefix for multiple event lists
int m_startindex; //!< Start index for multiple event lists
int m_seed; //!< Random number generator seed
int m_eslices; //!< Number of energy slices
bool m_apply_edisp; //!< Apply energy dispersion?
double m_max_rate; //!< Maximum photon rate
// Protected members
GModels m_models; //!< Optionally provided models
mutable bool m_save_and_dispose; //!< Save and dispose immediately
int m_max_photons; //!< Maximum number of photons/slice
std::vector<GRan> m_rans; //!< Random number generators
int m_event_id; //!< Event identifier
};
/***********************************************************************//**
* @brief Return maximum photon rate
*
* @return Reference to maximum photon rate.
***************************************************************************/
inline
const double& ctobssim::max_rate(void) const
{
return (m_max_rate);
}
/***********************************************************************//**
* @brief Set maximum photon rate
*
* @param[in] max_rate Maximum photon rate.
***************************************************************************/
inline
void ctobssim::max_rate(const double& max_rate)
{
m_max_rate = max_rate;
return;
}
/***********************************************************************//**
* @brief Set models for simulation
*
* @param[in] models Model container.
*
* Sets the model container that should be used for simulations. If a
* model container exists already in the input observations the model
* container will be overwritten. The models will not be queried, and
* any model specified using the "inmodel" parameter will be ignored.
***************************************************************************/
inline
void ctobssim::models(const GModels& models)
{
m_models = models;
return;
}
#endif /* CTOBSSIM_HPP */