CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
RunManagerMTWorker Class Reference

#include <RunManagerMTWorker.h>

Classes

struct  TLSData
 

Public Member Functions

void abortEvent ()
 
void abortRun (bool softAbort=false)
 
void Connect (RunAction *)
 
void Connect (EventAction *)
 
void Connect (TrackingAction *)
 
void Connect (SteppingAction *)
 
void endRun ()
 
SimTrackManagerGetSimTrackManager ()
 
void produce (const edm::Event &inpevt, const edm::EventSetup &es, RunManagerMT &runManagerMaster)
 
std::vector< std::shared_ptr< SimProducer > > producers ()
 
 RunManagerMTWorker (const edm::ParameterSet &iConfig, edm::ConsumesCollector &&i)
 
std::vector< SensitiveCaloDetector * > & sensCaloDetectors ()
 
std::vector< SensitiveTkDetector * > & sensTkDetectors ()
 
G4SimEventsimEvent ()
 
 ~RunManagerMTWorker ()
 

Private Member Functions

G4Event * generateEvent (const edm::Event &inpevt)
 
void initializeRun ()
 
void initializeThread (RunManagerMT &runManagerMaster, const edm::EventSetup &es)
 
void initializeTLS ()
 
void initializeUserActions ()
 
void resetGenParticleId (const edm::Event &inpevt)
 
void terminateRun ()
 

Private Attributes

int m_EvtMgrVerbosity
 
Generator m_generator
 
bool m_hasWatchers
 
edm::EDGetTokenT< edm::HepMCProductm_InToken
 
bool m_nonBeam
 
edm::ParameterSet m_p
 
edm::ParameterSet m_pCustomUIsession
 
edm::ParameterSet m_pEventAction
 
edm::ParameterSet m_pField
 
edm::ParameterSet m_pRunAction
 
edm::ParameterSet m_pStackingAction
 
edm::ParameterSet m_pSteppingAction
 
edm::ParameterSet m_pTrackingAction
 
bool m_pUseMagneticField
 
std::unique_ptr< G4SimEventm_simEvent
 
std::unique_ptr< CMSSteppingVerbosem_sVerbose
 
edm::EDGetTokenT< edm::LHCTransportLinkContainerm_theLHCTlinkToken
 

Static Private Attributes

static thread_local TLSDatam_tls = 0
 

Detailed Description

Definition at line 39 of file RunManagerMTWorker.h.

Constructor & Destructor Documentation

RunManagerMTWorker::RunManagerMTWorker ( const edm::ParameterSet iConfig,
edm::ConsumesCollector &&  i 
)
explicit

Definition at line 129 of file RunManagerMTWorker.cc.

References edm::ParameterSet::getParameter(), initializeTLS(), m_hasWatchers, m_simEvent, and m_sVerbose.

129  :
130  m_generator(iConfig.getParameter<edm::ParameterSet>("Generator")),
131  m_InToken(iC.consumes<edm::HepMCProduct>(iConfig.getParameter<edm::ParameterSet>("Generator").getParameter<edm::InputTag>("HepMCProductLabel"))),
132  m_theLHCTlinkToken(iC.consumes<edm::LHCTransportLinkContainer>(iConfig.getParameter<edm::InputTag>("theLHCTlinkTag"))),
133  m_nonBeam(iConfig.getParameter<bool>("NonBeamEvent")),
134  m_pUseMagneticField(iConfig.getParameter<bool>("UseMagneticField")),
135  m_EvtMgrVerbosity(iConfig.getUntrackedParameter<int>("G4EventManagerVerbosity",0)),
136  m_pField(iConfig.getParameter<edm::ParameterSet>("MagneticField")),
137  m_pRunAction(iConfig.getParameter<edm::ParameterSet>("RunAction")),
138  m_pEventAction(iConfig.getParameter<edm::ParameterSet>("EventAction")),
139  m_pStackingAction(iConfig.getParameter<edm::ParameterSet>("StackingAction")),
140  m_pTrackingAction(iConfig.getParameter<edm::ParameterSet>("TrackingAction")),
141  m_pSteppingAction(iConfig.getParameter<edm::ParameterSet>("SteppingAction")),
142  m_pCustomUIsession(iConfig.getUntrackedParameter<edm::ParameterSet>("CustomUIsession")),
143  m_p(iConfig)
144 {
145  initializeTLS();
146  m_simEvent.reset(nullptr);
147  m_sVerbose.reset(nullptr);
148  std::vector<edm::ParameterSet> watchers =
149  iConfig.getParameter<std::vector<edm::ParameterSet> >("Watchers");
150  m_hasWatchers = (watchers.empty()) ? false : true;
151 }
edm::ParameterSet m_pSteppingAction
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::unique_ptr< CMSSteppingVerbose > m_sVerbose
edm::EDGetTokenT< edm::HepMCProduct > m_InToken
edm::ParameterSet m_pEventAction
std::unique_ptr< G4SimEvent > m_simEvent
edm::ParameterSet m_pRunAction
edm::ParameterSet m_pTrackingAction
edm::ParameterSet m_pField
edm::EDGetTokenT< edm::LHCTransportLinkContainer > m_theLHCTlinkToken
edm::ParameterSet m_pCustomUIsession
std::vector< LHCTransportLink > LHCTransportLinkContainer
edm::ParameterSet m_p
edm::ParameterSet m_pStackingAction
RunManagerMTWorker::~RunManagerMTWorker ( )

Definition at line 153 of file RunManagerMTWorker.cc.

References m_tls, RunManagerMTWorker::TLSData::runTerminated, and terminateRun().

153  {
154  if(m_tls && !m_tls->runTerminated) { terminateRun(); }
155 }
static thread_local TLSData * m_tls

Member Function Documentation

void RunManagerMTWorker::abortEvent ( )

Definition at line 475 of file RunManagerMTWorker.cc.

References RunManagerMTWorker::TLSData::currentEvent, RunManagerMTWorker::TLSData::kernel, m_tls, TrackingAction::PostUserTrackingAction(), RunManagerMTWorker::TLSData::runTerminated, and lumiQTWidget::t.

Referenced by SimRunInterface::abortEvent(), and abortRun().

475  {
476  if(m_tls->runTerminated) { return; }
477  G4Track* t = m_tls->kernel->GetEventManager()->GetTrackingManager()->GetTrack();
478  t->SetTrackStatus(fStopAndKill) ;
479 
480  // CMS-specific act
481  //
482  TrackingAction* uta =
483  static_cast<TrackingAction *>(m_tls->kernel->GetEventManager()->GetUserTrackingAction());
484  uta->PostUserTrackingAction(t) ;
485 
486  m_tls->currentEvent->SetEventAborted();
487  m_tls->kernel->GetEventManager()->GetStackManager()->clear();
488  m_tls->kernel->GetEventManager()->GetTrackingManager()->EventAborted();
489 }
std::unique_ptr< G4Event > currentEvent
std::unique_ptr< G4RunManagerKernel > kernel
static thread_local TLSData * m_tls
void PostUserTrackingAction(const G4Track *aTrack) override
void RunManagerMTWorker::abortRun ( bool  softAbort = false)

Definition at line 491 of file RunManagerMTWorker.cc.

References abortEvent(), RunManagerMTWorker::TLSData::currentRun, m_tls, and terminateRun().

Referenced by SimRunInterface::abortRun().

491  {
492  if (!softAbort) { abortEvent(); }
493  m_tls->currentRun.reset();
494  terminateRun();
495 }
static thread_local TLSData * m_tls
std::unique_ptr< G4Run > currentRun
void RunManagerMTWorker::Connect ( RunAction runAction)

Definition at line 339 of file RunManagerMTWorker.cc.

References sim_act::Signaler< T >::connect(), RunAction::m_beginOfRunSignal, RunAction::m_endOfRunSignal, m_tls, and RunManagerMTWorker::TLSData::registry.

Referenced by SimRunInterface::Connect(), and initializeUserActions().

340 {
341  runAction->m_beginOfRunSignal.connect(m_tls->registry->beginOfRunSignal_);
342  runAction->m_endOfRunSignal.connect(m_tls->registry->endOfRunSignal_);
343 }
SimActivityRegistry::EndOfRunSignal m_endOfRunSignal
Definition: RunAction.h:25
std::unique_ptr< SimActivityRegistry > registry
static thread_local TLSData * m_tls
void connect(Observer< const T * > *iObs)
does not take ownership of memory
Definition: Signaler.h:59
SimActivityRegistry::BeginOfRunSignal m_beginOfRunSignal
Definition: RunAction.h:24
void RunManagerMTWorker::Connect ( EventAction eventAction)

Definition at line 345 of file RunManagerMTWorker.cc.

References sim_act::Signaler< T >::connect(), EventAction::m_beginOfEventSignal, EventAction::m_endOfEventSignal, m_tls, and RunManagerMTWorker::TLSData::registry.

346 {
347  eventAction->m_beginOfEventSignal.connect(m_tls->registry->beginOfEventSignal_);
348  eventAction->m_endOfEventSignal.connect(m_tls->registry->endOfEventSignal_);
349 }
SimActivityRegistry::EndOfEventSignal m_endOfEventSignal
Definition: EventAction.h:51
std::unique_ptr< SimActivityRegistry > registry
static thread_local TLSData * m_tls
void connect(Observer< const T * > *iObs)
does not take ownership of memory
Definition: Signaler.h:59
SimActivityRegistry::BeginOfEventSignal m_beginOfEventSignal
Definition: EventAction.h:50
void RunManagerMTWorker::Connect ( TrackingAction trackingAction)

Definition at line 351 of file RunManagerMTWorker.cc.

References sim_act::Signaler< T >::connect(), TrackingAction::m_beginOfTrackSignal, TrackingAction::m_endOfTrackSignal, m_tls, and RunManagerMTWorker::TLSData::registry.

352 {
353  trackingAction->m_beginOfTrackSignal.connect(m_tls->registry->beginOfTrackSignal_);
354  trackingAction->m_endOfTrackSignal.connect(m_tls->registry->endOfTrackSignal_);
355 }
std::unique_ptr< SimActivityRegistry > registry
static thread_local TLSData * m_tls
SimActivityRegistry::EndOfTrackSignal m_endOfTrackSignal
void connect(Observer< const T * > *iObs)
does not take ownership of memory
Definition: Signaler.h:59
SimActivityRegistry::BeginOfTrackSignal m_beginOfTrackSignal
void RunManagerMTWorker::Connect ( SteppingAction steppingAction)

Definition at line 357 of file RunManagerMTWorker.cc.

References sim_act::Signaler< T >::connect(), SteppingAction::m_g4StepSignal, m_tls, and RunManagerMTWorker::TLSData::registry.

358 {
359  steppingAction->m_g4StepSignal.connect(m_tls->registry->g4StepSignal_);
360 }
SimActivityRegistry::G4StepSignal m_g4StepSignal
std::unique_ptr< SimActivityRegistry > registry
static thread_local TLSData * m_tls
void connect(Observer< const T * > *iObs)
does not take ownership of memory
Definition: Signaler.h:59
void RunManagerMTWorker::endRun ( )

Definition at line 157 of file RunManagerMTWorker.cc.

References terminateRun().

157  {
158  terminateRun();
159 }
G4Event * RunManagerMTWorker::generateEvent ( const edm::Event inpevt)
private

Definition at line 497 of file RunManagerMTWorker.cc.

References RunManagerMTWorker::TLSData::currentEvent, edm::EventID::event(), runTauDisplay::evtid, edm::Event::getByToken(), edm::HepMCProduct::GetEvent(), Generator::HepMC2G4(), edm::EventBase::id(), m_generator, m_InToken, m_nonBeam, m_simEvent, m_tls, Generator::nonBeamEvent2G4(), resetGenParticleId(), and Generator::setGenEvent().

Referenced by produce().

497  {
498  m_tls->currentEvent.reset();
499  m_simEvent.reset();
500 
501  // 64 bits event ID in CMSSW converted into Geant4 event ID
502  G4int evtid = (G4int)inpevt.id().event();
503  G4Event * evt = new G4Event(evtid);
504 
506 
507  inpevt.getByToken(m_InToken, HepMCEvt);
508 
509  m_generator.setGenEvent(HepMCEvt->GetEvent());
510 
511  // required to reset the GenParticle Id for particles transported
512  // along the beam pipe
513  // to their original value for SimTrack creation
514  resetGenParticleId( inpevt );
515 
516  if (!m_nonBeam)
517  {
518  m_generator.HepMC2G4(HepMCEvt->GetEvent(),evt);
519  }
520  else
521  {
522  m_generator.nonBeamEvent2G4(HepMCEvt->GetEvent(),evt);
523  }
524 
525  return evt;
526 }
EventNumber_t event() const
Definition: EventID.h:41
std::unique_ptr< G4Event > currentEvent
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
void HepMC2G4(const HepMC::GenEvent *g, G4Event *e)
Definition: Generator.cc:107
edm::EDGetTokenT< edm::HepMCProduct > m_InToken
std::unique_ptr< G4SimEvent > m_simEvent
static thread_local TLSData * m_tls
void resetGenParticleId(const edm::Event &inpevt)
void setGenEvent(const HepMC::GenEvent *inpevt)
Definition: Generator.h:25
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:38
void nonBeamEvent2G4(const HepMC::GenEvent *g, G4Event *e)
Definition: Generator.cc:572
edm::EventID id() const
Definition: EventBase.h:60
SimTrackManager * RunManagerMTWorker::GetSimTrackManager ( )

Definition at line 362 of file RunManagerMTWorker.cc.

References initializeTLS(), m_tls, and RunManagerMTWorker::TLSData::trackManager.

Referenced by SimRunInterface::SimRunInterface().

362  {
363  initializeTLS();
364  return m_tls->trackManager.get();
365 }
std::unique_ptr< SimTrackManager > trackManager
static thread_local TLSData * m_tls
void RunManagerMTWorker::initializeRun ( )
private

Definition at line 379 of file RunManagerMTWorker.cc.

References RunManagerMTWorker::TLSData::currentRun, m_tls, and RunManagerMTWorker::TLSData::userRunAction.

Referenced by produce().

379  {
380  m_tls->currentRun.reset(new G4Run());
381  G4StateManager::GetStateManager()->SetNewState(G4State_GeomClosed);
382  if (m_tls->userRunAction) { m_tls->userRunAction->BeginOfRunAction(m_tls->currentRun.get()); }
383 }
static thread_local TLSData * m_tls
std::unique_ptr< RunAction > userRunAction
std::unique_ptr< G4Run > currentRun
void RunManagerMTWorker::initializeThread ( RunManagerMT runManagerMaster,
const edm::EventSetup es 
)
private

Definition at line 181 of file RunManagerMTWorker.cc.

References RunManagerMT::catalog(), mps_check::command, edm::errors::Configuration, AttachSD::create(), g4SimHits_cfi::CustomUIsession, Exception, g, RunManagerMT::G4Commands(), ecalTB2006H4_GenSimDigiReco_cfg::G4cout, edm::EventSetup::get(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), DDDWorld::GetWorldVolumeForWorker(), GeV, initializeTLS(), initializeUserActions(), RunManagerMTWorker::TLSData::kernel, m_p, m_pCustomUIsession, m_pField, m_pUseMagneticField, m_sVerbose, m_tls, RunManagerMT::physicsListForWorker(), edm::ESHandle< T >::product(), RunManagerMTWorker::TLSData::registry, RunManagerMTWorker::TLSData::sensCaloDets, RunManagerMTWorker::TLSData::sensTkDets, AlCaHLTBitMon_QueryRunRegistry::string, pfDeepBoostedJetPreprocessParams_cfi::sv, RunManagerMTWorker::TLSData::trackManager, RunManagerMTWorker::TLSData::UIsession, DDDWorld::WorkerSetAsWorld(), and RunManagerMT::world().

Referenced by produce().

181  {
182  // I guess everything initialized here should be in thread_local storage
183  initializeTLS();
184 
185  int thisID = getThreadIndex();
186 
187  edm::LogVerbatim("SimG4CoreApplication")
188  << "RunManagerMTWorker::initializeThread " << thisID;
189 
190  // Initialize per-thread output
191  G4Threading::G4SetThreadId( thisID );
192  G4UImanager::GetUIpointer()->SetUpForAThread( thisID );
194  if(uitype == "MessageLogger") {
195  m_tls->UIsession.reset(new CustomUIsession());
196  }
197  else if(uitype == "MessageLoggerThreadPrefix") {
199  }
200  else if(uitype == "FilePerThread") {
202  }
203  else {
205  << "Invalid value of CustomUIsession.Type '" << uitype
206  << "', valid are MessageLogger, MessageLoggerThreadPrefix, FilePerThread";
207  }
208 
209  // Initialize worker part of shared resources (geometry, physics)
210  G4WorkerThread::BuildGeometryAndPhysicsVector();
211 
212  // Create worker run manager
213  m_tls->kernel.reset(G4WorkerRunManagerKernel::GetRunManagerKernel());
214  if(!m_tls->kernel) { m_tls->kernel.reset(new G4WorkerRunManagerKernel()); }
215 
216  // Define G4 exception handler
217  G4StateManager::GetStateManager()->SetExceptionHandler(new ExceptionHandler());
218 
219  // Set the geometry for the worker, share from master
221 
222  // we need the track manager now
223  m_tls->trackManager.reset(new SimTrackManager());
224 
225  // Get DDCompactView, or would it be better to get the object from
226  // runManagerMaster instead of EventSetup in here?
228  es.get<IdealGeometryRecord>().get(pDD);
229 
230  // setup the magnetic field
232  {
233  const GlobalPoint g(0.,0.,0.);
234 
236  es.get<IdealMagneticFieldRecord>().get(pMF);
237 
238  sim::FieldBuilder fieldBuilder(pMF.product(), m_pField);
239  CMSFieldManager* fieldManager = new CMSFieldManager();
240  G4TransportationManager * tM =
241  G4TransportationManager::GetTransportationManager();
242  tM->SetFieldManager(fieldManager);
243  fieldBuilder.build( fieldManager, tM->GetPropagatorInField());
244  }
245 
246  // attach sensitive detector
247  AttachSD attach;
248  std::pair< std::vector<SensitiveTkDetector*>,
249  std::vector<SensitiveCaloDetector*> > sensDets =
250  attach.create(*pDD, runManagerMaster.catalog(), m_p,
251  m_tls->trackManager.get(),
252  *(m_tls->registry.get()));
253 
254  m_tls->sensTkDets.swap(sensDets.first);
255  m_tls->sensCaloDets.swap(sensDets.second);
256 
257  edm::LogVerbatim("SimG4CoreApplication")
258  << " RunManagerMTWorker: Sensitive Detector building finished; found "
259  << m_tls->sensTkDets.size() << " Tk type Producers, and "
260  << m_tls->sensCaloDets.size() << " Calo type producers ";
261 
262  // Set the physics list for the worker, share from master
263  PhysicsList *physicsList = runManagerMaster.physicsListForWorker();
264 
265  edm::LogVerbatim("SimG4CoreApplication")
266  << "RunManagerMTWorker: start initialisation of PhysicsList for the thread";
267 
268  // Geant4 UI commands in PreInit state
269  if(!runManagerMaster.G4Commands().empty()) {
270  G4cout << "RunManagerMTWorker: Requested UI commands: " << G4endl;
271  for(const std::string& command: runManagerMaster.G4Commands()) {
272  G4cout << " " << command << G4endl;
273  G4UImanager::GetUIpointer()->ApplyCommand(command);
274  }
275  }
276  G4StateManager::GetStateManager()->SetNewState(G4State_Init);
277 
278  physicsList->InitializeWorker();
279  m_tls->kernel->SetPhysics(physicsList);
280  m_tls->kernel->InitializePhysics();
281 
282  const bool kernelInit = m_tls->kernel->RunInitialization();
283  if(!kernelInit) {
285  << "RunManagerMTWorker: Geant4 kernel initialization failed";
286  }
287  //tell all interesting parties that we are beginning the job
288  BeginOfJob aBeginOfJob(&es);
289  m_tls->registry->beginOfJobSignal_(&aBeginOfJob);
290 
291  G4int sv = m_p.getParameter<int>("SteppingVerbosity");
292  G4double elim = m_p.getParameter<double>("StepVerboseThreshold")*CLHEP::GeV;
293  std::vector<int> ve = m_p.getParameter<std::vector<int> >("VerboseEvents");
294  std::vector<int> vn = m_p.getParameter<std::vector<int> >("VertexNumber");
295  std::vector<int> vt = m_p.getParameter<std::vector<int> >("VerboseTracks");
296 
297  if(sv > 0) {
298  m_sVerbose.reset(new CMSSteppingVerbose(sv, elim, ve, vn, vt));
299  }
301 
302  edm::LogVerbatim("SimG4CoreApplication")
303  << "RunManagerMTWorker::initializeThread done for the thread " << thisID;
304 
305  G4StateManager::GetStateManager()->SetNewState(G4State_Idle);
306 }
T getParameter(std::string const &) const
const SensitiveDetectorCatalog & catalog() const
Definition: RunManagerMT.h:77
T getUntrackedParameter(std::string const &, T const &) const
const double GeV
Definition: MathUtil.h:16
std::unique_ptr< CMSSteppingVerbose > m_sVerbose
std::vector< SensitiveTkDetector * > sensTkDets
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
std::unique_ptr< G4RunManagerKernel > kernel
std::unique_ptr< SimActivityRegistry > registry
const DDDWorld & world() const
Definition: RunManagerMT.h:73
std::unique_ptr< SimTrackManager > trackManager
std::unique_ptr< CustomUIsession > UIsession
static thread_local TLSData * m_tls
std::vector< SensitiveCaloDetector * > sensCaloDets
PhysicsList * physicsListForWorker() const
Definition: RunManagerMT.h:88
std::pair< std::vector< SensitiveTkDetector * >, std::vector< SensitiveCaloDetector * > > create(const DDCompactView &, const SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *, SimActivityRegistry &reg) const
Definition: AttachSD.cc:17
edm::ParameterSet m_pField
G4VPhysicalVolume * GetWorldVolumeForWorker() const
Definition: DDDWorld.h:24
list command
Definition: mps_check.py:24
static void WorkerSetAsWorld(G4VPhysicalVolume *pv)
Definition: DDDWorld.cc:38
const std::vector< std::string > & G4Commands() const
Definition: RunManagerMT.h:81
edm::ParameterSet m_pCustomUIsession
T get() const
Definition: EventSetup.h:68
edm::ParameterSet m_p
T const * product() const
Definition: ESHandle.h:84
void RunManagerMTWorker::initializeTLS ( )
private

Definition at line 161 of file RunManagerMTWorker.cc.

References edm::errors::Configuration, createWatchers(), Exception, m_hasWatchers, m_p, m_tls, RunManagerMTWorker::TLSData::producers, RunManagerMTWorker::TLSData::registry, and RunManagerMTWorker::TLSData::watchers.

Referenced by GetSimTrackManager(), initializeThread(), producers(), RunManagerMTWorker(), sensCaloDetectors(), and sensTkDetectors().

161  {
162  if(m_tls) { return; }
163  m_tls = new TLSData;
164  m_tls->registry.reset(new SimActivityRegistry());
165 
166  edm::Service<SimActivityRegistry> otherRegistry;
167  //Look for an outside SimActivityRegistry
168  // this is used by the visualization code
169  int thisID = getThreadIndex();
170  if(otherRegistry){
171  m_tls->registry->connect(*otherRegistry);
172  if(thisID > 0) {
173  throw edm::Exception(edm::errors::Configuration) << "SimActivityRegistry service (i.e. visualization) is not supported for more than 1 thread. If this use case is needed, RunManagerMTWorker has to be updated.";
174  }
175  }
176  if(m_hasWatchers) {
178  }
179 }
std::vector< std::shared_ptr< SimWatcher > > watchers
static void createWatchers(const edm::ParameterSet &iP, SimActivityRegistry &iReg, std::vector< std::shared_ptr< SimWatcher > > &oWatchers, std::vector< std::shared_ptr< SimProducer > > &oProds)
Definition: RunManager.cc:86
std::unique_ptr< SimActivityRegistry > registry
static thread_local TLSData * m_tls
std::vector< std::shared_ptr< SimProducer > > producers
edm::ParameterSet m_p
void RunManagerMTWorker::initializeUserActions ( )
private

Definition at line 308 of file RunManagerMTWorker.cc.

References Connect(), g4SimHits_cfi::EventAction, RunManagerMTWorker::TLSData::kernel, m_EvtMgrVerbosity, m_hasWatchers, m_pEventAction, m_pRunAction, m_pStackingAction, m_pSteppingAction, m_pTrackingAction, m_sVerbose, m_tls, g4SimHits_cfi::RunAction, RunManagerMTWorker::TLSData::runInterface, CastorDigiValidation::StackingAction, CastorDigiValidation::SteppingAction, g4SimHits_cfi::TrackingAction, RunManagerMTWorker::TLSData::trackManager, and RunManagerMTWorker::TLSData::userRunAction.

Referenced by initializeThread().

308  {
309  m_tls->runInterface.reset(new SimRunInterface(this, false));
311  m_tls->runInterface.get(),false));
312  m_tls->userRunAction->SetMaster(false);
313  Connect(m_tls->userRunAction.get());
314 
315  G4EventManager * eventManager = m_tls->kernel->GetEventManager();
316  eventManager->SetVerboseLevel(m_EvtMgrVerbosity);
317 
318  EventAction * userEventAction =
320  m_tls->trackManager.get(), m_sVerbose.get());
321  Connect(userEventAction);
322  eventManager->SetUserAction(userEventAction);
323 
324  TrackingAction* userTrackingAction =
325  new TrackingAction(userEventAction, m_pTrackingAction, m_sVerbose.get());
326  Connect(userTrackingAction);
327  eventManager->SetUserAction(userTrackingAction);
328 
329  SteppingAction* userSteppingAction =
330  new SteppingAction(userEventAction,m_pSteppingAction,m_sVerbose.get(),m_hasWatchers);
331  Connect(userSteppingAction);
332  eventManager->SetUserAction(userSteppingAction);
333 
334  eventManager->SetUserAction(new StackingAction(userTrackingAction,
336 
337 }
edm::ParameterSet m_pSteppingAction
std::unique_ptr< SimRunInterface > runInterface
std::unique_ptr< CMSSteppingVerbose > m_sVerbose
std::unique_ptr< G4RunManagerKernel > kernel
edm::ParameterSet m_pEventAction
RunAction
list of unwanted particles (gluons and quarks)
std::unique_ptr< SimTrackManager > trackManager
static thread_local TLSData * m_tls
edm::ParameterSet m_pRunAction
std::unique_ptr< RunAction > userRunAction
edm::ParameterSet m_pTrackingAction
edm::ParameterSet m_pStackingAction
void Connect(RunAction *)
void RunManagerMTWorker::produce ( const edm::Event inpevt,
const edm::EventSetup es,
RunManagerMT runManagerMaster 
)

Definition at line 401 of file RunManagerMTWorker.cc.

References RunManagerMTWorker::TLSData::currentEvent, RunManagerMTWorker::TLSData::currentRunNumber, edm::EventID::event(), Generator::eventWeight(), generateEvent(), Generator::genEvent(), Generator::genVertex(), edm::EventBase::id(), initializeRun(), initializeThread(), RunManagerMTWorker::TLSData::kernel, LogDebug, m_generator, m_simEvent, m_tls, nullptr, edm::EventID::run(), RunManagerMTWorker::TLSData::runInterface, RunManagerMTWorker::TLSData::runTerminated, edm::second(), edm::Event::streamID(), terminateRun(), and RunManagerMTWorker::TLSData::threadInitialized.

402  {
403  // The initialization and begin/end run is a bit convoluted due to
404  // - Geant4 deals per-thread
405  // - OscarMTProducer deals per-stream
406  // and framework/TBB is free to schedule work in streams to the
407  // threads as it likes.
408  //
409  // We have to do the per-thread initialization, and per-thread
410  // per-run initialization here by ourselves.
411 
412  if(!(m_tls && m_tls->threadInitialized)) {
413  LogDebug("SimG4CoreApplication")
414  << "RunManagerMTWorker::produce(): stream "
415  << inpevt.streamID() << " thread " << getThreadIndex() << " initializing";
416  initializeThread(runManagerMaster, es);
417  m_tls->threadInitialized = true;
418  }
419  // Initialize run
420  if(inpevt.id().run() != m_tls->currentRunNumber) {
421  if(m_tls->currentRunNumber != 0 && !m_tls->runTerminated) {
422  // If previous run in this thread was not terminated via endRun() call, terminate it now
423  terminateRun();
424  }
425  initializeRun();
426  m_tls->currentRunNumber = inpevt.id().run();
427  }
428  m_tls->runInterface->setRunManagerMTWorker(this); // For UserActions
429 
430  m_tls->currentEvent.reset(generateEvent(inpevt));
431 
432  m_simEvent.reset(new G4SimEvent());
433  m_simEvent->hepEvent(m_generator.genEvent());
435  if (m_generator.genVertex() != nullptr ) {
436  auto genVertex = m_generator.genVertex();
437  m_simEvent->collisionPoint(
438  math::XYZTLorentzVectorD(genVertex->x()/centimeter,
439  genVertex->y()/centimeter,
440  genVertex->z()/centimeter,
441  genVertex->t()/second));
442  }
443  if (m_tls->currentEvent->GetNumberOfPrimaryVertex()==0) {
444  std::stringstream ss;
445  ss << "RunManagerMTWorker::produce(): event " << inpevt.id().event()
446  << " with no G4PrimaryVertices \n" ;
447  throw SimG4Exception(ss.str());
448 
449  } else {
450  if(!m_tls->kernel) {
451  std::stringstream ss;
452  ss << " RunManagerMT::produce(): "
453  << " no G4WorkerRunManagerKernel yet for thread index"
454  << getThreadIndex() << ", id " << std::hex
455  << std::this_thread::get_id() << " \n";
456  throw SimG4Exception(ss.str());
457  }
458 
459  edm::LogVerbatim("SimG4CoreApplication")
460  << " RunManagerMTWorker::produce: start Event " << inpevt.id().event()
461  << " stream id " << inpevt.streamID()
462  << " thread index " << getThreadIndex()
463  << " of weight " << m_simEvent->weight()
464  << " with " << m_simEvent->nTracks() << " tracks and "
465  << m_simEvent->nVertices()
466  << " vertices, generated by " << m_simEvent->nGenParts() << " particles ";
467 
468  m_tls->kernel->GetEventManager()->ProcessOneEvent(m_tls->currentEvent.get());
469 
470  edm::LogVerbatim("SimG4CoreApplication")
471  << " RunManagerMTWorker::produce: ended Event " << inpevt.id().event();
472  }
473 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:39
EventNumber_t event() const
Definition: EventID.h:41
virtual const math::XYZTLorentzVector * genVertex() const
Definition: Generator.h:30
std::unique_ptr< G4Event > currentEvent
virtual const double eventWeight() const
Definition: Generator.h:31
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:14
virtual const HepMC::GenEvent * genEvent() const
Definition: Generator.h:29
std::unique_ptr< SimRunInterface > runInterface
#define nullptr
std::unique_ptr< G4RunManagerKernel > kernel
U second(std::pair< T, U > const &p)
std::unique_ptr< G4SimEvent > m_simEvent
static thread_local TLSData * m_tls
void initializeThread(RunManagerMT &runManagerMaster, const edm::EventSetup &es)
G4Event * generateEvent(const edm::Event &inpevt)
edm::EventID id() const
Definition: EventBase.h:60
StreamID streamID() const
Definition: Event.h:96
std::vector< std::shared_ptr< SimProducer > > RunManagerMTWorker::producers ( )

Definition at line 374 of file RunManagerMTWorker.cc.

References initializeTLS(), m_tls, and RunManagerMTWorker::TLSData::producers.

374  {
375  initializeTLS();
376  return m_tls->producers;
377 }
static thread_local TLSData * m_tls
std::vector< std::shared_ptr< SimProducer > > producers
void RunManagerMTWorker::resetGenParticleId ( const edm::Event inpevt)
private

Definition at line 528 of file RunManagerMTWorker.cc.

References edm::Event::getByToken(), edm::HandleBase::isValid(), m_theLHCTlinkToken, m_tls, edm::Handle< T >::product(), and RunManagerMTWorker::TLSData::trackManager.

Referenced by generateEvent().

529 {
531  inpevt.getByToken( m_theLHCTlinkToken, theLHCTlink );
532  if ( theLHCTlink.isValid() ) {
533  m_tls->trackManager->setLHCTransportLink( theLHCTlink.product() );
534  }
535 }
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
std::unique_ptr< SimTrackManager > trackManager
static thread_local TLSData * m_tls
bool isValid() const
Definition: HandleBase.h:74
T const * product() const
Definition: Handle.h:81
edm::EDGetTokenT< edm::LHCTransportLinkContainer > m_theLHCTlinkToken
std::vector< SensitiveCaloDetector * > & RunManagerMTWorker::sensCaloDetectors ( )

Definition at line 370 of file RunManagerMTWorker.cc.

References initializeTLS(), m_tls, and RunManagerMTWorker::TLSData::sensCaloDets.

370  {
371  initializeTLS();
372  return m_tls->sensCaloDets;
373 }
static thread_local TLSData * m_tls
std::vector< SensitiveCaloDetector * > sensCaloDets
std::vector< SensitiveTkDetector * > & RunManagerMTWorker::sensTkDetectors ( )

Definition at line 366 of file RunManagerMTWorker.cc.

References initializeTLS(), m_tls, and RunManagerMTWorker::TLSData::sensTkDets.

366  {
367  initializeTLS();
368  return m_tls->sensTkDets;
369 }
std::vector< SensitiveTkDetector * > sensTkDets
static thread_local TLSData * m_tls
G4SimEvent* RunManagerMTWorker::simEvent ( )
inline

Definition at line 51 of file RunManagerMTWorker.h.

References particleFlowRecHitECAL_cfi::producers.

Referenced by SimRunInterface::simEvent().

51 { return m_simEvent.get(); }
std::unique_ptr< G4SimEvent > m_simEvent
void RunManagerMTWorker::terminateRun ( )
private

Definition at line 385 of file RunManagerMTWorker.cc.

References RunManagerMTWorker::TLSData::currentEvent, RunManagerMTWorker::TLSData::currentRun, RunManagerMTWorker::TLSData::kernel, m_simEvent, m_tls, RunManagerMTWorker::TLSData::runTerminated, and RunManagerMTWorker::TLSData::userRunAction.

Referenced by abortRun(), endRun(), RunManagerMT::physicsListForWorker(), produce(), and ~RunManagerMTWorker().

385  {
386  if(!m_tls || m_tls->runTerminated) { return; }
387  if(m_tls->userRunAction) {
388  m_tls->userRunAction->EndOfRunAction(m_tls->currentRun.get());
389  m_tls->userRunAction.reset();
390  }
391  m_tls->currentEvent.reset();
392  m_simEvent.reset();
393 
394  if(m_tls->kernel) {
395  m_tls->kernel->RunTermination();
396  }
397 
398  m_tls->runTerminated = true;
399 }
std::unique_ptr< G4Event > currentEvent
std::unique_ptr< G4RunManagerKernel > kernel
std::unique_ptr< G4SimEvent > m_simEvent
static thread_local TLSData * m_tls
std::unique_ptr< RunAction > userRunAction
std::unique_ptr< G4Run > currentRun

Member Data Documentation

int RunManagerMTWorker::m_EvtMgrVerbosity
private

Definition at line 82 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

Generator RunManagerMTWorker::m_generator
private

Definition at line 75 of file RunManagerMTWorker.h.

Referenced by generateEvent(), and produce().

bool RunManagerMTWorker::m_hasWatchers
private

Definition at line 81 of file RunManagerMTWorker.h.

Referenced by initializeTLS(), initializeUserActions(), and RunManagerMTWorker().

edm::EDGetTokenT<edm::HepMCProduct> RunManagerMTWorker::m_InToken
private

Definition at line 76 of file RunManagerMTWorker.h.

Referenced by generateEvent().

bool RunManagerMTWorker::m_nonBeam
private

Definition at line 79 of file RunManagerMTWorker.h.

Referenced by generateEvent().

edm::ParameterSet RunManagerMTWorker::m_p
private

Definition at line 91 of file RunManagerMTWorker.h.

Referenced by initializeThread(), and initializeTLS().

edm::ParameterSet RunManagerMTWorker::m_pCustomUIsession
private

Definition at line 90 of file RunManagerMTWorker.h.

Referenced by initializeThread().

edm::ParameterSet RunManagerMTWorker::m_pEventAction
private

Definition at line 86 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

edm::ParameterSet RunManagerMTWorker::m_pField
private

Definition at line 84 of file RunManagerMTWorker.h.

Referenced by initializeThread().

edm::ParameterSet RunManagerMTWorker::m_pRunAction
private

Definition at line 85 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

edm::ParameterSet RunManagerMTWorker::m_pStackingAction
private

Definition at line 87 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

edm::ParameterSet RunManagerMTWorker::m_pSteppingAction
private

Definition at line 89 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

edm::ParameterSet RunManagerMTWorker::m_pTrackingAction
private

Definition at line 88 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

bool RunManagerMTWorker::m_pUseMagneticField
private

Definition at line 80 of file RunManagerMTWorker.h.

Referenced by initializeThread().

std::unique_ptr<G4SimEvent> RunManagerMTWorker::m_simEvent
private

Definition at line 96 of file RunManagerMTWorker.h.

Referenced by generateEvent(), produce(), RunManagerMTWorker(), and terminateRun().

std::unique_ptr<CMSSteppingVerbose> RunManagerMTWorker::m_sVerbose
private
edm::EDGetTokenT<edm::LHCTransportLinkContainer> RunManagerMTWorker::m_theLHCTlinkToken
private

Definition at line 77 of file RunManagerMTWorker.h.

Referenced by resetGenParticleId().

thread_local RunManagerMTWorker::TLSData * RunManagerMTWorker::m_tls = 0
staticprivate