CMS 3D CMS Logo

RandomEngineStateProducer.cc

Go to the documentation of this file.
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 }

Generated on Tue Jun 9 17:39:07 2009 for CMSSW by  doxygen 1.5.4