00001 00002 // $Id: RandomEngineStateProducer.cc,v 1.2 2006/10/23 15:27:41 wdd Exp $ 00003 00004 #include "IOMC/RandomEngine/src/RandomEngineStateProducer.h" 00005 00006 #include <vector> 00007 #include <string> 00008 #include "boost/cstdint.hpp" 00009 00010 #include "FWCore/Framework/interface/Event.h" 00011 00012 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00013 00014 #include "SimDataFormats/RandomEngine/interface/RandomEngineState.h" 00015 00016 #include "FWCore/ServiceRegistry/interface/Service.h" 00017 #include "FWCore/Utilities/interface/RandomNumberGenerator.h" 00018 00019 00020 RandomEngineStateProducer::RandomEngineStateProducer(const edm::ParameterSet& iConfig) 00021 { 00022 //register your products 00023 produces<std::vector<RandomEngineState> >(); 00024 } 00025 00026 00027 RandomEngineStateProducer::~RandomEngineStateProducer() 00028 { 00029 } 00030 00031 00032 void 00033 RandomEngineStateProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) 00034 { 00035 std::auto_ptr<std::vector<RandomEngineState> > stateVector(new std::vector<RandomEngineState>); 00036 00037 edm::Service<edm::RandomNumberGenerator> randomService; 00038 if (randomService.isAvailable()) { 00039 00040 const std::vector<std::string>& strings = randomService->getCachedLabels(); 00041 const std::vector<std::vector<uint32_t> >& states = randomService->getCachedStates(); 00042 const std::vector<std::vector<uint32_t> >& seeds = randomService->getCachedSeeds(); 00043 00044 std::vector<std::string>::const_iterator iString = strings.begin(); 00045 std::vector<std::vector<uint32_t> >::const_iterator iState = states.begin(); 00046 std::vector<std::vector<uint32_t> >::const_iterator iSeed = seeds.begin(); 00047 00048 for ( ; iString != strings.end(); ++iString, ++iState, ++iSeed) { 00049 00050 RandomEngineState engineState; 00051 engineState.setLabel(*iString); 00052 engineState.setState(*iState); 00053 engineState.setSeed(*iSeed); 00054 stateVector->push_back(engineState); 00055 } 00056 00057 iEvent.put(stateVector); 00058 } 00059 } 00060 00061 00062 void 00063 RandomEngineStateProducer::beginJob(const edm::EventSetup&) 00064 { 00065 } 00066 00067 00068 void 00069 RandomEngineStateProducer::endJob() 00070 { 00071 }