Geant4 Cross Reference |
1 // -*- C++ -*- 1 2 // 3 // ------------------------------------------- 4 // HEP Random 5 // --- EngineFactory --- 6 // class implementation f 7 // ------------------------------------------- 8 // 9 // =========================================== 10 // Mark Fischler - Created: Dec. 21, 2004 11 // =========================================== 12 13 #include "CLHEP/Random/EngineFactory.h" 14 #include "CLHEP/Random/DualRand.h" 15 #include "CLHEP/Random/JamesRandom.h" 16 #include "CLHEP/Random/MixMaxRng.h" 17 #include "CLHEP/Random/MTwistEngine.h" 18 #include "CLHEP/Random/RanecuEngine.h" 19 #include "CLHEP/Random/Ranlux64Engine.h" 20 #include "CLHEP/Random/RanluxppEngine.h" 21 #include "CLHEP/Random/RanluxEngine.h" 22 #include "CLHEP/Random/RanshiEngine.h" 23 #include "CLHEP/Random/NonRandomEngine.h" 24 #include "CLHEP/Random/engineIDulong.h" 25 #include <iostream> 26 #include <string> 27 #include <vector> 28 29 namespace CLHEP { 30 31 template<class E> 32 static HepRandomEngine* 33 makeAnEngine (const std::string & tag, 34 std::istream & is) { 35 if ( tag != E::beginTag() ) return 0; 36 HepRandomEngine* eptr = new E; 37 eptr->getState(is); 38 if (!is) return 0; 39 return eptr; 40 } 41 42 template<class E> 43 static HepRandomEngine* 44 makeAnEngine (const std::vector<unsigned long> 45 if ( (v[0] & 0xffffffffUL) != engineIDulong< 46 HepRandomEngine* eptr = new E; 47 bool success = eptr->getState(v); 48 if (!success) return 0; 49 // std::cerr << "makeAnEngine made " << E::e 50 return eptr; 51 } 52 53 HepRandomEngine* EngineFactory::newEngine(std: 54 HepRandomEngine* eptr; 55 std::string tag; 56 is >> tag; 57 eptr = makeAnEngine <HepJamesRandom> (tag, 58 eptr = makeAnEngine <RanecuEngine> (tag, 59 eptr = makeAnEngine <Ranlux64Engine> (tag, 60 eptr = makeAnEngine <RanluxppEngine> (tag, 61 eptr = makeAnEngine <MixMaxRng> (tag, 62 eptr = makeAnEngine <MTwistEngine> (tag, 63 eptr = makeAnEngine <DualRand> (tag, 64 eptr = makeAnEngine <RanluxEngine> (tag, 65 eptr = makeAnEngine <RanshiEngine> (tag, 66 eptr = makeAnEngine <NonRandomEngine> (tag, 67 is.clear(std::ios::badbit | is.rdstate()); 68 std::cerr << 69 "Input mispositioned or bad in reading ano 70 << "\nBegin-tag read was: " << tag 71 << "\nInput stream is probably fouled up 72 return eptr; 73 } 74 75 HepRandomEngine* 76 EngineFactory::newEngine(std::vector<unsigned 77 HepRandomEngine* eptr; 78 eptr = makeAnEngine <HepJamesRandom> (v); i 79 eptr = makeAnEngine <RanecuEngine> (v); i 80 eptr = makeAnEngine <Ranlux64Engine> (v); i 81 eptr = makeAnEngine <RanluxppEngine> (v); i 82 eptr = makeAnEngine <MixMaxRng> (v); i 83 eptr = makeAnEngine <MTwistEngine> (v); i 84 eptr = makeAnEngine <DualRand> (v); i 85 eptr = makeAnEngine <RanluxEngine> (v); i 86 eptr = makeAnEngine <RanshiEngine> (v); i 87 eptr = makeAnEngine <NonRandomEngine> (v); i 88 std::cerr << 89 "Cannot correctly get anonymous engine fro 90 << "First unsigned long was: " << v[0] 91 << " Vector size was: " << v.size() <<"\ 92 return eptr; 93 } 94 95 } // namespace CLHEP 96 97