Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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