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");
124 produces<edm::PCaloHitContainer>(
"HFNoseHits");
127 m_producers = m_runManager->producers();
129 for(Producers::iterator itProd = m_producers.begin();
130 itProd != m_producers.end(); ++itProd) {
132 (*itProd)->registerProducts(*
this);
146 StaticRandomEngineSetUnset
random(
nullptr);
147 m_runManager->initG4(es);
153 m_runManager->stopG4();
160 std::vector<SensitiveTkDetector*>& sTk =
161 m_runManager->sensTkDetectors();
162 std::vector<SensitiveCaloDetector*>& sCalo =
163 m_runManager->sensCaloDetectors();
165 try { m_runManager->produce(e, es); }
168 edm::LogInfo(
"SimG4CoreApplication") <<
"SimG4Exception caght! " 170 m_runManager->stopG4();
173 <<
"SimG4CoreApplication exception in generation of event " 174 << e.
id() <<
" in stream " << e.
streamID() <<
" \n" 178 std::unique_ptr<edm::SimTrackContainer>
180 std::unique_ptr<edm::SimVertexContainer>
191 const std::vector<std::string>&
v =
tracker->getNames();
192 for (
auto &
name : v) {
194 std::unique_ptr<edm::PSimHitContainer>
200 for (
auto & calo : sCalo) {
202 const std::vector<std::string>&
v = calo->getNames();
204 for (
auto &
name : v) {
206 std::unique_ptr<edm::PCaloHitContainer>
208 calo->fillHits(*product,
name);
213 for(
auto &
prod : m_producers) {
214 prod.get()->produce(e,es);
218 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(
224 <<
"The OscarProducer module requires the RandomNumberGeneratorService\n" 225 "which is not present in the configuration file. You must add the service\n" 226 "in the configuration file if you want to run OscarProducer";
228 m_currentEngine = &(rng->
getEngine(streamID));
234 m_previousEngine = G4Random::getTheEngine();
235 G4Random::setTheEngine(m_currentEngine);
238 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(
239 CLHEP::HepRandomEngine * engine)
241 m_currentEngine = engine;
242 m_previousEngine = G4Random::getTheEngine();
243 G4Random::setTheEngine(m_currentEngine);
246 StaticRandomEngineSetUnset::~StaticRandomEngineSetUnset()
248 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