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