CMS 3D CMS Logo

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

#include <RunManagerMTWorker.h>

Classes

struct  TLSData
 

Public Member Functions

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

Private Member Functions

void DumpMagneticField (const G4Field *, const std::string &) const
 
G4Event * generateEvent (const edm::Event &inpevt)
 
void initializeRun ()
 
void initializeTLS ()
 
void initializeUserActions ()
 
void resetGenParticleId (const edm::Event &inpevt)
 
void terminateRun ()
 

Private Attributes

bool m_dumpMF {false}
 
bool m_endOfRun {false}
 
std::unique_ptr< CMSSimEventManagerm_evtManager
 
std::vector< std::string > m_G4CommandsEndRun
 
Generator m_generator
 
bool m_hasWatchers {false}
 
edm::EDGetTokenT< edm::HepMCProductm_InToken
 
edm::EDGetTokenT< edm::HepMCProductm_LHCToken
 
bool m_LHCTransport {false}
 
edm::ESGetToken< MagneticField, IdealMagneticFieldRecordm_MagField
 
bool m_nonBeam {false}
 
edm::ParameterSet m_p
 
edm::ParameterSet m_pCustomUIsession
 
edm::ParameterSet m_pEventAction
 
edm::ParameterSet m_pField
 
const MagneticFieldm_pMagField {nullptr}
 
edm::ParameterSet m_pRunAction
 
edm::ParameterSet m_pStackingAction
 
edm::ParameterSet m_pSteppingAction
 
edm::ParameterSet m_pTrackingAction
 
bool m_pUseMagneticField {true}
 
std::unordered_map< std::string, std::unique_ptr< SensitiveDetectorMakerBase > > m_sdMakers
 
G4SimEvent m_simEvent
 
std::unique_ptr< CMSSteppingVerbosem_sVerbose
 
edm::EDGetTokenT< edm::LHCTransportLinkContainerm_theLHCTlinkToken
 
const int m_thread_index {-1}
 
TLSDatam_tls {nullptr}
 
CustomUIsessionm_UIsession {nullptr}
 
bool m_UseG4EventManager {true}
 

Detailed Description

Definition at line 49 of file RunManagerMTWorker.h.

Constructor & Destructor Documentation

◆ RunManagerMTWorker()

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

Definition at line 146 of file RunManagerMTWorker.cc.

147  : m_generator(iConfig.getParameter<edm::ParameterSet>("Generator")),
149  iConfig.getParameter<edm::ParameterSet>("Generator").getParameter<edm::InputTag>("HepMCProductLabel"))),
151  iC.consumes<edm::LHCTransportLinkContainer>(iConfig.getParameter<edm::InputTag>("theLHCTlinkTag"))),
152  m_nonBeam(iConfig.getParameter<bool>("NonBeamEvent")),
153  m_UseG4EventManager(iConfig.getParameter<bool>("UseG4EventManager")),
154  m_pUseMagneticField(iConfig.getParameter<bool>("UseMagneticField")),
155  m_LHCTransport(iConfig.getParameter<bool>("LHCTransport")),
156  m_thread_index{get_new_thread_index()},
157  m_pField(iConfig.getParameter<edm::ParameterSet>("MagneticField")),
158  m_pRunAction(iConfig.getParameter<edm::ParameterSet>("RunAction")),
159  m_pEventAction(iConfig.getParameter<edm::ParameterSet>("EventAction")),
160  m_pStackingAction(iConfig.getParameter<edm::ParameterSet>("StackingAction")),
161  m_pTrackingAction(iConfig.getParameter<edm::ParameterSet>("TrackingAction")),
162  m_pSteppingAction(iConfig.getParameter<edm::ParameterSet>("SteppingAction")),
163  m_pCustomUIsession(iConfig.getUntrackedParameter<edm::ParameterSet>("CustomUIsession")),
164  m_G4CommandsEndRun(iConfig.getParameter<std::vector<std::string>>("G4CommandsEndRun")),
165  m_p(iConfig) {
166  int thisID = getThreadIndex();
167  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker for the thread " << thisID;
168 
169  // sensitive detectors
170  std::vector<std::string> onlySDs = iConfig.getParameter<std::vector<std::string>>("OnlySDs");
172 
173  // TLS and watchers
174  initializeTLS();
175  if (m_hasWatchers) {
176  for (auto& watcher : m_tls->watchers) {
177  watcher->registerConsumes(iC);
178  }
179  }
180  if (m_LHCTransport) {
181  m_LHCToken = iC.consumes<edm::HepMCProduct>(edm::InputTag("LHCTransport"));
182  }
183  if (m_pUseMagneticField) {
185  }
186  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker is constructed for the thread " << thisID;
187  unsigned int k = 0;
188  for (std::unordered_map<std::string, std::unique_ptr<SensitiveDetectorMakerBase>>::const_iterator itr =
189  m_sdMakers.begin();
190  itr != m_sdMakers.end();
191  ++itr, ++k)
192  edm::LogVerbatim("SimG4CoreApplication") << "SD[" << k << "] " << itr->first;
193 }
edm::ParameterSet m_pSteppingAction
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Log< level::Info, true > LogVerbatim
std::vector< std::shared_ptr< SimWatcher > > watchers
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::EDGetTokenT< edm::HepMCProduct > m_InToken
std::vector< std::string > m_G4CommandsEndRun
edm::EDGetTokenT< edm::HepMCProduct > m_LHCToken
T getUntrackedParameter(std::string const &, T const &) const
edm::ParameterSet m_pEventAction
edm::ParameterSet m_pRunAction
std::unordered_map< std::string, std::unique_ptr< SensitiveDetectorMakerBase > > m_sdMakers
edm::ParameterSet m_pTrackingAction
edm::ParameterSet m_pField
edm::EDGetTokenT< edm::LHCTransportLinkContainer > m_theLHCTlinkToken
edm::ParameterSet m_pCustomUIsession
std::unordered_map< std::string, std::unique_ptr< SensitiveDetectorMakerBase > > sensitiveDetectorMakers(edm::ParameterSet const &, edm::ConsumesCollector, std::vector< std::string > const &chosenMakers)
std::vector< LHCTransportLink > LHCTransportLinkContainer
edm::ParameterSet m_p
int getThreadIndex() const
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > m_MagField
edm::ParameterSet m_pStackingAction

◆ ~RunManagerMTWorker()

RunManagerMTWorker::~RunManagerMTWorker ( )

Definition at line 195 of file RunManagerMTWorker.cc.

References m_tls, and m_UIsession.

195  {
196  m_tls = nullptr;
197  delete m_UIsession;
198 }
CustomUIsession * m_UIsession

Member Function Documentation

◆ abortEvent()

void RunManagerMTWorker::abortEvent ( )

Definition at line 579 of file RunManagerMTWorker.cc.

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

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

579  {
580  if (m_tls->runTerminated) {
581  return;
582  }
583  G4Track* t = m_tls->kernel->GetEventManager()->GetTrackingManager()->GetTrack();
584  t->SetTrackStatus(fStopAndKill);
585 
586  // CMS-specific act
587  //
588  TrackingAction* uta = static_cast<TrackingAction*>(m_tls->kernel->GetEventManager()->GetUserTrackingAction());
590 
591  m_tls->currentEvent->SetEventAborted();
592  m_tls->kernel->GetEventManager()->GetStackManager()->clear();
593  m_tls->kernel->GetEventManager()->GetTrackingManager()->EventAborted();
594 }
std::unique_ptr< G4Event > currentEvent
std::unique_ptr< G4RunManagerKernel > kernel
void PostUserTrackingAction(const G4Track *aTrack) override

◆ abortRun()

void RunManagerMTWorker::abortRun ( bool  softAbort = false)

Definition at line 596 of file RunManagerMTWorker.cc.

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

Referenced by SimRunInterface::abortRun().

596  {
597  if (!softAbort) {
598  abortEvent();
599  }
600  m_tls->currentRun = nullptr;
601  terminateRun();
602 }

◆ beginRun()

void RunManagerMTWorker::beginRun ( const edm::EventSetup es)

Definition at line 200 of file RunManagerMTWorker.cc.

References edm::EventSetup::getData(), getThreadIndex(), l1ctLayer2EG_cff::id, m_hasWatchers, m_MagField, m_pMagField, m_pUseMagneticField, m_sdMakers, m_tls, and RunManagerMTWorker::TLSData::watchers.

200  {
201  int id = getThreadIndex();
202  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::beginRun for the thread " << id;
203  for (auto& maker : m_sdMakers) {
204  maker.second->beginRun(es);
205  }
206  if (m_pUseMagneticField) {
208  }
209  if (m_hasWatchers) {
210  for (auto& watcher : m_tls->watchers) {
211  watcher->beginRun(es);
212  }
213  }
214  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::beginRun done for the thread " << id;
215 }
Log< level::Info, true > LogVerbatim
std::vector< std::shared_ptr< SimWatcher > > watchers
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
std::unordered_map< std::string, std::unique_ptr< SensitiveDetectorMakerBase > > m_sdMakers
const MagneticField * m_pMagField
int getThreadIndex() const
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > m_MagField

◆ Connect() [1/4]

void RunManagerMTWorker::Connect ( RunAction runAction)

Definition at line 435 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().

435  {
436  runAction->m_beginOfRunSignal.connect(m_tls->registry->beginOfRunSignal_);
437  runAction->m_endOfRunSignal.connect(m_tls->registry->endOfRunSignal_);
438 }
void connect(Observer< const T *> *iObs)
does not take ownership of memory
Definition: Signaler.h:55
SimActivityRegistry::EndOfRunSignal m_endOfRunSignal
Definition: RunAction.h:24
std::unique_ptr< SimActivityRegistry > registry
SimActivityRegistry::BeginOfRunSignal m_beginOfRunSignal
Definition: RunAction.h:23

◆ Connect() [2/4]

void RunManagerMTWorker::Connect ( EventAction eventAction)

Definition at line 440 of file RunManagerMTWorker.cc.

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

440  {
441  eventAction->m_beginOfEventSignal.connect(m_tls->registry->beginOfEventSignal_);
442  eventAction->m_endOfEventSignal.connect(m_tls->registry->endOfEventSignal_);
443 }
void connect(Observer< const T *> *iObs)
does not take ownership of memory
Definition: Signaler.h:55
SimActivityRegistry::EndOfEventSignal m_endOfEventSignal
Definition: EventAction.h:38
std::unique_ptr< SimActivityRegistry > registry
SimActivityRegistry::BeginOfEventSignal m_beginOfEventSignal
Definition: EventAction.h:37

◆ Connect() [3/4]

void RunManagerMTWorker::Connect ( TrackingAction trackingAction)

Definition at line 445 of file RunManagerMTWorker.cc.

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

445  {
446  trackingAction->m_beginOfTrackSignal.connect(m_tls->registry->beginOfTrackSignal_);
447  trackingAction->m_endOfTrackSignal.connect(m_tls->registry->endOfTrackSignal_);
448 }
void connect(Observer< const T *> *iObs)
does not take ownership of memory
Definition: Signaler.h:55
std::unique_ptr< SimActivityRegistry > registry
SimActivityRegistry::EndOfTrackSignal m_endOfTrackSignal
SimActivityRegistry::BeginOfTrackSignal m_beginOfTrackSignal

◆ Connect() [4/4]

void RunManagerMTWorker::Connect ( SteppingAction steppingAction)

Definition at line 450 of file RunManagerMTWorker.cc.

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

450  {
451  steppingAction->m_g4StepSignal.connect(m_tls->registry->g4StepSignal_);
452 }
void connect(Observer< const T *> *iObs)
does not take ownership of memory
Definition: Signaler.h:55
SimActivityRegistry::G4StepSignal m_g4StepSignal
std::unique_ptr< SimActivityRegistry > registry

◆ DumpMagneticField()

void RunManagerMTWorker::DumpMagneticField ( const G4Field *  field,
const std::string &  file 
) const
private

Definition at line 643 of file RunManagerMTWorker.cc.

References funct::cos(), l1ctLayer1_cff::dr, PVValHelper::dz, geometryDiff::file, groupFilesInBlocks::fout, mps_fire::i, createfilelist::int, dqmiolumiharvest::j, EgHLTOffHistBins_cfi::nr, MillePedeFileConverter_cfg::out, phi, point, alignCSCRings::r, funct::sin(), z, HLTMuonOfflineAnalyzer_cfi::z0, and SiStripMonitorCluster_cfi::zmax.

Referenced by initializeG4().

643  {
644  std::ofstream fout(file.c_str(), std::ios::out);
645  if (fout.fail()) {
646  edm::LogWarning("SimG4CoreApplication")
647  << "MTWorker::DumpMagneticField: error opening file <" << file << "> for magnetic field";
648  } else {
649  // CMS magnetic field volume
650  double rmax = 9000 * mm;
651  double zmax = 24000 * mm;
652 
653  double dr = 1 * cm;
654  double dz = 5 * cm;
655 
656  int nr = (int)(rmax / dr);
657  int nz = 2 * (int)(zmax / dz);
658 
659  double r = 0.0;
660  double z0 = -zmax;
661  double z;
662 
663  double phi = 0.0;
664  double cosf = cos(phi);
665  double sinf = sin(phi);
666 
667  double point[4] = {0.0, 0.0, 0.0, 0.0};
668  double bfield[3] = {0.0, 0.0, 0.0};
669 
670  fout << std::setprecision(6);
671  for (int i = 0; i <= nr; ++i) {
672  z = z0;
673  for (int j = 0; j <= nz; ++j) {
674  point[0] = r * cosf;
675  point[1] = r * sinf;
676  point[2] = z;
677  field->GetFieldValue(point, bfield);
678  fout << "R(mm)= " << r / mm << " phi(deg)= " << phi / degree << " Z(mm)= " << z / mm
679  << " Bz(tesla)= " << bfield[2] / tesla << " Br(tesla)= " << (bfield[0] * cosf + bfield[1] * sinf) / tesla
680  << " Bphi(tesla)= " << (bfield[0] * sinf - bfield[1] * cosf) / tesla << G4endl;
681  z += dz;
682  }
683  r += dr;
684  }
685 
686  fout.close();
687  }
688 }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Log< level::Warning, false > LogWarning
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5

◆ endRun()

void RunManagerMTWorker::endRun ( )

Definition at line 217 of file RunManagerMTWorker.cc.

References getThreadIndex(), l1ctLayer2EG_cff::id, and terminateRun().

217  {
218  int id = getThreadIndex();
219  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::endRun for the thread " << id;
220  terminateRun();
221 }
Log< level::Info, true > LogVerbatim
int getThreadIndex() const

◆ generateEvent()

G4Event * RunManagerMTWorker::generateEvent ( const edm::Event inpevt)
private

Definition at line 604 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_LHCToken, m_LHCTransport, m_nonBeam, m_tls, Generator::nonCentralEvent2G4(), resetGenParticleId(), and Generator::setGenEvent().

Referenced by produce().

604  {
605  m_tls->currentEvent.reset();
606 
607  // 64 bits event ID in CMSSW converted into Geant4 event ID
608  G4int evtid = (G4int)inpevt.id().event();
609  G4Event* evt = new G4Event(evtid);
610 
612  inpevt.getByToken(m_InToken, HepMCEvt);
613 
614  m_generator.setGenEvent(HepMCEvt->GetEvent());
615 
616  // required to reset the GenParticle Id for particles transported
617  // along the beam pipe
618  // to their original value for SimTrack creation
619  resetGenParticleId(inpevt);
620 
621  if (!m_nonBeam) {
622  m_generator.HepMC2G4(HepMCEvt->GetEvent(), evt);
623  if (m_LHCTransport) {
625  inpevt.getByToken(m_LHCToken, LHCMCEvt);
626  m_generator.nonCentralEvent2G4(LHCMCEvt->GetEvent(), evt);
627  }
628  } else {
629  m_generator.nonCentralEvent2G4(HepMCEvt->GetEvent(), evt);
630  }
631 
632  return evt;
633 }
void nonCentralEvent2G4(const HepMC::GenEvent *g, G4Event *e)
Definition: Generator.cc:552
std::unique_ptr< G4Event > currentEvent
void HepMC2G4(const HepMC::GenEvent *g, G4Event *e)
Definition: Generator.cc:112
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:540
edm::EDGetTokenT< edm::HepMCProduct > m_InToken
edm::EDGetTokenT< edm::HepMCProduct > m_LHCToken
void resetGenParticleId(const edm::Event &inpevt)
edm::EventID id() const
Definition: EventBase.h:63
void setGenEvent(const HepMC::GenEvent *inpevt)
Definition: Generator.h:24
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:37
EventNumber_t event() const
Definition: EventID.h:40

◆ GetSimTrackManager()

SimTrackManager * RunManagerMTWorker::GetSimTrackManager ( )

Definition at line 454 of file RunManagerMTWorker.cc.

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

Referenced by SimRunInterface::SimRunInterface().

454  {
455  initializeTLS();
456  return m_tls->trackManager.get();
457 }
std::unique_ptr< SimTrackManager > trackManager

◆ getThreadIndex()

int RunManagerMTWorker::getThreadIndex ( ) const
inline

Definition at line 75 of file RunManagerMTWorker.h.

References m_thread_index.

Referenced by beginRun(), endRun(), initializeG4(), initializeRun(), initializeTLS(), produce(), and terminateRun().

75 { return m_thread_index; }

◆ initializeG4()

void RunManagerMTWorker::initializeG4 ( RunManagerMT runManagerMaster,
const edm::EventSetup es 
)

Definition at line 247 of file RunManagerMTWorker.cc.

References applyOnce, sim::attachSD(), sim::FieldBuilder::build(), RunManagerMT::catalog(), mps_check::command, g4SimHits_cfi::CustomUIsession, DumpMagneticField(), Exception, f, g, RunManagerMT::G4Commands(), ecalTB2006H4_GenSimDigiReco_cfg::G4cout, edm::ParameterSet::getParameter(), getThreadIndex(), edm::ParameterSet::getUntrackedParameter(), DDDWorld::GetWorldVolume(), initializeTLS(), initializeUserActions(), RunManagerMTWorker::TLSData::kernel, m_dumpMF, m_evtManager, m_p, m_pCustomUIsession, m_pField, m_pMagField, m_pUseMagneticField, m_sdMakers, m_sVerbose, m_tls, m_UIsession, m_UseG4EventManager, RunManagerMT::physicsListForWorker(), RunManagerMTWorker::TLSData::registry, RunManagerMTWorker::TLSData::sensCaloDets, RunManagerMTWorker::TLSData::sensTkDets, AlCaHLTBitMon_QueryRunRegistry::string, pfDeepBoostedJetPreprocessParams_cfi::sv, RunManagerMTWorker::TLSData::threadInitialized, RunManagerMTWorker::TLSData::trackManager, and RunManagerMT::world().

247  {
249  return;
250 
251  G4Timer timer;
252  timer.Start();
253 
254  // I guess everything initialized here should be in thread_local storage
255  initializeTLS();
256 
257  int thisID = getThreadIndex();
258  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::initializeG4 in thread " << thisID << " is started";
259 
260  // Initialize per-thread output
261  G4Threading::G4SetThreadId(thisID);
262  G4UImanager::GetUIpointer()->SetUpForAThread(thisID);
263  const std::string& uitype = m_pCustomUIsession.getUntrackedParameter<std::string>("Type", "MessageLogger");
264  if (uitype == "MessageLogger") {
266  } else if (uitype == "MessageLoggerThreadPrefix") {
268  m_pCustomUIsession.getUntrackedParameter<std::string>("ThreadPrefix", ""), thisID);
269  } else if (uitype == "FilePerThread") {
270  m_UIsession =
272  } else {
273  throw cms::Exception("Configuration")
274  << "RunManagerMTWorker::initializeG4: Invalid value of CustomUIsession.Type '" << uitype
275  << "', valid are MessageLogger, MessageLoggerThreadPrefix, FilePerThread";
276  }
277  G4UImanager::GetUIpointer()->SetCoutDestination(m_UIsession);
278 
279  // Initialize worker part of shared resources (geometry, physics)
280  G4WorkerThread::BuildGeometryAndPhysicsVector();
281 
282  // Create worker run manager
283  m_tls->kernel.reset(G4WorkerRunManagerKernel::GetRunManagerKernel());
284  if (nullptr == m_tls->kernel) {
285  m_tls->kernel = std::make_unique<G4WorkerRunManagerKernel>();
286  }
287 
288  // Define G4 exception handler
289  double th = m_p.getParameter<double>("ThresholdForGeometryExceptions") * CLHEP::GeV;
290  bool tr = m_p.getParameter<bool>("TraceExceptions");
291  G4StateManager::GetStateManager()->SetExceptionHandler(new ExceptionHandler(th, tr));
292 
293  // Set the geometry for the worker, share from master
294  auto worldPV = runManagerMaster->world().GetWorldVolume();
295  m_tls->kernel->WorkerDefineWorldVolume(worldPV);
296  G4TransportationManager* tM = G4TransportationManager::GetTransportationManager();
297  tM->SetWorldForTracking(worldPV);
298 
299  // we need the track manager now
300  m_tls->trackManager = std::make_unique<SimTrackManager>();
301 
302  // setup the magnetic field
303  if (m_pUseMagneticField) {
304  const GlobalPoint g(0.f, 0.f, 0.f);
305 
306  sim::FieldBuilder fieldBuilder(m_pMagField, m_pField);
307 
308  CMSFieldManager* fieldManager = new CMSFieldManager();
309  tM->SetFieldManager(fieldManager);
310  fieldBuilder.build(fieldManager, tM->GetPropagatorInField());
311 
312  std::string fieldFile = m_p.getUntrackedParameter<std::string>("FileNameField", "");
313  if (!fieldFile.empty()) {
314  std::call_once(applyOnce, [this]() { m_dumpMF = true; });
315  if (m_dumpMF) {
316  edm::LogVerbatim("SimG4CoreApplication")
317  << "RunManagerMTWorker::InitializeG4: Dump magnetic field to file " << fieldFile;
318  DumpMagneticField(tM->GetFieldManager()->GetDetectorField(), fieldFile);
319  }
320  }
321  }
322 
323  // attach sensitive detector
324  auto sensDets = sim::attachSD(
325  m_sdMakers, es, runManagerMaster->catalog(), m_p, m_tls->trackManager.get(), *(m_tls->registry.get()));
326 
327  m_tls->sensTkDets.swap(sensDets.first);
328  m_tls->sensCaloDets.swap(sensDets.second);
329 
330  edm::LogVerbatim("SimG4CoreApplication")
331  << "RunManagerMTWorker::InitializeG4: Sensitive Detectors are built in thread " << thisID << " found "
332  << m_tls->sensTkDets.size() << " Tk type SD, and " << m_tls->sensCaloDets.size() << " Calo type SD";
333 
334  // Enable couple transportation
335  bool scorer = m_p.getParameter<bool>("UseCommandBaseScorer");
336  if (scorer) {
337  G4ScoringManager* scManager = G4ScoringManager::GetScoringManager();
338  scManager->SetVerboseLevel(1);
339  }
340 
341  // Set the physics list for the worker, share from master
342  PhysicsList* physicsList = runManagerMaster->physicsListForWorker();
343 
344  edm::LogVerbatim("SimG4CoreApplication")
345  << "RunManagerMTWorker::InitializeG4: start initialisation of PhysicsList for the thread " << thisID;
346 
347  // Geant4 UI commands in PreInit state
348  if (!runManagerMaster->G4Commands().empty()) {
349  G4cout << "RunManagerMTWorker::InitializeG4: Requested UI commands: " << G4endl;
350  for (const std::string& command : runManagerMaster->G4Commands()) {
351  G4cout << " " << command << G4endl;
352  G4UImanager::GetUIpointer()->ApplyCommand(command);
353  }
354  }
355  G4StateManager::GetStateManager()->SetNewState(G4State_Init);
356 
357  physicsList->InitializeWorker();
358  m_tls->kernel->SetPhysics(physicsList);
359  m_tls->kernel->InitializePhysics();
360 
361  if (!m_tls->kernel->RunInitialization()) {
362  throw cms::Exception("Configuration")
363  << "RunManagerMTWorker::InitializeG4: Geant4 kernel initialization failed in thread " << thisID;
364  }
365 
366  //tell all interesting parties that we are beginning the job
367  BeginOfJob aBeginOfJob(&es);
368  m_tls->registry->beginOfJobSignal_(&aBeginOfJob);
369 
370  G4int sv = m_p.getUntrackedParameter<int>("SteppingVerbosity", 0);
371  G4double elim = m_p.getUntrackedParameter<double>("StepVerboseThreshold", 0.1) * CLHEP::GeV;
372  std::vector<int> ve = m_p.getUntrackedParameter<std::vector<int>>("VerboseEvents");
373  std::vector<int> vn = m_p.getUntrackedParameter<std::vector<int>>("VertexNumber");
374  std::vector<int> vt = m_p.getUntrackedParameter<std::vector<int>>("VerboseTracks");
375 
376  if (sv > 0) {
377  m_sVerbose = std::make_unique<CMSSteppingVerbose>(sv, elim, ve, vn, vt);
378  }
379  if (!m_UseG4EventManager)
380  m_evtManager = std::make_unique<CMSSimEventManager>(m_p);
382 
383  G4StateManager::GetStateManager()->SetNewState(G4State_Idle);
384 
385  timer.Stop();
386  edm::LogVerbatim("SimG4CoreApplication")
387  << "RunManagerMTWorker::initializeG4 done for the thread " << thisID << " " << timer;
388  m_tls->threadInitialized = true;
389 }
Log< level::Info, true > LogVerbatim
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
CustomUIsession * m_UIsession
std::unique_ptr< CMSSteppingVerbose > m_sVerbose
std::vector< SensitiveTkDetector * > sensTkDets
G4VPhysicalVolume * GetWorldVolume() const
Definition: DDDWorld.h:24
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< CMSSimEventManager > m_evtManager
T getUntrackedParameter(std::string const &, T const &) const
std::unique_ptr< SimActivityRegistry > registry
std::unique_ptr< SimTrackManager > trackManager
std::vector< SensitiveCaloDetector * > sensCaloDets
std::unordered_map< std::string, std::unique_ptr< SensitiveDetectorMakerBase > > m_sdMakers
double f[11][100]
const SensitiveDetectorCatalog & catalog() const
Definition: RunManagerMT.h:72
std::pair< std::vector< SensitiveTkDetector * >, std::vector< SensitiveCaloDetector * > > attachSD(const std::unordered_map< std::string, std::unique_ptr< SensitiveDetectorMakerBase >> &, const edm::EventSetup &, const SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *, SimActivityRegistry &reg)
const DDDWorld & world() const
Definition: RunManagerMT.h:70
static std::once_flag applyOnce
edm::ParameterSet m_pField
list command
Definition: mps_check.py:25
const std::vector< std::string > & G4Commands() const
Definition: RunManagerMT.h:74
edm::ParameterSet m_pCustomUIsession
const MagneticField * m_pMagField
edm::ParameterSet m_p
void DumpMagneticField(const G4Field *, const std::string &) const
int getThreadIndex() const
PhysicsList * physicsListForWorker() const
Definition: RunManagerMT.h:78

◆ initializeRun()

void RunManagerMTWorker::initializeRun ( )
private

Definition at line 471 of file RunManagerMTWorker.cc.

References RunManagerMTWorker::TLSData::currentRun, getThreadIndex(), l1ctLayer2EG_cff::id, m_tls, and RunManagerMTWorker::TLSData::userRunAction.

Referenced by produce().

471  {
472  m_tls->currentRun = new G4Run();
473  G4StateManager::GetStateManager()->SetNewState(G4State_GeomClosed);
474  if (nullptr != m_tls->userRunAction) {
475  m_tls->userRunAction->BeginOfRunAction(m_tls->currentRun);
476  }
477  int id = getThreadIndex();
478  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::initializeRun done for thread " << id;
479 }
Log< level::Info, true > LogVerbatim
std::unique_ptr< RunAction > userRunAction
int getThreadIndex() const

◆ initializeTLS()

void RunManagerMTWorker::initializeTLS ( )
private

Definition at line 223 of file RunManagerMTWorker.cc.

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

Referenced by GetSimTrackManager(), initializeG4(), producers(), sensCaloDetectors(), and sensTkDetectors().

223  {
224  if (nullptr != m_tls) {
225  return;
226  }
227 
228  m_tls = new TLSData();
229  m_tls->registry = std::make_unique<SimActivityRegistry>();
230 
231  edm::Service<SimActivityRegistry> otherRegistry;
232  //Look for an outside SimActivityRegistry
233  // this is used by the visualization code
234  int thisID = getThreadIndex();
235  if (otherRegistry) {
236  m_tls->registry->connect(*otherRegistry);
237  if (thisID > 0) {
238  throw cms::Exception("Configuration")
239  << "RunManagerMTWorker::initializeTLS : "
240  << "SimActivityRegistry service (i.e. visualization) is not supported for more than 1 thread. "
241  << " \n If this use case is needed, RunManagerMTWorker has to be updated.";
242  }
243  }
245 }
std::vector< std::shared_ptr< SimWatcher > > watchers
std::unique_ptr< SimActivityRegistry > registry
std::vector< std::shared_ptr< SimProducer > > producers
static void createWatchers(const edm::ParameterSet &iP, SimActivityRegistry &iReg, std::vector< std::shared_ptr< SimWatcher >> &oWatchers, std::vector< std::shared_ptr< SimProducer >> &oProds)
edm::ParameterSet m_p
int getThreadIndex() const

◆ initializeUserActions()

void RunManagerMTWorker::initializeUserActions ( )
private

Definition at line 391 of file RunManagerMTWorker.cc.

References Connect(), g4SimHits_cfi::EventAction, edm::ParameterSet::getParameter(), RunManagerMTWorker::TLSData::kernel, m_evtManager, m_hasWatchers, m_p, m_pEventAction, m_pRunAction, m_pStackingAction, m_pSteppingAction, m_pTrackingAction, m_sVerbose, m_tls, m_UseG4EventManager, RunManagerMTWorker::TLSData::runInterface, CastorDigiValidation::StackingAction, CastorDigiValidation::SteppingAction, g4SimHits_cfi::TrackingAction, RunManagerMTWorker::TLSData::trackManager, and RunManagerMTWorker::TLSData::userRunAction.

Referenced by initializeG4().

391  {
392  m_tls->runInterface = std::make_unique<SimRunInterface>(this, false);
393  m_tls->userRunAction = std::make_unique<RunAction>(m_pRunAction, m_tls->runInterface.get(), false);
394  m_tls->userRunAction->SetMaster(false);
395  Connect(m_tls->userRunAction.get());
396 
397  G4int ver = m_p.getParameter<int>("EventVerbose");
398  G4EventManager* eventManager = m_tls->kernel->GetEventManager();
399  eventManager->SetVerboseLevel(ver);
400 
401  auto userEventAction =
403  Connect(userEventAction);
404  if (m_UseG4EventManager) {
405  eventManager->SetUserAction(userEventAction);
406  } else {
407  m_evtManager->SetUserAction(userEventAction);
408  }
409 
410  auto userTrackingAction = new TrackingAction(m_tls->trackManager.get(), m_sVerbose.get(), m_pTrackingAction);
411  Connect(userTrackingAction);
412  if (m_UseG4EventManager) {
413  eventManager->SetUserAction(userTrackingAction);
414  } else {
415  m_evtManager->SetUserAction(userTrackingAction);
416  }
417 
418  auto userSteppingAction =
420  Connect(userSteppingAction);
421  if (m_UseG4EventManager) {
422  eventManager->SetUserAction(userSteppingAction);
423  } else {
424  m_evtManager->SetUserAction(userSteppingAction);
425  }
426 
427  auto userStackingAction = new StackingAction(userTrackingAction, m_pStackingAction, m_sVerbose.get());
428  if (m_UseG4EventManager) {
429  eventManager->SetUserAction(userStackingAction);
430  } else {
431  m_evtManager->SetUserAction(userStackingAction);
432  }
433 }
edm::ParameterSet m_pSteppingAction
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::unique_ptr< SimRunInterface > runInterface
std::unique_ptr< CMSSteppingVerbose > m_sVerbose
std::unique_ptr< G4RunManagerKernel > kernel
std::unique_ptr< CMSSimEventManager > m_evtManager
edm::ParameterSet m_pEventAction
std::unique_ptr< SimTrackManager > trackManager
edm::ParameterSet m_pRunAction
std::unique_ptr< RunAction > userRunAction
edm::ParameterSet m_pTrackingAction
edm::ParameterSet m_p
edm::ParameterSet m_pStackingAction
void Connect(RunAction *)

◆ produce()

G4SimEvent * RunManagerMTWorker::produce ( const edm::Event inpevt,
const edm::EventSetup es,
RunManagerMT runManagerMaster 
)

Definition at line 511 of file RunManagerMTWorker.cc.

References cms::cuda::assert(), G4SimEvent::clear(), G4SimEvent::collisionPoint(), RunManagerMTWorker::TLSData::currentEvent, RunManagerMTWorker::TLSData::currentRunNumber, edm::EventID::event(), Generator::eventWeight(), Exception, generateEvent(), Generator::genEvent(), Generator::genVertex(), getThreadIndex(), G4SimEvent::hepEvent(), edm::EventBase::id(), initializeRun(), RunManagerMTWorker::TLSData::kernel, m_evtManager, m_generator, m_simEvent, m_tls, m_UseG4EventManager, G4SimEvent::nGenParts(), edm::EventID::run(), RunManagerMTWorker::TLSData::runInterface, RunManagerMTWorker::TLSData::runTerminated, edm::second(), RunManagerMTWorker::TLSData::sensCaloDets, edm::Event::streamID(), terminateRun(), RunManagerMTWorker::TLSData::threadInitialized, and G4SimEvent::weight().

513  {
514  // The initialization and begin/end run is a bit convoluted due to
515  // - Geant4 deals per-thread
516  // - OscarMTProducer deals per-stream
517  // and framework/TBB is free to schedule work in streams to the
518  // threads as it likes.
519  //
520  // We have to do the per-thread initialization, and per-thread
521  // per-run initialization here by ourselves.
522 
523  assert(m_tls != nullptr and m_tls->threadInitialized);
524  // Initialize run
525  if (inpevt.id().run() != m_tls->currentRunNumber) {
526  edm::LogVerbatim("SimG4CoreApplication")
527  << "RunManagerMTWorker::produce: RunID= " << inpevt.id().run() << " TLS RunID= " << m_tls->currentRunNumber;
528  if (m_tls->currentRunNumber != 0 && !m_tls->runTerminated) {
529  // If previous run in this thread was not terminated via endRun() call,
530  // terminate it now
531  terminateRun();
532  }
533  initializeRun();
534  m_tls->currentRunNumber = inpevt.id().run();
535  }
536  m_tls->runInterface->setRunManagerMTWorker(this); // For UserActions
537 
538  m_tls->currentEvent.reset(generateEvent(inpevt));
539 
540  m_simEvent.clear();
543  if (m_generator.genVertex() != nullptr) {
544  auto genVertex = m_generator.genVertex();
545  m_simEvent.collisionPoint(math::XYZTLorentzVectorD(genVertex->x() / CLHEP::cm,
546  genVertex->y() / CLHEP::cm,
547  genVertex->z() / CLHEP::cm,
548  genVertex->t() / CLHEP::second));
549  }
550  if (m_tls->currentEvent->GetNumberOfPrimaryVertex() == 0) {
551  throw cms::Exception("EventCorruption")
552  << "RunManagerMTWorker::produce: event " << inpevt.id().event() << " with no G4PrimaryVertices"
553  << " StreamID=" << inpevt.streamID() << " threadIndex=" << getThreadIndex();
554 
555  } else {
556  edm::LogVerbatim("SimG4CoreApplication")
557  << "RunManagerMTWorker::produce: start EventID=" << inpevt.id().event() << " StreamID=" << inpevt.streamID()
558  << " threadIndex=" << getThreadIndex() << " weight=" << m_simEvent.weight() << "; "
559  << m_tls->currentEvent->GetNumberOfPrimaryVertex() << " vertices for Geant4; generator produced "
560  << m_simEvent.nGenParts() << " particles.";
561 
562  if (m_UseG4EventManager) {
563  m_tls->kernel->GetEventManager()->ProcessOneEvent(m_tls->currentEvent.get());
564  } else {
565  m_evtManager->ProcessOneEvent(m_tls->currentEvent.get());
566  }
567  }
568 
569  //remove memory only needed during event processing
570  m_tls->currentEvent.reset();
571 
572  for (auto& sd : m_tls->sensCaloDets) {
573  sd->reset();
574  }
575  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::produce: ended Event " << inpevt.id().event();
576  return &m_simEvent;
577 }
Log< level::Info, true > LogVerbatim
virtual const HepMC::GenEvent * genEvent() const
Definition: Generator.h:30
std::unique_ptr< G4Event > currentEvent
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:14
unsigned int nGenParts() const
Definition: G4SimEvent.h:22
std::unique_ptr< SimRunInterface > runInterface
virtual const math::XYZTLorentzVector * genVertex() const
Definition: Generator.h:31
assert(be >=bs)
std::unique_ptr< G4RunManagerKernel > kernel
std::unique_ptr< CMSSimEventManager > m_evtManager
U second(std::pair< T, U > const &p)
void weight(float w)
Definition: G4SimEvent.h:25
std::vector< SensitiveCaloDetector * > sensCaloDets
edm::EventID id() const
Definition: EventBase.h:63
void hepEvent(const HepMC::GenEvent *r)
Definition: G4SimEvent.h:23
StreamID streamID() const
Definition: Event.h:98
void clear()
Definition: G4SimEvent.cc:23
RunNumber_t run() const
Definition: EventID.h:38
G4Event * generateEvent(const edm::Event &inpevt)
virtual const double eventWeight() const
Definition: Generator.h:32
int getThreadIndex() const
void collisionPoint(const math::XYZTLorentzVectorD &v)
Definition: G4SimEvent.h:27
EventNumber_t event() const
Definition: EventID.h:40

◆ producers()

std::vector< std::shared_ptr< SimProducer > > & RunManagerMTWorker::producers ( )

Definition at line 466 of file RunManagerMTWorker.cc.

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

466  {
467  initializeTLS();
468  return m_tls->producers;
469 }
std::vector< std::shared_ptr< SimProducer > > producers

◆ resetGenParticleId()

void RunManagerMTWorker::resetGenParticleId ( const edm::Event inpevt)
private

Definition at line 635 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().

635  {
637  inpevt.getByToken(m_theLHCTlinkToken, theLHCTlink);
638  if (theLHCTlink.isValid()) {
639  m_tls->trackManager->setLHCTransportLink(theLHCTlink.product());
640  }
641 }
T const * product() const
Definition: Handle.h:70
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:540
std::unique_ptr< SimTrackManager > trackManager
edm::EDGetTokenT< edm::LHCTransportLinkContainer > m_theLHCTlinkToken
bool isValid() const
Definition: HandleBase.h:70

◆ sensCaloDetectors()

std::vector< SensitiveCaloDetector * > & RunManagerMTWorker::sensCaloDetectors ( )

Definition at line 462 of file RunManagerMTWorker.cc.

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

462  {
463  initializeTLS();
464  return m_tls->sensCaloDets;
465 }
std::vector< SensitiveCaloDetector * > sensCaloDets

◆ sensTkDetectors()

std::vector< SensitiveTkDetector * > & RunManagerMTWorker::sensTkDetectors ( )

Definition at line 458 of file RunManagerMTWorker.cc.

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

458  {
459  initializeTLS();
460  return m_tls->sensTkDets;
461 }
std::vector< SensitiveTkDetector * > sensTkDets

◆ simEvent()

G4SimEvent* RunManagerMTWorker::simEvent ( )
inline

Definition at line 74 of file RunManagerMTWorker.h.

References m_simEvent.

Referenced by SimRunInterface::simEvent().

74 { return &m_simEvent; }

◆ terminateRun()

void RunManagerMTWorker::terminateRun ( )
private

Definition at line 481 of file RunManagerMTWorker.cc.

References applyOnceEnd, mps_check::command, RunManagerMTWorker::TLSData::currentEvent, RunManagerMTWorker::TLSData::currentRun, getThreadIndex(), l1ctLayer2EG_cff::id, RunManagerMTWorker::TLSData::kernel, m_endOfRun, m_G4CommandsEndRun, m_tls, RunManagerMTWorker::TLSData::runTerminated, AlCaHLTBitMon_QueryRunRegistry::string, and RunManagerMTWorker::TLSData::userRunAction.

Referenced by abortRun(), endRun(), and produce().

481  {
482  int id = getThreadIndex();
483  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::terminateRun for thread " << id;
484  if (nullptr == m_tls || m_tls->runTerminated) {
485  return;
486  }
487 
488  // Geant4 UI commands after the run
489  if (!m_G4CommandsEndRun.empty()) {
490  std::call_once(applyOnceEnd, [this]() { m_endOfRun = true; });
491  if (m_endOfRun) {
492  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker: Requested end of run UI commands: ";
493  for (const std::string& command : m_G4CommandsEndRun) {
494  edm::LogVerbatim("SimG4CoreApplication") << " " << command;
495  G4UImanager::GetUIpointer()->ApplyCommand(command);
496  }
497  }
498  }
499  if (m_tls->userRunAction) {
500  m_tls->userRunAction->EndOfRunAction(m_tls->currentRun);
501  m_tls->userRunAction.reset();
502  }
503  m_tls->currentEvent.reset();
504  if (m_tls->kernel) {
505  m_tls->kernel->RunTermination();
506  }
507  m_tls->runTerminated = true;
508  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::terminateRun done for thread " << id;
509 }
Log< level::Info, true > LogVerbatim
std::unique_ptr< G4Event > currentEvent
std::vector< std::string > m_G4CommandsEndRun
std::unique_ptr< G4RunManagerKernel > kernel
static std::once_flag applyOnceEnd
std::unique_ptr< RunAction > userRunAction
list command
Definition: mps_check.py:25
int getThreadIndex() const

Member Data Documentation

◆ m_dumpMF

bool RunManagerMTWorker::m_dumpMF {false}
private

Definition at line 100 of file RunManagerMTWorker.h.

Referenced by initializeG4().

◆ m_endOfRun

bool RunManagerMTWorker::m_endOfRun {false}
private

Definition at line 101 of file RunManagerMTWorker.h.

Referenced by terminateRun().

◆ m_evtManager

std::unique_ptr<CMSSimEventManager> RunManagerMTWorker::m_evtManager
private

Definition at line 120 of file RunManagerMTWorker.h.

Referenced by initializeG4(), initializeUserActions(), and produce().

◆ m_G4CommandsEndRun

std::vector<std::string> RunManagerMTWorker::m_G4CommandsEndRun
private

Definition at line 112 of file RunManagerMTWorker.h.

Referenced by terminateRun().

◆ m_generator

Generator RunManagerMTWorker::m_generator
private

Definition at line 88 of file RunManagerMTWorker.h.

Referenced by generateEvent(), and produce().

◆ m_hasWatchers

bool RunManagerMTWorker::m_hasWatchers {false}
private

Definition at line 98 of file RunManagerMTWorker.h.

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

◆ m_InToken

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

Definition at line 89 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_LHCToken

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

Definition at line 90 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_LHCTransport

bool RunManagerMTWorker::m_LHCTransport {false}
private

Definition at line 99 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_MagField

edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> RunManagerMTWorker::m_MagField
private

Definition at line 92 of file RunManagerMTWorker.h.

Referenced by beginRun().

◆ m_nonBeam

bool RunManagerMTWorker::m_nonBeam {false}
private

Definition at line 95 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_p

edm::ParameterSet RunManagerMTWorker::m_p
private

Definition at line 113 of file RunManagerMTWorker.h.

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

◆ m_pCustomUIsession

edm::ParameterSet RunManagerMTWorker::m_pCustomUIsession
private

Definition at line 111 of file RunManagerMTWorker.h.

Referenced by initializeG4().

◆ m_pEventAction

edm::ParameterSet RunManagerMTWorker::m_pEventAction
private

Definition at line 107 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pField

edm::ParameterSet RunManagerMTWorker::m_pField
private

Definition at line 105 of file RunManagerMTWorker.h.

Referenced by initializeG4().

◆ m_pMagField

const MagneticField* RunManagerMTWorker::m_pMagField {nullptr}
private

Definition at line 93 of file RunManagerMTWorker.h.

Referenced by beginRun(), and initializeG4().

◆ m_pRunAction

edm::ParameterSet RunManagerMTWorker::m_pRunAction
private

Definition at line 106 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pStackingAction

edm::ParameterSet RunManagerMTWorker::m_pStackingAction
private

Definition at line 108 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pSteppingAction

edm::ParameterSet RunManagerMTWorker::m_pSteppingAction
private

Definition at line 110 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pTrackingAction

edm::ParameterSet RunManagerMTWorker::m_pTrackingAction
private

Definition at line 109 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pUseMagneticField

bool RunManagerMTWorker::m_pUseMagneticField {true}
private

Definition at line 97 of file RunManagerMTWorker.h.

Referenced by beginRun(), and initializeG4().

◆ m_sdMakers

std::unordered_map<std::string, std::unique_ptr<SensitiveDetectorMakerBase> > RunManagerMTWorker::m_sdMakers
private

Definition at line 122 of file RunManagerMTWorker.h.

Referenced by beginRun(), and initializeG4().

◆ m_simEvent

G4SimEvent RunManagerMTWorker::m_simEvent
private

Definition at line 119 of file RunManagerMTWorker.h.

Referenced by produce(), and simEvent().

◆ m_sVerbose

std::unique_ptr<CMSSteppingVerbose> RunManagerMTWorker::m_sVerbose
private

Definition at line 121 of file RunManagerMTWorker.h.

Referenced by initializeG4(), and initializeUserActions().

◆ m_theLHCTlinkToken

edm::EDGetTokenT<edm::LHCTransportLinkContainer> RunManagerMTWorker::m_theLHCTlinkToken
private

Definition at line 91 of file RunManagerMTWorker.h.

Referenced by resetGenParticleId().

◆ m_thread_index

const int RunManagerMTWorker::m_thread_index {-1}
private

Definition at line 103 of file RunManagerMTWorker.h.

Referenced by getThreadIndex().

◆ m_tls

TLSData* RunManagerMTWorker::m_tls {nullptr}
private

◆ m_UIsession

CustomUIsession* RunManagerMTWorker::m_UIsession {nullptr}
private

Definition at line 118 of file RunManagerMTWorker.h.

Referenced by initializeG4(), and ~RunManagerMTWorker().

◆ m_UseG4EventManager

bool RunManagerMTWorker::m_UseG4EventManager {true}
private

Definition at line 96 of file RunManagerMTWorker.h.

Referenced by initializeG4(), initializeUserActions(), and produce().