00001 00002 #include "IOMC/RandomEngine/src/RandomEngineStateProducer.h" 00003 00004 #include "FWCore/Framework/interface/Event.h" 00005 #include "FWCore/Framework/interface/LuminosityBlock.h" 00006 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" 00007 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" 00008 #include "FWCore/ServiceRegistry/interface/Service.h" 00009 #include "FWCore/Utilities/interface/RandomNumberGenerator.h" 00010 #include "SimDataFormats/RandomEngine/interface/RandomEngineStates.h" 00011 00012 #include <memory> 00013 00014 RandomEngineStateProducer::RandomEngineStateProducer(edm::ParameterSet const&) { 00015 produces<edm::RandomEngineStates, edm::InLumi>("beginLumi"); 00016 produces<edm::RandomEngineStates>(); 00017 } 00018 00019 RandomEngineStateProducer::~RandomEngineStateProducer() { 00020 } 00021 00022 void 00023 RandomEngineStateProducer::produce(edm::Event& ev, edm::EventSetup const&) { 00024 edm::Service<edm::RandomNumberGenerator> randomService; 00025 if(randomService.isAvailable()) { 00026 std::auto_ptr<edm::RandomEngineStates> states(new edm::RandomEngineStates); 00027 states->setRandomEngineStates(randomService->getEventCache()); 00028 ev.put(states); 00029 } 00030 } 00031 00032 void 00033 RandomEngineStateProducer::beginLuminosityBlock(edm::LuminosityBlock& lb, edm::EventSetup const&) { 00034 edm::Service<edm::RandomNumberGenerator> randomService; 00035 if(randomService.isAvailable()) { 00036 std::auto_ptr<edm::RandomEngineStates> states(new edm::RandomEngineStates); 00037 states->setRandomEngineStates(randomService->getLumiCache()); 00038 lb.put(states, "beginLumi"); 00039 } 00040 } 00041 00042 void 00043 RandomEngineStateProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { 00044 edm::ParameterSetDescription desc; 00045 descriptions.add("randomEngineStateProducer", desc); 00046 }