GammaLib 2.0.0
Loading...
Searching...
No Matches
GPhoton.hpp
Go to the documentation of this file.
1/***************************************************************************
2 * GPhoton.hpp - Photon class *
3 * ----------------------------------------------------------------------- *
4 * copyright (C) 2011-2018 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 GPhoton.hpp
23 * @brief Photon class definition
24 * @author Juergen Knoedlseder
25 */
26
27#ifndef GPHOTON_HPP
28#define GPHOTON_HPP
29
30/* __ Includes ___________________________________________________________ */
31#include <string>
32#include "GBase.hpp"
33#include "GSkyDir.hpp"
34#include "GEnergy.hpp"
35#include "GTime.hpp"
36
37
38/***********************************************************************//**
39 * @class GPhoton
40 *
41 * @brief Class that handles photons.
42 *
43 * The GPhoton class stores the physical attributes of a photon such as the
44 * photon arrival direction, its energy and its arrival time. This class is
45 * mainly used for Monte Carlo simulations.
46 ***************************************************************************/
47class GPhoton : public GBase {
48
49 // Operator friends
50 friend bool operator==(const GPhoton &a, const GPhoton &b);
51 friend bool operator!=(const GPhoton &a, const GPhoton &b);
52
53public:
54 // Constructors and destructors
55 GPhoton(void);
56 GPhoton(const GSkyDir& dir, const GEnergy& energy, const GTime& time,
57 const int& mc_id = -1);
58 GPhoton(const GPhoton& photon);
59 virtual ~GPhoton(void);
60
61 // Operators
62 GPhoton& operator=(const GPhoton& photon);
63
64 // Methods
65 void clear(void);
66 GPhoton* clone(void) const;
67 std::string classname(void) const;
68 const GSkyDir& dir(void) const;
69 const GEnergy& energy(void) const;
70 const GTime& time(void) const;
71 const int& mc_id(void) const;
72 void dir(const GSkyDir& dir);
73 void energy(const GEnergy& energy);
74 void time(const GTime& time);
75 void mc_id(const int& mc_id);
76 std::string print(const GChatter& chatter = NORMAL) const;
77
78protected:
79 // Protected methods
80 void init_members(void);
81 void copy_members(const GPhoton& photon);
82 void free_members(void);
83
84 // Protected data members
85 GSkyDir m_dir; //!< Photon arrival direction
86 GEnergy m_energy; //!< Photon energy
87 GTime m_time; //!< Photon arrival time
88 int m_mc_id; //!< Monte Carlo simulation origin
89};
90
91
92/***********************************************************************//**
93 * @brief Return class name
94 *
95 * @return String containing the class name ("GPhoton").
96 ***************************************************************************/
97inline
98std::string GPhoton::classname(void) const
99{
100 return ("GPhoton");
101}
102
103
104/***********************************************************************//**
105 * @brief Return photon sky direction
106 *
107 * @return Sky direction of photon.
108 ***************************************************************************/
109inline
110const GSkyDir& GPhoton::dir(void) const
111{
112 return m_dir;
113}
114
115
116/***********************************************************************//**
117 * @brief Return photon energy
118 *
119 * @return Energy of photon.
120 ***************************************************************************/
121inline
122const GEnergy& GPhoton::energy(void) const
123{
124 return m_energy;
125}
126
127
128/***********************************************************************//**
129 * @brief Return photon time
130 *
131 * @return Time of photon.
132 ***************************************************************************/
133inline
134const GTime& GPhoton::time(void) const
135{
136 return m_time;
137}
138
139
140/***********************************************************************//**
141 * @brief Return photon Monte-Carlo identifier
142 *
143 * @return Photon Monte-Carlo identifier.
144 ***************************************************************************/
145inline
146const int& GPhoton::mc_id(void) const
147{
148 return m_mc_id;
149}
150
151
152/***********************************************************************//**
153 * @brief Set photon sky direction
154 *
155 * @param[in] dir Sky direction of photon.
156 ***************************************************************************/
157inline
158void GPhoton::dir(const GSkyDir& dir)
159{
160 m_dir = dir;
161 return;
162}
163
164
165/***********************************************************************//**
166 * @brief Set photon energy
167 *
168 * @param[in] energy Photon energy.
169 ***************************************************************************/
170inline
171void GPhoton::energy(const GEnergy& energy)
172{
174 return;
175}
176
177
178/***********************************************************************//**
179 * @brief Set photon time
180 *
181 * @param[in] time Photon time.
182 ***************************************************************************/
183inline
184void GPhoton::time(const GTime& time)
185{
186 m_time = time;
187 return;
188}
189
190
191/***********************************************************************//**
192 * @brief Set photon Monte-Carlo identifier
193 *
194 * @param[in] mc_id Photon Monte-Carlo identifier.
195 ***************************************************************************/
196inline
197void GPhoton::mc_id(const int& mc_id)
198{
199 m_mc_id = mc_id;
200 return;
201}
202
203
204/***********************************************************************//**
205 * @brief Equality friend operator
206 *
207 * @param[in] a First photon.
208 * @param[in] b Second photon.
209 * @return True is first photon is identical to second photon
210 ***************************************************************************/
211inline
212bool operator==(const GPhoton &a, const GPhoton &b)
213{
214 return (a.m_energy == b.m_energy && a.m_time == b.m_time &&
215 a.m_dir.dist(b.m_dir) == 0.0);
216}
217
218
219/***********************************************************************//**
220 * @brief Non-equality friend operator
221 *
222 * @param[in] a First photon.
223 * @param[in] b Second photon.
224 * @return True is first photon is not identical to second photon
225 ***************************************************************************/
226inline
227bool operator!=(const GPhoton &a, const GPhoton &b)
228{
229 return (a.m_energy != b.m_energy || a.m_time != b.m_time ||
230 a.m_dir.dist(b.m_dir) > 0.0);
231}
232
233#endif /* GPHOTON_HPP */
Definition of interface for all GammaLib classes.
Energy value class definition.
bool operator!=(const GPhoton &a, const GPhoton &b)
Non-equality friend operator.
Definition GPhoton.hpp:227
bool operator==(const GPhoton &a, const GPhoton &b)
Equality friend operator.
Definition GPhoton.hpp:212
Sky direction class interface definition.
Time class interface definition.
GChatter
Definition GTypemaps.hpp:33
@ NORMAL
Definition GTypemaps.hpp:36
Interface class for all GammaLib classes.
Definition GBase.hpp:52
Class that handles energies in a unit independent way.
Definition GEnergy.hpp:48
Class that handles photons.
Definition GPhoton.hpp:47
void clear(void)
Clear photon.
Definition GPhoton.cpp:162
GPhoton & operator=(const GPhoton &photon)
Assignment operator.
Definition GPhoton.cpp:132
GPhoton(void)
Void constructor.
Definition GPhoton.cpp:54
std::string print(const GChatter &chatter=NORMAL) const
Print photon.
Definition GPhoton.cpp:193
const GTime & time(void) const
Return photon time.
Definition GPhoton.hpp:134
GSkyDir m_dir
Photon arrival direction.
Definition GPhoton.hpp:85
friend bool operator!=(const GPhoton &a, const GPhoton &b)
Non-equality friend operator.
Definition GPhoton.hpp:227
void init_members(void)
Initialise class members.
Definition GPhoton.cpp:228
int m_mc_id
Monte Carlo simulation origin.
Definition GPhoton.hpp:88
const GSkyDir & dir(void) const
Return photon sky direction.
Definition GPhoton.hpp:110
const int & mc_id(void) const
Return photon Monte-Carlo identifier.
Definition GPhoton.hpp:146
void free_members(void)
Delete class members.
Definition GPhoton.cpp:262
std::string classname(void) const
Return class name.
Definition GPhoton.hpp:98
GTime m_time
Photon arrival time.
Definition GPhoton.hpp:87
GEnergy m_energy
Photon energy.
Definition GPhoton.hpp:86
GPhoton * clone(void) const
Clone photon.
Definition GPhoton.cpp:180
virtual ~GPhoton(void)
Destructor.
Definition GPhoton.cpp:110
friend bool operator==(const GPhoton &a, const GPhoton &b)
Equality friend operator.
Definition GPhoton.hpp:212
const GEnergy & energy(void) const
Return photon energy.
Definition GPhoton.hpp:122
void copy_members(const GPhoton &photon)
Copy class members.
Definition GPhoton.cpp:246
Sky direction class.
Definition GSkyDir.hpp:62
double dist(const GSkyDir &dir) const
Compute angular distance between sky directions in radians.
Definition GSkyDir.hpp:271
Time class.
Definition GTime.hpp:55