10#include "CLHEP/Random/MixMaxRng.h"
11#include "CLHEP/Random/Ranlux64Engine.h"
12#include "CLHEP/Random/RanecuEngine.h"
16 : base_class(name, svc),
19 declareProperty(
"EngineType",
m_rngType,
"CLHEP RandomEngine type");
25 m_fact = [](void)->CLHEP::HepRandomEngine*{
29 m_fact = [](void)->CLHEP::HepRandomEngine*{
30 return new CLHEP::Ranlux64Engine();
33 m_fact = [](void)->CLHEP::HepRandomEngine*{
34 return new CLHEP::RanecuEngine();
37 m_fact = [](void)->CLHEP::HepRandomEngine*{
38 return new CLHEP::MixMaxRng();
41 ATH_MSG_WARNING(
"Supported Generator types are 'dSFMT', 'Ranlux64', 'Ranecu', 'MixMax'");
43 return StatusCode::FAILURE;
46 return StatusCode::SUCCESS;
50 const std::string& streamName)
56 std::string rngName = client->name();
57 if(!streamName.empty()) rngName +=
"/" + streamName;
60 std::lock_guard<std::mutex> lock(
m_mutex);
67 m_wrappers.insert( std::make_pair(rngName, wrp) );
76 const std::string& streamName)
80 CLHEP::HepRandomEngine* engine( *wrapper );
83 std::vector<unsigned long> rngStates = engine->put();
86 std::string rngName = client->name();
87 if(!streamName.empty()) rngName +=
"/" + streamName;
88 std::lock_guard<std::mutex> lock(
m_mutex);
89 msg(MSG::ALWAYS) << rngName <<
" ";
91 for(
const unsigned long s : rngStates) {
92 msg() << (s & 0xffffffffu) <<
" ";
101 delete wrapperPair.second;
#define ATH_MSG_WARNING(x)
Maintain a set of objects, one per slot.
A wrapper class for event-slot-local random engines.
virtual void printEngineState(const INamedInterface *client, const std::string &streamName="") override final
Print engine state.
std::mutex m_mutex
Mutex for protecting access to the wrapper structure.
AthRNGSvc(const std::string &name, ISvcLocator *svc)
Standard constructor.
std::unordered_map< std::string, ATHRNG::RNGWrapper * > m_wrappers
The structure for storing the RNGWrappers.
std::string m_rngType
Random number engine type (e.g. dSFMT, ranecu)
StatusCode initialize() override final
Initialize the service.
virtual ATHRNG::RNGWrapper * getEngine(const INamedInterface *client, const std::string &streamName="") override final
IAthRNGSvc method to retrieve the random number wrapper.
size_t getNSlots()
Return the number of event slots.