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