Geant4 Cross Reference |
>> 1 // $Id:$ 1 // -*- C++ -*- 2 // -*- C++ -*- 2 // 3 // 3 // ------------------------------------------- 4 // ----------------------------------------------------------------------- 4 // HEP Random 5 // HEP Random 5 // --- RandExponential 6 // --- RandExponential --- 6 // class header file 7 // class header file 7 // ------------------------------------------- 8 // ----------------------------------------------------------------------- 8 // This file is part of Geant4 (simulation too 9 // This file is part of Geant4 (simulation toolkit for HEP). 9 // 10 // 10 // Class defining methods for shooting exponen 11 // Class defining methods for shooting exponential distributed random 11 // values, given a mean (default mean = 1). 12 // values, given a mean (default mean = 1). 12 // Default mean is used for operator()(). 13 // Default mean is used for operator()(). 13 14 14 // =========================================== 15 // ======================================================================= 15 // Gabriele Cosmo - Created: 5th September 199 16 // Gabriele Cosmo - Created: 5th September 1995 16 // - Added methods to shoot arr 17 // - Added methods to shoot arrays: 28th July 1997 17 // J.Marraffino - Added default mean as attr 18 // J.Marraffino - Added default mean as attribute and 18 // operator() with mean: 16th 19 // operator() with mean: 16th Feb 1998 19 // M Fischler - put and get to/from strea 20 // M Fischler - put and get to/from streams 12/10/04 20 // =========================================== 21 // ======================================================================= 21 22 22 #ifndef RandExponential_h 23 #ifndef RandExponential_h 23 #define RandExponential_h 1 24 #define RandExponential_h 1 24 25 25 #include "CLHEP/Random/Random.h" 26 #include "CLHEP/Random/Random.h" 26 #include "CLHEP/Utility/memory.h" 27 #include "CLHEP/Utility/memory.h" 27 28 28 namespace CLHEP { 29 namespace CLHEP { 29 30 30 /** 31 /** 31 * @author <Gabriele.Cosmo@cern.ch> 32 * @author <Gabriele.Cosmo@cern.ch> 32 * @ingroup random 33 * @ingroup random 33 */ 34 */ 34 class RandExponential : public HepRandom { 35 class RandExponential : public HepRandom { 35 36 36 public: 37 public: 37 38 38 inline RandExponential ( HepRandomEngine& an 39 inline RandExponential ( HepRandomEngine& anEngine, double mean=1.0 ); 39 inline RandExponential ( HepRandomEngine* an 40 inline RandExponential ( HepRandomEngine* anEngine, double mean=1.0 ); 40 // These constructors should be used to inst 41 // These constructors should be used to instantiate a RandExponential 41 // distribution object defining a local engi 42 // distribution object defining a local engine for it. 42 // The static generator will be skipped usin 43 // The static generator will be skipped using the non-static methods 43 // defined below. 44 // defined below. 44 // If the engine is passed by pointer the co 45 // If the engine is passed by pointer the corresponding engine object 45 // will be deleted by the RandExponential de 46 // will be deleted by the RandExponential destructor. 46 // If the engine is passed by reference the 47 // If the engine is passed by reference the corresponding engine object 47 // will not be deleted by the RandExponentia 48 // will not be deleted by the RandExponential destructor. 48 49 49 virtual ~RandExponential(); 50 virtual ~RandExponential(); 50 // Destructor 51 // Destructor 51 52 52 // Static methods to shoot random values usi 53 // Static methods to shoot random values using the static generator 53 54 54 static double shoot(); 55 static double shoot(); 55 56 56 static double shoot( double mean ); 57 static double shoot( double mean ); 57 58 58 static void shootArray ( const int size, do 59 static void shootArray ( const int size, double* vect, 59 double mean=1.0 ); 60 double mean=1.0 ); 60 61 61 // Static methods to shoot random values us 62 // Static methods to shoot random values using a given engine 62 // by-passing the static generator. 63 // by-passing the static generator. 63 64 64 static inline double shoot( HepRandomEngine 65 static inline double shoot( HepRandomEngine* anEngine ); 65 66 66 static inline double shoot( HepRandomEngine 67 static inline double shoot( HepRandomEngine* anEngine, double mean ); 67 68 68 static void shootArray ( HepRandomEngine* a 69 static void shootArray ( HepRandomEngine* anEngine, const int size, 69 double* vect, doub 70 double* vect, double mean=1.0 ); 70 71 71 // Methods using the localEngine to shoot r 72 // Methods using the localEngine to shoot random values, by-passing 72 // the static generator. 73 // the static generator. 73 74 74 inline double fire(); 75 inline double fire(); 75 76 76 inline double fire( double mean ); 77 inline double fire( double mean ); 77 78 78 void fireArray ( const int size, double* vec 79 void fireArray ( const int size, double* vect ); 79 void fireArray ( const int size, double* vec 80 void fireArray ( const int size, double* vect, double mean ); 80 81 81 double operator()(); 82 double operator()(); 82 double operator()( double mean ); 83 double operator()( double mean ); 83 84 84 // Save and restore to/from streams 85 // Save and restore to/from streams 85 86 86 std::ostream & put ( std::ostream & os ) con 87 std::ostream & put ( std::ostream & os ) const; 87 std::istream & get ( std::istream & is ); 88 std::istream & get ( std::istream & is ); 88 89 89 std::string name() const; 90 std::string name() const; 90 HepRandomEngine & engine(); 91 HepRandomEngine & engine(); 91 92 92 static std::string distributionName() {retur 93 static std::string distributionName() {return "RandExponential";} 93 // Provides the name of this distribution cl 94 // Provides the name of this distribution class 94 95 95 private: 96 private: 96 97 97 std::shared_ptr<HepRandomEngine> localEngine 98 std::shared_ptr<HepRandomEngine> localEngine; 98 double defaultMean; 99 double defaultMean; 99 100 100 }; 101 }; 101 102 102 } // namespace CLHEP 103 } // namespace CLHEP 103 104 104 #include "CLHEP/Random/RandExponential.icc" 105 #include "CLHEP/Random/RandExponential.icc" 105 106 106 #endif 107 #endif 107 108