ctool.hpp
7.54 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
/***************************************************************************
* ctool - ctool base class *
* ----------------------------------------------------------------------- *
* copyright (C) 2014-2018 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 ctool.hpp
* @brief ctool base class definition
* @author Juergen Knoedlseder
*/
#ifndef CTOOL_HPP
#define CTOOL_HPP
/* __ Includes ___________________________________________________________ */
#include "GammaLib.hpp"
#include "GCTALib.hpp"
/* __Definitions _________________________________________________________ */
/* __ Constants __________________________________________________________ */
namespace ctools {
const GTimeReference time_reference =
GTimeReference(G_CTA_MJDREF, "s", "TT", "LOCAL");
}
/***********************************************************************//**
* @class ctool
*
* @brief Base class for ctools
*
* This class is the generic base class for all ctools. It enforces
* implementation of the clear(), run() and save() methods by all ctools,
* and it implements the execute() method.
*
* The class also provides a number of helper methods for ctools.
***************************************************************************/
class ctool : public GApplication {
public:
// Constructors and destructors
ctool(const std::string& name, const std::string& version);
ctool(const std::string& name, const std::string& version,
int argc, char* argv[]);
ctool(const ctool& app);
virtual ~ctool(void);
// Operators
ctool& operator=(const ctool& app);
// Pure virtual methods
virtual void clear(void) = 0;
virtual void run(void) = 0;
virtual void save(void) = 0;
// Public methods
virtual void execute(void);
#ifdef SWIG
public:
#else
protected:
#endif
// Protected methods
void init_members(void);
void copy_members(const ctool& app);
void free_members(void);
const bool& read_ahead(void) const;
// Protected high-level setup methods
void setup_observations(GObservations& obs, const bool& response = true,
const bool& list = true,
const bool& cube = true);
void setup_models(GObservations& obs, const std::string& name = "");
// Protected methods that create objects from user parameters
GEbounds create_ebounds(void);
GSkyMap create_map(const GObservations& obs);
GCTAEventCube create_cube(const GObservations& obs);
GCTAObservation create_cta_obs(void);
// Protected methods that check user parameters
void require_inobs(const std::string& method);
void require_inobs_nolist(const std::string& method);
void require_inobs_nocube(const std::string& method);
// Protected methods that extract user parameters
GCTARoi get_roi(const GCTAPointing& pnt = GCTAPointing());
GEbounds get_ebounds(void);
GGti get_gti(void);
GCTAPointing get_pointing(void);
GSkyDir get_skydir(void);
std::string set_outfile_name(const std::string& filename);
// Protected methods that query user parameters
bool is_stacked(void);
bool is_onoff(void);
// Protected methods for logging
void log_observations(const GChatter& chatter,
const GObservations& obs,
const std::string& what = "Observation");
void log_models(const GChatter& chatter,
const GModels& models,
const std::string& what = "Model");
// Protected support methods
void set_response(GObservations& obs);
std::vector<bool> set_edisp(GObservations& obs, const bool& edisp) const;
void restore_edisp(GObservations& obs,
const std::vector<bool>& edisp) const;
void set_obs_response(GCTAObservation* obs);
void set_obs_bounds(GObservations& obs);
GObservations get_observations(const bool& get_response = true);
GSkyDir get_mean_pointing(const GObservations& obs);
size_t get_current_rss(void);
std::string get_obs_header(const GObservation* obs) const;
GEnergies insert_energy_boundaries(const GEnergies& energies,
const GCTAObservation& obs);
std::vector<bool> cube_layer_usage(const GEbounds& cube_ebounds,
const GEbounds& list_ebounds) const;
std::string get_gtiname(const std::string& filename,
const std::string& evtname) const;
void save_event_list(const GCTAObservation* obs,
const std::string& infile,
const std::string& evtname,
const std::string& gtiname,
const std::string& outfile) const;
// Protected warning strings
std::string warn_too_few_energies(const GEnergies& energies) const;
std::string warn_xml_suffix(const GFilename& filename) const;
// Protected members
bool m_read_ahead; //!< Read ahead output parameters
protected:
// Protected methods
void provide_help(void) const;
// Protected members
bool m_use_xml; //!< Use XML file instead of FITS file for observations
};
/***********************************************************************//**
* @brief Signal whether parameters should be read ahead
*
* @return True if parameters should be read ahead
*
* Ahead reading of parameter is useful in case that some parameters are only
* required in a late stage of the processing. By reading them ahead it is
* assured that these parameters will be queried at the beginning of the
* tool execution.
***************************************************************************/
inline
const bool& ctool::read_ahead(void) const
{
return (m_read_ahead);
}
#endif /* CTOOL_HPP */