00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef GTOOLS_HPP
00028 #define GTOOLS_HPP
00029
00030
00031 #include <vector>
00032 #include <string>
00033 #include <complex>
00034 #include <cmath>
00035 #include <cfloat>
00036
00037
00038 class GEnergy;
00039 class GFilename;
00040 class GXmlElement;
00041
00042
00043 namespace gammalib {
00044 const double MeV2erg = 1.6021765e-6;
00045 const double erg2MeV = 624150.96;
00046 const double MeV2Angstrom = 1.239841875e-2;
00047 const double pc2cm = 3.08568025e18;
00048 const double sec_in_day = 86400.0;
00049 const double sec2day = 1.0 / sec_in_day;
00050 const double tai2tt = 32.184;
00051 }
00052
00053
00054 namespace gammalib {
00055 std::string strip_whitespace(const std::string& arg);
00056 std::string strip_chars(const std::string& arg,
00057 const std::string& chars);
00058 std::string rstrip_chars(const std::string& arg,
00059 const std::string& chars);
00060 std::string expand_env(const std::string& arg);
00061 std::string filepath(const std::string& pathname,
00062 const std::string& filename);
00063 std::string str(const unsigned short int& value);
00064 std::string str(const unsigned int& value);
00065 std::string str(const unsigned long int& value);
00066 std::string str(const unsigned long long int& value);
00067 std::string str(const short int& value);
00068 std::string str(const int& value);
00069 std::string str(const long int& value);
00070 std::string str(const long long int& value);
00071 std::string str(const float& value, const int& precision = 0);
00072 std::string str(const double& value, const int& precision = 0);
00073 std::string str(const std::complex<double>& value,
00074 const int& precision = 0);
00075 char* tochar(const std::string& arg);
00076 short toshort(const std::string& arg);
00077 unsigned short toushort(const std::string& arg);
00078 int toint(const std::string& arg);
00079 unsigned int touint(const std::string& arg);
00080 long tolong(const std::string& arg);
00081 unsigned long toulong(const std::string& arg);
00082 long long tolonglong(const std::string& arg);
00083 unsigned long long toulonglong(const std::string& arg);
00084 float tofloat(const std::string& arg);
00085 double todouble(const std::string& arg);
00086 std::string toupper(const std::string& s);
00087 std::string tolower(const std::string& s);
00088 std::vector<std::string> split(const std::string& s, const std::string& sep);
00089 std::string fill(const std::string& s, const int& n);
00090 std::string left(const std::string& s, const int& n,
00091 const char& c = ' ');
00092 std::string right(const std::string& s, const int& n,
00093 const char& c = ' ');
00094 std::string centre(const std::string& s, const int& n,
00095 const char& c = ' ');
00096 std::string parformat(const std::string& s, const int& indent = 0);
00097 std::string number(const std::string& noun, const int& number);
00098 double plaw_photon_flux(const double& emin,
00099 const double& emax,
00100 const double& epivot,
00101 const double& gamma);
00102 double plaw_energy_flux(const double& emin,
00103 const double& emax,
00104 const double& epivot,
00105 const double& gamma);
00106 GEnergy elogmean(const GEnergy& a, const GEnergy& b);
00107 bool dir_exists(const std::string& dirname);
00108 bool is_infinite(const double& x);
00109 bool is_notanumber(const double& x);
00110 bool contains(const std::string& str,
00111 const std::string& substring);
00112 bool contains(const std::vector<std::string> strings,
00113 const std::string& string);
00114 void warning(const std::string& origin,
00115 const std::string& message);
00116 std::string xml2str(const std::string& arg);
00117 std::string str2xml(const std::string& arg);
00118 bool xml_has_par(const GXmlElement& xml,
00119 const std::string& name);
00120 GXmlElement* xml_need_par(const std::string& origin,
00121 GXmlElement& xml,
00122 const std::string& name);
00123 const GXmlElement* xml_get_par(const std::string& origin,
00124 const GXmlElement& xml,
00125 const std::string& name);
00126 std::string xml_get_attr(const std::string& origin,
00127 const GXmlElement& xml,
00128 const std::string& name,
00129 const std::string& attribute);
00130 void xml_check_par(const std::string& origin,
00131 const std::string& name,
00132 const int& number);
00133 GFilename xml_file_expand(const GXmlElement& xml,
00134 const std::string& filename);
00135 GFilename xml_file_reduce(const GXmlElement& xml,
00136 const std::string& filename);
00137 int recv(int fd, char *buffer, int len, int flags,
00138 int timeout);
00139 }
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152 inline
00153 bool gammalib::is_infinite(const double& x)
00154 {
00155 return (x < -DBL_MAX || x > DBL_MAX);
00156 }
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169 inline
00170 bool gammalib::is_notanumber(const double& x)
00171 {
00172 return (x != x);
00173 }
00174
00175 #endif