Geant4 Cross Reference |
>> 1 // $Id:$ 1 // -*- C++ -*- 2 // -*- C++ -*- 2 // 3 // 3 // ------------------------------------------- 4 // ----------------------------------------------------------------------- 4 // HEP Random 5 // HEP Random 5 // --- RandBinomial -- 6 // --- RandBinomial --- 6 // class header file 7 // class header file 7 // ------------------------------------------- 8 // ----------------------------------------------------------------------- 8 9 9 // Class defining methods for shooting binomia 10 // Class defining methods for shooting binomial distributed random values, 10 // given a sample size n (default=1) and a pro 11 // given a sample size n (default=1) and a probability p (default=0.5). 11 // Default values are used for operator()(). 12 // Default values are used for operator()(). 12 // 13 // 13 // Valid input values satisfy the relation n*m 14 // Valid input values satisfy the relation n*min(p,1-p) > 0. When invalid 14 // values are presented, the code silently ret 15 // values are presented, the code silently returns -1.0. 15 16 16 // =========================================== 17 // ======================================================================= 17 // John Marraffino - Created: 12th May 1998 B 18 // John Marraffino - Created: 12th May 1998 Based on the C-Rand package 18 // by Ernst Stadlober and Fr 19 // by Ernst Stadlober and Franz Niederl of the Technical 19 // University of Graz, Austr 20 // University of Graz, Austria. 20 // Gabriele Cosmo - Removed useless methods a 21 // Gabriele Cosmo - Removed useless methods and data: 5th Jan 1999 21 // M Fischler - put and get to/from strea 22 // M Fischler - put and get to/from streams 12/10/04 22 // =========================================== 23 // ======================================================================= 23 24 24 #ifndef RandBinomial_h 25 #ifndef RandBinomial_h 25 #define RandBinomial_h 1 26 #define RandBinomial_h 1 26 27 27 #include "CLHEP/Random/Random.h" 28 #include "CLHEP/Random/Random.h" 28 #include "CLHEP/Utility/memory.h" 29 #include "CLHEP/Utility/memory.h" 29 30 30 namespace CLHEP { 31 namespace CLHEP { 31 32 32 /** 33 /** 33 * @author 34 * @author 34 * @ingroup random 35 * @ingroup random 35 */ 36 */ 36 class RandBinomial : public HepRandom { 37 class RandBinomial : public HepRandom { 37 38 38 public: 39 public: 39 40 40 inline RandBinomial ( HepRandomEngine& anEng 41 inline RandBinomial ( HepRandomEngine& anEngine, long n=1, 41 42 double p=0.5 ); 42 inline RandBinomial ( HepRandomEngine* anEng 43 inline RandBinomial ( HepRandomEngine* anEngine, long n=1, 43 44 double p=0.5 ); 44 // These constructors should be used to inst 45 // These constructors should be used to instantiate a RandBinomial 45 // distribution object defining a local engi 46 // distribution object defining a local engine for it. 46 // The static generator will be skipped usin 47 // The static generator will be skipped using the non-static methods 47 // defined below. 48 // defined below. 48 // If the engine is passed by pointer the co 49 // If the engine is passed by pointer the corresponding engine object 49 // will be deleted by the RandBinomial destr 50 // will be deleted by the RandBinomial destructor. 50 // If the engine is passed by reference the 51 // If the engine is passed by reference the corresponding engine object 51 // will not be deleted by the RandBinomial d 52 // will not be deleted by the RandBinomial destructor. 52 53 53 virtual ~RandBinomial(); 54 virtual ~RandBinomial(); 54 // Destructor 55 // Destructor 55 56 56 // Static methods to shoot random values usi 57 // Static methods to shoot random values using the static generator 57 58 58 static inline double shoot(); 59 static inline double shoot(); 59 60 60 static double shoot( long n, double p ); 61 static double shoot( long n, double p ); 61 62 62 static void shootArray ( const int size, dou 63 static void shootArray ( const int size, double* vect, 63 long n=1, double p 64 long n=1, double p=0.5 ); 64 65 65 // Static methods to shoot random values us 66 // Static methods to shoot random values using a given engine 66 // by-passing the static generator. 67 // by-passing the static generator. 67 68 68 static inline double shoot( HepRandomEngine* 69 static inline double shoot( HepRandomEngine* anEngine ); 69 70 70 static double shoot( HepRandomEngine* anEngi 71 static double shoot( HepRandomEngine* anEngine, 71 long n, doub 72 long n, double p ); 72 73 73 static void shootArray ( HepRandomEngine* an 74 static void shootArray ( HepRandomEngine* anEngine, const int size, 74 double* vect, long 75 double* vect, long n=1, 75 double p=0.5 ); 76 double p=0.5 ); 76 77 77 // Methods using the localEngine to shoot r 78 // Methods using the localEngine to shoot random values, by-passing 78 // the static generator. 79 // the static generator. 79 80 80 inline double fire(); 81 inline double fire(); 81 82 82 double fire( long n, double p ); 83 double fire( long n, double p ); 83 84 84 void fireArray ( const int size, double* vec 85 void fireArray ( const int size, double* vect); 85 void fireArray ( const int size, double* vec 86 void fireArray ( const int size, double* vect, 86 long n, double p ); 87 long n, double p ); 87 inline double operator()(); 88 inline double operator()(); 88 inline double operator()( long n, double p ) 89 inline double operator()( long n, double p ); 89 90 90 // Save and restore to/from streams 91 // Save and restore to/from streams 91 92 92 std::ostream & put ( std::ostream & os ) con 93 std::ostream & put ( std::ostream & os ) const; 93 std::istream & get ( std::istream & is ); 94 std::istream & get ( std::istream & is ); 94 95 95 std::string name() const; 96 std::string name() const; 96 HepRandomEngine & engine(); 97 HepRandomEngine & engine(); 97 98 98 static std::string distributionName() {retur 99 static std::string distributionName() {return "RandBinomial";} 99 // Provides the name of this distribution cl 100 // Provides the name of this distribution class 100 101 101 private: 102 private: 102 103 103 static double genBinomial( HepRandomEngine * 104 static double genBinomial( HepRandomEngine *anEngine, long n, double p ); 104 105 105 std::shared_ptr<HepRandomEngine> localEngine 106 std::shared_ptr<HepRandomEngine> localEngine; 106 long defaultN; 107 long defaultN; 107 double defaultP; 108 double defaultP; 108 109 109 }; 110 }; 110 111 111 } // namespace CLHEP 112 } // namespace CLHEP 112 113 113 #include "CLHEP/Random/RandBinomial.icc" 114 #include "CLHEP/Random/RandBinomial.icc" 114 115 115 #endif 116 #endif 116 117