21 #include "Randomize.hh"
49 class StaticRandomEngineSetUnset {
52 explicit StaticRandomEngineSetUnset(CLHEP::HepRandomEngine * engine);
53 ~StaticRandomEngineSetUnset();
54 CLHEP::HepRandomEngine* getEngine()
const;
56 CLHEP::HepRandomEngine* m_currentEngine;
57 CLHEP::HepRandomEngine* m_previousEngine;
64 StaticRandomEngineSetUnset
random(
nullptr);
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>(
"FastTimerHits");
98 produces<edm::PCaloHitContainer>(
"EcalHitsEB");
99 produces<edm::PCaloHitContainer>(
"EcalHitsEE");
100 produces<edm::PCaloHitContainer>(
"EcalHitsES");
101 produces<edm::PCaloHitContainer>(
"HcalHits");
102 produces<edm::PCaloHitContainer>(
"CaloHitsTk");
103 produces<edm::PCaloHitContainer>(
"HGCHitsEE");
104 produces<edm::PCaloHitContainer>(
"HGCHitsHEfront");
105 produces<edm::PCaloHitContainer>(
"HGCHitsHEback");
107 produces<edm::PSimHitContainer>(
"MuonDTHits");
108 produces<edm::PSimHitContainer>(
"MuonCSCHits");
109 produces<edm::PSimHitContainer>(
"MuonRPCHits");
110 produces<edm::PSimHitContainer>(
"MuonGEMHits");
111 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");
127 for(Producers::iterator itProd = m_producers.begin();
128 itProd != m_producers.end(); ++itProd) {
130 (*itProd)->registerProducts(*
this);
144 StaticRandomEngineSetUnset
random(
nullptr);
158 std::vector<SensitiveTkDetector*>& sTk =
160 std::vector<SensitiveCaloDetector*>& sCalo =
167 std::auto_ptr<edm::SimTrackContainer>
169 std::auto_ptr<edm::SimVertexContainer>
178 for (std::vector<SensitiveTkDetector*>::iterator it = sTk.begin();
179 it != sTk.end(); ++it) {
181 std::vector<std::string>
v = (*it)->getNames();
182 for (std::vector<std::string>::iterator
in = v.begin();
183 in!= v.end(); ++
in) {
185 std::auto_ptr<edm::PSimHitContainer>
187 (*it)->fillHits(*product,*
in);
191 for (std::vector<SensitiveCaloDetector*>::iterator it = sCalo.begin();
192 it != sCalo.end(); ++it) {
194 std::vector<std::string>
v = (*it)->getNames();
196 for (std::vector<std::string>::iterator
in = v.begin();
197 in!= v.end();
in++) {
199 std::auto_ptr<edm::PCaloHitContainer>
201 (*it)->fillHits(*product,*
in);
206 for(Producers::iterator itProd =
m_producers.begin();
209 (*itProd)->produce(e,es);
214 edm::LogInfo(
"SimG4CoreApplication") <<
" SimG4Exception caght !"
222 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(
228 <<
"The OscarProducer module requires the RandomNumberGeneratorService\n"
229 "which is not present in the configuration file. You must add the service\n"
230 "in the configuration file if you want to run OscarProducer";
232 m_currentEngine = &(rng->
getEngine(streamID));
238 m_previousEngine = G4Random::getTheEngine();
239 G4Random::setTheEngine(m_currentEngine);
242 StaticRandomEngineSetUnset::StaticRandomEngineSetUnset(
243 CLHEP::HepRandomEngine * engine)
245 m_currentEngine = engine;
246 m_previousEngine = G4Random::getTheEngine();
247 G4Random::setTheEngine(m_currentEngine);
250 StaticRandomEngineSetUnset::~StaticRandomEngineSetUnset()
252 G4Random::setTheEngine(m_previousEngine);
255 CLHEP::HepRandomEngine* StaticRandomEngineSetUnset::getEngine()
const
257 return m_currentEngine;
T getParameter(std::string const &) const
std::unique_ptr< RunManager > m_runManager
std::vector< PCaloHit > PCaloHitContainer
virtual 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.
virtual void beginRun(const edm::Run &r, const edm::EventSetup &c) override
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
static const std::string kGEANT
virtual void produce(edm::Event &e, const edm::EventSetup &c) override
static const std::string kCLHEPRandomEngine
virtual const char * what() const
void load(edm::SimTrackContainer &c) const
std::vector< SimVertex > SimVertexContainer
StreamID streamID() const
std::vector< PSimHit > PSimHitContainer
std::vector< SimTrack > SimTrackContainer
std::unique_ptr< CustomUIsession > m_UIsession