26 #include "Randomize.hh" 53 class StaticRandomEngineSetUnset {
56 explicit StaticRandomEngineSetUnset(CLHEP::HepRandomEngine * engine);
57 ~StaticRandomEngineSetUnset();
59 CLHEP::HepRandomEngine* m_currentEngine;
60 CLHEP::HepRandomEngine* m_previousEngine;
67 StaticRandomEngineSetUnset
random(
nullptr);
71 produces<edm::SimTrackContainer>().setBranchAlias(
"SimTracks");
72 produces<edm::SimVertexContainer>().setBranchAlias(
"SimVertices");
73 produces<edm::PSimHitContainer>(
"TrackerHitsPixelBarrelLowTof");
74 produces<edm::PSimHitContainer>(
"TrackerHitsPixelBarrelHighTof");
75 produces<edm::PSimHitContainer>(
"TrackerHitsTIBLowTof");
76 produces<edm::PSimHitContainer>(
"TrackerHitsTIBHighTof");
77 produces<edm::PSimHitContainer>(
"TrackerHitsTIDLowTof");
78 produces<edm::PSimHitContainer>(
"TrackerHitsTIDHighTof");
79 produces<edm::PSimHitContainer>(
"TrackerHitsPixelEndcapLowTof");
80 produces<edm::PSimHitContainer>(
"TrackerHitsPixelEndcapHighTof");
81 produces<edm::PSimHitContainer>(
"TrackerHitsTOBLowTof");
82 produces<edm::PSimHitContainer>(
"TrackerHitsTOBHighTof");
83 produces<edm::PSimHitContainer>(
"TrackerHitsTECLowTof");
84 produces<edm::PSimHitContainer>(
"TrackerHitsTECHighTof");
86 produces<edm::PSimHitContainer>(
"TotemHitsT1");
87 produces<edm::PSimHitContainer>(
"TotemHitsT2Gem");
88 produces<edm::PSimHitContainer>(
"TotemHitsRP");
89 produces<edm::PSimHitContainer>(
"FP420SI");
90 produces<edm::PSimHitContainer>(
"BSCHits");
91 produces<edm::PSimHitContainer>(
"PLTHits");
92 produces<edm::PSimHitContainer>(
"BCM1FHits");
93 produces<edm::PSimHitContainer>(
"BHMHits");
94 produces<edm::PSimHitContainer>(
"FastTimerHitsBarrel");
95 produces<edm::PSimHitContainer>(
"FastTimerHitsEndcap");
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");
123 m_producers = m_runManagerWorker->producers();
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);
164 m_runManagerWorker->endRun();
171 std::vector<SensitiveTkDetector*>& sTk =
172 m_runManagerWorker->sensTkDetectors();
173 std::vector<SensitiveCaloDetector*>& sCalo =
174 m_runManagerWorker->sensCaloDetectors();
176 try { m_runManagerWorker->produce(e, es, globalCache()->runManagerMaster()); }
179 edm::LogInfo(
"SimG4CoreApplication") <<
"SimG4Exception caght! " 183 <<
"SimG4CoreApplication exception in generation of event " 184 << e.
id() <<
" in stream " << e.
streamID() <<
" \n" 188 std::unique_ptr<edm::SimTrackContainer>
190 std::unique_ptr<edm::SimVertexContainer>
192 G4SimEvent * evt = m_runManagerWorker->simEvent();
201 std::vector<std::string>
v =
tracker->getNames();
202 for (
auto &
name : v) {
204 std::unique_ptr<edm::PSimHitContainer>
210 for (
auto & calo : sCalo) {
212 std::vector<std::string>
v = calo->getNames();
214 for (
auto &
name : v) {
216 std::unique_ptr<edm::PCaloHitContainer>
218 calo->fillHits(*product,
name);
223 for(
auto &
prod : m_producers) {
224 prod.get()->produce(e,es);
228 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(
234 <<
"The OscarMTProducer module requires the RandomNumberGeneratorService\n" 235 "which is not present in the configuration file. You must add the service\n" 236 "in the configuration file if you want to run OscarMTProducer";
238 m_currentEngine = &(rng->
getEngine(streamID));
240 m_previousEngine = G4Random::getTheEngine();
241 G4Random::setTheEngine(m_currentEngine);
244 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(
245 CLHEP::HepRandomEngine * engine)
247 m_currentEngine = engine;
248 m_previousEngine = G4Random::getTheEngine();
249 G4Random::setTheEngine(m_currentEngine);
252 StaticRandomEngineSetUnset::~StaticRandomEngineSetUnset()
254 G4Random::setTheEngine(m_previousEngine);
std::vector< PCaloHit > PCaloHitContainer
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
static std::shared_ptr< int > globalBeginRun(const edm::Run &iRun, const edm::EventSetup &iSetup, const OscarMTMasterThread *masterThread)
#define DEFINE_FWK_MODULE(type)
OscarMTProducer(edm::ParameterSet const &p, const OscarMTMasterThread *)
virtual ~OscarMTProducer()
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
void beginRun(const edm::EventSetup &iSetup) const
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
StreamID streamID() const
std::vector< PSimHit > PSimHitContainer
static void globalEndJob(OscarMTMasterThread *masterThread)
std::vector< SimTrack > SimTrackContainer