Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // INCL++ intra-nuclear cascade model 27 // Alain Boudard, CEA-Saclay, France 28 // Joseph Cugnon, University of Liege, Belgium 29 // Jean-Christophe David, CEA-Saclay, France 30 // Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland 31 // Sylvie Leray, CEA-Saclay, France 32 // Davide Mancusi, CEA-Saclay, France 33 // 34 #define INCLXX_IN_GEANT4_MODE 1 35 36 #include "globals.hh" 37 38 #ifndef G4INCLGlobals_hh 39 #define G4INCLGlobals_hh 1 40 41 #include <cmath> 42 #include <string> 43 #include <vector> 44 #include "G4INCLParticleType.hh" 45 46 namespace G4INCL { 47 class Particle; 48 49 namespace PhysicalConstants { 50 /// \brief \f$\hbar c\f$ [MeV*fm] 51 const G4double hc = 197.328; 52 53 /// \brief \f$\hbar^2 c^2\f$ [MeV^2*fm^2] 54 const G4double hcSquared = hc*hc; 55 56 /// \brief Fermi momentum [MeV/c] 57 const G4double Pf = 1.37*hc; 58 // const G4double Pf = 1.36828*hc; 59 60 /** \brief Coulomb conversion factor [MeV*fm] 61 * 62 * \f[ e^2/(4 pi epsilon_0) \f] 63 */ 64 const G4double eSquared = 1.439964; 65 } 66 67 namespace Math { 68 const G4double pi = 3.14159265358979323846264338328; 69 const G4double twoPi = 2.0 * pi; 70 const G4double tenPi = 10.0 * pi; 71 const G4double piOverTwo = 0.5 * pi; 72 const G4double oneOverSqrtTwo = 1./std::sqrt((G4double)2.); 73 const G4double oneOverSqrtThree = 1./std::sqrt((G4double)3.); 74 const G4double oneThird = 1./3.; 75 const G4double twoThirds = 2./3.; 76 const G4double sqrtFiveThirds = std::sqrt(5./3.); 77 const G4double sqrtThreeFifths = std::sqrt(3./5.); 78 79 inline G4double toDegrees(G4double radians) { 80 return radians * (180.0 / pi); 81 } 82 83 inline G4int heaviside(G4int n) { 84 if(n < 0) return 0; 85 else return 1; 86 } 87 88 inline G4double pow13(G4double x) { 89 return std::pow(x, oneThird); 90 } 91 92 inline G4double powMinus13(G4double x) { 93 return std::pow(x, -oneThird); 94 } 95 96 inline G4double pow23(G4double x) { 97 return std::pow(x, twoThirds); 98 } 99 100 inline G4double aSinH(G4double x) { 101 return std::log(x + std::sqrt(x*x+1.)); 102 } 103 104 /** 105 * A simple sign function that allows us to port fortran code to c++ more easily. 106 */ 107 template <typename T> inline G4int sign(const T t) { 108 return t > 0 ? 1: t < 0 ? -1 : 0; 109 } 110 111 /// brief Return the largest of the two arguments 112 template <typename T> inline T max(const T t1, const T t2) { 113 return t1 > t2 ? t1 : t2; 114 } 115 116 /// brief Return the smallest of the two arguments 117 template <typename T> inline T min(const T t1, const T t2) { 118 return t1 < t2 ? t1 : t2; 119 } 120 121 /** \brief Cumulative distribution function for Gaussian 122 * 123 * A public-domain approximation taken from Abramowitz and Stegun. Applies 124 * to a Gaussian with mean=0 and sigma=1. 125 * 126 * \param x a Gaussian variable 127 */ 128 G4double gaussianCDF(const G4double x); 129 130 /** \brief Generic cumulative distribution function for Gaussian 131 * 132 * A public-domain approximation taken from Abramowitz and Stegun. Applies 133 * to a generic Gaussian. 134 * 135 * \param x a Gaussian variable 136 * \param x0 mean of the Gaussian 137 * \param sigma standard deviation of the Gaussian 138 */ 139 G4double gaussianCDF(const G4double x, const G4double x0, const G4double sigma); 140 141 /** \brief Inverse cumulative distribution function for Gaussian 142 * 143 * A public-domain approximation taken from Abramowitz and Stegun. Applies 144 * to a Gaussian with mean=0 and sigma=1. 145 * 146 * \param x a uniform variate 147 * \return a Gaussian variate 148 */ 149 G4double inverseGaussianCDF(const G4double x); 150 151 /// \brief Calculates arcsin with some tolerance on illegal arguments 152 G4double arcSin(const G4double x); 153 154 /// \brief Calculates arccos with some tolerance on illegal arguments 155 G4double arcCos(const G4double x); 156 } 157 158 namespace ParticleConfig { 159 G4bool isPair(Particle const * const p1, Particle const * const p2, ParticleType t1, ParticleType t2); 160 } 161 162 #ifndef INCLXX_IN_GEANT4_MODE 163 namespace String { 164 void wrap(std::string &str, const size_t lineLength=78, const std::string &separators=" \t"); 165 void replaceAll(std::string &str, const std::string &from, const std::string &to, const size_t maxPosition=std::string::npos); 166 std::vector<std::string> tokenize(std::string const &str, const std::string &delimiters); 167 G4bool isInteger(std::string const &str); 168 std::string expandPath(std::string const &path); 169 } 170 #endif 171 } 172 #endif 173