CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Attributes
OscarMTProducer Class Reference

#include <OscarMTProducer.h>

Inheritance diagram for OscarMTProducer:
edm::stream::EDProducer< edm::GlobalCache< OscarMTMasterThread >, edm::RunCache< int > >

Public Types

typedef std::vector< std::shared_ptr< SimProducer > > Producers
 
- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< OscarMTMasterThread >, edm::RunCache< int > >
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Public Member Functions

void beginRun (const edm::Run &r, const edm::EventSetup &c) override
 
void endRun (const edm::Run &r, const edm::EventSetup &c) override
 
 OscarMTProducer (edm::ParameterSet const &p, const OscarMTMasterThread *)
 
void produce (edm::Event &e, const edm::EventSetup &c) override
 
 ~OscarMTProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer< edm::GlobalCache< OscarMTMasterThread >, edm::RunCache< int > >
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static std::shared_ptr< int > globalBeginRun (const edm::Run &iRun, const edm::EventSetup &iSetup, const OscarMTMasterThread *masterThread)
 
static void globalEndJob (OscarMTMasterThread *masterThread)
 
static void globalEndRun (const edm::Run &iRun, const edm::EventSetup &iSetup, const RunContext *iContext)
 
static std::unique_ptr< OscarMTMasterThreadinitializeGlobalCache (const edm::ParameterSet &iConfig)
 

Private Attributes

const OscarMTMasterThreadm_masterThread = nullptr
 
std::unique_ptr< RunManagerMTWorkerm_runManagerWorker
 

Detailed Description

Definition at line 18 of file OscarMTProducer.h.

Member Typedef Documentation

◆ Producers

typedef std::vector<std::shared_ptr<SimProducer> > OscarMTProducer::Producers

Definition at line 22 of file OscarMTProducer.h.

Constructor & Destructor Documentation

◆ OscarMTProducer()

OscarMTProducer::OscarMTProducer ( edm::ParameterSet const &  p,
const OscarMTMasterThread ms 
)
explicit

Definition at line 66 of file OscarMTProducer.cc.

66  {
67  // Random number generation not allowed here
68  StaticRandomEngineSetUnset random(nullptr);
69 
70  m_runManagerWorker = std::make_unique<RunManagerMTWorker>(p, consumesCollector());
71  m_masterThread = ms;
72 
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");
87 
88  produces<edm::PSimHitContainer>("TotemHitsT1");
89  produces<edm::PSimHitContainer>("TotemHitsT2Gem");
90  produces<edm::PSimHitContainer>("TotemHitsRP");
91  produces<edm::PSimHitContainer>("CTPPSPixelHits");
92  produces<edm::PSimHitContainer>("CTPPSTimingHits");
93  produces<edm::PSimHitContainer>("FP420SI");
94  produces<edm::PSimHitContainer>("BSCHits");
95  produces<edm::PSimHitContainer>("PLTHits");
96  produces<edm::PSimHitContainer>("BCM1FHits");
97  produces<edm::PSimHitContainer>("BHMHits");
98  produces<edm::PSimHitContainer>("FastTimerHitsBarrel");
99  produces<edm::PSimHitContainer>("FastTimerHitsEndcap");
100 
101  produces<edm::PCaloHitContainer>("EcalHitsEB");
102  produces<edm::PCaloHitContainer>("EcalHitsEE");
103  produces<edm::PCaloHitContainer>("EcalHitsES");
104  produces<edm::PCaloHitContainer>("HcalHits");
105  produces<edm::PCaloHitContainer>("CaloHitsTk");
106  produces<edm::PCaloHitContainer>("HGCHitsEE");
107  produces<edm::PCaloHitContainer>("HGCHitsHEfront");
108  produces<edm::PCaloHitContainer>("HGCHitsHEback");
109 
110  produces<edm::PSimHitContainer>("MuonDTHits");
111  produces<edm::PSimHitContainer>("MuonCSCHits");
112  produces<edm::PSimHitContainer>("MuonRPCHits");
113  produces<edm::PSimHitContainer>("MuonGEMHits");
114  produces<edm::PSimHitContainer>("MuonME0Hits");
115  produces<edm::PCaloHitContainer>("CastorPL");
116  produces<edm::PCaloHitContainer>("CastorFI");
117  produces<edm::PCaloHitContainer>("CastorBU");
118  produces<edm::PCaloHitContainer>("CastorTU");
119  produces<edm::PCaloHitContainer>("EcalTBH4BeamHits");
120  produces<edm::PCaloHitContainer>("HcalTB06BeamHits");
121  produces<edm::PCaloHitContainer>("ZDCHITS");
122  produces<edm::PCaloHitContainer>("ChamberHits");
123  produces<edm::PCaloHitContainer>("FibreHits");
124  produces<edm::PCaloHitContainer>("WedgeHits");
125  produces<edm::PCaloHitContainer>("HFNoseHits");
126  produces<edm::PCaloHitContainer>("TotemHitsT2Scint");
127 
128  //register any products
129  auto& producers = m_runManagerWorker->producers();
130 
131  for (Producers::iterator itProd = producers.begin(); itProd != producers.end(); ++itProd) {
132  (*itProd)->registerProducts(producesCollector());
133  }
134  edm::LogVerbatim("SimG4CoreApplication") << "OscarMTProducer is constructed";
135 }

References m_masterThread, m_runManagerWorker, AlCaHLTBitMon_ParallelJobs::p, and HLT_FULL_cff::producers.

◆ ~OscarMTProducer()

OscarMTProducer::~OscarMTProducer ( )
override

Definition at line 137 of file OscarMTProducer.cc.

137 {}

Member Function Documentation

◆ beginRun()

void OscarMTProducer::beginRun ( const edm::Run r,
const edm::EventSetup c 
)
override

Definition at line 169 of file OscarMTProducer.cc.

169  {
170  edm::LogVerbatim("SimG4CoreApplication") << "OscarMTProducer::beginRun";
172  edm::LogVerbatim("SimG4CoreApplication") << "OscarMTProducer::beginRun done";
173 }

References m_masterThread, m_runManagerWorker, and OscarMTMasterThread::runManagerMasterPtr().

◆ endRun()

void OscarMTProducer::endRun ( const edm::Run r,
const edm::EventSetup c 
)
override

Definition at line 175 of file OscarMTProducer.cc.

175  {
176  // Random number generation not allowed here
177  StaticRandomEngineSetUnset random(nullptr);
178  edm::LogVerbatim("SimG4CoreApplication") << "OscarMTProducer::endRun";
179  m_runManagerWorker->endRun();
180  edm::LogVerbatim("SimG4CoreApplication") << "OscarMTProducer::endRun done";
181 }

References m_runManagerWorker.

◆ globalBeginRun()

std::shared_ptr< int > OscarMTProducer::globalBeginRun ( const edm::Run iRun,
const edm::EventSetup iSetup,
const OscarMTMasterThread masterThread 
)
static

Definition at line 147 of file OscarMTProducer.cc.

149  {
150  // Random number generation not allowed here
151  StaticRandomEngineSetUnset random(nullptr);
152 
153  edm::LogVerbatim("SimG4CoreApplication") << "OscarMTProducer::globalBeginRun";
154  masterThread->beginRun(iSetup);
155  edm::LogVerbatim("SimG4CoreApplication") << "OscarMTProducer::globalBeginRun done";
156  return std::shared_ptr<int>();
157 }

References OscarMTMasterThread::beginRun().

◆ globalEndJob()

void OscarMTProducer::globalEndJob ( OscarMTMasterThread masterThread)
static

Definition at line 164 of file OscarMTProducer.cc.

164  {
165  edm::LogVerbatim("SimG4CoreApplication") << "OscarMTProducer::globalEndJob";
166  masterThread->stopThread();
167 }

References OscarMTMasterThread::stopThread().

◆ globalEndRun()

void OscarMTProducer::globalEndRun ( const edm::Run iRun,
const edm::EventSetup iSetup,
const RunContext iContext 
)
static

Definition at line 159 of file OscarMTProducer.cc.

159  {
160  edm::LogVerbatim("SimG4CoreApplication") << "OscarMTProducer::globalEndRun";
161  iContext->global()->endRun();
162 }

References edm::stream::RunContextT< R, G >::global().

◆ initializeGlobalCache()

std::unique_ptr< OscarMTMasterThread > OscarMTProducer::initializeGlobalCache ( const edm::ParameterSet iConfig)
static

Definition at line 139 of file OscarMTProducer.cc.

139  {
140  // Random number generation not allowed here
141  StaticRandomEngineSetUnset random(nullptr);
142  edm::LogVerbatim("SimG4CoreApplication") << "OscarMTProducer::initializeGlobalCache";
143 
144  return std::unique_ptr<OscarMTMasterThread>(new OscarMTMasterThread(iConfig));
145 }

◆ produce()

void OscarMTProducer::produce ( edm::Event e,
const edm::EventSetup c 
)
override

Definition at line 183 of file OscarMTProducer.cc.

183  {
184  StaticRandomEngineSetUnset random(e.streamID());
185  edm::LogVerbatim("SimG4CoreApplication") << "Produce event " << e.id() << " stream " << e.streamID();
186  LogDebug("SimG4CoreApplication") << "Before event rand= " << G4UniformRand();
187 
188  auto& sTk = m_runManagerWorker->sensTkDetectors();
189  auto& sCalo = m_runManagerWorker->sensCaloDetectors();
190 
191  std::unique_ptr<G4SimEvent> evt;
192  try {
193  evt = m_runManagerWorker->produce(e, es, globalCache()->runManagerMaster());
194  } catch (const SimG4Exception& simg4ex) {
195  edm::LogWarning("SimG4CoreApplication") << "SimG4Exception caght! " << simg4ex.what();
196 
198  << "SimG4CoreApplication exception in generation of event " << e.id() << " in stream " << e.streamID() << " \n"
199  << simg4ex.what();
200  }
201 
202  std::unique_ptr<edm::SimTrackContainer> p1(new edm::SimTrackContainer);
203  std::unique_ptr<edm::SimVertexContainer> p2(new edm::SimVertexContainer);
204  evt->load(*p1);
205  evt->load(*p2);
206 
207  e.put(std::move(p1));
208  e.put(std::move(p2));
209 
210  for (auto& tracker : sTk) {
211  const std::vector<std::string>& v = tracker->getNames();
212  for (auto& name : v) {
213  std::unique_ptr<edm::PSimHitContainer> product(new edm::PSimHitContainer);
214  tracker->fillHits(*product, name);
215  if (product != nullptr && !product->empty())
216  edm::LogVerbatim("SimG4CoreApplication") << "Produced " << product->size() << " traker hits <" << name << ">";
217  e.put(std::move(product), name);
218  }
219  }
220  for (auto& calo : sCalo) {
221  const std::vector<std::string>& v = calo->getNames();
222 
223  for (auto& name : v) {
224  std::unique_ptr<edm::PCaloHitContainer> product(new edm::PCaloHitContainer);
225  calo->fillHits(*product, name);
226  if (product != nullptr && !product->empty())
227  edm::LogVerbatim("SimG4CoreApplication") << "Produced " << product->size() << " calo hits <" << name << ">";
228  e.put(std::move(product), name);
229  }
230  }
231 
232  auto& producers = m_runManagerWorker->producers();
233  for (auto& prod : producers) {
234  prod.get()->produce(e, es);
235  }
236  edm::LogVerbatim("SimG4CoreApplication") << "Event is produced " << e.id() << " stream " << e.streamID();
237  LogDebug("SimG4CoreApplication") << "End of event rand= " << G4UniformRand();
238 }

References MillePedeFileConverter_cfg::e, edm::errors::EventCorruption, Exception, LogDebug, m_runManagerWorker, eostools::move(), Skims_PA_cff::name, p1, p2, dumpMFGeometry_cfg::prod, HLT_FULL_cff::producers, PbPb_ZMuSkimMuonDPG_cff::tracker, findQualityFiles::v, and SimG4Exception::what().

Member Data Documentation

◆ m_masterThread

const OscarMTMasterThread* OscarMTProducer::m_masterThread = nullptr
private

Definition at line 40 of file OscarMTProducer.h.

Referenced by beginRun(), and OscarMTProducer().

◆ m_runManagerWorker

std::unique_ptr<RunManagerMTWorker> OscarMTProducer::m_runManagerWorker
private

Definition at line 39 of file OscarMTProducer.h.

Referenced by beginRun(), endRun(), OscarMTProducer(), and produce().

AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
SimG4Exception
Definition: SimG4Exception.h:13
edm::errors::EventCorruption
Definition: EDMException.h:43
HLT_FULL_cff.producers
producers
Definition: HLT_FULL_cff.py:13094
findQualityFiles.v
v
Definition: findQualityFiles.py:179
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
dumpMFGeometry_cfg.prod
prod
Definition: dumpMFGeometry_cfg.py:24
p2
double p2[4]
Definition: TauolaWrapper.h:90
OscarMTProducer::m_runManagerWorker
std::unique_ptr< RunManagerMTWorker > m_runManagerWorker
Definition: OscarMTProducer.h:39
PbPb_ZMuSkimMuonDPG_cff.tracker
tracker
Definition: PbPb_ZMuSkimMuonDPG_cff.py:60
OscarMTMasterThread::stopThread
void stopThread()
Definition: OscarMTMasterThread.cc:155
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
OscarMTMasterThread::runManagerMasterPtr
RunManagerMT * runManagerMasterPtr() const
Definition: OscarMTMasterThread.h:42
p1
double p1[4]
Definition: TauolaWrapper.h:89
OscarMTMasterThread
Definition: OscarMTMasterThread.h:32
eostools.move
def move(src, dest)
Definition: eostools.py:511
edm::SimTrackContainer
std::vector< SimTrack > SimTrackContainer
Definition: SimTrackContainer.h:12
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
Exception
Definition: hltDiff.cc:245
edm::PCaloHitContainer
std::vector< PCaloHit > PCaloHitContainer
Definition: PCaloHitContainer.h:8
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
OscarMTMasterThread::beginRun
void beginRun(const edm::EventSetup &iSetup) const
Definition: OscarMTMasterThread.cc:122
OscarMTProducer::m_masterThread
const OscarMTMasterThread * m_masterThread
Definition: OscarMTProducer.h:40
edm::PSimHitContainer
std::vector< PSimHit > PSimHitContainer
Definition: PSimHitContainer.h:11
calo
Definition: Common.h:9
edm::Log
Definition: MessageLogger.h:70
SimG4Exception::what
const char * what() const override
Definition: SimG4Exception.h:17
edm::SimVertexContainer
std::vector< SimVertex > SimVertexContainer
Definition: SimVertexContainer.h:12
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37