26 #include "Randomize.hh"
53 class StaticRandomEngineSetUnset {
56 explicit StaticRandomEngineSetUnset(CLHEP::HepRandomEngine * engine);
57 ~StaticRandomEngineSetUnset();
58 CLHEP::HepRandomEngine* getEngine()
const;
60 CLHEP::HepRandomEngine* m_currentEngine;
61 CLHEP::HepRandomEngine* m_previousEngine;
68 StaticRandomEngineSetUnset
random(
nullptr);
72 produces<edm::SimTrackContainer>().setBranchAlias(
"SimTracks");
73 produces<edm::SimVertexContainer>().setBranchAlias(
"SimVertices");
74 produces<edm::PSimHitContainer>(
"TrackerHitsPixelBarrelLowTof");
75 produces<edm::PSimHitContainer>(
"TrackerHitsPixelBarrelHighTof");
76 produces<edm::PSimHitContainer>(
"TrackerHitsTIBLowTof");
77 produces<edm::PSimHitContainer>(
"TrackerHitsTIBHighTof");
78 produces<edm::PSimHitContainer>(
"TrackerHitsTIDLowTof");
79 produces<edm::PSimHitContainer>(
"TrackerHitsTIDHighTof");
80 produces<edm::PSimHitContainer>(
"TrackerHitsPixelEndcapLowTof");
81 produces<edm::PSimHitContainer>(
"TrackerHitsPixelEndcapHighTof");
82 produces<edm::PSimHitContainer>(
"TrackerHitsTOBLowTof");
83 produces<edm::PSimHitContainer>(
"TrackerHitsTOBHighTof");
84 produces<edm::PSimHitContainer>(
"TrackerHitsTECLowTof");
85 produces<edm::PSimHitContainer>(
"TrackerHitsTECHighTof");
87 produces<edm::PSimHitContainer>(
"TotemHitsT1");
88 produces<edm::PSimHitContainer>(
"TotemHitsT2Gem");
89 produces<edm::PSimHitContainer>(
"TotemHitsRP");
90 produces<edm::PSimHitContainer>(
"FP420SI");
91 produces<edm::PSimHitContainer>(
"BSCHits");
92 produces<edm::PSimHitContainer>(
"PLTHits");
93 produces<edm::PSimHitContainer>(
"BCM1FHits");
94 produces<edm::PSimHitContainer>(
"BHMHits");
95 produces<edm::PSimHitContainer>(
"FastTimerHits");
97 produces<edm::PCaloHitContainer>(
"EcalHitsEB");
98 produces<edm::PCaloHitContainer>(
"EcalHitsEE");
99 produces<edm::PCaloHitContainer>(
"EcalHitsES");
100 produces<edm::PCaloHitContainer>(
"HcalHits");
101 produces<edm::PCaloHitContainer>(
"CaloHitsTk");
102 produces<edm::PCaloHitContainer>(
"HGCHitsEE");
103 produces<edm::PCaloHitContainer>(
"HGCHitsHEfront");
104 produces<edm::PCaloHitContainer>(
"HGCHitsHEback");
106 produces<edm::PSimHitContainer>(
"MuonDTHits");
107 produces<edm::PSimHitContainer>(
"MuonCSCHits");
108 produces<edm::PSimHitContainer>(
"MuonRPCHits");
109 produces<edm::PSimHitContainer>(
"MuonGEMHits");
110 produces<edm::PSimHitContainer>(
"MuonME0Hits");
111 produces<edm::PCaloHitContainer>(
"CastorPL");
112 produces<edm::PCaloHitContainer>(
"CastorFI");
113 produces<edm::PCaloHitContainer>(
"CastorBU");
114 produces<edm::PCaloHitContainer>(
"CastorTU");
115 produces<edm::PCaloHitContainer>(
"EcalTBH4BeamHits");
116 produces<edm::PCaloHitContainer>(
"HcalTB06BeamHits");
117 produces<edm::PCaloHitContainer>(
"ZDCHITS");
118 produces<edm::PCaloHitContainer>(
"ChamberHits");
119 produces<edm::PCaloHitContainer>(
"FibreHits");
120 produces<edm::PCaloHitContainer>(
"WedgeHits");
125 for(Producers::iterator itProd = m_producers.begin();
126 itProd != m_producers.end(); ++itProd) {
128 (*itProd)->registerProducts(*
this);
137 StaticRandomEngineSetUnset
random(
nullptr);
144 StaticRandomEngineSetUnset
random(
nullptr);
148 return std::shared_ptr<int>();
152 iContext->
global()->endRun();
163 StaticRandomEngineSetUnset
random(
nullptr);
171 std::vector<SensitiveTkDetector*>& sTk =
173 std::vector<SensitiveCaloDetector*>& sCalo =
179 std::auto_ptr<edm::SimTrackContainer>
181 std::auto_ptr<edm::SimVertexContainer>
190 for (std::vector<SensitiveTkDetector*>::iterator it = sTk.begin();
191 it != sTk.end(); ++it) {
193 std::vector<std::string>
v = (*it)->getNames();
194 for (std::vector<std::string>::iterator
in = v.begin();
195 in!= v.end(); ++
in) {
197 std::auto_ptr<edm::PSimHitContainer>
199 (*it)->fillHits(*product,*
in);
203 for (std::vector<SensitiveCaloDetector*>::iterator it = sCalo.begin();
204 it != sCalo.end(); ++it) {
206 std::vector<std::string>
v = (*it)->getNames();
208 for (std::vector<std::string>::iterator
in = v.begin();
209 in!= v.end();
in++) {
211 std::auto_ptr<edm::PCaloHitContainer>
213 (*it)->fillHits(*product,*
in);
218 for(Producers::iterator itProd =
m_producers.begin();
221 (*itProd)->produce(e,es);
225 edm::LogInfo(
"SimG4CoreApplication") <<
" SimG4Exception caght !"
234 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(
240 <<
"The OscarMTProducer module requires the RandomNumberGeneratorService\n"
241 "which is not present in the configuration file. You must add the service\n"
242 "in the configuration file if you want to run OscarMTProducer";
244 m_currentEngine = &(rng->
getEngine(streamID));
246 m_previousEngine = G4Random::getTheEngine();
247 G4Random::setTheEngine(m_currentEngine);
250 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(
251 CLHEP::HepRandomEngine * engine)
253 m_currentEngine = engine;
254 m_previousEngine = G4Random::getTheEngine();
255 G4Random::setTheEngine(m_currentEngine);
258 StaticRandomEngineSetUnset::~StaticRandomEngineSetUnset()
260 G4Random::setTheEngine(m_previousEngine);
263 CLHEP::HepRandomEngine* StaticRandomEngineSetUnset::getEngine()
const
265 return m_currentEngine;
std::vector< PCaloHit > PCaloHitContainer
static std::shared_ptr< int > globalBeginRun(const edm::Run &iRun, const edm::EventSetup &iSetup, const OscarMTMasterThread *masterThread)
std::unique_ptr< RunManagerMTWorker > m_runManagerWorker
#define DEFINE_FWK_MODULE(type)
OscarMTProducer(edm::ParameterSet const &p, const OscarMTMasterThread *)
virtual ~OscarMTProducer()
void beginRun(const edm::EventSetup &iSetup) const
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
virtual void produce(edm::Event &e, const edm::EventSetup &c) override
virtual const char * what() const
static void globalEndRun(const edm::Run &iRun, const edm::EventSetup &iSetup, const RunContext *iContext)
void load(edm::SimTrackContainer &c) const
static std::unique_ptr< OscarMTMasterThread > initializeGlobalCache(const edm::ParameterSet &iConfig)
virtual void endRun(const edm::Run &r, const edm::EventSetup &c) override
std::vector< SimVertex > SimVertexContainer
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &) const =0
Use this engine in event methods.
StreamID streamID() const
std::vector< PSimHit > PSimHitContainer
static void globalEndJob(OscarMTMasterThread *masterThread)
std::vector< SimTrack > SimTrackContainer