Geant4 Cross Reference |
1 // -*- C++ -*- 1 2 // 3 // ------------------------------------------- 4 // HEP Random 5 // --- RanecuEngine -- 6 // class header file 7 // ------------------------------------------- 8 // This file is part of Geant4 (simulation too 9 // 10 // RANECU Random Engine - algorithm originally 11 // as part of the MATHL 12 // The initialisation is carried out using a M 13 // generator using formula constants of L'Ecuy 14 // Comp. Phys. Comm. 60 (1990) 329-344". 15 // Seeds are taken from a seed table given an 16 // returns the current index in the seed table 17 // returns a pointer to the couple of seeds st 18 // seeds at the current index. 19 20 // =========================================== 21 // Gabriele Cosmo - Created: 2nd February 1996 22 // - Minor corrections: 31st Oc 23 // - Added methods for engine s 24 // - setSeed() now has default 25 // set to zero: 11th July 199 26 // - Added default index to set 27 // J.Marraffino - Added stream operators and 28 // Added automatic seed selec 29 // engine counter: 16th Feb 1 30 // Ken Smith - Added conversion operators 31 // Mark Fischler Methods for distrib. insta 32 // Mark Fischler methods for anonymous save 33 // =========================================== 34 35 #ifndef RanecuEngine_h 36 #define RanecuEngine_h 1 37 38 #include "CLHEP/Random/RandomEngine.h" 39 40 namespace CLHEP { 41 42 /** 43 * @author <Gabriele.Cosmo@cern.ch> 44 * @ingroup random 45 */ 46 class RanecuEngine : public HepRandomEngine { 47 48 public: 49 50 RanecuEngine(std::istream& is); 51 RanecuEngine(); 52 RanecuEngine(int index); 53 virtual ~RanecuEngine(); 54 // Constructors and destructor. 55 56 double flat(); 57 // Returns a pseudo random number between 0 58 // (excluding the end points) 59 60 void flatArray (const int size, double* vect 61 // Fills an array "vect" of specified size w 62 63 void setIndex (long index); 64 // Sets the state of the algorithm according 65 // in the local table of seeds. 66 67 void setSeed (long index, int dum=0); 68 // Resets the state of the algorithm accordi 69 // in the static table of seeds stored in He 70 71 void setSeeds (const long* seeds, int index= 72 // Sets the state of the algorithm according 73 // "seeds" containing two seed values to be 74 // "index" position. 75 76 void saveStatus( const char filename[] = "Ra 77 // Saves on file Ranecu.conf the current eng 78 79 void restoreStatus( const char filename[] = 80 // Reads from file Ranecu.conf the last save 81 // and restores it. 82 83 void showStatus() const; 84 // Dumps the engine status on the screen. 85 86 operator double(); 87 // Returns same as flat() 88 operator float(); 89 // less precise flat, faster if possible 90 operator unsigned int(); 91 // 32-bit int flat, faster in this case 92 93 virtual std::ostream & put (std::ostream & o 94 virtual std::istream & get (std::istream & i 95 static std::string beginTag ( ); 96 virtual std::istream & getState ( std::istre 97 98 std::string name() const; 99 static std::string engineName() {return "Ran 100 101 std::vector<unsigned long> put () const; 102 bool get (const std::vector<unsigned long> & 103 bool getState (const std::vector<unsigned lo 104 105 protected: 106 107 // Suggested L'ecuyer coefficients for porta 108 109 static const int ecuyer_a = 40014; 110 static const int ecuyer_b = 53668; 111 static const int ecuyer_c = 12211; 112 static const int ecuyer_d = 40692; 113 static const int ecuyer_e = 52774; 114 static const int ecuyer_f = 3791; 115 static const int shift1 = 2147483563; 116 static const int shift2 = 2147483399; 117 118 static const unsigned int VECTOR_STATE_SIZE 119 120 private: 121 122 // private method used to mitigate the effec 123 void further_randomize (int seq, int col, in 124 125 // Members defining the current state of the 126 127 static const int maxSeq = 215; 128 long table[215][2]; 129 int seq; 130 131 }; 132 133 } // namespace CLHEP 134 135 #endif 136