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::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}
 

Detailed Description

Definition at line 48 of file RunManagerMTWorker.h.

Constructor & Destructor Documentation

◆ RunManagerMTWorker()

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

Definition at line 144 of file RunManagerMTWorker.cc.

145  : m_generator(iConfig.getParameter<edm::ParameterSet>("Generator")),
147  iConfig.getParameter<edm::ParameterSet>("Generator").getParameter<edm::InputTag>("HepMCProductLabel"))),
149  iC.consumes<edm::LHCTransportLinkContainer>(iConfig.getParameter<edm::InputTag>("theLHCTlinkTag"))),
150  m_nonBeam(iConfig.getParameter<bool>("NonBeamEvent")),
151  m_pUseMagneticField(iConfig.getParameter<bool>("UseMagneticField")),
152  m_LHCTransport(iConfig.getParameter<bool>("LHCTransport")),
153  m_thread_index{get_new_thread_index()},
154  m_pField(iConfig.getParameter<edm::ParameterSet>("MagneticField")),
155  m_pRunAction(iConfig.getParameter<edm::ParameterSet>("RunAction")),
156  m_pEventAction(iConfig.getParameter<edm::ParameterSet>("EventAction")),
157  m_pStackingAction(iConfig.getParameter<edm::ParameterSet>("StackingAction")),
158  m_pTrackingAction(iConfig.getParameter<edm::ParameterSet>("TrackingAction")),
159  m_pSteppingAction(iConfig.getParameter<edm::ParameterSet>("SteppingAction")),
160  m_pCustomUIsession(iConfig.getUntrackedParameter<edm::ParameterSet>("CustomUIsession")),
161  m_G4CommandsEndRun(iConfig.getParameter<std::vector<std::string>>("G4CommandsEndRun")),
162  m_p(iConfig) {
163  int thisID = getThreadIndex();
164  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker for the thread " << thisID;
165 
166  // sensitive detectors
167  std::vector<std::string> onlySDs = iConfig.getParameter<std::vector<std::string>>("OnlySDs");
169 
170  // TLS and watchers
171  initializeTLS();
172  if (m_hasWatchers) {
173  for (auto& watcher : m_tls->watchers) {
174  watcher->registerConsumes(iC);
175  }
176  }
177  if (m_LHCTransport) {
178  m_LHCToken = iC.consumes<edm::HepMCProduct>(edm::InputTag("LHCTransport"));
179  }
180  if (m_pUseMagneticField) {
182  }
183  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker is constructed for the thread " << thisID;
184  unsigned int k = 0;
185  for (std::unordered_map<std::string, std::unique_ptr<SensitiveDetectorMakerBase>>::const_iterator itr =
186  m_sdMakers.begin();
187  itr != m_sdMakers.end();
188  ++itr, ++k)
189  edm::LogVerbatim("SimG4CoreApplication") << "SD[" << k << "] " << itr->first;
190 }
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:307
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 192 of file RunManagerMTWorker.cc.

References m_tls, and m_UIsession.

192  {
193  m_tls = nullptr;
194  delete m_UIsession;
195 }
CustomUIsession * m_UIsession

Member Function Documentation

◆ abortEvent()

void RunManagerMTWorker::abortEvent ( )

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

552  {
553  if (m_tls->runTerminated) {
554  return;
555  }
556  G4Track* t = m_tls->kernel->GetEventManager()->GetTrackingManager()->GetTrack();
557  t->SetTrackStatus(fStopAndKill);
558 
559  // CMS-specific act
560  //
561  TrackingAction* uta = static_cast<TrackingAction*>(m_tls->kernel->GetEventManager()->GetUserTrackingAction());
563 
564  m_tls->currentEvent->SetEventAborted();
565  m_tls->kernel->GetEventManager()->GetStackManager()->clear();
566  m_tls->kernel->GetEventManager()->GetTrackingManager()->EventAborted();
567 }
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 569 of file RunManagerMTWorker.cc.

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

Referenced by SimRunInterface::abortRun().

569  {
570  if (!softAbort) {
571  abortEvent();
572  }
573  m_tls->currentRun = nullptr;
574  terminateRun();
575 }

◆ beginRun()

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

Definition at line 197 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.

197  {
198  int id = getThreadIndex();
199  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::beginRun for the thread " << id;
200  for (auto& maker : m_sdMakers) {
201  maker.second->beginRun(es);
202  }
203  if (m_pUseMagneticField) {
205  }
206  if (m_hasWatchers) {
207  for (auto& watcher : m_tls->watchers) {
208  watcher->beginRun(es);
209  }
210  }
211  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::beginRun done for the thread " << id;
212 }
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 412 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().

412  {
413  runAction->m_beginOfRunSignal.connect(m_tls->registry->beginOfRunSignal_);
414  runAction->m_endOfRunSignal.connect(m_tls->registry->endOfRunSignal_);
415 }
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 417 of file RunManagerMTWorker.cc.

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

417  {
418  eventAction->m_beginOfEventSignal.connect(m_tls->registry->beginOfEventSignal_);
419  eventAction->m_endOfEventSignal.connect(m_tls->registry->endOfEventSignal_);
420 }
void connect(Observer< const T *> *iObs)
does not take ownership of memory
Definition: Signaler.h:55
SimActivityRegistry::EndOfEventSignal m_endOfEventSignal
Definition: EventAction.h:47
std::unique_ptr< SimActivityRegistry > registry
SimActivityRegistry::BeginOfEventSignal m_beginOfEventSignal
Definition: EventAction.h:46

◆ Connect() [3/4]

void RunManagerMTWorker::Connect ( TrackingAction trackingAction)

Definition at line 422 of file RunManagerMTWorker.cc.

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

422  {
423  trackingAction->m_beginOfTrackSignal.connect(m_tls->registry->beginOfTrackSignal_);
424  trackingAction->m_endOfTrackSignal.connect(m_tls->registry->endOfTrackSignal_);
425 }
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 427 of file RunManagerMTWorker.cc.

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

427  {
428  steppingAction->m_g4StepSignal.connect(m_tls->registry->g4StepSignal_);
429 }
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 616 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().

616  {
617  std::ofstream fout(file.c_str(), std::ios::out);
618  if (fout.fail()) {
619  edm::LogWarning("SimG4CoreApplication")
620  << "MTWorker::DumpMagneticField: error opening file <" << file << "> for magnetic field";
621  } else {
622  // CMS magnetic field volume
623  double rmax = 9000 * mm;
624  double zmax = 24000 * mm;
625 
626  double dr = 1 * cm;
627  double dz = 5 * cm;
628 
629  int nr = (int)(rmax / dr);
630  int nz = 2 * (int)(zmax / dz);
631 
632  double r = 0.0;
633  double z0 = -zmax;
634  double z;
635 
636  double phi = 0.0;
637  double cosf = cos(phi);
638  double sinf = sin(phi);
639 
640  double point[4] = {0.0, 0.0, 0.0, 0.0};
641  double bfield[3] = {0.0, 0.0, 0.0};
642 
643  fout << std::setprecision(6);
644  for (int i = 0; i <= nr; ++i) {
645  z = z0;
646  for (int j = 0; j <= nz; ++j) {
647  point[0] = r * cosf;
648  point[1] = r * sinf;
649  point[2] = z;
650  field->GetFieldValue(point, bfield);
651  fout << "R(mm)= " << r / mm << " phi(deg)= " << phi / degree << " Z(mm)= " << z / mm
652  << " Bz(tesla)= " << bfield[2] / tesla << " Br(tesla)= " << (bfield[0] * cosf + bfield[1] * sinf) / tesla
653  << " Bphi(tesla)= " << (bfield[0] * sinf - bfield[1] * cosf) / tesla << G4endl;
654  z += dz;
655  }
656  r += dr;
657  }
658 
659  fout.close();
660  }
661 }
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 214 of file RunManagerMTWorker.cc.

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

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

◆ generateEvent()

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

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

577  {
578  m_tls->currentEvent.reset();
579 
580  // 64 bits event ID in CMSSW converted into Geant4 event ID
581  G4int evtid = (G4int)inpevt.id().event();
582  G4Event* evt = new G4Event(evtid);
583 
585  inpevt.getByToken(m_InToken, HepMCEvt);
586 
587  m_generator.setGenEvent(HepMCEvt->GetEvent());
588 
589  // required to reset the GenParticle Id for particles transported
590  // along the beam pipe
591  // to their original value for SimTrack creation
592  resetGenParticleId(inpevt);
593 
594  if (!m_nonBeam) {
595  m_generator.HepMC2G4(HepMCEvt->GetEvent(), evt);
596  if (m_LHCTransport) {
598  inpevt.getByToken(m_LHCToken, LHCMCEvt);
599  m_generator.nonCentralEvent2G4(LHCMCEvt->GetEvent(), evt);
600  }
601  } else {
602  m_generator.nonCentralEvent2G4(HepMCEvt->GetEvent(), evt);
603  }
604 
605  return evt;
606 }
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 431 of file RunManagerMTWorker.cc.

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

Referenced by SimRunInterface::SimRunInterface().

431  {
432  initializeTLS();
433  return m_tls->trackManager.get();
434 }
std::unique_ptr< SimTrackManager > trackManager

◆ getThreadIndex()

int RunManagerMTWorker::getThreadIndex ( ) const
inline

Definition at line 74 of file RunManagerMTWorker.h.

References m_thread_index.

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

74 { return m_thread_index; }

◆ initializeG4()

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

Definition at line 244 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_p, m_pCustomUIsession, m_pField, m_pMagField, m_pUseMagneticField, m_sdMakers, m_sVerbose, m_tls, m_UIsession, 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().

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

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

Referenced by produce().

448  {
449  m_tls->currentRun = new G4Run();
450  G4StateManager::GetStateManager()->SetNewState(G4State_GeomClosed);
451  if (nullptr != m_tls->userRunAction) {
452  m_tls->userRunAction->BeginOfRunAction(m_tls->currentRun);
453  }
454  int id = getThreadIndex();
455  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::initializeRun done for thread " << id;
456 }
Log< level::Info, true > LogVerbatim
std::unique_ptr< RunAction > userRunAction
int getThreadIndex() const

◆ initializeTLS()

void RunManagerMTWorker::initializeTLS ( )
private

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

220  {
221  if (nullptr != m_tls) {
222  return;
223  }
224 
225  m_tls = new TLSData();
226  m_tls->registry = std::make_unique<SimActivityRegistry>();
227 
228  edm::Service<SimActivityRegistry> otherRegistry;
229  //Look for an outside SimActivityRegistry
230  // this is used by the visualization code
231  int thisID = getThreadIndex();
232  if (otherRegistry) {
233  m_tls->registry->connect(*otherRegistry);
234  if (thisID > 0) {
235  throw cms::Exception("Configuration")
236  << "RunManagerMTWorker::initializeTLS : "
237  << "SimActivityRegistry service (i.e. visualization) is not supported for more than 1 thread. "
238  << " \n If this use case is needed, RunManagerMTWorker has to be updated.";
239  }
240  }
242 }
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 385 of file RunManagerMTWorker.cc.

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

Referenced by initializeG4().

385  {
386  m_tls->runInterface = std::make_unique<SimRunInterface>(this, false);
387  m_tls->userRunAction = std::make_unique<RunAction>(m_pRunAction, m_tls->runInterface.get(), false);
388  m_tls->userRunAction->SetMaster(false);
389  Connect(m_tls->userRunAction.get());
390 
391  G4int ver = m_p.getParameter<int>("EventVerbose");
392  G4EventManager* eventManager = m_tls->kernel->GetEventManager();
393  eventManager->SetVerboseLevel(ver);
394 
395  EventAction* userEventAction =
397  Connect(userEventAction);
398  eventManager->SetUserAction(userEventAction);
399 
400  TrackingAction* userTrackingAction = new TrackingAction(userEventAction, m_pTrackingAction, m_sVerbose.get());
401  Connect(userTrackingAction);
402  eventManager->SetUserAction(userTrackingAction);
403 
404  SteppingAction* userSteppingAction =
405  new SteppingAction(userEventAction, m_pSteppingAction, m_sVerbose.get(), m_hasWatchers);
406  Connect(userSteppingAction);
407  eventManager->SetUserAction(userSteppingAction);
408 
409  eventManager->SetUserAction(new StackingAction(userTrackingAction, m_pStackingAction, m_sVerbose.get()));
410 }
edm::ParameterSet m_pSteppingAction
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< SimRunInterface > runInterface
std::unique_ptr< CMSSteppingVerbose > m_sVerbose
std::unique_ptr< G4RunManagerKernel > kernel
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 488 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_generator, m_simEvent, m_tls, 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().

490  {
491  // The initialization and begin/end run is a bit convoluted due to
492  // - Geant4 deals per-thread
493  // - OscarMTProducer deals per-stream
494  // and framework/TBB is free to schedule work in streams to the
495  // threads as it likes.
496  //
497  // We have to do the per-thread initialization, and per-thread
498  // per-run initialization here by ourselves.
499 
500  assert(m_tls != nullptr and m_tls->threadInitialized);
501  // Initialize run
502  if (inpevt.id().run() != m_tls->currentRunNumber) {
503  edm::LogVerbatim("SimG4CoreApplication")
504  << "RunManagerMTWorker::produce: RunID= " << inpevt.id().run() << " TLS RunID= " << m_tls->currentRunNumber;
505  if (m_tls->currentRunNumber != 0 && !m_tls->runTerminated) {
506  // If previous run in this thread was not terminated via endRun() call,
507  // terminate it now
508  terminateRun();
509  }
510  initializeRun();
511  m_tls->currentRunNumber = inpevt.id().run();
512  }
513  m_tls->runInterface->setRunManagerMTWorker(this); // For UserActions
514 
515  m_tls->currentEvent.reset(generateEvent(inpevt));
516 
517  m_simEvent.clear();
520  if (m_generator.genVertex() != nullptr) {
521  auto genVertex = m_generator.genVertex();
522  m_simEvent.collisionPoint(math::XYZTLorentzVectorD(genVertex->x() / CLHEP::cm,
523  genVertex->y() / CLHEP::cm,
524  genVertex->z() / CLHEP::cm,
525  genVertex->t() / CLHEP::second));
526  }
527  if (m_tls->currentEvent->GetNumberOfPrimaryVertex() == 0) {
528  throw cms::Exception("EventCorruption")
529  << "RunManagerMTWorker::produce: event " << inpevt.id().event() << " with no G4PrimaryVertices"
530  << " StreamID=" << inpevt.streamID() << " threadIndex=" << getThreadIndex();
531 
532  } else {
533  edm::LogVerbatim("SimG4CoreApplication")
534  << "RunManagerMTWorker::produce: start EventID=" << inpevt.id().event() << " StreamID=" << inpevt.streamID()
535  << " threadIndex=" << getThreadIndex() << " weight=" << m_simEvent.weight() << "; "
536  << m_tls->currentEvent->GetNumberOfPrimaryVertex() << " vertices for Geant4; generator produced "
537  << m_simEvent.nGenParts() << " particles.";
538 
539  m_tls->kernel->GetEventManager()->ProcessOneEvent(m_tls->currentEvent.get());
540  }
541 
542  //remove memory only needed during event processing
543  m_tls->currentEvent.reset();
544 
545  for (auto& sd : m_tls->sensCaloDets) {
546  sd->reset();
547  }
548  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::produce: ended Event " << inpevt.id().event();
549  return &m_simEvent;
550 }
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
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 443 of file RunManagerMTWorker.cc.

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

443  {
444  initializeTLS();
445  return m_tls->producers;
446 }
std::vector< std::shared_ptr< SimProducer > > producers

◆ resetGenParticleId()

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

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

608  {
610  inpevt.getByToken(m_theLHCTlinkToken, theLHCTlink);
611  if (theLHCTlink.isValid()) {
612  m_tls->trackManager->setLHCTransportLink(theLHCTlink.product());
613  }
614 }
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 439 of file RunManagerMTWorker.cc.

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

439  {
440  initializeTLS();
441  return m_tls->sensCaloDets;
442 }
std::vector< SensitiveCaloDetector * > sensCaloDets

◆ sensTkDetectors()

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

Definition at line 435 of file RunManagerMTWorker.cc.

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

435  {
436  initializeTLS();
437  return m_tls->sensTkDets;
438 }
std::vector< SensitiveTkDetector * > sensTkDets

◆ simEvent()

G4SimEvent* RunManagerMTWorker::simEvent ( )
inline

Definition at line 73 of file RunManagerMTWorker.h.

References m_simEvent.

Referenced by SimRunInterface::simEvent().

73 { return &m_simEvent; }

◆ terminateRun()

void RunManagerMTWorker::terminateRun ( )
private

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

458  {
459  int id = getThreadIndex();
460  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::terminateRun for thread " << id;
461  if (nullptr == m_tls || m_tls->runTerminated) {
462  return;
463  }
464 
465  // Geant4 UI commands after the run
466  if (!m_G4CommandsEndRun.empty()) {
467  std::call_once(applyOnceEnd, [this]() { m_endOfRun = true; });
468  if (m_endOfRun) {
469  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker: Requested end of run UI commands: ";
470  for (const std::string& command : m_G4CommandsEndRun) {
471  edm::LogVerbatim("SimG4CoreApplication") << " " << command;
472  G4UImanager::GetUIpointer()->ApplyCommand(command);
473  }
474  }
475  }
476  if (m_tls->userRunAction) {
477  m_tls->userRunAction->EndOfRunAction(m_tls->currentRun);
478  m_tls->userRunAction.reset();
479  }
480  m_tls->currentEvent.reset();
481  if (m_tls->kernel) {
482  m_tls->kernel->RunTermination();
483  }
484  m_tls->runTerminated = true;
485  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::terminateRun done for thread " << id;
486 }
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 98 of file RunManagerMTWorker.h.

Referenced by initializeG4().

◆ m_endOfRun

bool RunManagerMTWorker::m_endOfRun {false}
private

Definition at line 99 of file RunManagerMTWorker.h.

Referenced by terminateRun().

◆ m_G4CommandsEndRun

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

Definition at line 110 of file RunManagerMTWorker.h.

Referenced by terminateRun().

◆ m_generator

Generator RunManagerMTWorker::m_generator
private

Definition at line 87 of file RunManagerMTWorker.h.

Referenced by generateEvent(), and produce().

◆ m_hasWatchers

bool RunManagerMTWorker::m_hasWatchers {false}
private

Definition at line 96 of file RunManagerMTWorker.h.

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

◆ m_InToken

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

Definition at line 88 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_LHCToken

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

Definition at line 89 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_LHCTransport

bool RunManagerMTWorker::m_LHCTransport {false}
private

Definition at line 97 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_MagField

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

Definition at line 91 of file RunManagerMTWorker.h.

Referenced by beginRun().

◆ m_nonBeam

bool RunManagerMTWorker::m_nonBeam {false}
private

Definition at line 94 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_p

edm::ParameterSet RunManagerMTWorker::m_p
private

Definition at line 111 of file RunManagerMTWorker.h.

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

◆ m_pCustomUIsession

edm::ParameterSet RunManagerMTWorker::m_pCustomUIsession
private

Definition at line 109 of file RunManagerMTWorker.h.

Referenced by initializeG4().

◆ m_pEventAction

edm::ParameterSet RunManagerMTWorker::m_pEventAction
private

Definition at line 105 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pField

edm::ParameterSet RunManagerMTWorker::m_pField
private

Definition at line 103 of file RunManagerMTWorker.h.

Referenced by initializeG4().

◆ m_pMagField

const MagneticField* RunManagerMTWorker::m_pMagField {nullptr}
private

Definition at line 92 of file RunManagerMTWorker.h.

Referenced by beginRun(), and initializeG4().

◆ m_pRunAction

edm::ParameterSet RunManagerMTWorker::m_pRunAction
private

Definition at line 104 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pStackingAction

edm::ParameterSet RunManagerMTWorker::m_pStackingAction
private

Definition at line 106 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pSteppingAction

edm::ParameterSet RunManagerMTWorker::m_pSteppingAction
private

Definition at line 108 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pTrackingAction

edm::ParameterSet RunManagerMTWorker::m_pTrackingAction
private

Definition at line 107 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pUseMagneticField

bool RunManagerMTWorker::m_pUseMagneticField {true}
private

Definition at line 95 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 119 of file RunManagerMTWorker.h.

Referenced by beginRun(), and initializeG4().

◆ m_simEvent

G4SimEvent RunManagerMTWorker::m_simEvent
private

Definition at line 117 of file RunManagerMTWorker.h.

Referenced by produce(), and simEvent().

◆ m_sVerbose

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

Definition at line 118 of file RunManagerMTWorker.h.

Referenced by initializeG4(), and initializeUserActions().

◆ m_theLHCTlinkToken

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

Definition at line 90 of file RunManagerMTWorker.h.

Referenced by resetGenParticleId().

◆ m_thread_index

const int RunManagerMTWorker::m_thread_index {-1}
private

Definition at line 101 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 116 of file RunManagerMTWorker.h.

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