GLATEdisp.hpp
5.43 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
/***************************************************************************
* GLATEdisp.hpp - Fermi LAT energy dispersion *
* ----------------------------------------------------------------------- *
* copyright (C) 2010-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 GLATEdisp.hpp
* @brief Fermi LAT energy dispersion class definition.
* @author Juergen Knoedlseder
*/
#ifndef GLATEDISP_HPP
#define GLATEDISP_HPP
/* __ Includes ___________________________________________________________ */
#include <string>
#include <vector>
#include "GBase.hpp"
#include "GLATResponseTable.hpp"
/* __ Forward declarations _______________________________________________ */
class GFilename;
class GFits;
class GFitsTable;
/***********************************************************************//**
* @class GLATEdisp
*
* @brief Interface for the Fermi LAT energy dispersion.
*
* @todo Implement support for older response functions?
***************************************************************************/
class GLATEdisp : public GBase {
public:
// Constructors and destructors
GLATEdisp(void);
explicit GLATEdisp(const GFilename& filename);
GLATEdisp(const GLATEdisp& edisp);
virtual ~GLATEdisp(void);
// Operators
GLATEdisp& operator=(const GLATEdisp& edisp);
//double operator()(const double& logE, const double& ctheta);
//double operator()(const GSkyDir& srcDir, const GEnergy& srcEng,
// const GTime& srcTime, const GLATPointing& pnt);
// Methods
void clear(void);
GLATEdisp* clone(void) const;
std::string classname(void) const;
void load(const GFilename& filename);
void save(const GFilename& filename,
const bool& clobber = false);
void read(const GFits& file);
void write(GFits& file) const;
int size(void) const;
int nenergies(void) const;
int ncostheta(void) const;
//double costhetamin(void) const { return m_min_ctheta; }
//void costhetamin(const double& ctheta);
bool has_phi(void) const { return false; }
std::string print(const GChatter& chatter = NORMAL) const;
private:
// Methods
void init_members(void);
void copy_members(const GLATEdisp& edisp);
void free_members(void);
void read_edisp(const GFitsTable& hdu);
void write_edisp(GFits& file) const;
// Protected members
GLATResponseTable m_edisp_bins; //!< Energy dispersion energy and cos theta binning
std::vector<double> m_norm; //!< Energy dispersion normalization
std::vector<double> m_ls1; //!< Energy dispersion ...
std::vector<double> m_scale; //!< Energy dispersion scaling parameters
};
/***********************************************************************//**
* @brief Return class name
*
* @return String containing the class name ("GLATEdisp").
***************************************************************************/
inline
std::string GLATEdisp::classname(void) const
{
return ("GLATEdisp");
}
/***********************************************************************//**
* @brief Return number of bins in energy dispersion response
*
* @return Number of bins in energy dispersion response.
***************************************************************************/
inline
int GLATEdisp::size(void) const
{
return nenergies()*ncostheta();
}
/***********************************************************************//**
* @brief Return number of energies in energy dispersion response
*
* @return Number of energies in energy dispersion response.
***************************************************************************/
inline
int GLATEdisp::nenergies(void) const
{
return m_edisp_bins.nenergies();
}
/***********************************************************************//**
* @brief Return number of cosine theta bins in energy dispersion response
*
* @return Number of cosine theta bins in energy dispersion response.
***************************************************************************/
inline
int GLATEdisp::ncostheta(void) const
{
return m_edisp_bins.ncostheta();
}
#endif /* GLATEDISP_HPP */