Geant4 Cross Reference |
1 // -*- C++ -*- 1 // -*- C++ -*- 2 // 2 // 3 // ------------------------------------------- 3 // ----------------------------------------------------------------------- 4 // HEP Random 4 // HEP Random 5 // --- HepStat --- 5 // --- HepStat --- 6 // Purely static class containing use 6 // Purely static class containing useful statistics methods 7 7 8 // ------------------------------------------- 8 // ----------------------------------------------------------------------- 9 9 10 // HepStat is a substitute for using a namespa 10 // HepStat is a substitute for using a namespace. 11 // One would never instantiate a HepStat objec 11 // One would never instantiate a HepStat object; 12 // usage of any of these methods looks like -- 12 // usage of any of these methods looks like -- 13 // 13 // 14 // double x = HepStat::erf ( .1 ); 14 // double x = HepStat::erf ( .1 ); 15 // 15 // 16 // A user may wish to improve the readability 16 // A user may wish to improve the readability of algortihm code which uses 17 // one method many times by lines like using H 17 // one method many times by lines like using HepStat::erf 18 // 18 // 19 // and later, x = erf(u); will work. 19 // and later, x = erf(u); will work. 20 // 20 // 21 21 22 // These methods are implemented in separate . 22 // These methods are implemented in separate .cc files so that 23 // user code need pull in only the code that i 23 // user code need pull in only the code that is necessary. Time 24 // (ROUGH estimates in cycles) and table footp 24 // (ROUGH estimates in cycles) and table footprint info is provided 25 // in this header. 25 // in this header. 26 26 27 27 28 // =========================================== 28 // ======================================================================= 29 // M. Fischler - Created: 1/25/00 29 // M. Fischler - Created: 1/25/00 30 // 30 // 31 // M. Fischler - Inserted flatToGaussian 1/ 31 // M. Fischler - Inserted flatToGaussian 1/25/00 32 // From code of an attempt to speed u 32 // From code of an attempt to speed up RandGauss 33 // by use of tables and splines. The 33 // by use of tables and splines. The code was not 34 // significantly faster than Box- 34 // significantly faster than Box-Mueller, so that 35 // algorithm is left as the RandG 35 // algorithm is left as the RandGauss implementation. 36 // - Inserted inverseErf 36 // - Inserted inverseErf 37 // M. Fischler - Inserted gammln 2/4/00 37 // M. Fischler - Inserted gammln 2/4/00 38 // M. Fischler - Made constructor private; 38 // M. Fischler - Made constructor private; removed private destructor 4/17/00 39 // =========================================== 39 // ======================================================================= 40 40 41 #ifndef HepStat_h 41 #ifndef HepStat_h 42 #define HepStat_h 1 42 #define HepStat_h 1 43 43 44 namespace CLHEP { 44 namespace CLHEP { 45 45 46 /** 46 /** 47 * @author 47 * @author 48 * @ingroup random 48 * @ingroup random 49 */ 49 */ 50 class HepStat { 50 class HepStat { 51 51 52 private: 52 private: 53 HepStat(); 53 HepStat(); 54 // You CANNOT instantiate a HepStat object. 54 // You CANNOT instantiate a HepStat object. 55 55 56 public: 56 public: 57 57 58 static double flatToGaussian (double r); 58 static double flatToGaussian (double r); 59 // This is defined by the satement that if 59 // This is defined by the satement that if e() provides a uniform random 60 // on (0,1) then flatToGaussian(e()) is dis 60 // on (0,1) then flatToGaussian(e()) is distributed as a unit normal 61 // Gaussian. That is, flatToGaussian is th 61 // Gaussian. That is, flatToGaussian is the inverse of the c.d.f. of 62 // a Gaussian. 62 // a Gaussian. 63 // Footprint: 30 K // Time: 150 cycl 63 // Footprint: 30 K // Time: 150 cycles 64 64 65 static double inverseErf (double t); 65 static double inverseErf (double t); 66 static double erf (double x); 66 static double erf (double x); 67 // defined in flatToGaussian.cc 67 // defined in flatToGaussian.cc 68 68 69 static double erfQ (double x); 69 static double erfQ (double x); 70 // Quicker, and with less footprint, than er 70 // Quicker, and with less footprint, than erf and gaussianCDF 71 // but only accurate to 7 digits. 71 // but only accurate to 7 digits. 72 // Footprint: 0 // Time: 72 // Footprint: 0 // Time: 73 73 74 static double gammln (double x); 74 static double gammln (double x); 75 // ln (gamma(x)) 75 // ln (gamma(x)) 76 76 77 }; 77 }; 78 78 79 } // namespace CLHEP 79 } // namespace CLHEP 80 80 81 #endif 81 #endif 82 82