Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
EngineFactory.cc
Go to the documentation of this file.
1// -*- C++ -*-
2//
3// -----------------------------------------------------------------------
4// HEP Random
5// --- EngineFactory ---
6// class implementation file
7// -----------------------------------------------------------------------
8//
9// =======================================================================
10// Mark Fischler - Created: Dec. 21, 2004
11// =======================================================================
12
25#include <iostream>
26#include <string>
27#include <vector>
28
29namespace CLHEP {
30
31template<class E>
32static HepRandomEngine*
33makeAnEngine (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
42template<class E>
43static HepRandomEngine*
44makeAnEngine (const std::vector<unsigned long> & v) {
45 if ( (v[0] & 0xffffffffUL) != engineIDulong<E>() ) return 0;
46 HepRandomEngine* eptr = new E;
47 bool success = eptr->getState(v);
48 if (!success) return 0;
49 // std::cerr << "makeAnEngine made " << E::engineName() << "\n";
50 return eptr;
51}
52
54 HepRandomEngine* eptr;
55 std::string tag;
56 is >> tag;
57 eptr = makeAnEngine <HepJamesRandom> (tag, is); if (eptr) return eptr;
58 eptr = makeAnEngine <RanecuEngine> (tag, is); if (eptr) return eptr;
59 eptr = makeAnEngine <Ranlux64Engine> (tag, is); if (eptr) return eptr;
60 eptr = makeAnEngine <RanluxppEngine> (tag, is); if (eptr) return eptr;
61 eptr = makeAnEngine <MixMaxRng> (tag, is); if (eptr) return eptr;
62 eptr = makeAnEngine <MTwistEngine> (tag, is); if (eptr) return eptr;
63 eptr = makeAnEngine <DualRand> (tag, is); if (eptr) return eptr;
64 eptr = makeAnEngine <RanluxEngine> (tag, is); if (eptr) return eptr;
65 eptr = makeAnEngine <RanshiEngine> (tag, is); if (eptr) return eptr;
66 eptr = makeAnEngine <NonRandomEngine> (tag, is); if (eptr) return eptr;
67 is.clear(std::ios::badbit | is.rdstate());
68 std::cerr <<
69 "Input mispositioned or bad in reading anonymous engine\n"
70 << "\nBegin-tag read was: " << tag
71 << "\nInput stream is probably fouled up\n";
72 return eptr;
73}
74
76EngineFactory::newEngine(std::vector<unsigned long> const & v) {
77 HepRandomEngine* eptr;
78 eptr = makeAnEngine <HepJamesRandom> (v); if (eptr) return eptr;
79 eptr = makeAnEngine <RanecuEngine> (v); if (eptr) return eptr;
80 eptr = makeAnEngine <Ranlux64Engine> (v); if (eptr) return eptr;
81 eptr = makeAnEngine <RanluxppEngine> (v); if (eptr) return eptr;
82 eptr = makeAnEngine <MixMaxRng> (v); if (eptr) return eptr;
83 eptr = makeAnEngine <MTwistEngine> (v); if (eptr) return eptr;
84 eptr = makeAnEngine <DualRand> (v); if (eptr) return eptr;
85 eptr = makeAnEngine <RanluxEngine> (v); if (eptr) return eptr;
86 eptr = makeAnEngine <RanshiEngine> (v); if (eptr) return eptr;
87 eptr = makeAnEngine <NonRandomEngine> (v); if (eptr) return eptr;
88 std::cerr <<
89 "Cannot correctly get anonymous engine from vector\n"
90 << "First unsigned long was: " << v[0]
91 << " Vector size was: " << v.size() <<"\n";
92 return eptr;
93}
94
95} // namespace CLHEP
96
static HepRandomEngine * newEngine(std::istream &is)
virtual std::istream & getState(std::istream &is)
Definition: RandomEngine.cc:72
Definition: DoubConv.h:17
Definition: xmlparse.c:284