File indexing completed on 2024-04-06 12:22:36
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include "PileupRandomNumberGenerator.h"
0017 #include "FWCore/ServiceRegistry/interface/CurrentModuleOnThread.h"
0018 #include "FWCore/Utilities/interface/EDMException.h"
0019 #include "FWCore/Utilities/interface/LuminosityBlockIndex.h"
0020 #include "FWCore/Utilities/interface/StreamID.h"
0021 #include "DataFormats/Provenance/interface/ModuleDescription.h"
0022
0023 #include "IOMC/RandomEngine/interface/cloneEngine.h"
0024
0025 #include "CLHEP/Random/RandomEngine.h"
0026
0027 PileupRandomNumberGenerator::PileupRandomNumberGenerator(std::vector<std::string> const& iModuleLabels) : m_seed(0) {
0028 for (auto const& name : iModuleLabels) {
0029 m_modulesToEngines.emplace(name, std::unique_ptr<CLHEP::HepRandomEngine>{});
0030 }
0031 }
0032
0033 CLHEP::HepRandomEngine& PileupRandomNumberGenerator::getEngine(edm::StreamID const&) {
0034 return *m_modulesToEngines[findPresentModule()];
0035 }
0036
0037 CLHEP::HepRandomEngine& PileupRandomNumberGenerator::getEngine(edm::LuminosityBlockIndex const&) {
0038 return *m_modulesToEngines[findPresentModule()];
0039 }
0040
0041 std::unique_ptr<CLHEP::HepRandomEngine> PileupRandomNumberGenerator::cloneEngine(edm::LuminosityBlockIndex const&) {
0042 auto& engine = m_modulesToEngines[findPresentModule()];
0043 return edm::cloneEngine(*engine);
0044 }
0045
0046 void PileupRandomNumberGenerator::setSeed(uint32_t iSeed) { m_seed = iSeed; }
0047
0048 void PileupRandomNumberGenerator::setEngine(CLHEP::HepRandomEngine const& iEngine) {
0049 for (auto& v : m_modulesToEngines) {
0050 v.second = edm::cloneEngine(iEngine);
0051 }
0052 }
0053
0054 void PileupRandomNumberGenerator::preBeginLumi(edm::LuminosityBlock const& lumi) {}
0055 void PileupRandomNumberGenerator::postEventRead(edm::Event const& event) {}
0056
0057 void PileupRandomNumberGenerator::setLumiCache(edm::LuminosityBlockIndex,
0058 std::vector<RandomEngineState> const& iStates) {}
0059 void PileupRandomNumberGenerator::setEventCache(edm::StreamID, std::vector<RandomEngineState> const& iStates) {}
0060
0061 std::vector<RandomEngineState> const& PileupRandomNumberGenerator::getEventCache(edm::StreamID const&) const {
0062 static const std::vector<RandomEngineState> s_dummy;
0063 return s_dummy;
0064 }
0065 std::vector<RandomEngineState> const& PileupRandomNumberGenerator::getLumiCache(edm::LuminosityBlockIndex const&) const {
0066 static const std::vector<RandomEngineState> s_dummy;
0067 return s_dummy;
0068 }
0069
0070 void PileupRandomNumberGenerator::consumes(edm::ConsumesCollector&& iC) const {}
0071
0072 void PileupRandomNumberGenerator::print(std::ostream& os) const {}
0073
0074 const std::string& PileupRandomNumberGenerator::findPresentModule() const {
0075 edm::ModuleCallingContext const* mcc = edm::CurrentModuleOnThread::getCurrentModuleOnThread();
0076 if (mcc == nullptr) {
0077 throw edm::Exception(edm::errors::LogicError)
0078 << "PileupRandomNumberGenerator::getEngine()\n"
0079 "Requested a random number engine from the RandomNumberGeneratorService\n"
0080 "from an unallowed transition. ModuleCallingContext is null\n";
0081 }
0082 return mcc->moduleDescription()->moduleLabel();
0083 }