GTools.hpp
8.62 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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/***************************************************************************
* GTools.hpp - GammaLib tools *
* ----------------------------------------------------------------------- *
* copyright (C) 2008-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 GTools.hpp
* @brief Gammalib tools definition
* @author Juergen Knoedlseder
*/
#ifndef GTOOLS_HPP
#define GTOOLS_HPP
/* __ Includes ___________________________________________________________ */
#include <vector>
#include <string>
#include <cmath>
#include <cfloat>
/* __ Forward declarations _______________________________________________ */
class GEnergy;
class GFilename;
class GXmlElement;
/* __ Constants __________________________________________________________ */
namespace gammalib {
const double MeV2erg = 1.6021765e-6; // MeV => erg
const double erg2MeV = 624150.96; // erg => MeV
const double MeV2Angstrom = 1.239841875e-2; // MeV => Angstrom
const double pc2cm = 3.08568025e18; // pc => cm
const double sec_in_day = 86400.0; // seconds per day
const double sec2day = 1.0 / sec_in_day; // seconds => days
const double tai2tt = 32.184; // TAI => TT time system
}
/* __ Prototypes ________________________________________________________ */
namespace gammalib {
std::string strip_whitespace(const std::string& arg);
std::string strip_chars(const std::string& arg,
const std::string& chars);
std::string expand_env(const std::string& arg);
std::string filepath(const std::string& pathname,
const std::string& filename);
std::string str(const unsigned short int& value);
std::string str(const unsigned int& value);
std::string str(const unsigned long int& value);
std::string str(const unsigned long long int& value);
std::string str(const short int& value);
std::string str(const int& value);
std::string str(const long int& value);
std::string str(const long long int& value);
std::string str(const float& value, const int& precision = 0);
std::string str(const double& value, const int& precision = 0);
char* tochar(const std::string& arg);
short toshort(const std::string& arg);
unsigned short toushort(const std::string& arg);
int toint(const std::string& arg);
unsigned int touint(const std::string& arg);
long tolong(const std::string& arg);
unsigned long toulong(const std::string& arg);
long long tolonglong(const std::string& arg);
unsigned long long toulonglong(const std::string& arg);
float tofloat(const std::string& arg);
double todouble(const std::string& arg);
std::string toupper(const std::string& s);
std::string tolower(const std::string& s);
std::vector<std::string> split(const std::string& s, const std::string& sep);
std::string fill(const std::string& s, const int& n);
std::string left(const std::string& s, const int& n,
const char& c = ' ');
std::string right(const std::string& s, const int& n,
const char& c = ' ');
std::string centre(const std::string& s, const int& n,
const char& c = ' ');
std::string parformat(const std::string& s, const int& indent = 0);
std::string number(const std::string& noun, const int& number);
double plaw_photon_flux(const double& emin,
const double& emax,
const double& epivot,
const double& gamma);
double plaw_energy_flux(const double& emin,
const double& emax,
const double& epivot,
const double& gamma);
GEnergy elogmean(const GEnergy& a, const GEnergy& b);
bool dir_exists(const std::string& dirname);
bool is_infinite(const double& x);
bool is_notanumber(const double& x);
bool contains(const std::string& str,
const std::string& substring);
void warning(const std::string& origin,
const std::string& message);
std::string xml2str(const std::string& arg);
std::string str2xml(const std::string& arg);
bool xml_has_par(const GXmlElement& xml,
const std::string& name);
GXmlElement* xml_need_par(const std::string& origin,
GXmlElement& xml,
const std::string& name);
const GXmlElement* xml_get_par(const std::string& origin,
const GXmlElement& xml,
const std::string& name);
std::string xml_get_attr(const std::string& origin,
const GXmlElement& xml,
const std::string& name,
const std::string& attribute);
void xml_check_par(const std::string& origin,
const std::string& name,
const int& number);
GFilename xml_file_expand(const GXmlElement& xml,
const std::string& filename);
GFilename xml_file_reduce(const GXmlElement& xml,
const std::string& filename);
int recv(int fd, char *buffer, int len, int flags,
int timeout);
}
/***********************************************************************//**
* @brief Signal if argument is infinite
*
* @param[in] x Argument.
* @return True if argument @p x is infinite, false otherwise.
*
* Signals if the argument @p x is infinite.
*
* This function has been copied from gnulib.
***************************************************************************/
inline
bool gammalib::is_infinite(const double& x)
{
return (x < -DBL_MAX || x > DBL_MAX);
}
/***********************************************************************//**
* @brief Signal if argument is not a number
*
* @param[in] x Argument.
* @return True if argument @p x is not a number, false otherwise.
*
* Signals if the argument @p x is not a number.
*
* This function is a very simple kluge. It may not work on all systems.
***************************************************************************/
inline
bool gammalib::is_notanumber(const double& x)
{
return (x != x);
}
#endif /* GTOOLS_HPP */