GEnergy.i
5.27 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
/***************************************************************************
* GEnergy.i - Energy class *
* ----------------------------------------------------------------------- *
* copyright (C) 2010-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 GEnergy.i
* @brief GEnergy class python interface
* @author Juergen Knoedlseder
*/
%{
/* Put headers and other declarations here that are needed for compilation */
#include "GEnergy.hpp"
#include "GTools.hpp"
%}
/***********************************************************************//**
* @class GEnergy
*
* @brief Class that handles energies in a unit independent way.
*
* The GEnergy class stores an energy value in units of MeV and implements
* methods that provide automatic conversion of the energy values in other
* units. This makes instrument specific implementations more robust and
* reduces the risk of unit errors.
***************************************************************************/
class GEnergy : public GBase {
public:
// Constructors and destructors
GEnergy(void);
GEnergy(const GEnergy& eng);
GEnergy(const double& eng, const std::string& unit);
virtual ~GEnergy(void);
// Operators
GEnergy& operator+=(const GEnergy& eng);
GEnergy& operator-=(const GEnergy& eng);
GEnergy& operator*=(const double& scale);
void operator()(const double& eng, const std::string& unit);
double operator()(const std::string& unit) const;
// Methods
void clear(void);
GEnergy* clone(void) const;
std::string classname(void) const;
double erg(void) const;
double keV(void) const;
double MeV(void) const;
double GeV(void) const;
double TeV(void) const;
double Angstrom(void) const;
double log10erg(void) const;
double log10keV(void) const;
double log10MeV(void) const;
double log10GeV(void) const;
double log10TeV(void) const;
double log10(const std::string& unit) const;
void erg(const double& eng);
void keV(const double& eng);
void MeV(const double& eng);
void GeV(const double& eng);
void TeV(const double& eng);
void Angstrom(const double& wavelength);
void log10erg(const double& eng);
void log10keV(const double& eng);
void log10MeV(const double& eng);
void log10GeV(const double& eng);
void log10TeV(const double& eng);
void log10(const double& eng, const std::string& unit);
};
/***********************************************************************//**
* @brief GEnergy class extension
***************************************************************************/
%extend GEnergy {
GEnergy __add__(const GEnergy& eng) const {
return ((*self) + eng);
}
GEnergy __sub__(const GEnergy& eng) const {
return ((*self) - eng);
}
GEnergy __mul__(const double& factor) const {
return ((*self) * factor);
}
// Python 2.x
GEnergy __div__(const double& factor) const {
return ((*self) / factor);
}
// Python 3.x
GEnergy __truediv__(const double& factor) const {
return ((*self) / factor);
}
// Python 2.x operator/=
GEnergy __idiv__(const double& scale) {
self->operator/=(scale);
return (*self);
}
// Python 3.x operator/=
GEnergy __itruediv__(const double& scale) {
self->operator/=(scale);
return (*self);
}
bool __eq__(const GEnergy& eng) const {
return ((*self) == eng);
}
bool __ne__(const GEnergy& eng) const {
return ((*self) != eng);
}
bool __lt__(const GEnergy& eng) const {
return ((*self) < eng);
}
bool __gt__(const GEnergy& eng) const {
return ((*self) > eng);
}
bool __lte__(const GEnergy& eng) const {
return ((*self) <= eng);
}
bool __gte__(const GEnergy& eng) const {
return ((*self) >= eng);
}
GEnergy copy() {
return (*self);
}
};