Geant4 Cross Reference |
1 // -*- C++ -*- 1 // -*- C++ -*- 2 // 2 // 3 // ------------------------------------------- 3 // ----------------------------------------------------------------------- 4 // HEP Random 4 // HEP Random 5 // --- HepRandom --- 5 // --- HepRandom --- 6 // class header file 6 // class header file 7 // ------------------------------------------- 7 // ----------------------------------------------------------------------- 8 // This file is part of Geant4 (simulation too 8 // This file is part of Geant4 (simulation toolkit for HEP). 9 // 9 // 10 // It's a singleton instantiated by default wi 10 // It's a singleton instantiated by default within the HEP Random module. 11 // It uses an instantiated HepJamesRandom engi 11 // It uses an instantiated HepJamesRandom engine as default algorithm 12 // for pseudo-random number generation. HepRan 12 // for pseudo-random number generation. HepRandom defines a static private 13 // data member theGenerator and a set of stati 13 // data member theGenerator and a set of static inlined methods to manipulate 14 // it. By means of theGenerator the user can c 14 // it. By means of theGenerator the user can change the underlying engine 15 // algorithm, get and set the seeds and use an 15 // algorithm, get and set the seeds and use any kind of defined random 16 // distribution. 16 // distribution. 17 // Distribution classes inherit from HepRandom 17 // Distribution classes inherit from HepRandom and define both static and 18 // not-static interfaces. 18 // not-static interfaces. 19 // A static table of uncorrelated seeds is ava 19 // A static table of uncorrelated seeds is available in this class. 20 // A static method "getTheTableSeeds()" is def 20 // A static method "getTheTableSeeds()" is defined to access a couple of 21 // seeds at a given index in the table. 21 // seeds at a given index in the table. 22 22 23 // =========================================== 23 // ======================================================================= 24 // Gabriele Cosmo - Created: 5th Sep 1995 24 // Gabriele Cosmo - Created: 5th Sep 1995 25 // - Minor update: 17th May 199 25 // - Minor update: 17th May 1996 26 // - Poisson now operates on do 26 // - Poisson now operates on doubles : 31st Oct 1996 27 // - Added methods for engine s 27 // - Added methods for engine status: 19th Nov 1996 28 // - Fixed default values to se 28 // - Fixed default values to setTheSeed() and 29 // setTheSeeds() static metho 29 // setTheSeeds() static methods: 16th Oct 1997 30 // - Modified HepRandom to act 30 // - Modified HepRandom to act as a singleton, constructors 31 // are kept public for backwa 31 // are kept public for backward compatibility. Added table 32 // of seeds from HepRandomEng 32 // of seeds from HepRandomEngine: 19th Mar 1998 33 // - Relocated Poisson and Gaus 33 // - Relocated Poisson and Gauss data and simplified 34 // initialisation of static g 34 // initialisation of static generator: 5th Jan 1999 35 // =========================================== 35 // ======================================================================= 36 36 37 #ifndef HepRandom_h 37 #ifndef HepRandom_h 38 #define HepRandom_h 1 38 #define HepRandom_h 1 39 39 40 #include "CLHEP/Random/RandomEngine.h" 40 #include "CLHEP/Random/RandomEngine.h" 41 41 42 namespace CLHEP { 42 namespace CLHEP { 43 43 44 /** 44 /** 45 * @author <Gabriele.Cosmo@cern.ch> 45 * @author <Gabriele.Cosmo@cern.ch> 46 * @ingroup random 46 * @ingroup random 47 */ 47 */ 48 class HepRandom { 48 class HepRandom { 49 49 50 public: 50 public: 51 51 52 HepRandom(); 52 HepRandom(); 53 HepRandom(long seed); 53 HepRandom(long seed); 54 // Contructors with and without a seed using 54 // Contructors with and without a seed using the default engine 55 // (MixMax). 55 // (MixMax). 56 56 57 HepRandom(HepRandomEngine & algorithm); 57 HepRandom(HepRandomEngine & algorithm); 58 HepRandom(HepRandomEngine * algorithm); 58 HepRandom(HepRandomEngine * algorithm); 59 // Constructor taking an alternative engine 59 // Constructor taking an alternative engine as argument. If a pointer is 60 // given the corresponding object will be de 60 // given the corresponding object will be deleted by the HepRandom 61 // destructor. 61 // destructor. 62 62 63 virtual ~HepRandom(); 63 virtual ~HepRandom(); 64 // Destructor 64 // Destructor 65 65 66 // implicitly allow compiler-generated copy 66 // implicitly allow compiler-generated copy functions 67 67 68 double flat(); 68 double flat(); 69 // Returns the flat value ( interval ]0...1[ 69 // Returns the flat value ( interval ]0...1[ ). 70 70 71 void flatArray(const int size, double* vect) 71 void flatArray(const int size, double* vect); 72 // Fills "vect" array of flat random values, 72 // Fills "vect" array of flat random values, given the size. 73 73 74 inline double flat (HepRandomEngine* theNewE 74 inline double flat (HepRandomEngine* theNewEngine); 75 // Returns a flat value, given a defined Ran 75 // Returns a flat value, given a defined Random Engine. 76 76 77 inline void flatArray(HepRandomEngine* theNe 77 inline void flatArray(HepRandomEngine* theNewEngine, 78 const int size, double 78 const int size, double* vect); 79 // Fills "vect" array of flat random values, 79 // Fills "vect" array of flat random values, given the size 80 // and a defined Random Engine. 80 // and a defined Random Engine. 81 81 82 virtual double operator()(); 82 virtual double operator()(); 83 // To get a flat random number using the ope 83 // To get a flat random number using the operator (). 84 84 85 virtual std::string name() const; 85 virtual std::string name() const; 86 virtual HepRandomEngine & engine(); 86 virtual HepRandomEngine & engine(); 87 87 88 88 89 virtual std::ostream & put ( std::ostream & 89 virtual std::ostream & put ( std::ostream & os ) const; 90 virtual std::istream & get ( std::istream & 90 virtual std::istream & get ( std::istream & is ); 91 // Save and restore to/from streams 91 // Save and restore to/from streams 92 92 93 // ----------------------------------------- 93 // -------------------------------------------------- 94 // Static member functions using the static 94 // Static member functions using the static generator 95 // ----------------------------------------- 95 // -------------------------------------------------- 96 96 97 static void setTheSeed(long seed, int lxr=3) 97 static void setTheSeed(long seed, int lxr=3); 98 // (Re)Initializes the generator with a seed 98 // (Re)Initializes the generator with a seed. 99 99 100 static long getTheSeed(); 100 static long getTheSeed(); 101 // Gets the current seed of the current gene 101 // Gets the current seed of the current generator. 102 102 103 static void setTheSeeds(const long* seeds, i 103 static void setTheSeeds(const long* seeds, int aux=-1); 104 // (Re)Initializes the generator with a zero 104 // (Re)Initializes the generator with a zero terminated list of seeds. 105 105 106 static const long* getTheSeeds(); 106 static const long* getTheSeeds(); 107 // Gets the current array of seeds of the cu 107 // Gets the current array of seeds of the current generator. 108 108 109 static void getTheTableSeeds (long* seeds, i 109 static void getTheTableSeeds (long* seeds, int index); 110 // Gets the array of seeds in the static see 110 // Gets the array of seeds in the static seedTable at "index" position. 111 111 112 static HepRandom * getTheGenerator(); 112 static HepRandom * getTheGenerator(); 113 // Return the current static generator. 113 // Return the current static generator. 114 114 115 static void setTheEngine (HepRandomEngine* t 115 static void setTheEngine (HepRandomEngine* theNewEngine); 116 // To set the underlying algorithm object. 116 // To set the underlying algorithm object. 117 117 118 static HepRandomEngine * getTheEngine(); 118 static HepRandomEngine * getTheEngine(); 119 // Returns a pointer to the underlying algor 119 // Returns a pointer to the underlying algorithm object. 120 120 121 static void saveEngineStatus( const char fil 121 static void saveEngineStatus( const char filename[] = "Config.conf" ); 122 // Saves to file the current status of the c 122 // Saves to file the current status of the current engine. 123 123 124 static void restoreEngineStatus( const char 124 static void restoreEngineStatus( const char filename[] = "Config.conf" ); 125 // Restores a saved status (if any) for the 125 // Restores a saved status (if any) for the current engine. 126 126 127 static std::ostream& saveFullState ( std::os 127 static std::ostream& saveFullState ( std::ostream & os ); 128 // Saves to stream the state of the engine a 128 // Saves to stream the state of the engine and cached data. 129 129 130 static std::istream& restoreFullState ( std: 130 static std::istream& restoreFullState ( std::istream & is ); 131 // Restores from stream the state of the eng 131 // Restores from stream the state of the engine and cached data. 132 132 133 static std::ostream& saveDistState ( std::os 133 static std::ostream& saveDistState ( std::ostream & os ) {return os;} 134 // Saves to stream the state of the cached d 134 // Saves to stream the state of the cached data. 135 135 136 static std::istream& restoreDistState ( std: 136 static std::istream& restoreDistState ( std::istream & is ) {return is;} 137 // Restores from stream the state of the cac 137 // Restores from stream the state of the cached data. 138 138 139 static std::ostream& saveStaticRandomStates 139 static std::ostream& saveStaticRandomStates ( std::ostream & os ); 140 // Saves to stream the engine and cached dat 140 // Saves to stream the engine and cached data for all distributions. 141 141 142 static std::istream& restoreStaticRandomStat 142 static std::istream& restoreStaticRandomStates ( std::istream & is ); 143 // Restores from stream the engine and cache 143 // Restores from stream the engine and cached data for all distributions. 144 144 145 static void showEngineStatus(); 145 static void showEngineStatus(); 146 // Dumps the current engine status on screen 146 // Dumps the current engine status on screen. 147 147 148 static int createInstance(); 148 static int createInstance(); 149 // used to initialise the default engine 149 // used to initialise the default engine 150 150 151 static std::string distributionName() {retur 151 static std::string distributionName() {return "HepRandomEngine";} 152 // Provides the name of this distribution cl 152 // Provides the name of this distribution class 153 153 154 protected: // -------- Data members ------ 154 protected: // -------- Data members --------- 155 155 156 static const long seedTable[215][2]; 156 static const long seedTable[215][2]; 157 // Table of seeds 157 // Table of seeds 158 158 159 }; 159 }; 160 160 161 std::ostream & operator<< (std::ostream & os, 161 std::ostream & operator<< (std::ostream & os, const HepRandom & dist); 162 std::istream & operator>> (std::istream & is, 162 std::istream & operator>> (std::istream & is, HepRandom & dist); 163 163 164 } // namespace CLHEP 164 } // namespace CLHEP 165 165 166 #include "CLHEP/Random/Random.icc" 166 #include "CLHEP/Random/Random.icc" 167 167 168 #endif 168 #endif 169 169