Import Geant4 9.5.0 source tree
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
// $Id:$
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// -----------------------------------------------------------------------
|
||||
// HEP Random
|
||||
// --- StaticRandomStates ---
|
||||
// class implementation file
|
||||
// -----------------------------------------------------------------------
|
||||
//
|
||||
// =======================================================================
|
||||
// Mark Fischler - Created: Dec. 21, 2004
|
||||
// Mark Fischler - Modified restore() to utilize anonymous engine input
|
||||
// to create anonymous restore of the static distributions
|
||||
//
|
||||
// =======================================================================
|
||||
|
||||
#include "CLHEP/Random/StaticRandomStates.h"
|
||||
#include "CLHEP/Random/RandGauss.h"
|
||||
#include "CLHEP/Random/RandFlat.h"
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
//======================//
|
||||
// //
|
||||
// Maintenance warning: //
|
||||
// //
|
||||
//======================//
|
||||
//
|
||||
// Currently, only two distributions (RandFlat and RandGauss) have cached
|
||||
// distribution state. All such distributions must be saved below, so if
|
||||
// another such distribution is added, this implementation file must be
|
||||
// modified to reflect that.
|
||||
|
||||
namespace CLHEP {
|
||||
|
||||
|
||||
std::ostream & StaticRandomStates::save(std::ostream & os){
|
||||
RandGauss::saveFullState(os);
|
||||
RandFlat::saveDistState(os);
|
||||
return os;
|
||||
}
|
||||
|
||||
#ifdef NOTYET
|
||||
std::istream & StaticRandomStates::restore(std::istream & is) {
|
||||
RandGauss::restoreFullState(is);
|
||||
RandFlat::restoreDistState(is);
|
||||
return is;
|
||||
}
|
||||
#endif
|
||||
|
||||
std::istream & StaticRandomStates::restore(std::istream & is) {
|
||||
HepRandomEngine * e = HepRandom::getTheEngine();
|
||||
HepRandomEngine *ne = HepRandomEngine::newEngine(is);
|
||||
if ( !is ) return is;
|
||||
if ( !ne ) return is;
|
||||
if (ne->name() == e->name()) {
|
||||
// Because e has const data members, cannot simply do *e = *ne
|
||||
std::ostringstream os;
|
||||
os << *ne;
|
||||
std::istringstream istst(os.str());
|
||||
istst >> *e;
|
||||
if (!istst) {
|
||||
std::cerr << "???? Unexpected behavior in StaticRandomStates::restore:\n"
|
||||
<< "The new engine, which had been input successfully from istream\n"
|
||||
<< "has encountered a problem when used to set state of theEngine\n";
|
||||
is.clear(std::ios::badbit | is.rdstate());
|
||||
return is;
|
||||
}
|
||||
} else {
|
||||
HepRandom::setTheEngine(ne);
|
||||
}
|
||||
RandGauss::restoreDistState(is);
|
||||
RandFlat::restoreDistState(is);
|
||||
return is;
|
||||
}
|
||||
|
||||
} // namespace CLHEP
|
||||
Reference in New Issue
Block a user