26 #include "Randomize.hh" 53 class StaticRandomEngineSetUnset {
56 explicit StaticRandomEngineSetUnset(CLHEP::HepRandomEngine* engine);
57 ~StaticRandomEngineSetUnset();
60 CLHEP::HepRandomEngine* m_currentEngine;
61 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>(
"CTPPSPixelHits");
90 produces<edm::PSimHitContainer>(
"CTPPSTimingHits");
91 produces<edm::PSimHitContainer>(
"FP420SI");
92 produces<edm::PSimHitContainer>(
"BSCHits");
93 produces<edm::PSimHitContainer>(
"PLTHits");
94 produces<edm::PSimHitContainer>(
"BCM1FHits");
95 produces<edm::PSimHitContainer>(
"BHMHits");
96 produces<edm::PSimHitContainer>(
"FastTimerHitsBarrel");
97 produces<edm::PSimHitContainer>(
"FastTimerHitsEndcap");
99 produces<edm::PCaloHitContainer>(
"EcalHitsEB");
100 produces<edm::PCaloHitContainer>(
"EcalHitsEE");
101 produces<edm::PCaloHitContainer>(
"EcalHitsES");
102 produces<edm::PCaloHitContainer>(
"HcalHits");
103 produces<edm::PCaloHitContainer>(
"CaloHitsTk");
104 produces<edm::PCaloHitContainer>(
"HGCHitsEE");
105 produces<edm::PCaloHitContainer>(
"HGCHitsHEfront");
106 produces<edm::PCaloHitContainer>(
"HGCHitsHEback");
108 produces<edm::PSimHitContainer>(
"MuonDTHits");
109 produces<edm::PSimHitContainer>(
"MuonCSCHits");
110 produces<edm::PSimHitContainer>(
"MuonRPCHits");
111 produces<edm::PSimHitContainer>(
"MuonGEMHits");
112 produces<edm::PSimHitContainer>(
"MuonME0Hits");
113 produces<edm::PCaloHitContainer>(
"CastorPL");
114 produces<edm::PCaloHitContainer>(
"CastorFI");
115 produces<edm::PCaloHitContainer>(
"CastorBU");
116 produces<edm::PCaloHitContainer>(
"CastorTU");
117 produces<edm::PCaloHitContainer>(
"EcalTBH4BeamHits");
118 produces<edm::PCaloHitContainer>(
"HcalTB06BeamHits");
119 produces<edm::PCaloHitContainer>(
"ZDCHITS");
120 produces<edm::PCaloHitContainer>(
"ChamberHits");
121 produces<edm::PCaloHitContainer>(
"FibreHits");
122 produces<edm::PCaloHitContainer>(
"WedgeHits");
123 produces<edm::PCaloHitContainer>(
"HFNoseHits");
126 auto&
producers = m_runManagerWorker->producers();
128 for (Producers::iterator itProd = producers.begin(); itProd != producers.end(); ++itProd) {
129 (*itProd)->registerProducts(producesCollector());
137 StaticRandomEngineSetUnset random(
nullptr);
146 StaticRandomEngineSetUnset random(
nullptr);
150 return std::shared_ptr<int>();
154 iContext->
global()->endRun();
161 StaticRandomEngineSetUnset random(
nullptr);
162 m_runManagerWorker->endRun();
166 StaticRandomEngineSetUnset random(e.
streamID());
167 LogDebug(
"SimG4CoreApplication") <<
"Produce event " << e.
id() <<
" stream " << e.
streamID()
168 <<
" rand= " << G4UniformRand();
170 auto& sTk = m_runManagerWorker->sensTkDetectors();
171 auto& sCalo = m_runManagerWorker->sensCaloDetectors();
173 std::unique_ptr<G4SimEvent> evt;
175 evt = m_runManagerWorker->produce(e, es, globalCache()->runManagerMaster());
180 <<
"SimG4CoreApplication exception in generation of event " << e.
id() <<
" in stream " << e.
streamID() <<
" \n" 193 const std::vector<std::string>&
v =
tracker->getNames();
194 for (
auto&
name : v) {
200 for (
auto& calo : sCalo) {
201 const std::vector<std::string>&
v = calo->getNames();
203 for (
auto&
name : v) {
205 calo->fillHits(*product,
name);
210 auto&
producers = m_runManagerWorker->producers();
212 prod.get()->produce(e, es);
214 LogDebug(
"SimG4CoreApplication") <<
"Event is produced " << e.
id() <<
" stream " << e.
streamID()
215 <<
" rand= " << G4UniformRand();
218 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(
edm::StreamID const& streamID) {
222 <<
"The OscarMTProducer module requires the RandomNumberGeneratorService\n" 223 "which is not present in the configuration file. You must add the service\n" 224 "in the configuration file if you want to run OscarMTProducer";
226 m_currentEngine = &(rng->
getEngine(streamID));
228 m_previousEngine = G4Random::getTheEngine();
229 G4Random::setTheEngine(m_currentEngine);
232 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(CLHEP::HepRandomEngine* engine) {
233 m_currentEngine = engine;
234 m_previousEngine = G4Random::getTheEngine();
235 G4Random::setTheEngine(m_currentEngine);
238 StaticRandomEngineSetUnset::~StaticRandomEngineSetUnset() { 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)
OscarMTProducer(edm::ParameterSet const &p, const OscarMTMasterThread *)
~OscarMTProducer() override
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
void beginRun(const edm::EventSetup &iSetup) const
#define DEFINE_FWK_MODULE(type)
const char * what() const override
void produce(edm::Event &e, const edm::EventSetup &c) override
static void globalEndRun(const edm::Run &iRun, const edm::EventSetup &iSetup, const RunContext *iContext)
static std::unique_ptr< OscarMTMasterThread > initializeGlobalCache(const edm::ParameterSet &iConfig)
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