18 #define NUMBER_OF_SEEDS 1
21 #define HEPRNDM_HEPRNDMENGINES_CPP
30 #include "GaudiKernel/System.h"
31 #include "GaudiKernel/MsgStream.h"
32 #include "GaudiKernel/IIncidentSvc.h"
37 #include "CLHEP/Random/DualRand.h"
38 #include "CLHEP/Random/TripleRand.h"
39 #include "CLHEP/Random/DRand48Engine.h"
40 #include "CLHEP/Random/Hurd160Engine.h"
41 #include "CLHEP/Random/Hurd288Engine.h"
42 #include "CLHEP/Random/JamesRandom.h"
43 #include "CLHEP/Random/MTwistEngine.h"
44 #include "CLHEP/Random/RanecuEngine.h"
45 #include "CLHEP/Random/Ranlux64Engine.h"
46 #include "CLHEP/Random/RanluxEngine.h"
47 #include "CLHEP/Random/RanshiEngine.h"
51 using namespace CLHEP;
58 declareProperty(
"Seeds",
m_seeds);
59 declareProperty(
"Column",
m_col = 0);
60 declareProperty(
"Row",
m_row = 1);
61 declareProperty(
"Luxury",
m_lux = 3);
62 declareProperty(
"UseTable",
m_useTable =
false);
68 m_seeds.erase(m_seeds.begin(), m_seeds.end());
70 if ( m_seeds.size() == 0 ) {
72 long theSeed = 1234567;
73 m_seeds.push_back(theSeed);
79 log <<
MSG::INFO <<
"Generator engine type:"
83 if ( m_row > 214 || m_col > 1 ) {
84 log <<
MSG::ERROR <<
"Generator engine seed table has dimension [215][2], you gave:"
85 <<
" Row=" << m_row <<
" Column:" << m_col <<
endmsg;
89 log <<
MSG::INFO <<
"Generator engine seeds from table."
90 <<
" Row=" << m_row <<
" Column:" << m_col <<
endmsg;
93 log <<
"Current Seed:" << hepEngine()->getSeed();
94 log <<
" Luxury:" << m_lux;
97 if ( m_setSingleton ) {
98 HepRandom::setTheEngine(hepEngine());
99 log <<
"This is the GEANT4 engine!" <<
endmsg;
103 log <<
MSG::ERROR <<
"Cannot initialze random engine of type:"
118 std::copy(seed.begin(),seed.end(),std::back_inserter(m_seeds));
119 if ( !m_seeds.empty() ) {
120 if ( m_seeds.back() != 0 ) {
121 m_seeds.push_back(0);
123 hepEngine()->setSeeds(&m_seeds[0], m_lux);
141 seed.push_back(hepEngine()->getSeed());
147 return std::unique_ptr<CLHEP::HepRandomEngine>( m_useTable ?
new DualRand(m_row, m_col)
148 :
new DualRand(m_seeds[0]) );
152 return std::unique_ptr<CLHEP::HepRandomEngine>( m_useTable ?
new TripleRand(m_row, m_col)
153 :
new TripleRand(m_seeds[0]));
157 return std::unique_ptr<CLHEP::HepRandomEngine>( m_useTable ?
new DRand48Engine(m_row, m_col)
158 :
new DRand48Engine(m_seeds[0]));
162 return std::unique_ptr<CLHEP::HepRandomEngine>( m_useTable ?
new Hurd160Engine(m_row, m_col)
163 :
new Hurd160Engine(m_seeds[0]));
167 return std::unique_ptr<CLHEP::HepRandomEngine>( m_useTable ?
new Hurd288Engine(m_row, m_col)
168 :
new Hurd288Engine(m_seeds[0]));
172 return std::unique_ptr<CLHEP::HepRandomEngine>( m_useTable ?
new RanecuEngine(m_row)
173 :
new RanecuEngine(m_seeds[0]));
177 return std::unique_ptr<CLHEP::HepRandomEngine>( m_useTable ?
new RanshiEngine(m_row, m_col)
178 :
new RanshiEngine(m_seeds[0]));
182 return std::unique_ptr<CLHEP::HepRandomEngine>( m_useTable ?
new RanluxEngine(m_row, m_col, m_lux)
183 :
new RanluxEngine(m_seeds[0], m_lux));
187 return std::unique_ptr<CLHEP::HepRandomEngine>( m_useTable ?
new Ranlux64Engine(m_row, m_col, m_lux)
188 :
new Ranlux64Engine(m_seeds[0], m_lux));
192 return std::unique_ptr<CLHEP::HepRandomEngine>( m_useTable ?
new MTwistEngine(m_row, m_col)
193 :
new MTwistEngine(m_seeds[0]));
197 return std::unique_ptr<CLHEP::HepRandomEngine>( m_useTable ?
new HepJamesRandom(m_row, m_col)
198 :
new HepJamesRandom(m_seeds[0]) );
Definition of the MsgStream class used to transmit messages.
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
StatusCode finalize() override
Service override: finalization.
StatusCode seeds(std::vector< long > &seed) const override
Retrieve seeds.
bool isSuccess() const
Test for a status code of SUCCESS.
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
std::vector< long > m_seeds
HepRndm::Engine< DualRand > e1
StatusCode finalize() override
Finalize the Engine.
This class is used for returning status codes from appropriate routines.
#define DECLARE_COMPONENT(type)
std::unique_ptr< CLHEP::HepRandomEngine > createEngine() override
Create new HepEngine....
StatusCode setSeeds(const std::vector< long > &seed) override
Set seeds.
virtual StatusCode initialize()
Service override: initialization.
StatusCode initialize() override
Initialize the Engine.