CLHEP VERSION Reference Documentation
CLHEP Home Page
CLHEP Documentation
CLHEP Bug Reports
Main Page
Namespaces
Classes
Files
File List
File Members
Random
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 Sun Jun 17 2012 08:08:27 for CLHEP by
1.8.1.1