Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/inclxx/utils/include/G4INCLGlobals.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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