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 Connect (Phase2SteppingAction *)
 
void endRun ()
 
SimTrackManagergetSimTrackManager ()
 
int getThreadIndex () const
 
void initializeG4 (RunManagerMT *runManagerMaster, const edm::EventSetup &es)
 
TmpSimEventproduce (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 ()
 
TmpSimEventsimEvent ()
 
 ~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_dumpGDML {false}
 
bool m_dumpMF {false}
 
bool m_endOfRun {false}
 
std::unique_ptr< CMSSimEventManagerm_evtManager
 
std::vector< std::string > m_G4Commands
 
std::vector< std::string > m_G4CommandsEndRun
 
Generator m_generator
 
bool m_hasWatchers {false}
 
edm::EDGetTokenT< edm::HepMCProductm_InToken
 
bool m_isPhase2 {false}
 
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_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
 
TmpSimEvent 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 51 of file RunManagerMTWorker.h.

Constructor & Destructor Documentation

◆ RunManagerMTWorker()

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

Definition at line 151 of file RunManagerMTWorker.cc.

152  : m_generator(p.getParameter<edm::ParameterSet>("Generator")),
154  p.getParameter<edm::ParameterSet>("Generator").getParameter<edm::InputTag>("HepMCProductLabel"))),
155  m_theLHCTlinkToken(iC.consumes<edm::LHCTransportLinkContainer>(p.getParameter<edm::InputTag>("theLHCTlinkTag"))),
156  m_nonBeam(p.getParameter<bool>("NonBeamEvent")),
157  m_UseG4EventManager(p.getParameter<bool>("UseG4EventManager")),
158  m_pUseMagneticField(p.getParameter<bool>("UseMagneticField")),
159  m_LHCTransport(p.getParameter<bool>("LHCTransport")),
160  m_thread_index{(get_new_thread_index())},
161  m_pField(p.getParameter<edm::ParameterSet>("MagneticField")),
162  m_pRunAction(p.getParameter<edm::ParameterSet>("RunAction")),
163  m_pEventAction(p.getParameter<edm::ParameterSet>("EventAction")),
164  m_pStackingAction(p.getParameter<edm::ParameterSet>("StackingAction")),
165  m_pTrackingAction(p.getParameter<edm::ParameterSet>("TrackingAction")),
166  m_pSteppingAction(p.getParameter<edm::ParameterSet>("SteppingAction")),
167  m_G4Commands(p.getParameter<std::vector<std::string>>("G4Commands")),
168  m_G4CommandsEndRun(p.getParameter<std::vector<std::string>>("G4CommandsEndRun")),
169  m_p(p) {
170  int id = getThreadIndex();
171  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker for the thread " << id;
172 
173  // Initialize per-thread output
174  G4Threading::G4SetThreadId(id);
175  G4UImanager::GetUIpointer()->SetUpForAThread(id);
176  auto iPset = p.getUntrackedParameter<edm::ParameterSet>("CustomUIsession");
177  const std::string& uitype = iPset.getUntrackedParameter<std::string>("Type");
178  if (uitype == "MessageLogger") {
180  } else if (uitype == "MessageLoggerThreadPrefix") {
181  m_UIsession = new CustomUIsessionThreadPrefix(iPset.getUntrackedParameter<std::string>("ThreadPrefix"), id);
182  } else if (uitype == "FilePerThread") {
183  m_UIsession = new CustomUIsessionToFile(iPset.getUntrackedParameter<std::string>("ThreadFile"), id);
184  } else {
185  throw cms::Exception("Configuration")
186  << "RunManagerMTWorker::initializeG4: Invalid value of CustomUIsession.Type '" << uitype
187  << "', valid are MessageLogger, MessageLoggerThreadPrefix, FilePerThread";
188  }
189  G4UImanager::GetUIpointer()->SetCoutDestination(m_UIsession);
190 
191  // sensitive detectors
192  std::vector<std::string> onlySDs = p.getParameter<std::vector<std::string>>("OnlySDs");
193  m_sdMakers = sim::sensitiveDetectorMakers(p, iC, onlySDs);
194 
195  // TLS and watchers
196  initializeTLS();
197  if (m_hasWatchers) {
198  for (auto& watcher : m_tls->watchers) {
199  watcher->registerConsumes(iC);
200  }
201  }
202  if (m_LHCTransport) {
203  m_LHCToken = iC.consumes<edm::HepMCProduct>(edm::InputTag("LHCTransport"));
204  }
205  if (m_pUseMagneticField) {
207  }
208  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker is constructed for the thread " << id;
209  unsigned int k = 0;
210  for (std::unordered_map<std::string, std::unique_ptr<SensitiveDetectorMakerBase>>::const_iterator itr =
211  m_sdMakers.begin();
212  itr != m_sdMakers.end();
213  ++itr, ++k) {
214  edm::LogVerbatim("SimG4CoreApplication") << "SD[" << k << "] " << itr->first;
215  }
216 }
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
CustomUIsession * m_UIsession
std::vector< std::string > m_G4Commands
edm::EDGetTokenT< edm::HepMCProduct > m_InToken
std::vector< std::string > m_G4CommandsEndRun
edm::EDGetTokenT< edm::HepMCProduct > m_LHCToken
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
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 218 of file RunManagerMTWorker.cc.

References m_tls, and m_UIsession.

218  {
219  m_tls = nullptr;
220  delete m_UIsession;
221 }
CustomUIsession * m_UIsession

Member Function Documentation

◆ abortEvent()

void RunManagerMTWorker::abortEvent ( )

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

614  {
615  if (m_tls->runTerminated) {
616  return;
617  }
618  G4Track* t = m_tls->kernel->GetEventManager()->GetTrackingManager()->GetTrack();
619  t->SetTrackStatus(fStopAndKill);
620 
621  // CMS-specific act
622  //
623  TrackingAction* uta = static_cast<TrackingAction*>(m_tls->kernel->GetEventManager()->GetUserTrackingAction());
625 
626  m_tls->currentEvent->SetEventAborted();
627  m_tls->kernel->GetEventManager()->GetStackManager()->clear();
628  m_tls->kernel->GetEventManager()->GetTrackingManager()->EventAborted();
629 }
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 631 of file RunManagerMTWorker.cc.

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

Referenced by SimRunInterface::abortRun().

631  {
632  if (!softAbort) {
633  abortEvent();
634  }
635  m_tls->currentRun = nullptr;
636  terminateRun();
637 }

◆ beginRun()

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

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

223  {
224  int id = getThreadIndex();
225  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::beginRun for the thread " << id;
226  for (auto& maker : m_sdMakers) {
227  maker.second->beginRun(es);
228  }
229  if (m_pUseMagneticField) {
231  }
232  if (m_hasWatchers) {
233  for (auto& watcher : m_tls->watchers) {
234  watcher->beginRun(es);
235  }
236  }
237  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::beginRun done for the thread " << id;
238 }
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/5]

void RunManagerMTWorker::Connect ( RunAction runAction)

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

467  {
468  runAction->m_beginOfRunSignal.connect(m_tls->registry->beginOfRunSignal_);
469  runAction->m_endOfRunSignal.connect(m_tls->registry->endOfRunSignal_);
470 }
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/5]

void RunManagerMTWorker::Connect ( EventAction eventAction)

Definition at line 472 of file RunManagerMTWorker.cc.

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

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

◆ Connect() [3/5]

void RunManagerMTWorker::Connect ( TrackingAction trackingAction)

Definition at line 477 of file RunManagerMTWorker.cc.

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

477  {
478  trackingAction->m_beginOfTrackSignal.connect(m_tls->registry->beginOfTrackSignal_);
479  trackingAction->m_endOfTrackSignal.connect(m_tls->registry->endOfTrackSignal_);
480 }
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/5]

void RunManagerMTWorker::Connect ( SteppingAction steppingAction)

Definition at line 482 of file RunManagerMTWorker.cc.

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

482  {
483  steppingAction->m_g4StepSignal.connect(m_tls->registry->g4StepSignal_);
484 }
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

◆ Connect() [5/5]

void RunManagerMTWorker::Connect ( Phase2SteppingAction steppingAction)

Definition at line 486 of file RunManagerMTWorker.cc.

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

486  {
487  steppingAction->m_g4StepSignal.connect(m_tls->registry->g4StepSignal_);
488 }
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 677 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().

677  {
678  std::ofstream fout(file.c_str(), std::ios::out);
679  if (fout.fail()) {
680  edm::LogWarning("SimG4CoreApplication")
681  << "MTWorker::DumpMagneticField: error opening file <" << file << "> for magnetic field";
682  } else {
683  // CMS magnetic field volume
684  double rmax = 9000 * mm;
685  double zmax = 24000 * mm;
686 
687  double dr = 1 * cm;
688  double dz = 5 * cm;
689 
690  int nr = (int)(rmax / dr);
691  int nz = 2 * (int)(zmax / dz);
692 
693  double r = 0.0;
694  double z0 = -zmax;
695  double z;
696 
697  double phi = 0.0;
698  double cosf = cos(phi);
699  double sinf = sin(phi);
700 
701  double point[4] = {0.0, 0.0, 0.0, 0.0};
702  double bfield[3] = {0.0, 0.0, 0.0};
703 
704  fout << std::setprecision(6);
705  for (int i = 0; i <= nr; ++i) {
706  z = z0;
707  for (int j = 0; j <= nz; ++j) {
708  point[0] = r * cosf;
709  point[1] = r * sinf;
710  point[2] = z;
711  field->GetFieldValue(point, bfield);
712  fout << "R(mm)= " << r / mm << " phi(deg)= " << phi / degree << " Z(mm)= " << z / mm
713  << " Bz(tesla)= " << bfield[2] / tesla << " Br(tesla)= " << (bfield[0] * cosf + bfield[1] * sinf) / tesla
714  << " Bphi(tesla)= " << (bfield[0] * sinf - bfield[1] * cosf) / tesla << G4endl;
715  z += dz;
716  }
717  r += dr;
718  }
719 
720  fout.close();
721  }
722 }
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 240 of file RunManagerMTWorker.cc.

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

240  {
241  int id = getThreadIndex();
242  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::endRun for the thread " << id;
243  terminateRun();
244 }
Log< level::Info, true > LogVerbatim
int getThreadIndex() const

◆ generateEvent()

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

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

639  {
640  m_tls->currentEvent.reset();
641 
642  // 64 bits event ID in CMSSW converted into Geant4 event ID
643  G4int evtid = (G4int)inpevt.id().event();
644  G4Event* evt = new G4Event(evtid);
645 
647  inpevt.getByToken(m_InToken, HepMCEvt);
648 
649  m_generator.setGenEvent(HepMCEvt->GetEvent());
650 
651  // required to reset the GenParticle Id for particles transported
652  // along the beam pipe to their original value for SimTrack creation
653  resetGenParticleId(inpevt);
654 
655  if (!m_nonBeam) {
656  m_generator.HepMC2G4(HepMCEvt->GetEvent(), evt);
657  if (m_LHCTransport) {
659  inpevt.getByToken(m_LHCToken, LHCMCEvt);
660  m_generator.nonCentralEvent2G4(LHCMCEvt->GetEvent(), evt);
661  }
662  } else {
663  m_generator.nonCentralEvent2G4(HepMCEvt->GetEvent(), evt);
664  }
665 
666  return evt;
667 }
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:528
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 490 of file RunManagerMTWorker.cc.

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

Referenced by SimRunInterface::SimRunInterface().

490  {
491  initializeTLS();
492  return m_tls->trackManager.get();
493 }
std::unique_ptr< SimTrackManager > trackManager

◆ getThreadIndex()

int RunManagerMTWorker::getThreadIndex ( ) const
inline

Definition at line 78 of file RunManagerMTWorker.h.

References m_thread_index.

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

78 { return m_thread_index; }

◆ initializeG4()

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

Definition at line 270 of file RunManagerMTWorker.cc.

References applyOnce, applyOnceGDML, sim::attachSD(), sim::FieldBuilder::build(), RunManagerMT::catalog(), mps_check::command, DumpMagneticField(), Exception, f, g, RunManagerMT::G4Commands(), ecalTB2006H4_GenSimDigiReco_cfg::G4cout, edm::ParameterSet::getParameter(), getThreadIndex(), edm::ParameterSet::getUntrackedParameter(), DDDWorld::GetWorldVolume(), initializeTLS(), initializeUserActions(), RunManagerMT::isPhase2(), RunManagerMTWorker::TLSData::kernel, m_dumpGDML, m_dumpMF, m_evtManager, m_isPhase2, m_p, m_pField, m_pMagField, m_pUseMagneticField, m_sdMakers, m_simEvent, m_sVerbose, m_tls, 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().

270  {
272  return;
273 
274  G4Timer timer;
275  timer.Start();
276 
277  // I guess everything initialized here should be in thread_local storage
278  initializeTLS();
279 
280  int thisID = getThreadIndex();
281  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::initializeG4 in thread " << thisID << " is started";
282 
283  // Initialize worker part of shared resources (geometry, physics)
284  G4WorkerThread::BuildGeometryAndPhysicsVector();
285 
286  // Create worker run manager
287  m_tls->kernel.reset(G4WorkerRunManagerKernel::GetRunManagerKernel());
288  if (nullptr == m_tls->kernel) {
289  m_tls->kernel = std::make_unique<G4WorkerRunManagerKernel>();
290  }
291 
292  // Define G4 exception handler
293  double th = m_p.getParameter<double>("ThresholdForGeometryExceptions") * CLHEP::GeV;
294  bool tr = m_p.getParameter<bool>("TraceExceptions");
295  G4StateManager::GetStateManager()->SetExceptionHandler(new ExceptionHandler(th, tr));
296 
297  // Set the geometry for the worker, share from master
298  auto worldPV = runManagerMaster->world().GetWorldVolume();
299  m_tls->kernel->WorkerDefineWorldVolume(worldPV);
300  G4TransportationManager* tM = G4TransportationManager::GetTransportationManager();
301  tM->SetWorldForTracking(worldPV);
302 
303  // we need the track manager now
304  m_tls->trackManager = std::make_unique<SimTrackManager>(&m_simEvent);
305 
306  // setup the magnetic field
307  if (m_pUseMagneticField) {
308  const GlobalPoint g(0.f, 0.f, 0.f);
309 
310  sim::FieldBuilder fieldBuilder(m_pMagField, m_pField);
311 
312  CMSFieldManager* fieldManager = new CMSFieldManager();
313  tM->SetFieldManager(fieldManager);
314  fieldBuilder.build(fieldManager, tM->GetPropagatorInField());
315 
316  std::string fieldFile = m_p.getUntrackedParameter<std::string>("FileNameField", "");
317  if (!fieldFile.empty()) {
318  std::call_once(applyOnce, [this]() { m_dumpMF = true; });
319  if (m_dumpMF) {
320  edm::LogVerbatim("SimG4CoreApplication")
321  << "RunManagerMTWorker::InitializeG4: Dump magnetic field to file " << fieldFile;
322  DumpMagneticField(tM->GetFieldManager()->GetDetectorField(), fieldFile);
323  }
324  }
325  }
326 
327  // attach sensitive detector
328  auto sensDets = sim::attachSD(
329  m_sdMakers, es, runManagerMaster->catalog(), m_p, m_tls->trackManager.get(), *(m_tls->registry.get()));
330 
331  m_tls->sensTkDets = sensDets.first;
332  m_tls->sensCaloDets = sensDets.second;
333 
334  edm::LogVerbatim("SimG4CoreApplication")
335  << "RunManagerMTWorker::InitializeG4: Sensitive Detectors are built in thread " << thisID << " found "
336  << m_tls->sensTkDets.size() << " Tk type SD, and " << m_tls->sensCaloDets.size() << " Calo type SD";
337 
338  // geometry dump
339  G4String writeFile = (G4String)m_p.getUntrackedParameter<std::string>("FileNameGDML");
340  if (!writeFile.empty()) {
341  std::call_once(applyOnceGDML, [this]() { m_dumpGDML = true; });
342  edm::LogVerbatim("SimG4CoreApplication") << "DumpGDML:" << m_dumpGDML;
343  if (m_dumpGDML) {
344  G4int thID = G4Threading::G4GetThreadId();
345  edm::LogVerbatim("SimG4CoreApplication") << "ThreadID=" << thID;
346  G4Threading::G4SetThreadId(-1);
347  G4GDMLParser gdml;
348  gdml.SetRegionExport(true);
349  gdml.SetEnergyCutsExport(true);
350  gdml.SetSDExport(true);
351  gdml.Write(writeFile, worldPV, true);
352  G4Threading::G4SetThreadId(thID);
353  }
354  }
355 
356  // Enable couple transportation
357  bool scorer = m_p.getParameter<bool>("UseCommandBaseScorer");
358  if (scorer) {
359  G4ScoringManager* scManager = G4ScoringManager::GetScoringManager();
360  scManager->SetVerboseLevel(1);
361  }
362 
363  // Set the physics list for the worker, share from master
364  PhysicsList* physicsList = runManagerMaster->physicsListForWorker();
365  m_isPhase2 = runManagerMaster->isPhase2();
366 
367  edm::LogVerbatim("SimG4CoreApplication")
368  << "RunManagerMTWorker::InitializeG4: start initialisation of PhysicsList for the thread " << thisID;
369 
370  // Geant4 UI commands in PreInit state
371  if (!runManagerMaster->G4Commands().empty()) {
372  G4cout << "RunManagerMTWorker::InitializeG4: Requested UI commands: " << G4endl;
373  for (const std::string& command : runManagerMaster->G4Commands()) {
374  G4cout << " " << command << G4endl;
375  G4UImanager::GetUIpointer()->ApplyCommand(command);
376  }
377  }
378  G4StateManager::GetStateManager()->SetNewState(G4State_Init);
379 
380  physicsList->InitializeWorker();
381  m_tls->kernel->SetPhysics(physicsList);
382  m_tls->kernel->InitializePhysics();
383 
384  if (!m_tls->kernel->RunInitialization()) {
385  throw cms::Exception("Configuration")
386  << "RunManagerMTWorker::InitializeG4: Geant4 kernel initialization failed in thread " << thisID;
387  }
388 
389  //tell all interesting parties that we are beginning the job
390  BeginOfJob aBeginOfJob(&es);
391  m_tls->registry->beginOfJobSignal_(&aBeginOfJob);
392 
393  G4int sv = m_p.getUntrackedParameter<int>("SteppingVerbosity");
394 
395  if (sv > 0) {
396  G4double elim = m_p.getUntrackedParameter<double>("StepVerboseThreshold", 0.1) * CLHEP::GeV;
397  std::vector<int> ve = m_p.getUntrackedParameter<std::vector<int>>("VerboseEvents");
398  std::vector<int> vn = m_p.getUntrackedParameter<std::vector<int>>("VertexNumber");
399  std::vector<int> vt = m_p.getUntrackedParameter<std::vector<int>>("VerboseTracks");
400  m_sVerbose = std::make_unique<CMSSteppingVerbose>(sv, elim, ve, vn, vt);
401  }
402  if (!m_UseG4EventManager)
403  m_evtManager = std::make_unique<CMSSimEventManager>(m_p);
405 
406  G4StateManager::GetStateManager()->SetNewState(G4State_Idle);
407 
408  timer.Stop();
409  edm::LogVerbatim("SimG4CoreApplication")
410  << "RunManagerMTWorker::initializeG4 done for the thread " << thisID << " " << timer;
411  m_tls->threadInitialized = true;
412 }
Log< level::Info, true > LogVerbatim
static std::once_flag applyOnceGDML
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
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:71
bool isPhase2() const
Definition: RunManagerMT.h:79
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:69
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:73
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:77

◆ initializeRun()

void RunManagerMTWorker::initializeRun ( )
private

Definition at line 507 of file RunManagerMTWorker.cc.

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

Referenced by produce().

507  {
508  m_tls->currentRun = new G4Run();
509  G4StateManager::GetStateManager()->SetNewState(G4State_GeomClosed);
510  if (nullptr != m_tls->userRunAction) {
511  m_tls->userRunAction->BeginOfRunAction(m_tls->currentRun);
512  }
513  int id = getThreadIndex();
514  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::initializeRun done for thread " << id;
515 }
Log< level::Info, true > LogVerbatim
std::unique_ptr< RunAction > userRunAction
int getThreadIndex() const

◆ initializeTLS()

void RunManagerMTWorker::initializeTLS ( )
private

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

246  {
247  if (nullptr != m_tls) {
248  return;
249  }
250 
251  m_tls = new TLSData();
252  m_tls->registry = std::make_unique<SimActivityRegistry>();
253 
254  edm::Service<SimActivityRegistry> otherRegistry;
255  //Look for an outside SimActivityRegistry
256  // this is used by the visualization code
257  int thisID = getThreadIndex();
258  if (otherRegistry) {
259  m_tls->registry->connect(*otherRegistry);
260  if (thisID > 0) {
261  throw cms::Exception("Configuration")
262  << "RunManagerMTWorker::initializeTLS : "
263  << "SimActivityRegistry service (i.e. visualization) is not supported for more than 1 thread. "
264  << " \n If this use case is needed, RunManagerMTWorker has to be updated.";
265  }
266  }
268 }
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 414 of file RunManagerMTWorker.cc.

References Connect(), g4SimHits_cfi::EventAction, edm::ParameterSet::getParameter(), RunManagerMTWorker::TLSData::kernel, m_evtManager, m_hasWatchers, m_isPhase2, 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().

414  {
415  m_tls->runInterface = std::make_unique<SimRunInterface>(this, false);
416  m_tls->userRunAction = std::make_unique<RunAction>(m_pRunAction, m_tls->runInterface.get(), false);
417  m_tls->userRunAction->SetMaster(false);
418  Connect(m_tls->userRunAction.get());
419 
420  G4int ver = m_p.getParameter<int>("EventVerbose");
421  G4EventManager* eventManager = m_tls->kernel->GetEventManager();
422  eventManager->SetVerboseLevel(ver);
423 
424  auto userEventAction =
426  Connect(userEventAction);
427  if (m_UseG4EventManager) {
428  eventManager->SetUserAction(userEventAction);
429  } else {
430  m_evtManager->SetUserAction(userEventAction);
431  }
432 
433  auto userTrackingAction = new TrackingAction(m_tls->trackManager.get(), m_sVerbose.get(), m_pTrackingAction);
434  Connect(userTrackingAction);
435  if (m_UseG4EventManager) {
436  eventManager->SetUserAction(userTrackingAction);
437  } else {
438  m_evtManager->SetUserAction(userTrackingAction);
439  }
440 
441  // different stepping actions for Run2,3 and Phase2
442  G4UserSteppingAction* userSteppingAction;
443  bool dd4hep = m_p.getParameter<bool>("g4GeometryDD4hepSource");
444  if (m_isPhase2) {
446  Connect(ptr);
447  userSteppingAction = (G4UserSteppingAction*)ptr;
448  } else {
450  Connect(ptr);
451  userSteppingAction = (G4UserSteppingAction*)ptr;
452  }
453  if (m_UseG4EventManager) {
454  eventManager->SetUserAction(userSteppingAction);
455  } else {
456  m_evtManager->SetUserAction(userSteppingAction);
457  }
458 
459  auto userStackingAction = new StackingAction(userTrackingAction, m_pStackingAction, m_sVerbose.get());
460  if (m_UseG4EventManager) {
461  eventManager->SetUserAction(userStackingAction);
462  } else {
463  m_evtManager->SetUserAction(userStackingAction);
464  }
465 }
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
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()

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

Definition at line 547 of file RunManagerMTWorker.cc.

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

549  {
550  // The initialization and begin/end run is a bit convoluted due to
551  // - Geant4 deals per-thread
552  // - OscarMTProducer deals per-stream
553  // and framework/TBB is free to schedule work in streams to the
554  // threads as it likes.
555  //
556  // We have to do the per-thread initialization, and per-thread
557  // per-run initialization here by ourselves.
558 
559  assert(m_tls != nullptr and m_tls->threadInitialized);
560  // Initialize run
561  if (inpevt.id().run() != m_tls->currentRunNumber) {
562  edm::LogVerbatim("SimG4CoreApplication")
563  << "RunManagerMTWorker::produce: RunID= " << inpevt.id().run() << " TLS RunID= " << m_tls->currentRunNumber;
564  if (m_tls->currentRunNumber != 0 && !m_tls->runTerminated) {
565  // If previous run in this thread was not terminated via endRun() call,
566  // terminate it now
567  terminateRun();
568  }
569  initializeRun();
570  m_tls->currentRunNumber = inpevt.id().run();
571  }
572 
573  m_tls->currentEvent.reset(generateEvent(inpevt));
574 
575  m_simEvent.clear();
578  if (m_generator.genVertex() != nullptr) {
579  auto genVertex = m_generator.genVertex();
580  m_simEvent.collisionPoint(math::XYZTLorentzVectorD(genVertex->x() / CLHEP::cm,
581  genVertex->y() / CLHEP::cm,
582  genVertex->z() / CLHEP::cm,
583  genVertex->t() / CLHEP::second));
584  }
585  if (m_tls->currentEvent->GetNumberOfPrimaryVertex() == 0) {
586  throw cms::Exception("EventCorruption")
587  << "RunManagerMTWorker::produce: event " << inpevt.id().event() << " with no G4PrimaryVertices"
588  << " StreamID=" << inpevt.streamID() << " threadIndex=" << getThreadIndex();
589 
590  } else {
591  edm::LogVerbatim("SimG4CoreApplication")
592  << "RunManagerMTWorker::produce: start EventID=" << inpevt.id().event() << " StreamID=" << inpevt.streamID()
593  << " threadIndex=" << getThreadIndex() << " weight=" << m_simEvent.weight() << "; "
594  << m_tls->currentEvent->GetNumberOfPrimaryVertex() << " vertices for Geant4; generator produced "
595  << m_simEvent.nGenParts() << " particles.";
596 
597  if (m_UseG4EventManager) {
598  m_tls->kernel->GetEventManager()->ProcessOneEvent(m_tls->currentEvent.get());
599  } else {
600  m_evtManager->ProcessOneEvent(m_tls->currentEvent.get());
601  }
602  }
603 
604  //remove memory only needed during event processing
605  m_tls->currentEvent.reset();
606 
607  for (auto& sd : m_tls->sensCaloDets) {
608  sd->reset();
609  }
610  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::produce: ended Event " << inpevt.id().event();
611  return &m_simEvent;
612 }
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
void hepEvent(const HepMC::GenEvent *r)
Definition: TmpSimEvent.h:23
void clear()
Definition: TmpSimEvent.cc:18
void weight(float w)
Definition: TmpSimEvent.h:25
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)
std::vector< SensitiveCaloDetector * > sensCaloDets
void collisionPoint(const math::XYZTLorentzVectorD &v)
Definition: TmpSimEvent.h:27
edm::EventID id() const
Definition: EventBase.h:63
StreamID streamID() const
Definition: Event.h:98
RunNumber_t run() const
Definition: EventID.h:38
unsigned int nGenParts() const
Definition: TmpSimEvent.h:22
G4Event * generateEvent(const edm::Event &inpevt)
virtual const double eventWeight() const
Definition: Generator.h:32
int getThreadIndex() const
EventNumber_t event() const
Definition: EventID.h:40

◆ producers()

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

Definition at line 502 of file RunManagerMTWorker.cc.

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

502  {
503  initializeTLS();
504  return m_tls->producers;
505 }
std::vector< std::shared_ptr< SimProducer > > producers

◆ resetGenParticleId()

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

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

669  {
671  inpevt.getByToken(m_theLHCTlinkToken, theLHCTlink);
672  if (theLHCTlink.isValid()) {
673  m_tls->trackManager->setLHCTransportLink(theLHCTlink.product());
674  }
675 }
T const * product() const
Definition: Handle.h:70
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:528
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 498 of file RunManagerMTWorker.cc.

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

498  {
499  initializeTLS();
500  return m_tls->sensCaloDets;
501 }
std::vector< SensitiveCaloDetector * > sensCaloDets

◆ sensTkDetectors()

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

Definition at line 494 of file RunManagerMTWorker.cc.

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

494  {
495  initializeTLS();
496  return m_tls->sensTkDets;
497 }
std::vector< SensitiveTkDetector * > sensTkDets

◆ simEvent()

TmpSimEvent* RunManagerMTWorker::simEvent ( )
inline

Definition at line 77 of file RunManagerMTWorker.h.

References m_simEvent.

Referenced by SimRunInterface::simEvent().

77 { return &m_simEvent; }

◆ terminateRun()

void RunManagerMTWorker::terminateRun ( )
private

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

517  {
518  int id = getThreadIndex();
519  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::terminateRun for thread " << id;
520  if (nullptr == m_tls || m_tls->runTerminated) {
521  return;
522  }
523 
524  // Geant4 UI commands after the run
525  if (!m_G4CommandsEndRun.empty()) {
526  std::call_once(applyOnceEnd, [this]() { m_endOfRun = true; });
527  if (m_endOfRun) {
528  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker: Requested end of run UI commands: ";
529  for (const std::string& command : m_G4CommandsEndRun) {
530  edm::LogVerbatim("SimG4CoreApplication") << " " << command;
531  G4UImanager::GetUIpointer()->ApplyCommand(command);
532  }
533  }
534  }
535  if (m_tls->userRunAction) {
536  m_tls->userRunAction->EndOfRunAction(m_tls->currentRun);
537  m_tls->userRunAction.reset();
538  }
539  m_tls->currentEvent.reset();
540  if (m_tls->kernel) {
541  m_tls->kernel->RunTermination();
542  }
543  m_tls->runTerminated = true;
544  edm::LogVerbatim("SimG4CoreApplication") << "RunManagerMTWorker::terminateRun done for thread " << id;
545 }
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_dumpGDML

bool RunManagerMTWorker::m_dumpGDML {false}
private

Definition at line 104 of file RunManagerMTWorker.h.

Referenced by initializeG4().

◆ m_dumpMF

bool RunManagerMTWorker::m_dumpMF {false}
private

Definition at line 103 of file RunManagerMTWorker.h.

Referenced by initializeG4().

◆ m_endOfRun

bool RunManagerMTWorker::m_endOfRun {false}
private

Definition at line 105 of file RunManagerMTWorker.h.

Referenced by terminateRun().

◆ m_evtManager

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

Definition at line 125 of file RunManagerMTWorker.h.

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

◆ m_G4Commands

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

Definition at line 116 of file RunManagerMTWorker.h.

◆ m_G4CommandsEndRun

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

Definition at line 117 of file RunManagerMTWorker.h.

Referenced by terminateRun().

◆ m_generator

Generator RunManagerMTWorker::m_generator
private

Definition at line 91 of file RunManagerMTWorker.h.

Referenced by generateEvent(), and produce().

◆ m_hasWatchers

bool RunManagerMTWorker::m_hasWatchers {false}
private

Definition at line 101 of file RunManagerMTWorker.h.

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

◆ m_InToken

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

Definition at line 92 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_isPhase2

bool RunManagerMTWorker::m_isPhase2 {false}
private

Definition at line 106 of file RunManagerMTWorker.h.

Referenced by initializeG4(), and initializeUserActions().

◆ m_LHCToken

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

Definition at line 93 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_LHCTransport

bool RunManagerMTWorker::m_LHCTransport {false}
private

Definition at line 102 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_MagField

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

Definition at line 95 of file RunManagerMTWorker.h.

Referenced by beginRun().

◆ m_nonBeam

bool RunManagerMTWorker::m_nonBeam {false}
private

Definition at line 98 of file RunManagerMTWorker.h.

Referenced by generateEvent().

◆ m_p

edm::ParameterSet RunManagerMTWorker::m_p
private

Definition at line 118 of file RunManagerMTWorker.h.

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

◆ m_pEventAction

edm::ParameterSet RunManagerMTWorker::m_pEventAction
private

Definition at line 112 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pField

edm::ParameterSet RunManagerMTWorker::m_pField
private

Definition at line 110 of file RunManagerMTWorker.h.

Referenced by initializeG4().

◆ m_pMagField

const MagneticField* RunManagerMTWorker::m_pMagField {nullptr}
private

Definition at line 96 of file RunManagerMTWorker.h.

Referenced by beginRun(), and initializeG4().

◆ m_pRunAction

edm::ParameterSet RunManagerMTWorker::m_pRunAction
private

Definition at line 111 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pStackingAction

edm::ParameterSet RunManagerMTWorker::m_pStackingAction
private

Definition at line 113 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pSteppingAction

edm::ParameterSet RunManagerMTWorker::m_pSteppingAction
private

Definition at line 115 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pTrackingAction

edm::ParameterSet RunManagerMTWorker::m_pTrackingAction
private

Definition at line 114 of file RunManagerMTWorker.h.

Referenced by initializeUserActions().

◆ m_pUseMagneticField

bool RunManagerMTWorker::m_pUseMagneticField {true}
private

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

Referenced by beginRun(), and initializeG4().

◆ m_simEvent

TmpSimEvent RunManagerMTWorker::m_simEvent
private

Definition at line 124 of file RunManagerMTWorker.h.

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

◆ m_sVerbose

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

Definition at line 126 of file RunManagerMTWorker.h.

Referenced by initializeG4(), and initializeUserActions().

◆ m_theLHCTlinkToken

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

Definition at line 94 of file RunManagerMTWorker.h.

Referenced by resetGenParticleId().

◆ m_thread_index

const int RunManagerMTWorker::m_thread_index {-1}
private

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

Referenced by ~RunManagerMTWorker().

◆ m_UseG4EventManager

bool RunManagerMTWorker::m_UseG4EventManager {true}
private

Definition at line 99 of file RunManagerMTWorker.h.

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