Geant4
9.6.p02
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
geant4_9_6_p02
source
externals
clhep
src
StaticRandomStates.cc
Go to the documentation of this file.
1
// $Id:$
2
// -*- C++ -*-
3
//
4
// -----------------------------------------------------------------------
5
// HEP Random
6
// --- StaticRandomStates ---
7
// class implementation file
8
// -----------------------------------------------------------------------
9
//
10
// =======================================================================
11
// Mark Fischler - Created: Dec. 21, 2004
12
// Mark Fischler - Modified restore() to utilize anonymous engine input
13
// to create anonymous restore of the static distributions
14
//
15
// =======================================================================
16
17
#include "
CLHEP/Random/StaticRandomStates.h
"
18
#include "
CLHEP/Random/RandGauss.h
"
19
#include "
CLHEP/Random/RandFlat.h
"
20
#include <string>
21
#include <sstream>
22
23
//======================//
24
// //
25
// Maintenance warning: //
26
// //
27
//======================//
28
//
29
// Currently, only two distributions (RandFlat and RandGauss) have cached
30
// distribution state. All such distributions must be saved below, so if
31
// another such distribution is added, this implementation file must be
32
// modified to reflect that.
33
34
namespace
CLHEP {
35
36
37
std::ostream &
StaticRandomStates::save
(std::ostream & os){
38
RandGauss::saveFullState
(os);
39
RandFlat::saveDistState
(os);
40
return
os;
41
}
42
43
#ifdef NOTYET
44
std::istream &
StaticRandomStates::restore
(std::istream & is) {
45
RandGauss::restoreFullState
(is);
46
RandFlat::restoreDistState
(is);
47
return
is;
48
}
49
#endif
50
51
std::istream &
StaticRandomStates::restore
(std::istream & is) {
52
HepRandomEngine
*
e
=
HepRandom::getTheEngine
();
53
HepRandomEngine
*ne =
HepRandomEngine::newEngine
(is);
54
if
( !is )
return
is;
55
if
( !ne )
return
is;
56
if
(ne->
name
() == e->
name
()) {
57
// Because e has const data members, cannot simply do *e = *ne
58
std::ostringstream os;
59
os << *ne;
60
std::istringstream istst(os.str());
61
istst >> *
e
;
62
if
(!istst) {
63
std::cerr <<
"???? Unexpected behavior in StaticRandomStates::restore:\n"
64
<<
"The new engine, which had been input successfully from istream\n"
65
<<
"has encountered a problem when used to set state of theEngine\n"
;
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
Generated on Sat May 25 2013 14:33:07 for Geant4 by
1.8.4