Geant4 Cross Reference |
1 // -*- C++ -*- 1 2 // 3 // ------------------------------------------- 4 // HEP Random 5 // --- StaticRandomStates 6 // class implementation f 7 // ------------------------------------------- 8 // 9 // =========================================== 10 // Mark Fischler - Created: Dec. 21, 2004 11 // Mark Fischler - Modified restore() to util 12 // to create anonymous restor 13 // 14 // =========================================== 15 16 #include "CLHEP/Random/StaticRandomStates.h" 17 #include "CLHEP/Random/RandGauss.h" 18 #include "CLHEP/Random/RandFlat.h" 19 #include <iostream> 20 #include <string> 21 #include <sstream> 22 23 //======================// 24 // // 25 // Maintenance warning: // 26 // // 27 //======================// 28 // 29 // Currently, only two distributions (RandFlat 30 // distribution state. All such distributions 31 // another such distribution is added, this im 32 // modified to reflect that. 33 34 namespace CLHEP { 35 36 37 std::ostream & StaticRandomStates::save(std::o 38 RandGauss::saveFullState(os); 39 RandFlat::saveDistState(os); 40 return os; 41 } 42 43 #ifdef NOTYET 44 std::istream & StaticRandomStates::restore(std 45 RandGauss::restoreFullState(is); 46 RandFlat::restoreDistState(is); 47 return is; 48 } 49 #endif 50 51 std::istream & StaticRandomStates::restore(std 52 HepRandomEngine * e = HepRandom::getTheEngin 53 HepRandomEngine *ne = HepRandomEngine::newEn 54 if ( !is ) return is; 55 if ( !ne ) return is; 56 if (ne->name() == e->name()) { 57 // Because e has const data members, canno 58 std::ostringstream os; 59 os << *ne; 60 std::istringstream istst(os.str()); 61 istst >> *e; 62 if (!istst) { 63 std::cerr << "???? Unexpected behavior i 64 << "The new engine, which had been inp 65 << "has encountered a problem when used to s 66 is.clear(std::ios::badbit | is.rdstate() 67 return is; 68 } 69 } else { 70 HepRandom::setTheEngine(ne); 71 } 72 RandGauss::restoreDistState(is); 73 RandFlat::restoreDistState(is); 74 return is; 75 } 76 77 } // namespace CLHEP 78