![]() |
![]() |
#include <SimG4Core/Application/interface/OscarProducer.h>
Public Types | |
typedef std::vector < boost::shared_ptr < SimProducer > > | Producers |
Public Member Functions | |
virtual void | beginJob (const edm::EventSetup &c) |
virtual void | endJob () |
OscarProducer (edm::ParameterSet const &p) | |
virtual void | produce (edm::Event &e, const edm::EventSetup &c) |
virtual | ~OscarProducer () |
Protected Attributes | |
Producers | m_producers |
RunManager * | m_runManager |
CustomUIsession * | m_UIsession |
Private Attributes | |
CLHEP::HepRandomEngine * | m_engine |
Definition at line 20 of file OscarProducer.h.
typedef std::vector<boost::shared_ptr<SimProducer> > OscarProducer::Producers |
Definition at line 23 of file OscarProducer.h.
OscarProducer::OscarProducer | ( | edm::ParameterSet const & | p | ) | [explicit] |
Definition at line 50 of file OscarProducer.cc.
References m_engine, m_producers, m_runManager, m_UIsession, and random.
00051 { 00052 StaticRandomEngineSetUnset random; 00053 m_engine = random.getEngine(); 00054 00055 produces<edm::SimTrackContainer>().setBranchAlias("SimTracks"); 00056 produces<edm::SimVertexContainer>().setBranchAlias("SimVertices"); 00057 produces<edm::PSimHitContainer>("TrackerHitsPixelBarrelLowTof"); 00058 produces<edm::PSimHitContainer>("TrackerHitsPixelBarrelHighTof"); 00059 produces<edm::PSimHitContainer>("TrackerHitsTIBLowTof"); 00060 produces<edm::PSimHitContainer>("TrackerHitsTIBHighTof"); 00061 produces<edm::PSimHitContainer>("TrackerHitsTIDLowTof"); 00062 produces<edm::PSimHitContainer>("TrackerHitsTIDHighTof"); 00063 produces<edm::PSimHitContainer>("TrackerHitsPixelEndcapLowTof"); 00064 produces<edm::PSimHitContainer>("TrackerHitsPixelEndcapHighTof"); 00065 produces<edm::PSimHitContainer>("TrackerHitsTOBLowTof"); 00066 produces<edm::PSimHitContainer>("TrackerHitsTOBHighTof"); 00067 produces<edm::PSimHitContainer>("TrackerHitsTECLowTof"); 00068 produces<edm::PSimHitContainer>("TrackerHitsTECHighTof"); 00069 00070 produces<edm::PSimHitContainer>("TotemHitsT1"); 00071 produces<edm::PSimHitContainer>("TotemHitsT2Gem"); 00072 produces<edm::PSimHitContainer>("TotemHitsRP"); 00073 produces<edm::PSimHitContainer>("FP420SI"); 00074 produces<edm::PSimHitContainer>("BSCHits"); 00075 00076 produces<edm::PCaloHitContainer>("EcalHitsEB"); 00077 produces<edm::PCaloHitContainer>("EcalHitsEE"); 00078 produces<edm::PCaloHitContainer>("EcalHitsES"); 00079 produces<edm::PCaloHitContainer>("HcalHits"); 00080 produces<edm::PCaloHitContainer>("CaloHitsTk"); 00081 produces<edm::PSimHitContainer>("MuonDTHits"); 00082 produces<edm::PSimHitContainer>("MuonCSCHits"); 00083 produces<edm::PSimHitContainer>("MuonRPCHits"); 00084 produces<edm::PCaloHitContainer>("CastorPL"); 00085 produces<edm::PCaloHitContainer>("CastorFI"); 00086 produces<edm::PCaloHitContainer>("CastorBU"); 00087 produces<edm::PCaloHitContainer>("CastorTU"); 00088 produces<edm::PCaloHitContainer>("EcalTBH4BeamHits"); 00089 produces<edm::PCaloHitContainer>("HcalTB06BeamHits"); 00090 produces<edm::PCaloHitContainer>("ZDCHITS"); 00091 00092 //m_runManager = RunManager::init(p); 00093 m_runManager = new RunManager(p); 00094 00095 //register any products 00096 m_producers= m_runManager->producers(); 00097 00098 for(Producers::iterator itProd = m_producers.begin(); 00099 itProd != m_producers.end(); 00100 ++itProd) { 00101 (*itProd)->registerProducts(*this); 00102 } 00103 00104 //UIsession manager for message handling 00105 m_UIsession = new CustomUIsession(); 00106 00107 }
OscarProducer::~OscarProducer | ( | ) | [virtual] |
Definition at line 109 of file OscarProducer.cc.
References m_runManager, and m_UIsession.
00110 { 00111 //this is causing a seg fault when an exception occurs while constructing 00112 // an HcalSD. Need to check for memory problems. 00113 if (m_runManager!=0) delete m_runManager; 00114 if (m_UIsession!=0) delete m_UIsession; 00115 00116 }
void OscarProducer::beginJob | ( | const edm::EventSetup & | c | ) | [virtual] |
Reimplemented from edm::EDProducer.
Definition at line 118 of file OscarProducer.cc.
References RunManager::initG4(), m_engine, m_runManager, and random.
00119 { 00120 StaticRandomEngineSetUnset random(m_engine); 00121 00122 m_runManager->initG4(es); 00123 }
void OscarProducer::produce | ( | edm::Event & | e, | |
const edm::EventSetup & | c | |||
) | [virtual] |
Implements edm::EDProducer.
Definition at line 127 of file OscarProducer.cc.
References RunManager::abortEvent(), lat::endl(), edm::errors::EventCorruption, in, it, G4SimEvent::load(), m_engine, m_producers, m_runManager, p1, p2, RunManager::produce(), edm::Event::put(), random, RunManager::sensCaloDetectors(), RunManager::sensTkDetectors(), RunManager::simEvent(), v, and SimG4Exception::what().
00128 { 00129 StaticRandomEngineSetUnset random(m_engine); 00130 00131 std::vector<SensitiveTkDetector*>& sTk = m_runManager->sensTkDetectors(); 00132 std::vector<SensitiveCaloDetector*>& sCalo = m_runManager->sensCaloDetectors(); 00133 00134 try 00135 { 00136 m_runManager->produce(e,es); 00137 00138 std::auto_ptr<edm::SimTrackContainer> p1(new edm::SimTrackContainer); 00139 std::auto_ptr<edm::SimVertexContainer> p2(new edm::SimVertexContainer); 00140 G4SimEvent * evt = m_runManager->simEvent(); 00141 evt->load(*p1); 00142 evt->load(*p2); 00143 00144 e.put(p1); 00145 e.put(p2); 00146 00147 for (std::vector<SensitiveTkDetector*>::iterator it = sTk.begin(); it != sTk.end(); it++) 00148 { 00149 std::vector<std::string> v = (*it)->getNames(); 00150 for (std::vector<std::string>::iterator in = v.begin(); in!= v.end(); in++) 00151 { 00152 std::auto_ptr<edm::PSimHitContainer> product(new edm::PSimHitContainer); 00153 (*it)->fillHits(*product,*in); 00154 e.put(product,*in); 00155 } 00156 } 00157 for (std::vector<SensitiveCaloDetector*>::iterator it = sCalo.begin(); it != sCalo.end(); it++) 00158 { 00159 std::vector<std::string> v = (*it)->getNames(); 00160 for (std::vector<std::string>::iterator in = v.begin(); in!= v.end(); in++) 00161 { 00162 std::auto_ptr<edm::PCaloHitContainer> product(new edm::PCaloHitContainer); 00163 (*it)->fillHits(*product,*in); 00164 e.put(product,*in); 00165 } 00166 } 00167 00168 for(Producers::iterator itProd = m_producers.begin(); 00169 itProd != m_producers.end(); 00170 ++itProd) { 00171 (*itProd)->produce(e,es); 00172 } 00173 } 00174 catch ( const SimG4Exception& simg4ex ) 00175 { 00176 00177 edm::LogInfo("SimG4CoreApplication") << " SimG4Exception caght !" << simg4ex.what() << std::endl ; 00178 00179 m_runManager->abortEvent() ; 00180 throw edm::Exception( edm::errors::EventCorruption ) ; 00181 } 00182 }
CLHEP::HepRandomEngine* OscarProducer::m_engine [private] |
Definition at line 36 of file OscarProducer.h.
Referenced by beginJob(), OscarProducer(), and produce().
Producers OscarProducer::m_producers [protected] |
RunManager* OscarProducer::m_runManager [protected] |
Definition at line 31 of file OscarProducer.h.
Referenced by beginJob(), OscarProducer(), produce(), and ~OscarProducer().
CustomUIsession* OscarProducer::m_UIsession [protected] |