GModelSpatialRadialGauss.hpp
5.87 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
/***************************************************************************
* GModelSpatialRadialGauss.hpp - Radial Gaussian source model class *
* ----------------------------------------------------------------------- *
* 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 GModelSpatialRadialGauss.hpp
* @brief Radial Gaussian model class interface definition
* @author Juergen Knoedlseder
*/
#ifndef GMODELSPATIALRADIALGAUSS_HPP
#define GMODELSPATIALRADIALGAUSS_HPP
/* __ Includes ___________________________________________________________ */
#include <string>
#include "GModelSpatialRadial.hpp"
#include "GModelPar.hpp"
#include "GSkyDir.hpp"
#include "GEnergy.hpp"
#include "GTime.hpp"
#include "GXmlElement.hpp"
/***********************************************************************//**
* @class GModelSpatialRadialGauss
*
* @brief Radial Gaussian model class
*
* This class implements the spatial component of the factorised source
* model for a Gaussian source.
***************************************************************************/
class GModelSpatialRadialGauss : public GModelSpatialRadial {
public:
// Constructors and destructors
GModelSpatialRadialGauss(void);
GModelSpatialRadialGauss(const GSkyDir& dir, const double& sigma);
explicit GModelSpatialRadialGauss(const GXmlElement& xml);
GModelSpatialRadialGauss(const GModelSpatialRadialGauss& model);
virtual ~GModelSpatialRadialGauss(void);
// Operators
virtual GModelSpatialRadialGauss& operator=(const GModelSpatialRadialGauss& model);
// Implemented pure virtual methods
virtual void clear(void);
virtual GModelSpatialRadialGauss* clone(void) const;
virtual std::string classname(void) const;
virtual std::string type(void) const;
virtual double eval(const double& theta,
const GEnergy& energy,
const GTime& time) const;
virtual double eval_gradients(const double& theta,
const GEnergy& energy,
const GTime& time) const;
virtual GSkyDir mc(const GEnergy& energy,
const GTime& time,
GRan& ran) const;
virtual bool contains(const GSkyDir& dir,
const double& margin = 0.0) const;
virtual double theta_max(void) const;
virtual void read(const GXmlElement& xml);
virtual void write(GXmlElement& xml) const;
virtual std::string print(const GChatter& chatter = NORMAL) const;
// Other methods
double sigma(void) const;
void sigma(const double& sigma);
protected:
// Protected methods
void init_members(void);
void copy_members(const GModelSpatialRadialGauss& model);
void free_members(void);
// Protected members
GModelPar m_sigma; //!< Gaussian width (deg)
};
/***********************************************************************//**
* @brief Return class name
*
* @return String containing the class name ("GModelSpatialRadialGauss").
***************************************************************************/
inline
std::string GModelSpatialRadialGauss::classname(void) const
{
return ("GModelSpatialRadialGauss");
}
/***********************************************************************//**
* @brief Return model type
*
* @return "GaussFunction".
*
* Returns the type of the radial Gauss model.
***************************************************************************/
inline
std::string GModelSpatialRadialGauss::type(void) const
{
return "GaussFunction";
}
/***********************************************************************//**
* @brief Return Gaussian sigma
*
* @return Gaussian sigma (degrees).
*
* Returns the Gaussian sigma in degrees.
***************************************************************************/
inline
double GModelSpatialRadialGauss::sigma(void) const
{
return (m_sigma.value());
}
/***********************************************************************//**
* @brief Set Gaussian sigma
*
* @param[in] sigma Gaussian sigma (degrees).
*
* Sets the Gaussian sigma in degrees.
***************************************************************************/
inline
void GModelSpatialRadialGauss::sigma(const double& sigma)
{
m_sigma.value(sigma);
return;
}
#endif /* GMODELSPATIALRADIALGAUSS_HPP */