ctobssim.hpp
5.85 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
/***************************************************************************
* ctobssim - Observation simulator tool *
* ----------------------------------------------------------------------- *
* copyright (C) 2011-2015 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 "ctool.hpp"
/* __Definitions _________________________________________________________ */
#define CTOBSSIM_NAME "ctobssim"
#define CTOBSSIM_VERSION "1.0.0"
/***********************************************************************//**
* @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 ctool {
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);
const GObservations& obs(void) const;
const double& max_rate(void) const;
void max_rate(const double& max_rate);
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);
double get_model_flux(const GModelSky* model,
const GEnergy& emin,
const GEnergy& emax,
const GSkyDir& centre,
const double& radius,
const int& indent,
GLog* wrklog = NULL);
void simulate_background(GCTAObservation* obs,
const GModels& models,
GRan& ran,
GLog* wrklog = NULL);
void save_fits(void);
void save_xml(void);
// User parameters
std::string m_outevents; //!< Output events file
std::string m_prefix; //!< Prefix for multiple event lists
int m_seed; //!< Random number generator seed
bool m_apply_edisp; //!< Apply energy dispersion?
// Protected members
mutable GObservations m_obs; //!< Observation container
mutable bool m_save_and_dispose; //!< Save and dispose immediately
double m_area; //!< Surface area for simulation (cm2)
int m_max_photons; //!< Maximum number of photons/slice
double m_max_rate; //!< Maximum photon rate
std::vector<GRan> m_rans; //!< Random number generators
int m_event_id; //!< Event identifier
};
/***********************************************************************//**
* @brief Return observation container
*
* @return Reference to observation container
***************************************************************************/
inline
const GObservations& ctobssim::obs(void) const
{
return (m_obs);
}
/***********************************************************************//**
* @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;
}
#endif /* CTOBSSIM_HPP */