Geant4 Cross Reference |
1 // -*- C++ -*- 1 2 // 3 // ------------------------------------------- 4 // HEP Random 5 // --- RandPoisson --- 6 // class header file 7 // ------------------------------------------- 8 // This file is part of Geant4 (simulation too 9 10 // Class defining methods for shooting numbers 11 // distribution, given a mean (Algorithm taken 12 // Numerical Recipes in C, Second Edition". 13 // Default mean value is set to 1, value used 14 15 // =========================================== 16 // Gabriele Cosmo - Created: 5th September 199 17 // - Added not static Shoot() m 18 // - Algorithm now operates on 19 // - Added methods to shoot arr 20 // J.Marraffino - Added default mean as attr 21 // operator() with mean: 16th 22 // Gabriele Cosmo - Relocated static data from 23 // M. Fischler - Moved meanMax and defaultM 24 // to accomodate derived classes RandPo 25 // M Fischler - put and get to/from strea 26 // =========================================== 27 28 #ifndef RandPoisson_h 29 #define RandPoisson_h 1 30 31 #include "CLHEP/Random/Random.h" 32 #include "CLHEP/Utility/memory.h" 33 #include "CLHEP/Utility/thread_local.h" 34 35 namespace CLHEP { 36 37 /** 38 * @author 39 * @ingroup random 40 */ 41 class RandPoisson : public HepRandom { 42 43 public: 44 45 inline RandPoisson ( HepRandomEngine& anEngi 46 inline RandPoisson ( HepRandomEngine* anEngi 47 // These constructors should be used to inst 48 // distribution object defining a local engi 49 // The static generator will be skipped usin 50 // defined below. 51 // If the engine is passed by pointer the co 52 // will be deleted by the RandPoisson destru 53 // If the engine is passed by reference the 54 // will not be deleted by the RandPoisson de 55 56 virtual ~RandPoisson(); 57 // Destructor 58 59 // Save and restore to/from streams 60 61 std::ostream & put ( std::ostream & os ) con 62 std::istream & get ( std::istream & is ); 63 64 // Static methods to shoot random values usi 65 66 static long shoot( double mean=1.0 ); 67 68 static void shootArray ( const int size, lo 69 70 // Static methods to shoot random values us 71 // by-passing the static generator. 72 73 static long shoot( HepRandomEngine* anEngin 74 75 static void shootArray ( HepRandomEngine* a 76 const int size, lo 77 78 // Methods using the localEngine to shoot r 79 // the static generator. 80 81 long fire(); 82 long fire( double mean ); 83 84 void fireArray ( const int size, long* vect 85 void fireArray ( const int size, long* vect, 86 87 double operator()(); 88 double operator()( double mean ); 89 90 std::string name() const; 91 HepRandomEngine & engine(); 92 93 static std::string distributionName() {retur 94 // Provides the name of this distribution cl 95 96 protected: 97 98 double meanMax; 99 double defaultMean; 100 101 static double getOldMean() {return oldm_st; 102 103 static double getMaxMean() {return meanMax_ 104 105 static void setOldMean( double val ){oldm_s 106 107 static double* getPStatus() {return status_ 108 109 static void setPStatus(double sq, double alx 110 status_st[0] = sq; status_st[1] = alxm; st 111 } 112 113 inline HepRandomEngine* getLocalEngine(); 114 115 private: 116 117 std::shared_ptr<HepRandomEngine> localEngine 118 double status[3], oldm; 119 120 // static data 121 static CLHEP_THREAD_LOCAL double status_st[3 122 static CLHEP_THREAD_LOCAL double oldm_st; 123 static const double meanMax_st; 124 125 }; 126 127 } // namespace CLHEP 128 129 #include "CLHEP/Random/RandPoisson.icc" 130 131 #endif 132