23 #include "Randomize.hh" 51 class StaticRandomEngineSetUnset {
54 explicit StaticRandomEngineSetUnset(CLHEP::HepRandomEngine * engine);
55 ~StaticRandomEngineSetUnset();
57 CLHEP::HepRandomEngine* m_currentEngine;
58 CLHEP::HepRandomEngine* m_previousEngine;
65 StaticRandomEngineSetUnset
random(
nullptr);
71 m_runManager.reset(
new RunManager(p, consumesCollector()));
73 produces<edm::SimTrackContainer>().setBranchAlias(
"SimTracks");
74 produces<edm::SimVertexContainer>().setBranchAlias(
"SimVertices");
75 produces<edm::PSimHitContainer>(
"TrackerHitsPixelBarrelLowTof");
76 produces<edm::PSimHitContainer>(
"TrackerHitsPixelBarrelHighTof");
77 produces<edm::PSimHitContainer>(
"TrackerHitsTIBLowTof");
78 produces<edm::PSimHitContainer>(
"TrackerHitsTIBHighTof");
79 produces<edm::PSimHitContainer>(
"TrackerHitsTIDLowTof");
80 produces<edm::PSimHitContainer>(
"TrackerHitsTIDHighTof");
81 produces<edm::PSimHitContainer>(
"TrackerHitsPixelEndcapLowTof");
82 produces<edm::PSimHitContainer>(
"TrackerHitsPixelEndcapHighTof");
83 produces<edm::PSimHitContainer>(
"TrackerHitsTOBLowTof");
84 produces<edm::PSimHitContainer>(
"TrackerHitsTOBHighTof");
85 produces<edm::PSimHitContainer>(
"TrackerHitsTECLowTof");
86 produces<edm::PSimHitContainer>(
"TrackerHitsTECHighTof");
88 produces<edm::PSimHitContainer>(
"TotemHitsT1");
89 produces<edm::PSimHitContainer>(
"TotemHitsT2Gem");
90 produces<edm::PSimHitContainer>(
"TotemHitsRP");
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");
114 produces<edm::PCaloHitContainer>(
"CastorPL");
115 produces<edm::PCaloHitContainer>(
"CastorFI");
116 produces<edm::PCaloHitContainer>(
"CastorBU");
117 produces<edm::PCaloHitContainer>(
"CastorTU");
118 produces<edm::PCaloHitContainer>(
"EcalTBH4BeamHits");
119 produces<edm::PCaloHitContainer>(
"HcalTB06BeamHits");
120 produces<edm::PCaloHitContainer>(
"ZDCHITS");
121 produces<edm::PCaloHitContainer>(
"ChamberHits");
122 produces<edm::PCaloHitContainer>(
"FibreHits");
123 produces<edm::PCaloHitContainer>(
"WedgeHits");
126 m_producers = m_runManager->producers();
128 for(Producers::iterator itProd = m_producers.begin();
129 itProd != m_producers.end(); ++itProd) {
131 (*itProd)->registerProducts(*
this);
145 StaticRandomEngineSetUnset
random(
nullptr);
146 m_runManager->initG4(es);
152 m_runManager->stopG4();
159 std::vector<SensitiveTkDetector*>& sTk =
160 m_runManager->sensTkDetectors();
161 std::vector<SensitiveCaloDetector*>& sCalo =
162 m_runManager->sensCaloDetectors();
164 try { m_runManager->produce(e, es); }
167 edm::LogInfo(
"SimG4CoreApplication") <<
"SimG4Exception caght! " 169 m_runManager->stopG4();
172 <<
"SimG4CoreApplication exception in generation of event " 173 << e.
id() <<
" in stream " << e.
streamID() <<
" \n" 177 std::unique_ptr<edm::SimTrackContainer>
179 std::unique_ptr<edm::SimVertexContainer>
190 const std::vector<std::string>&
v =
tracker->getNames();
191 for (
auto &
name : v) {
193 std::unique_ptr<edm::PSimHitContainer>
199 for (
auto & calo : sCalo) {
201 const std::vector<std::string>&
v = calo->getNames();
203 for (
auto &
name : v) {
205 std::unique_ptr<edm::PCaloHitContainer>
207 calo->fillHits(*product,
name);
212 for(
auto &
prod : m_producers) {
213 prod.get()->produce(e,es);
217 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(
223 <<
"The OscarProducer module requires the RandomNumberGeneratorService\n" 224 "which is not present in the configuration file. You must add the service\n" 225 "in the configuration file if you want to run OscarProducer";
227 m_currentEngine = &(rng->
getEngine(streamID));
233 m_previousEngine = G4Random::getTheEngine();
234 G4Random::setTheEngine(m_currentEngine);
237 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(
238 CLHEP::HepRandomEngine * engine)
240 m_currentEngine = engine;
241 m_previousEngine = G4Random::getTheEngine();
242 G4Random::setTheEngine(m_currentEngine);
245 StaticRandomEngineSetUnset::~StaticRandomEngineSetUnset()
247 G4Random::setTheEngine(m_previousEngine);
T getParameter(std::string const &) const
std::vector< PCaloHit > PCaloHitContainer
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
void endRun(const edm::Run &r, const edm::EventSetup &c) override
OscarProducer(edm::ParameterSet const &p)
#define DEFINE_FWK_MODULE(type)
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
void beginRun(const edm::Run &r, const edm::EventSetup &c) override
const char * what() const override
static const std::string kGEANT
void produce(edm::Event &e, const edm::EventSetup &c) override
static const std::string kCLHEPRandomEngine
void load(edm::SimTrackContainer &c) const
std::vector< SimVertex > SimVertexContainer
~OscarProducer() override
StreamID streamID() const
std::vector< PSimHit > PSimHitContainer
std::vector< SimTrack > SimTrackContainer