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