ATLAS Offline Software
Public Member Functions | Protected Attributes | Private Member Functions | List of all members
iGeant4::G4TransportTool Class Reference

#include <TransportTool.h>

Inheritance diagram for iGeant4::G4TransportTool:
Collaboration diagram for iGeant4::G4TransportTool:

Public Member Functions

 G4TransportTool (const std::string &, const std::string &, const IInterface *)
 Constructor. More...
 
virtual ~G4TransportTool ()=default
 Destructor. More...
 
virtual StatusCode initialize () override final
 AlgTool initialize method. More...
 
void initializeOnce ATLAS_NOT_THREAD_SAFE ()
 G4 initialization called only by the first tool instance. More...
 
virtual StatusCode finalize () override final
 AlgTool finalize method. More...
 
void finalizeOnce ()
 G4 finalization called only by the first tool instance. More...
 
virtual StatusCode simulate (const EventContext &ctx, ISF::ISFParticle &isp, ISF::ISFParticleContainer &secondaries, McEventCollection *mcEventCollection, std::shared_ptr< HitCollectionMap > hitCollections) override
 Simulation call for individual particles. More...
 
virtual StatusCode simulateVector (const EventContext &ctx, const ISF::ISFParticleVector &particles, ISF::ISFParticleContainer &secondaries, McEventCollection *mcEventCollection, std::shared_ptr< HitCollectionMap > hitCollections, McEventCollection *shadowTruth=nullptr) override
 Simulation call for vectors of particles. More...
 
virtual StatusCode setupEvent (const EventContext &, HitCollectionMap &) override
 Create data containers for an event. More...
 
virtual StatusCode releaseEvent (const EventContext &, HitCollectionMap &) override
 Finalise data containers for an event. More...
 
virtual ISF::SimulationFlavor simFlavor () const override
 
virtual StatusCode simulate (const EventContext &, ISFParticle &, ISFParticleContainer &, McEventCollection *)
 Simulation call for individual particles. More...
 
virtual StatusCode simulateVector (const EventContext &, const ISFParticleVector &, ISFParticleContainer &, McEventCollection *, McEventCollection *)
 Simulation call for vectors of particles. More...
 
virtual StatusCode setupEvent (const EventContext &)
 Create data containers for an event. More...
 
virtual StatusCode setupEventST (HitCollectionMap &hitCollections)
 Create data containers for an event (called by ISimulationSvc) More...
 
virtual StatusCode setupEventST ()
 Create data containers for an event (called by ISimulationSvc) More...
 
virtual StatusCode releaseEvent (const EventContext &)
 Finalise data containers for an event. More...
 
virtual StatusCode releaseEventST (HitCollectionMap &hitCollections)
 Finalise data containers for an event (called by ISimulationSvc) More...
 
virtual StatusCode releaseEventST ()
 Finalise data containers for an event (called by ISimulationSvc) More...
 
 BaseSimulatorTool (const std::string &type, const std::string &name, const IInterface *parent)
 Standard BaseSimulatorTool constructor. More...
 
virtual StatusCode sysInitialize () override
 Gaudi sysInitialize() methods. More...
 
const ChronoEntity * chronoStart (const IChronoSvc::ChronoTag &tag)
 wrapper call to start chrono with given tag More...
 
const ChronoEntity * chronoStop (const IChronoSvc::ChronoTag &tag)
 wrapper call to stop chrono with given tag More...
 

Protected Attributes

ServiceHandle< IChronoStatSvc > m_chrono {this, "ChronoStatService", "ChronoStatSvc"}
 The timing service for general usage. More...
 

Private Member Functions

void commandLog (int returnCode, const std::string &commandString) const
 This command prints a message about a G4Command depending on its returnCode. More...
 
HepMC::GenEvent * genEvent (McEventCollection *mcEventCollection) const
 

Configurable Properties

using passbackAction_t = G4UA::iGeant4::TrackProcessorUserActionBase
 
using passbackActionMap_t = tbb::concurrent_unordered_map< std::thread::id, std::vector< passbackAction_t * >, std::hash< std::thread::id > >
 
Gaudi::Property< bool > m_doTiming {this, "PrintTimingInfo", true, ""}
 
float m_accumulatedEventTime {0.}
 
float m_accumulatedEventTimeSq {0.}
 
unsigned int m_nrOfEntries {0}
 
G4Timer * m_runTimer {nullptr}
 
G4Timer * m_eventTimer {nullptr}
 
passbackActionMap_t m_secondaryActions ATLAS_THREAD_SAFE
 
Gaudi::Property< std::string > m_mcEventCollectionName
 
Gaudi::Property< std::string > m_libList {this, "Dll", "", ""}
 
Gaudi::Property< std::string > m_physList {this, "Physics", "", ""}
 
Gaudi::Property< std::string > m_fieldMap {this, "FieldMap", "", ""}
 
Gaudi::Property< bool > m_releaseGeoModel {this, "ReleaseGeoModel", true, ""}
 
Gaudi::Property< bool > m_recordFlux {this, "RecordFlux", false, ""}
 
Gaudi::Property< bool > m_quietMode {this, "QuietMode", false, ""}
 
Gaudi::Property< std::vector< std::string > > m_g4commands
 Commands to send to the G4 UI. More...
 
Gaudi::Property< bool > m_useMT
 Activate multi-threading configuration. More...
 
Gaudi::Property< bool > m_activateParallelGeometries
 
ServiceHandle< IAthRNGSvcm_rndmGenSvc
 
Gaudi::Property< std::string > m_randomStreamName
 Random Stream Name. More...
 
ServiceHandle< IUserLimitsSvcm_userLimitsSvc
 
ServiceHandle< G4UA::IUserActionSvcm_userActionSvc
 user action service More...
 
PublicToolHandle< IDetectorConstructionToolm_detConstruction {this, "DetectorConstruction", "", "Tool handle of the DetectorConstruction"}
 
ServiceHandle< ISF::IInputConverterm_inputConverter
 Service to convert ISF_Particles into a G4Event. More...
 
ServiceHandle< IPhysicsListSvcm_physListSvc
 Physics List Service. More...
 
PublicToolHandle< ISensitiveDetectorMasterToolm_senDetTool
 Sensitive Detector Master Tool. More...
 
PublicToolHandle< IFastSimulationMasterToolm_fastSimTool
 Fast Simulation Master Tool. More...
 
PublicToolHandleArray< IPhysicsInitializationToolm_physicsInitializationTools {this, "PhysicsInitializationTools", {}, "Physics initialization happening after Geant4 initialization"}
 

Detailed Description

Geant4 AlgTool to create a ISFParticle at a volume entry/exit

Author
Robert Harrington

Definition at line 67 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

Member Typedef Documentation

◆ passbackAction_t

◆ passbackActionMap_t

using iGeant4::G4TransportTool::passbackActionMap_t = tbb::concurrent_unordered_map<std::thread::id, std::vector<passbackAction_t*>, std::hash<std::thread::id> >
private

Constructor & Destructor Documentation

◆ G4TransportTool()

iGeant4::G4TransportTool::G4TransportTool ( const std::string &  type,
const std::string &  name,
const IInterface *  parent 
)

Constructor.

Definition at line 59 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx.

63 {
64  //declareProperty("KillAllNeutrinos", m_KillAllNeutrinos=true);
65  //declareProperty("KillLowEPhotons", m_KillLowEPhotons=-1.);
66 }

◆ ~G4TransportTool()

virtual iGeant4::G4TransportTool::~G4TransportTool ( )
virtualdefault

Destructor.

Member Function Documentation

◆ ATLAS_NOT_THREAD_SAFE()

void initializeOnce iGeant4::G4TransportTool::ATLAS_NOT_THREAD_SAFE ( )

G4 initialization called only by the first tool instance.

This is done (for now) because we get multiple tool instances in hive.

◆ BaseSimulatorTool()

ISF::BaseSimulatorTool::BaseSimulatorTool
inlineinherited

Standard BaseSimulatorTool constructor.

Definition at line 40 of file BaseSimulatorTool.h.

41  : base_class(type, name, parent)
42  {
43  }

◆ chronoStart()

const ChronoEntity* ISF::BaseSimulatorTool::chronoStart ( const IChronoSvc::ChronoTag &  tag)
inlineinherited

wrapper call to start chrono with given tag

Definition at line 98 of file BaseSimulatorTool.h.

98  {
99  if (m_chrono) return m_chrono->chronoStart( tag);
100  return nullptr;
101  }

◆ chronoStop()

const ChronoEntity* ISF::BaseSimulatorTool::chronoStop ( const IChronoSvc::ChronoTag &  tag)
inlineinherited

wrapper call to stop chrono with given tag

Definition at line 104 of file BaseSimulatorTool.h.

104  {
105  if (m_chrono) return m_chrono->chronoStop( tag);
106  return nullptr;
107  }

◆ commandLog()

void iGeant4::G4TransportTool::commandLog ( int  returnCode,
const std::string &  commandString 
) const
private

This command prints a message about a G4Command depending on its returnCode.

Definition at line 475 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx.

476 {
477  switch(returnCode) {
478  case 0: { ATH_MSG_DEBUG("G4 Command: " << commandString << " - Command Succeeded"); } break;
479  case 100: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Command Not Found!"); } break;
480  case 200: {
481  auto* stateManager = G4StateManager::GetStateManager();
482  ATH_MSG_DEBUG("G4 Command: " << commandString << " - Illegal Application State (" <<
483  stateManager->GetStateString(stateManager->GetCurrentState()) << ")!");
484  } break;
485  case 300: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Parameter Out of Range!"); } break;
486  case 400: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Parameter Unreadable!"); } break;
487  case 500: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Parameter Out of Candidates!"); } break;
488  case 600: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Alias Not Found!"); } break;
489  default: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Unknown Status!"); } break;
490  }
491 
492 }

◆ finalize()

StatusCode iGeant4::G4TransportTool::finalize ( )
finaloverridevirtual

AlgTool finalize method.

Definition at line 222 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx.

223 {
224  ATH_MSG_VERBOSE("++++++++++++ ISF G4 G4TransportTool finalized ++++++++++++");
225 
226  // One time finalization
227  try {
228  std::call_once(finalizeOnceFlag, &iGeant4::G4TransportTool::finalizeOnce, this);
229  }
230  catch(const std::exception& e) {
231  ATH_MSG_ERROR("Failure in iGeant4::G4TransportTool::finalizeOnce: " << e.what());
232  return StatusCode::FAILURE;
233  }
234 
235  if (m_doTiming) {
236  m_runTimer->Stop();
237  const float numEntriesFloat(m_nrOfEntries);
238  const float runTime=m_runTimer->GetUserElapsed()+m_runTimer->GetSystemElapsed();
239  const float avgTimePerEvent=(m_nrOfEntries>1) ? m_accumulatedEventTime/(numEntriesFloat-1.f) : runTime;
240  const float avgTimeSqPerEvent=(m_nrOfEntries>1) ? m_accumulatedEventTimeSq/(numEntriesFloat-1.f) : runTime*runTime;
241  const float sigma=(m_nrOfEntries>2) ? std::sqrt(std::abs(avgTimeSqPerEvent - avgTimePerEvent*avgTimePerEvent)/(numEntriesFloat-2.f)) : 0;
242  ATH_MSG_INFO("*****************************************"<<endmsg<<
243  "** **"<<endmsg<<
244  " End of run - time spent is "<<std::setprecision(4) <<
245  runTime<<endmsg<<
246  " Average time per event was "<<std::setprecision(4) <<
247  avgTimePerEvent <<" +- "<< std::setprecision(4) << sigma<<endmsg<<
248  "** **"<<endmsg<<
249  "*****************************************");
250  }
251 
252  return StatusCode::SUCCESS;
253 }

◆ finalizeOnce()

void iGeant4::G4TransportTool::finalizeOnce ( )

G4 finalization called only by the first tool instance.

This is done (for now) because we get multiple tool instances in hive.

Definition at line 256 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx.

257 {
258  ATH_MSG_DEBUG("\t terminating the current G4 run");
259  auto runMgr = G4RunManager::GetRunManager();
260  runMgr->RunTermination();
261  return;
262 }

◆ genEvent()

HepMC::GenEvent * iGeant4::G4TransportTool::genEvent ( McEventCollection mcEventCollection) const
private

Definition at line 453 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx.

454 {
455 
456  if(!mcEventCollection) {
457  // retrieve McEventCollection from storegate
458  if (evtStore()->contains<McEventCollection>(m_mcEventCollectionName)) {
459  if (evtStore()->retrieve( mcEventCollection, m_mcEventCollectionName).isFailure()) {
460  ATH_MSG_ERROR( "Unable to retrieve McEventCollection with name=" << m_mcEventCollectionName
461  << ".");
462  return nullptr;
463  }
464  else {
465  ATH_MSG_WARNING( "Fallback. Sucessfully retrieved McEventCollection with name=" << m_mcEventCollectionName);
466  }
467  }
468  else { return nullptr; }
469  }
470  // collect last GenEvent from McEventCollection
471  return mcEventCollection->back();
472 }

◆ initialize()

StatusCode iGeant4::G4TransportTool::initialize ( )
finaloverridevirtual

AlgTool initialize method.

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 69 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx.

70 {
71  ATH_MSG_VERBOSE("initialize");
72 
74 
75  // create G4Timers if enabled
76  if (m_doTiming) {
77  m_runTimer = new G4Timer();
78  m_eventTimer = new G4Timer();
79  m_runTimer->Start();
80  }
81 
82  // Create the scoring manager if requested
83  if (m_recordFlux) G4ScoringManager::GetScoringManager();
84 
85  // One-time initialization
86  try {
87  std::call_once(initializeOnceFlag, &iGeant4::G4TransportTool::initializeOnce, this);
88  }
89  catch(const std::exception& e) {
90  ATH_MSG_ERROR("Failure in iGeant4::G4TransportTool::initializeOnce: " << e.what());
91  return StatusCode::FAILURE;
92  }
93 
94  ATH_CHECK( m_rndmGenSvc.retrieve() );
95  ATH_CHECK( m_userActionSvc.retrieve() );
96 
97  ATH_CHECK(m_senDetTool.retrieve());
98  ATH_CHECK(m_fastSimTool.retrieve());
99 
100  ATH_CHECK(m_inputConverter.retrieve());
101 
102  return StatusCode::SUCCESS;
103 }

◆ releaseEvent() [1/2]

virtual StatusCode ISF::BaseSimulatorG4Tool::releaseEvent ( const EventContext &  )
inlinevirtualinherited

Finalise data containers for an event.

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 87 of file BaseSimulatorG4Tool.h.

87  {
88  return StatusCode::FAILURE;
89  };

◆ releaseEvent() [2/2]

StatusCode iGeant4::G4TransportTool::releaseEvent ( const EventContext &  ,
HitCollectionMap  
)
overridevirtual

Finalise data containers for an event.

Todo:
: strip hits of the tracks ...

Implements ISF::BaseSimulatorG4Tool.

Definition at line 407 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx.

408  {
409  ATH_MSG_DEBUG ( "release Event" );
412  /* todo: ELLI: the following is copied in from the PyG4AtlasAlg:
413  -> this somehow needs to be moved into C++
414  and put into releaseEvent() ( or setupEvent() ?)
415 
416  from ISF_Geant4Example import AtlasG4Eng
417  from ISF_Geant4Example.ISF_SimFlags import simFlags
418  if self.doFirstEventG4SeedsCheck :
419  if simFlags.SeedsG4.statusOn:
420  rnd = AtlasG4Eng.G4Eng.menu_G4RandomNrMenu()
421  rnd.set_Seed(simFlags.SeedsG4.get_Value())
422  self.doFirstEventG4SeedsCheck = False
423  if self.RndG4Menu.SaveStatus:
424  self.RndG4Menu.Menu.saveStatus('G4Seeds.txt')
425  */
426 
427  // print per-event timing info if enabled
428  if (m_doTiming) {
429  m_eventTimer->Stop();
430 
431  const double eventTime=m_eventTimer->GetUserElapsed()+m_eventTimer->GetSystemElapsed();
432  if (m_nrOfEntries>1) {
433  m_accumulatedEventTime +=eventTime;
434  m_accumulatedEventTimeSq+=eventTime*eventTime;
435  }
436 
437  const float numEntriesFloat(m_nrOfEntries);
438  const float avgTimePerEvent=(m_nrOfEntries>1) ? m_accumulatedEventTime/(numEntriesFloat-1.f) : eventTime;
439  const float avgTimeSqPerEvent=(m_nrOfEntries>1) ? m_accumulatedEventTimeSq/(numEntriesFloat-1.f) : eventTime*eventTime;
440  const float sigma=(m_nrOfEntries>2) ? std::sqrt(std::abs(avgTimeSqPerEvent - avgTimePerEvent*avgTimePerEvent)/(numEntriesFloat-2.f)) : 0;
441  ATH_MSG_INFO("\t Run:Event "<<ctx.eventID().run_number()<<":"<<ctx.eventID().event_number() << "\t ("<<m_nrOfEntries<<"th event for this worker) took " << std::setprecision(4) <<
442  eventTime << " s. New average " << std::setprecision(4) <<
443  avgTimePerEvent<<" +- "<<std::setprecision(4) << sigma);
444  }
445 
446  ATH_CHECK(m_senDetTool->EndOfAthenaEvent(hitCollections));
447  ATH_CHECK(m_fastSimTool->EndOfAthenaEvent());
448 
449  return StatusCode::SUCCESS;
450 }

◆ releaseEventST() [1/2]

virtual StatusCode ISF::BaseSimulatorG4Tool::releaseEventST ( )
inlinevirtualinherited

Finalise data containers for an event (called by ISimulationSvc)

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 92 of file BaseSimulatorG4Tool.h.

92 { return StatusCode::FAILURE; };

◆ releaseEventST() [2/2]

virtual StatusCode ISF::BaseSimulatorG4Tool::releaseEventST ( HitCollectionMap hitCollections)
inlinevirtualinherited

Finalise data containers for an event (called by ISimulationSvc)

Definition at line 58 of file BaseSimulatorG4Tool.h.

58  {
59  return releaseEvent(Gaudi::Hive::currentContext(), hitCollections);
60  }

◆ setupEvent() [1/2]

virtual StatusCode ISF::BaseSimulatorG4Tool::setupEvent ( const EventContext &  )
inlinevirtualinherited

Create data containers for an event.

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 79 of file BaseSimulatorG4Tool.h.

79  {
80  return StatusCode::FAILURE;
81  };

◆ setupEvent() [2/2]

StatusCode iGeant4::G4TransportTool::setupEvent ( const EventContext &  ,
HitCollectionMap  
)
overridevirtual

Create data containers for an event.

Implements ISF::BaseSimulatorG4Tool.

Definition at line 385 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx.

386  {
387  ATH_MSG_DEBUG ( "setup Event" );
388 
389  // Set the RNG to use for this event. We need to reset it for MT jobs
390  // because of the mismatch between Gaudi slot-local and G4 thread-local RNG.
391  ATHRNG::RNGWrapper* rngWrapper = m_rndmGenSvc->getEngine(this, m_randomStreamName);
392  rngWrapper->setSeed( m_randomStreamName, ctx );
393  G4Random::setTheEngine(rngWrapper->getEngine(ctx));
394 
395  ATH_CHECK(m_senDetTool->BeginOfAthenaEvent(hitCollections));
396 
397  m_nrOfEntries++;
398  if (m_doTiming) m_eventTimer->Start();
399 
400  // make sure SD collections are properly initialized in every Athena event
401  G4SDManager::GetSDMpointer()->PrepareNewEvent();
402 
403  return StatusCode::SUCCESS;
404 }

◆ setupEventST() [1/2]

virtual StatusCode ISF::BaseSimulatorG4Tool::setupEventST ( )
inlinevirtualinherited

Create data containers for an event (called by ISimulationSvc)

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 84 of file BaseSimulatorG4Tool.h.

84 { return StatusCode::FAILURE; };

◆ setupEventST() [2/2]

virtual StatusCode ISF::BaseSimulatorG4Tool::setupEventST ( HitCollectionMap hitCollections)
inlinevirtualinherited

Create data containers for an event (called by ISimulationSvc)

Definition at line 49 of file BaseSimulatorG4Tool.h.

49  {
50  return setupEvent(Gaudi::Hive::currentContext(), hitCollections);
51  }

◆ simFlavor()

virtual ISF::SimulationFlavor iGeant4::G4TransportTool::simFlavor ( ) const
inlineoverridevirtual

Definition at line 112 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

112  {
113  return ISF::Geant4;
114  };

◆ simulate() [1/2]

virtual StatusCode ISF::BaseSimulatorG4Tool::simulate ( const EventContext &  ,
ISFParticle ,
ISFParticleContainer ,
McEventCollection  
)
inlinevirtualinherited

Simulation call for individual particles.

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 65 of file BaseSimulatorG4Tool.h.

66  {
67  return StatusCode::FAILURE;
68  };

◆ simulate() [2/2]

StatusCode iGeant4::G4TransportTool::simulate ( const EventContext &  ctx,
ISF::ISFParticle isp,
ISF::ISFParticleContainer secondaries,
McEventCollection mcEventCollection,
std::shared_ptr< HitCollectionMap  
)
overridevirtual

Simulation call for individual particles.

Process ParticleState from particle stack

Implements ISF::BaseSimulatorG4Tool.

Definition at line 265 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx.

268  {
269 
270  // give a screen output that you entered Geant4SimSvc
271  ATH_MSG_VERBOSE( "Particle " << isp << " received for simulation." );
272 
274  // wrap the given ISFParticle into a STL vector of ISFParticles with length 1
275  // (minimizing code duplication)
276  const ISF::ISFParticleVector ispVector(1, &isp);
277  StatusCode success = this->simulateVector(ctx, ispVector, secondaries,
278  mcEventCollection, hitCollections);
279  ATH_MSG_VERBOSE( "Simulation done" );
280 
281  // Geant4 call done
282  return success;
283 }

◆ simulateVector() [1/2]

virtual StatusCode ISF::BaseSimulatorG4Tool::simulateVector ( const EventContext &  ,
const ISFParticleVector ,
ISFParticleContainer ,
McEventCollection ,
McEventCollection  
)
inlinevirtualinherited

Simulation call for vectors of particles.

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 71 of file BaseSimulatorG4Tool.h.

74  {
75  return StatusCode::FAILURE;
76  };

◆ simulateVector() [2/2]

StatusCode iGeant4::G4TransportTool::simulateVector ( const EventContext &  ctx,
const ISF::ISFParticleVector particles,
ISF::ISFParticleContainer secondaries,
McEventCollection mcEventCollection,
std::shared_ptr< HitCollectionMap HitCollectionMap,
McEventCollection shadowTruth = nullptr 
)
overridevirtual

Simulation call for vectors of particles.

Process ParticleState from particle stack

Implements ISF::BaseSimulatorG4Tool.

Definition at line 286 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx.

290  {
291 
292  ATH_MSG_DEBUG (name() << ".simulateVector(...) : Received a vector of " << particles.size() << " particles for simulation.");
295  bool abort = [&] ATLAS_NOT_THREAD_SAFE {
296  auto eventInfo = std::make_unique<AtlasG4EventUserInfo>();
297  eventInfo->SetHitCollectionMap(hitCollections);
298 
299  auto inputEvent = std::make_unique<G4Event>(ctx.eventID().event_number());
300  inputEvent->SetUserInformation(eventInfo.release());
301 
302  HepMC::GenEvent* shadowGenEvent =
303  (shadowTruth && !shadowTruth->empty())
304  ? static_cast<HepMC::GenEvent*>(shadowTruth->back())
305  : nullptr;
306  m_inputConverter->ISF_to_G4Event(
307  *inputEvent, particles, genEvent(mcEventCollection), shadowGenEvent);
308 
309  ATH_MSG_DEBUG("Calling ISF_Geant4 ProcessEvent");
310  // Worker run manager
311  // Custom class has custom method call: ProcessEvent.
312  // So, grab custom singleton class directly, rather than base.
313  // Maybe that should be changed! Then we can use a base pointer.
314  if (m_useMT) {
315 # ifdef G4MULTITHREADED
316  auto* workerRM = G4AtlasWorkerRunManager::GetG4AtlasWorkerRunManager();
317  return workerRM->ProcessEvent(inputEvent.release());
318 # else
319  ATH_MSG_ERROR("Trying to use multi-threading in non-MT build!");
320  return true;
321 # endif
322  } else {
323  auto* workerRM ATLAS_THREAD_SAFE =
324  G4AtlasRunManager::GetG4AtlasRunManager(); // non-MT case
325  return workerRM->ProcessEvent(inputEvent.release());
326  }
327  }();
328 
329  if (abort) {
330  ATH_MSG_WARNING("Event was aborted !! ");
331  // ATH_MSG_WARNING("Simulation will now go on to the next event ");
332  // ATH_MSG_WARNING("setFilterPassed is now False");
333  // setFilterPassed(false);
334  return StatusCode::FAILURE;
335  }
336 
337  // Get user actions that return secondaries
338  auto actionsFound = m_secondaryActions.find( std::this_thread::get_id() );
339  if ( actionsFound == m_secondaryActions.end() ) {
340  // Get all UAs
341  std::vector< G4UserSteppingAction* > allActions;
342  StatusCode sc = m_userActionSvc->getSecondaryActions( allActions );
343  if ( !sc.isSuccess() ) {
344  ATH_MSG_ERROR( "Failed to retrieve secondaries from UASvc" );
345  return sc;
346  }
347 
348  // Find the UAs that can return secondaries
349  for ( G4UserSteppingAction* action : allActions ) {
350  passbackAction_t* castAction = dynamic_cast< passbackAction_t* >( action );
351  if ( castAction ) {
352  m_secondaryActions[ std::this_thread::get_id() ].push_back( castAction );
353  }
354  }
355 
356  actionsFound = m_secondaryActions.find( std::this_thread::get_id() );
357  }
358 
359  // Retrieve secondaries from user actions
360  for ( auto* action : actionsFound->second ) {
361  for ( auto& parent : particles ) {
362 
363  ISF::ISFParticleContainer someSecondaries = action->ReturnSecondaries( parent );
364 
365  secondaries.splice( begin(secondaries), std::move(someSecondaries) );
366  }
367  }
368 
369  // const DataHandle <TrackRecordCollection> tracks;
370 
371  // StatusCode sc = evtStore()->retrieve(tracks,m_trackCollName);
372 
373  // if (sc.isFailure()) {
374  // ATH_MSG_WARNING(" Cannot retrieve TrackRecordCollection " << m_trackCollName);
375  // }
376 
377  // not implemented yet... need to get particle stack from Geant4 and convert to ISFParticle
378  ATH_MSG_VERBOSE( "Simulation done" );
379 
380  // Geant4 call done
381  return StatusCode::SUCCESS;
382 }

◆ sysInitialize()

virtual StatusCode ISF::BaseSimulatorTool::sysInitialize ( )
inlineoverridevirtualinherited

Gaudi sysInitialize() methods.

Definition at line 49 of file BaseSimulatorTool.h.

50  {
52  ATH_CHECK( m_chrono.retrieve() );
53  return StatusCode::SUCCESS;
54  }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

passbackActionMap_t m_secondaryActions iGeant4::G4TransportTool::ATLAS_THREAD_SAFE
mutableprivate

◆ m_accumulatedEventTime

float iGeant4::G4TransportTool::m_accumulatedEventTime {0.}
private

◆ m_accumulatedEventTimeSq

float iGeant4::G4TransportTool::m_accumulatedEventTimeSq {0.}
private

◆ m_activateParallelGeometries

Gaudi::Property<bool> iGeant4::G4TransportTool::m_activateParallelGeometries
private
Initial value:
{
this, "ActivateParallelWorlds", false,
"Toggle on/off the G4 parallel geometry system"}

Definition at line 160 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

◆ m_chrono

ServiceHandle<IChronoStatSvc> ISF::BaseSimulatorTool::m_chrono {this, "ChronoStatService", "ChronoStatSvc"}
protectedinherited

The timing service for general usage.

Definition at line 115 of file BaseSimulatorTool.h.

◆ m_detConstruction

PublicToolHandle<IDetectorConstructionTool> iGeant4::G4TransportTool::m_detConstruction {this, "DetectorConstruction", "", "Tool handle of the DetectorConstruction"}
private

◆ m_doTiming

Gaudi::Property<bool> iGeant4::G4TransportTool::m_doTiming {this, "PrintTimingInfo", true, ""}
private

◆ m_eventTimer

G4Timer* iGeant4::G4TransportTool::m_eventTimer {nullptr}
private

◆ m_fastSimTool

PublicToolHandle<IFastSimulationMasterTool> iGeant4::G4TransportTool::m_fastSimTool
private
Initial value:
{
this, "FastSimMasterTool", "FastSimulationMasterTool", ""}

Fast Simulation Master Tool.

Definition at line 186 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

◆ m_fieldMap

Gaudi::Property<std::string> iGeant4::G4TransportTool::m_fieldMap {this, "FieldMap", "", ""}
private

◆ m_g4commands

Gaudi::Property<std::vector<std::string> > iGeant4::G4TransportTool::m_g4commands
private
Initial value:
{
this, "G4Commands", {}, "Commands to send to the G4UI"}

Commands to send to the G4 UI.

Definition at line 155 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

◆ m_inputConverter

ServiceHandle<ISF::IInputConverter> iGeant4::G4TransportTool::m_inputConverter
private
Initial value:
{
this, "InputConverter", "ISF_InputConverter", ""}

Service to convert ISF_Particles into a G4Event.

Definition at line 177 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

◆ m_libList

Gaudi::Property<std::string> iGeant4::G4TransportTool::m_libList {this, "Dll", "", ""}
private

◆ m_mcEventCollectionName

Gaudi::Property<std::string> iGeant4::G4TransportTool::m_mcEventCollectionName
private
Initial value:
{
this, "McEventCollection", "TruthEvent", ""}

Definition at line 145 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

◆ m_nrOfEntries

unsigned int iGeant4::G4TransportTool::m_nrOfEntries {0}
private

◆ m_physicsInitializationTools

PublicToolHandleArray<IPhysicsInitializationTool> iGeant4::G4TransportTool::m_physicsInitializationTools {this, "PhysicsInitializationTools", {}, "Physics initialization happening after Geant4 initialization"}
private

◆ m_physList

Gaudi::Property<std::string> iGeant4::G4TransportTool::m_physList {this, "Physics", "", ""}
private

◆ m_physListSvc

ServiceHandle<IPhysicsListSvc> iGeant4::G4TransportTool::m_physListSvc
private
Initial value:
{this, "PhysicsListSvc",
"PhysicsListSvc", ""}

Physics List Service.

Definition at line 180 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

◆ m_quietMode

Gaudi::Property<bool> iGeant4::G4TransportTool::m_quietMode {this, "QuietMode", false, ""}
private

◆ m_randomStreamName

Gaudi::Property<std::string> iGeant4::G4TransportTool::m_randomStreamName
private
Initial value:
{this, "RandomStreamName",
"Geant4", ""}

Random Stream Name.

Definition at line 167 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

◆ m_recordFlux

Gaudi::Property<bool> iGeant4::G4TransportTool::m_recordFlux {this, "RecordFlux", false, ""}
private

◆ m_releaseGeoModel

Gaudi::Property<bool> iGeant4::G4TransportTool::m_releaseGeoModel {this, "ReleaseGeoModel", true, ""}
private

◆ m_rndmGenSvc

ServiceHandle<IAthRNGSvc> iGeant4::G4TransportTool::m_rndmGenSvc
private
Initial value:
{this, "RandomNumberService",
"AthRNGSvc", ""}

Definition at line 164 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

◆ m_runTimer

G4Timer* iGeant4::G4TransportTool::m_runTimer {nullptr}
private

◆ m_senDetTool

PublicToolHandle<ISensitiveDetectorMasterTool> iGeant4::G4TransportTool::m_senDetTool
private
Initial value:
{
this, "SenDetMasterTool", "SensitiveDetectorMasterTool", ""}

Sensitive Detector Master Tool.

Definition at line 183 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

◆ m_useMT

Gaudi::Property<bool> iGeant4::G4TransportTool::m_useMT
private
Initial value:
{this, "MultiThreading", false,
"Multi-threading specific settings"}

Activate multi-threading configuration.

Definition at line 158 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

◆ m_userActionSvc

ServiceHandle<G4UA::IUserActionSvc> iGeant4::G4TransportTool::m_userActionSvc
private
Initial value:
{this, "UserActionSvc", "",
""}

user action service

Definition at line 173 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.

◆ m_userLimitsSvc

ServiceHandle<IUserLimitsSvc> iGeant4::G4TransportTool::m_userLimitsSvc
private
Initial value:
{this, "UserLimitsSvc",
"UserLimitsSvc", ""}

Definition at line 170 of file ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h.


The documentation for this class was generated from the following files:
ISF::ISFParticleContainer
std::list< ISF::ISFParticle * > ISFParticleContainer
generic ISFParticle container (not necessarily a std::list!)
Definition: ISFParticleContainer.h:23
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
ATHRNG::RNGWrapper::setSeed
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition: RNGWrapper.h:169
pdg_comparison.sigma
sigma
Definition: pdg_comparison.py:324
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
iGeant4::G4TransportTool::m_nrOfEntries
unsigned int m_nrOfEntries
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:131
iGeant4::G4TransportTool::m_accumulatedEventTimeSq
float m_accumulatedEventTimeSq
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:130
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
ISF::BaseSimulatorG4Tool::releaseEvent
virtual StatusCode releaseEvent(const EventContext &, HitCollectionMap &)=0
Finalise data containers for an event.
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
iGeant4::G4TransportTool::m_senDetTool
PublicToolHandle< ISensitiveDetectorMasterTool > m_senDetTool
Sensitive Detector Master Tool.
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:183
iGeant4::G4TransportTool::m_mcEventCollectionName
Gaudi::Property< std::string > m_mcEventCollectionName
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:145
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
ISF::BaseSimulatorG4Tool::setupEvent
virtual StatusCode setupEvent(const EventContext &, HitCollectionMap &)=0
Create data containers for an event.
iGeant4::G4TransportTool::m_runTimer
G4Timer * m_runTimer
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:133
iGeant4::G4TransportTool::genEvent
HepMC::GenEvent * genEvent(McEventCollection *mcEventCollection) const
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx:453
iGeant4::G4TransportTool::m_doTiming
Gaudi::Property< bool > m_doTiming
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:127
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ISF::Geant4
@ Geant4
Definition: SimulationFlavor.h:23
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ISF::BaseSimulatorTool::m_chrono
ServiceHandle< IChronoStatSvc > m_chrono
The timing service for general usage.
Definition: BaseSimulatorTool.h:115
iGeant4::G4TransportTool::m_inputConverter
ServiceHandle< ISF::IInputConverter > m_inputConverter
Service to convert ISF_Particles into a G4Event.
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:177
iGeant4::G4TransportTool::m_accumulatedEventTime
float m_accumulatedEventTime
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:129
ISF::ISFParticleVector
std::vector< ISF::ISFParticle * > ISFParticleVector
ISFParticle vector.
Definition: ISFParticleContainer.h:26
calibdata.exception
exception
Definition: calibdata.py:495
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
hist_file_dump.f
f
Definition: hist_file_dump.py:140
iGeant4::G4TransportTool::ATLAS_NOT_THREAD_SAFE
void initializeOnce ATLAS_NOT_THREAD_SAFE()
G4 initialization called only by the first tool instance.
iGeant4::G4TransportTool::m_rndmGenSvc
ServiceHandle< IAthRNGSvc > m_rndmGenSvc
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:164
iGeant4::G4TransportTool::m_fastSimTool
PublicToolHandle< IFastSimulationMasterTool > m_fastSimTool
Fast Simulation Master Tool.
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:186
DataVector::back
const T * back() const
Access the last element in the collection as an rvalue.
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ATHRNG::RNGWrapper
A wrapper class for event-slot-local random engines.
Definition: RNGWrapper.h:56
AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize
virtual StatusCode sysInitialize() override
Perform system initialization for an algorithm.
ATHRNG::RNGWrapper::getEngine
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition: RNGWrapper.h:134
iGeant4::G4TransportTool::m_eventTimer
G4Timer * m_eventTimer
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:134
ISF::BaseSimulatorTool::initialize
virtual StatusCode initialize() override
Definition: BaseSimulatorTool.h:57
iGeant4::G4TransportTool::finalizeOnce
void finalizeOnce()
G4 finalization called only by the first tool instance.
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx:256
iGeant4::G4TransportTool::m_useMT
Gaudi::Property< bool > m_useMT
Activate multi-threading configuration.
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:158
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
iGeant4::G4TransportTool::simulateVector
virtual StatusCode simulateVector(const EventContext &ctx, const ISF::ISFParticleVector &particles, ISF::ISFParticleContainer &secondaries, McEventCollection *mcEventCollection, std::shared_ptr< HitCollectionMap > hitCollections, McEventCollection *shadowTruth=nullptr) override
Simulation call for vectors of particles.
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.cxx:286
python.CaloScaleNoiseConfig.action
action
Definition: CaloScaleNoiseConfig.py:77
iGeant4::G4TransportTool::passbackAction_t
G4UA::iGeant4::TrackProcessorUserActionBase passbackAction_t
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:138
LArG4FSStartPointFilter.particles
list particles
Definition: LArG4FSStartPointFilter.py:84
ISF::BaseSimulatorG4Tool
Definition: BaseSimulatorG4Tool.h:28
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:23
iGeant4::G4TransportTool::m_recordFlux
Gaudi::Property< bool > m_recordFlux
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:152
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
iGeant4::G4TransportTool::m_userActionSvc
ServiceHandle< G4UA::IUserActionSvc > m_userActionSvc
user action service
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:173
iGeant4::G4TransportTool::m_randomStreamName
Gaudi::Property< std::string > m_randomStreamName
Random Stream Name.
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:167
iGeant4::G4TransportTool::ATLAS_THREAD_SAFE
passbackActionMap_t m_secondaryActions ATLAS_THREAD_SAFE
Definition: ISF_Geant4/ISF_Geant4Tools/src/TransportTool.h:143