GammaLib 2.0.0
Loading...
Searching...
No Matches
GObservations.hpp
Go to the documentation of this file.
1/***************************************************************************
2 * GObservations.hpp - Observation container class *
3 * ----------------------------------------------------------------------- *
4 * copyright (C) 2009-2019 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- *
6 * *
7 * This program is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
19 * *
20 ***************************************************************************/
21/**
22 * @file GObservations.hpp
23 * @brief Observations container class interface definition
24 * @author Juergen Knoedlseder
25 */
26
27#ifndef GOBSERVATIONS_HPP
28#define GOBSERVATIONS_HPP
29
30/* __ Includes ___________________________________________________________ */
31#include <string>
32#include <vector>
33#include "GContainer.hpp"
34#include "GObservation.hpp"
36#include "GModels.hpp"
37
38/* __ Forward declarations _______________________________________________ */
39class GFilename;
40class GOptimizer;
41
42
43/***********************************************************************//**
44 * @class GObservations
45 *
46 * @brief Observation container class
47 *
48 * This is the main user interface class that provides high-level access to
49 * gamma-ray observations and manages their scientific analysis. For a given
50 * instruments, the identifiers of all observations in the container have to
51 * be unique, i.e. every identifier can occur only once. This allows for
52 * accessing the observations by instrument and by identifier.
53 *
54 * GObservations holds a list of pointers to GObservation objects which
55 * implement gamma-ray observations. The class derives from the abstract
56 * container interface class GContainer, and provides methods to manage the
57 * list of observations.
58 * The append() appends an observation to the container, the insert() method
59 * inserts an observation at a specific position in the list (though the
60 * order of the observations in the list is not relevant for the scientific
61 * analysis).
62 * The remove() method removes a specific observation from the list and the
63 * extend() method extends the list of observations by appending another
64 * list of observations to it.
65 * The size() method provides the number of observations in the list.
66 *
67 * The operator[] provides access to an observation in the list by index,
68 * returning a reference to the observation. The operator does not perform
69 * index range checking. If range checking is required, use the at() method.
70 *
71 * The observation information may be stored into a XML file. The save()
72 * method saves all information into a XML file while the load() method
73 * loads the information into the list. Alternatively, a XML file
74 * constructor can be used to construct an instance of GObservations by
75 * loading observation information from a XML file. In addition, the
76 * read() and write() method handle the reading and writing of observation
77 * information from and into a XML object of type GXml.
78 *
79 * The class also holds a list of models that is implemented by the GModels
80 * class. The models() method allows setting and retrieving the list of
81 * models, as well as loading of models from an XML file.
82 *
83 * Based on the list of models, the optimize() method will optimize all
84 * model parameters that are marked as free in the list of models. The
85 * npred() method returns the total number of events that are predicted
86 * by all models after optimization.
87 *
88 * GObservations also provides an optimizer class that is derived from
89 * the abstract GOptimizerFunction base class. The GObservations::optimizer
90 * class is the object that is used for model parameter optimization.
91 ***************************************************************************/
92class GObservations : public GContainer {
93
94public:
95 // Constructors and destructors
96 GObservations(void);
97 GObservations(const GObservations& obs);
98 explicit GObservations(const GFilename& filename);
99 virtual ~GObservations(void);
100
101 // Operators
103 GObservation* operator[](const int& index);
104 const GObservation* operator[](const int& index) const;
105
106 // Methods
107 void clear(void);
108 GObservations* clone(void) const;
109 std::string classname(void) const;
110 GObservation* at(const int& index);
111 const GObservation* at(const int& index) const;
112 int size(void) const;
113 bool is_empty(void) const;
114 GObservation* set(const int& index, const GObservation& obs);
115 GObservation* append(const GObservation& obs);
116 GObservation* insert(const int& index, const GObservation& obs);
117 void remove(const int& index);
118 void reserve(const int& num);
119 void extend(const GObservations& obs);
120 bool contains(const std::string& instrument,
121 const std::string& id) const;
122 void load(const GFilename& filename);
123 void save(const GFilename& filename) const;
124 void read(const GXml& xml);
125 void write(GXml& xml) const;
126 void models(const GModels& models);
127 void models(const GFilename& filename);
128 const GModels& models(void) const;
129 void optimize(GOptimizer& opt);
130 void errors(GOptimizer& opt);
131 void errors_hessian(void);
132 void eval(void);
133 double logL(void) const;
134 int nobserved(void) const;
135 double npred(void) const;
136 double npred(const std::string& name,
137 const std::string& instrument = "") const;
138 double npred(const GModel& model,
139 const std::string& instrument = "") const;
140 void remove_response_cache(void);
141 void remove_response_cache(const std::string& name);
142 std::string print(const GChatter& chatter = NORMAL) const;
143
144 // Likelihood function
146 public:
147 // Constructors and destructors
148 likelihood(void);
150 likelihood(const likelihood& fct);
151 ~likelihood(void);
152
153 // Operators
154 likelihood& operator=(const likelihood& fct);
155
156 // Implemented pure virtual base class methods
157 virtual void eval(const GOptimizerPars& pars);
158 virtual double value(void) const;
159 virtual GVector* gradient(void);
160 virtual GMatrixSparse* curvature(void);
161
162 // Other methods
163 void set(GObservations* obs);
164 double npred(void) const;
166 GMatrixSparse covariance(void) const;
167 void save(const GFilename& filename) const;
168
169 protected:
170 // Protected methods
171 void init_members(void);
172 void copy_members(const likelihood& fct);
173 void free_members(void);
174 void save_csv(const GFilename& filename) const;
175 void save_fits(const GFilename& filename) const;
176 std::vector<std::string> covariance_names(void) const;
177
178 // Protected data members
179 double m_value; //!< Function value
180 double m_npred; //!< Total number of predicted events
181 GVector* m_gradient; //!< Pointer to gradient vector
182 GMatrixSparse* m_curvature; //!< Pointer to curvature matrix
183 GObservations* m_this; //!< Pointer to GObservations object
184 };
185
186 // Optimizer function access method
187 const GObservations::likelihood& function(void) const;
188
189protected:
190 // Protected methods
191 void init_members(void);
192 void copy_members(const GObservations& obs);
193 void free_members(void);
194 int get_index(const std::string& instrument,
195 const std::string& id) const;
196
197 // Protected members
198 std::vector<GObservation*> m_obs; //!< List of observations
199 GModels m_models; //!< List of models
200 GObservations::likelihood m_fct; //!< Optimizer function
201};
202
203
204/***********************************************************************//**
205 * @brief Return class name
206 *
207 * @return String containing the class name ("GObservations").
208 ***************************************************************************/
209inline
210std::string GObservations::classname(void) const
211{
212 return ("GObservations");
213}
214
215
216/***********************************************************************//**
217 * @brief Return pointer to observation
218 *
219 * @param[in] index Observation index [0,...,size()-1].
220 * @return Observation.
221 *
222 * Returns a pointer to the observation with specified @p index.
223 ***************************************************************************/
224inline
226{
227 return m_obs[index];
228}
229
230
231/***********************************************************************//**
232 * @brief Return pointer to observation (const version)
233 *
234 * @param[in] index Observation index [0,...,size()-1].
235 *
236 * Returns a const pointer to the observation with specified @p index.
237 ***************************************************************************/
238inline
239const GObservation* GObservations::operator[](const int& index) const
240{
241 return m_obs[index];
242}
243
244
245/***********************************************************************//**
246 * @brief Return number of observations in container
247 *
248 * @return Number of observations in container.
249 *
250 * Returns the number of observations in the observation container.
251 ***************************************************************************/
252inline
253int GObservations::size(void) const
254{
255 return (int)m_obs.size();
256}
257
258
259/***********************************************************************//**
260 * @brief Signals if there are no observations in container
261 *
262 * @return True if container is empty, false otherwise.
263 *
264 * Signals if the observation container does not contain any observation.
265 ***************************************************************************/
266inline
268{
269 return (m_obs.empty());
270}
271
272
273/***********************************************************************//**
274 * @brief Reserves space for observations in container
275 *
276 * @param[in] num Number of observations.
277 *
278 * Reserves space for @p num observations in the container.
279 ***************************************************************************/
280inline
281void GObservations::reserve(const int& num)
282{
283 m_obs.reserve(num);
284 return;
285}
286
287
288/***********************************************************************//**
289 * @brief Set model container
290 *
291 * @param[in] models Model container.
292 *
293 * Sets the model container for the observations.
294 ***************************************************************************/
295inline
297{
299 return;
300}
301
302
303/***********************************************************************//**
304 * @brief Return model container
305 *
306 * @return Model container.
307 *
308 * Returns the model container of the observations.
309 ***************************************************************************/
310inline
312{
313 return m_models;
314}
315
316
317/***********************************************************************//**
318 * @brief Return log-likelihood of models
319 *
320 * @return Log-likelihood of models.
321 *
322 * Returns the log-likelihood of models. This value if computed following a
323 * call of the optimize() or eval() methods. If optimize() or eval() have
324 * never been called, the method returns 0.
325 ***************************************************************************/
326inline
327double GObservations::logL(void) const
328{
329 return (m_fct.value());
330}
331
332
333/***********************************************************************//**
334 * @brief Return total number of predicted events in models
335 *
336 * @return Total number of predicted events in models.
337 *
338 * Returns the total number of events that is predicted by the models. This
339 * number if computed following a call of the optimize() or eval() methods.
340 * If optimize() or eval() have never been called, the method returns 0.
341 ***************************************************************************/
342inline
343double GObservations::npred(void) const
344{
345 return (m_fct.npred());
346}
347
348
349/***********************************************************************//**
350 * @brief Return likelihood function
351 *
352 * @return Reference to likelihood function.
353 *
354 * Returns a reference to the likelihood function.
355 ***************************************************************************/
356inline
358{
359 return m_fct;
360}
361
362
363/***********************************************************************//**
364 * @brief Return log-likelihood value of optimizer function
365 *
366 * @return Log-likelihood value of optimizer function.
367 *
368 * Returns the log-likelihood value of optimizer function.
369 ***************************************************************************/
370inline
372{
373 return m_value;
374}
375
376
377/***********************************************************************//**
378 * @brief Return total number of predicted events
379 *
380 * @return Total number of predicted events.
381 *
382 * Returns the total number of events that is predicted by the models after
383 * they have been fitted to the data.
384 ***************************************************************************/
385inline
387{
388 return m_npred;
389}
390
391
392/***********************************************************************//**
393 * @brief Return pointer to gradient vector
394 *
395 * @return Pointer to gradient vector.
396 *
397 * Returns a pointer to the parameter gradient vector.
398 ***************************************************************************/
399inline
401{
402 return m_gradient;
403}
404
405
406/***********************************************************************//**
407 * @brief Return pointer to curvature matrix
408 *
409 * @return Pointer to curvature matrix.
410 *
411 * Returns a pointer to the parameter curvature matrix.
412 ***************************************************************************/
413inline
415{
416 return m_curvature;
417}
418
419
420/***********************************************************************//**
421 * @brief Set observation container
422 *
423 * @param[in] obs Pointer to observation container.
424 *
425 * Sets the pointer to the observation container for which the optimizer
426 * class should be used.
427 ***************************************************************************/
428inline
430{
431 m_this = obs;
432 return;
433}
434
435#endif /* GOBSERVATIONS_HPP */
Definition of interface for container classes.
Model container class definition.
Abstract observation base class interface definition.
Optimizer function abstract base class.
GChatter
Definition GTypemaps.hpp:33
@ NORMAL
Definition GTypemaps.hpp:36
Interface class for container classes.
Filename class.
Definition GFilename.hpp:62
Sparse matrix class interface definition.
Abstract model class.
Definition GModel.hpp:100
Model container class.
Definition GModels.hpp:152
Abstract observation base class.
void set(GObservations *obs)
Set observation container.
void save(const GFilename &filename) const
Save likelihood fit results into a CSV or FITS file.
GObservations * m_this
Pointer to GObservations object.
GVector * m_gradient
Pointer to gradient vector.
double m_value
Function value.
virtual GVector * gradient(void)
Return pointer to gradient vector.
virtual double value(void) const
Return log-likelihood value of optimizer function.
virtual GMatrixSparse * curvature(void)
Return pointer to curvature matrix.
void save_fits(const GFilename &filename) const
Save likelihood fit results into FITS file.
GMatrixSparse hessian(const GOptimizerPars &pars)
Compute Hessian matrix.
void init_members(void)
Initialise class members.
void free_members(void)
Delete class members.
GMatrixSparse covariance(void) const
Compute covariance matrix.
void save_csv(const GFilename &filename) const
Save likelihood fit results into CSV file.
likelihood & operator=(const likelihood &fct)
Assignment operator.
double npred(void) const
Return total number of predicted events.
double m_npred
Total number of predicted events.
std::vector< std::string > covariance_names(void) const
Return covariance matrix row and column names.
GMatrixSparse * m_curvature
Pointer to curvature matrix.
void copy_members(const likelihood &fct)
Copy class members.
Observation container class.
GObservation * operator[](const int &index)
Return pointer to observation.
int nobserved(void) const
Return total number of observed events.
bool contains(const std::string &instrument, const std::string &id) const
Signals if observation exists.
double logL(void) const
Return log-likelihood of models.
void init_members(void)
Initialise class members.
GObservations & operator=(const GObservations &obs)
Assignment operator.
std::vector< GObservation * > m_obs
List of observations.
void reserve(const int &num)
Reserves space for observations in container.
void copy_members(const GObservations &obs)
Copy class members.
void extend(const GObservations &obs)
Append observations from observation container.
void clear(void)
Clear observations.
GModels m_models
List of models.
int size(void) const
Return number of observations in container.
GObservations * clone(void) const
Clone observations.
std::string classname(void) const
Return class name.
GObservations::likelihood m_fct
Optimizer function.
void read(const GXml &xml)
Read observations from XML document.
bool is_empty(void) const
Signals if there are no observations in container.
void remove(const int &index)
Remove observation from container.
GObservation * set(const int &index, const GObservation &obs)
Set observation in container.
std::string print(const GChatter &chatter=NORMAL) const
Print observation list information.
const GObservations::likelihood & function(void) const
Return likelihood function.
virtual ~GObservations(void)
Destructor.
GObservations(void)
Void constructor.
void remove_response_cache(void)
Remove response cache for all models.
const GModels & models(void) const
Return model container.
void eval(void)
Evaluate function.
int get_index(const std::string &instrument, const std::string &id) const
Return observation index by instrument and identifier.
double npred(void) const
Return total number of predicted events in models.
void save(const GFilename &filename) const
Save observations into XML file.
void optimize(GOptimizer &opt)
Optimize model parameters using optimizer.
void errors(GOptimizer &opt)
Computes parameter errors using optimizer.
GObservation * insert(const int &index, const GObservation &obs)
Insert observation into container.
void write(GXml &xml) const
Write observations into XML document.
void errors_hessian(void)
Computes parameter errors using hessian matrix and optimizer.
void load(const GFilename &filename)
Load observations from XML file.
GObservation * append(const GObservation &obs)
Append observation to container.
void free_members(void)
Delete class members.
GObservation * at(const int &index)
Return pointer to observation.
Optimizer function abstract base class.
Optimizer parameter container class.
Abstract optimizer abstract base class.
Vector class.
Definition GVector.hpp:46
XML class.
Definition GXml.hpp:172