ATLAS Offline Software
Loading...
Searching...
No Matches
iGeant4::G4LegacyTransportTool Class Reference

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

#include <G4LegacyTransportTool.h>

Inheritance diagram for iGeant4::G4LegacyTransportTool:
Collaboration diagram for iGeant4::G4LegacyTransportTool:

Classes

struct  Slot

Public Member Functions

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

Protected Attributes

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

Private Member Functions

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

Private Attributes

Configurable Properties
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}
SG::SlotSpecificObj< Slot > m_slots ATLAS_THREAD_SAFE
Gaudi::Property< std::string > m_mcEventCollectionName
PublicToolHandle< ISF::IG4RunManagerHelperm_g4RunManagerHelper
 Helper Tool to provide G4RunManager.
G4AtlasRunManagerm_pRunMgr {}
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.
Gaudi::Property< bool > m_useMT
 Activate multi-threading configuration.
Gaudi::Property< bool > m_activateParallelGeometries
ServiceHandle< IAthRNGSvcm_rndmGenSvc
Gaudi::Property< std::string > m_randomStreamName
 Random Stream Name.
ServiceHandle< IUserLimitsSvcm_userLimitsSvc
ServiceHandle< G4UA::IUserActionSvcm_userActionSvc
 user action service
PublicToolHandle< IDetectorConstructionToolm_detConstruction {this, "DetectorConstruction", "", "Tool handle of the DetectorConstruction"}
ServiceHandle< ISF::IInputConverterm_inputConverter
 Service to convert ISF_Particles into a G4Event.
ServiceHandle< IPhysicsListSvcm_physListSvc
 Physics List Service.
PublicToolHandle< ISensitiveDetectorMasterToolm_senDetTool
 Sensitive Detector Master Tool.
PublicToolHandle< IFastSimulationMasterToolm_fastSimTool
 Fast Simulation Master Tool.
PublicToolHandleArray< IPhysicsInitializationToolm_physicsInitializationTools {this, "PhysicsInitializationTools", {}, "Physics initialization happening after Geant4 initialization"}

Detailed Description

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

  • universal transport tool
Author
Robert Harrington

Definition at line 60 of file G4LegacyTransportTool.h.

Constructor & Destructor Documentation

◆ G4LegacyTransportTool()

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

Constructor.

Definition at line 55 of file G4LegacyTransportTool.cxx.

58 : ISF::BaseSimulatorG4Tool(type, name, parent)
59{
60 //declareProperty("KillAllNeutrinos", m_KillAllNeutrinos=true);
61 //declareProperty("KillLowEPhotons", m_KillLowEPhotons=-1.);
62}

◆ ~G4LegacyTransportTool()

virtual iGeant4::G4LegacyTransportTool::~G4LegacyTransportTool ( )
virtualdefault

Destructor.

Member Function Documentation

◆ ATLAS_NOT_THREAD_SAFE()

void initializeOnce iGeant4::G4LegacyTransportTool::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 ( const std::string & type,
const std::string & name,
const IInterface * parent )
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 }
ServiceHandle< IChronoStatSvc > m_chrono
The timing service for general usage.

◆ 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::G4LegacyTransportTool::commandLog ( int returnCode,
const std::string & commandString ) const
private

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

Definition at line 422 of file G4LegacyTransportTool.cxx.

423{
424 switch(returnCode) {
425 case 0: { ATH_MSG_DEBUG("G4 Command: " << commandString << " - Command Succeeded"); } break;
426 case 100: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Command Not Found!"); } break;
427 case 200: {
428 auto* stateManager = G4StateManager::GetStateManager();
429 ATH_MSG_DEBUG("G4 Command: " << commandString << " - Illegal Application State (" <<
430 stateManager->GetStateString(stateManager->GetCurrentState()) << ")!");
431 } break;
432 case 300: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Parameter Out of Range!"); } break;
433 case 400: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Parameter Unreadable!"); } break;
434 case 500: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Parameter Out of Candidates!"); } break;
435 case 600: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Alias Not Found!"); } break;
436 default: { ATH_MSG_ERROR("G4 Command: " << commandString << " - Unknown Status!"); } break;
437 }
438
439}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)

◆ finalize()

StatusCode iGeant4::G4LegacyTransportTool::finalize ( )
finaloverridevirtual

AlgTool finalize method.

Definition at line 202 of file G4LegacyTransportTool.cxx.

203{
204 ATH_MSG_VERBOSE("++++++++++++ ISF G4 G4LegacyTransportTool finalized ++++++++++++");
205
206 // One time finalization
207 try {
209 }
210 catch(const std::exception& e) {
211 ATH_MSG_ERROR("Failure in iGeant4::G4LegacyTransportTool::finalizeOnce: " << e.what());
212 return StatusCode::FAILURE;
213 }
214
215 if (m_doTiming) {
216 m_runTimer->Stop();
217 float runTime=m_runTimer->GetUserElapsed()+m_runTimer->GetSystemElapsed();
218 float avgTimePerEvent=(m_nrOfEntries>1) ? m_accumulatedEventTime/(m_nrOfEntries-1.) : runTime;
219 float sigma=( m_nrOfEntries>2) ? std::sqrt((m_accumulatedEventTimeSq/float(m_nrOfEntries-1)-
220 avgTimePerEvent*avgTimePerEvent)/float(m_nrOfEntries-2)) : 0;
221 ATH_MSG_INFO("*****************************************"<<endmsg<<
222 "** **"<<endmsg<<
223 " End of run - time spent is "<<std::setprecision(4) <<
224 runTime<<endmsg<<
225 " Average time per event was "<<std::setprecision(4) <<
226 avgTimePerEvent <<" +- "<< std::setprecision(4) << sigma<<endmsg<<
227 "** **"<<endmsg<<
228 "*****************************************");
229 }
230
231 return StatusCode::SUCCESS;
232}
#define endmsg
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
static std::once_flag finalizeOnceFlag
void finalizeOnce()
G4 finalization called only by the first tool instance.

◆ finalizeOnce()

void iGeant4::G4LegacyTransportTool::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 235 of file G4LegacyTransportTool.cxx.

236{
237 ATH_MSG_DEBUG("\t terminating the current G4 run");
238
239 m_pRunMgr->RunTermination();
240
241 return;
242}

◆ genEvent()

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

Definition at line 400 of file G4LegacyTransportTool.cxx.

401{
402
403 if(!mcEventCollection) {
404 // retrieve McEventCollection from storegate
406 if (evtStore()->retrieve( mcEventCollection, m_mcEventCollectionName).isFailure()) {
407 ATH_MSG_ERROR( "Unable to retrieve McEventCollection with name=" << m_mcEventCollectionName
408 << ".");
409 return nullptr;
410 }
411 else {
412 ATH_MSG_WARNING( "Fallback. Sucessfully retrieved McEventCollection with name=" << m_mcEventCollectionName);
413 }
414 }
415 else { return nullptr; }
416 }
417 // collect last GenEvent from McEventCollection
418 return mcEventCollection->back();
419}
#define ATH_MSG_WARNING(x)
const T * back() const
Access the last element in the collection as an rvalue.
Gaudi::Property< std::string > m_mcEventCollectionName
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

◆ initialize()

StatusCode iGeant4::G4LegacyTransportTool::initialize ( )
finaloverridevirtual

AlgTool initialize method.

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 65 of file G4LegacyTransportTool.cxx.

66{
67 ATH_MSG_VERBOSE("initialize");
68
70
71 // create G4Timers if enabled
72 if (m_doTiming) {
73 m_runTimer = new G4Timer();
74 m_eventTimer = new G4Timer();
75 m_runTimer->Start();
76 }
77
78 // Create the scoring manager if requested
79 if (m_recordFlux) G4ScoringManager::GetScoringManager();
80
81 // One-time initialization
82 try {
83 std::call_once(initializeOnceFlag, &iGeant4::G4LegacyTransportTool::initializeOnce, this);
84 }
85 catch(const std::exception& e) {
86 ATH_MSG_ERROR("Failure in iGeant4::G4LegacyTransportTool::initializeOnce: " << e.what());
87 return StatusCode::FAILURE;
88 }
89
90 ATH_CHECK( m_rndmGenSvc.retrieve() );
91 ATH_CHECK( m_userActionSvc.retrieve() );
92
93 ATH_CHECK(m_senDetTool.retrieve());
94 ATH_CHECK(m_fastSimTool.retrieve());
95
96 ATH_CHECK(m_inputConverter.retrieve());
97
98 return StatusCode::SUCCESS;
99}
#define ATH_CHECK
Evaluate an expression and check for errors.
static std::once_flag initializeOnceFlag
virtual StatusCode initialize() override
ServiceHandle< ISF::IInputConverter > m_inputConverter
Service to convert ISF_Particles into a G4Event.
PublicToolHandle< ISensitiveDetectorMasterTool > m_senDetTool
Sensitive Detector Master Tool.
PublicToolHandle< IFastSimulationMasterTool > m_fastSimTool
Fast Simulation Master Tool.
ServiceHandle< G4UA::IUserActionSvc > m_userActionSvc
user action service
ServiceHandle< IAthRNGSvc > m_rndmGenSvc

◆ releaseEvent() [1/2]

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

Finalise data containers for an event.

Reimplemented from ISF::BaseSimulatorG4Tool.

Definition at line 87 of file BaseSimulatorG4Tool.h.

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

◆ releaseEvent() [2/2]

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

Finalise data containers for an event.

Todo
: strip hits of the tracks ...

Implements ISF::BaseSimulatorG4Tool.

Definition at line 353 of file G4LegacyTransportTool.cxx.

354 {
355 ATH_MSG_DEBUG ( "release Event" );
357
358 /* todo: ELLI: the following is copied in from the PyG4AtlasAlg:
359 -> this somehow needs to be moved into C++
360 and put into releaseEvent() ( or setupEvent() ?)
361
362 from ISF_Geant4Example import AtlasG4Eng
363 from ISF_Geant4Example.ISF_SimFlags import simFlags
364 if self.doFirstEventG4SeedsCheck :
365 if simFlags.SeedsG4.statusOn:
366 rnd = AtlasG4Eng.G4Eng.menu_G4RandomNrMenu()
367 rnd.set_Seed(simFlags.SeedsG4.get_Value())
368 self.doFirstEventG4SeedsCheck = False
369 if self.RndG4Menu.SaveStatus:
370 self.RndG4Menu.Menu.saveStatus('G4Seeds.txt')
371 */
372
373 // print per-event timing info if enabled
374 if (m_doTiming) {
375 m_eventTimer->Stop();
376
377 double eventTime=m_eventTimer->GetUserElapsed()+m_eventTimer->GetSystemElapsed();
378 if (m_nrOfEntries>1) {
379 m_accumulatedEventTime +=eventTime;
380 m_accumulatedEventTimeSq+=eventTime*eventTime;
381 }
382
383 float avgTimePerEvent=(m_nrOfEntries>1) ? m_accumulatedEventTime/(m_nrOfEntries-1.) : eventTime;
384 float sigma=(m_nrOfEntries>2) ? std::sqrt((m_accumulatedEventTimeSq/float(m_nrOfEntries-1)-
385 avgTimePerEvent*avgTimePerEvent)/float(m_nrOfEntries-2)) : 0.;
386
387 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) <<
388 eventTime << " s. New average " << std::setprecision(4) <<
389 avgTimePerEvent<<" +- "<<std::setprecision(4) << sigma);
390 }
391
392 ATH_CHECK(m_senDetTool->EndOfAthenaEvent(hitCollections));
393 ATH_CHECK(m_userActionSvc->EndOfAthenaEvent(hitCollections));
394 ATH_CHECK(m_fastSimTool->EndOfAthenaEvent());
395
396 return StatusCode::SUCCESS;
397}

◆ 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 }
virtual StatusCode releaseEvent(const EventContext &, HitCollectionMap &)=0
Finalise data containers for an event.

◆ setupEvent() [1/2]

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

Create data containers for an event.

Reimplemented from ISF::BaseSimulatorG4Tool.

Definition at line 79 of file BaseSimulatorG4Tool.h.

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

◆ setupEvent() [2/2]

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

Create data containers for an event.

Implements ISF::BaseSimulatorG4Tool.

Definition at line 331 of file G4LegacyTransportTool.cxx.

332 {
333 ATH_MSG_DEBUG ( "setup Event" );
334
335 // Set the RNG to use for this event. We need to reset it for MT jobs
336 // because of the mismatch between Gaudi slot-local and G4 thread-local RNG.
337 ATHRNG::RNGWrapper* rngWrapper = m_rndmGenSvc->getEngine(this, m_randomStreamName);
338 rngWrapper->setSeed( m_randomStreamName, ctx );
339 G4Random::setTheEngine(rngWrapper->getEngine(ctx));
340 ATH_CHECK(m_senDetTool->BeginOfAthenaEvent(hitCollections));
341 ATH_CHECK(m_userActionSvc->BeginOfAthenaEvent(hitCollections));
342
344 if (m_doTiming) m_eventTimer->Start();
345
346 // make sure SD collections are properly initialized in every Athena event
347 G4SDManager::GetSDMpointer()->PrepareNewEvent();
348
349 return StatusCode::SUCCESS;
350}
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition RNGWrapper.h:169
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition RNGWrapper.h:134
Gaudi::Property< std::string > m_randomStreamName
Random Stream Name.

◆ 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 }
virtual StatusCode setupEvent(const EventContext &, HitCollectionMap &)=0
Create data containers for an event.

◆ simFlavor()

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

Definition at line 107 of file G4LegacyTransportTool.h.

107 {
108 return ISF::Geant4;
109 };

◆ simulate() [1/3]

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

Simulation call for individual particles.

Definition at line 65 of file BaseSimulatorG4Tool.h.

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

◆ simulate() [2/3]

StatusCode iGeant4::G4LegacyTransportTool::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 245 of file G4LegacyTransportTool.cxx.

248 {
249
250 // give a screen output that you entered Geant4SimSvc
251 ATH_MSG_VERBOSE( "Particle " << isp << " received for simulation." );
252
254 // wrap the given ISFParticle into a STL vector of ISFParticles with length 1
255 // (minimizing code duplication)
256 const ISF::ISFParticleVector ispVector(1, &isp);
257 StatusCode success = this->simulateVector(ctx, ispVector, secondaries,
258 mcEventCollection, hitCollections);
259 ATH_MSG_VERBOSE( "Simulation done" );
260
261 // Geant4 call done
262 return success;
263}
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.
::StatusCode StatusCode
StatusCode definition for legacy code.
std::vector< ISF::ISFParticle * > ISFParticleVector
ISFParticle vector.

◆ simulate() [3/3]

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

◆ simulateVector() [1/3]

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

Simulation call for vectors of particles.

Definition at line 71 of file BaseSimulatorG4Tool.h.

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

◆ simulateVector() [2/3]

StatusCode iGeant4::G4LegacyTransportTool::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 266 of file G4LegacyTransportTool.cxx.

270 {
271
272 ATH_MSG_DEBUG (name() << ".simulateVector(...) : Received a vector of " << particles.size() << " particles for simulation.");
274 // Lambda prevents using the unique_ptr
275 bool abort = [&] ATLAS_NOT_THREAD_SAFE {
276 auto eventInfo = std::make_unique<AtlasG4EventUserInfo>(ctx);
277 eventInfo->SetHitCollectionMap(hitCollections);
278
279 auto inputEvent = std::make_unique<G4Event>(ctx.eventID().event_number());
280 inputEvent->SetUserInformation(eventInfo.release());
281
282 m_inputConverter->ISF_to_G4Event(*inputEvent, particles,
283 genEvent(mcEventCollection));
284
285 ATH_MSG_DEBUG("Calling ISF_Geant4 ProcessEvent");
286 return m_pRunMgr->ProcessEvent(inputEvent.release());
287 }();
288
289 if (abort) {
290 ATH_MSG_WARNING("Event was aborted !! ");
291 //ATH_MSG_WARNING("Simulation will now go on to the next event ");
292 //ATH_MSG_WARNING("setFilterPassed is now False");
293 //setFilterPassed(false);
294 return StatusCode::FAILURE;
295 }
296
297
298 // const DataHandle <TrackRecordCollection> tracks;
299
300 // StatusCode sc = evtStore()->retrieve(tracks,m_trackCollName);
301
302 // if (sc.isFailure()) {
303 // ATH_MSG_WARNING(" Cannot retrieve TrackRecordCollection " << m_trackCollName);
304 // }
305
306 // not implemented yet... need to get particle stack from Geant4 and convert to ISFParticle
307 ATH_MSG_VERBOSE( "Simulation done" );
308
309 Slot& slot = *m_slots;
310 Slot::lock_t lock (slot.m_mutex);
311
312 for (auto* cisp : particles) {
313 // return any secondaries associated with this particle
314 auto searchResult = slot.m_secondariesMap.find( cisp );
315 if ( searchResult == slot.m_secondariesMap.end() ) {
316
317 ATH_MSG_VERBOSE( "Found no secondaries" );
318
319 } else {
320
321 ATH_MSG_VERBOSE( "Found secondaries: " << searchResult->second.size() );
322 secondaries.splice( end(secondaries), std::move(searchResult->second) ); //append vector
323 slot.m_secondariesMap.erase( searchResult );
324 }
325 }
326 // Geant4 call done
327 return StatusCode::SUCCESS;
328}
void initializeOnce ATLAS_NOT_THREAD_SAFE()
G4 initialization called only by the first tool instance.
HepMC::GenEvent * genEvent(McEventCollection *mcEventCollection) const

◆ simulateVector() [3/3]

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

◆ 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 }
virtual StatusCode sysInitialize() override

Member Data Documentation

◆ ATLAS_THREAD_SAFE

SG::SlotSpecificObj<Slot> m_slots iGeant4::G4LegacyTransportTool::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 139 of file G4LegacyTransportTool.h.

◆ m_accumulatedEventTime

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

Definition at line 124 of file G4LegacyTransportTool.h.

124{0.};

◆ m_accumulatedEventTimeSq

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

Definition at line 125 of file G4LegacyTransportTool.h.

125{0.};

◆ m_activateParallelGeometries

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

Definition at line 160 of file G4LegacyTransportTool.h.

160 {
161 this, "ActivateParallelWorlds", false,
162 "Toggle on/off the G4 parallel geometry system"};

◆ 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.

115{this, "ChronoStatService", "ChronoStatSvc"};

◆ m_detConstruction

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

Definition at line 175 of file G4LegacyTransportTool.h.

175{this, "DetectorConstruction", "", "Tool handle of the DetectorConstruction"};

◆ m_doTiming

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

Definition at line 122 of file G4LegacyTransportTool.h.

122{this, "PrintTimingInfo", true, ""};

◆ m_eventTimer

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

Definition at line 129 of file G4LegacyTransportTool.h.

129{nullptr};

◆ m_fastSimTool

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

Fast Simulation Master Tool.

Definition at line 186 of file G4LegacyTransportTool.h.

186 {
187 this, "FastSimMasterTool", "FastSimulationMasterTool", ""};

◆ m_fieldMap

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

Definition at line 150 of file G4LegacyTransportTool.h.

150{this, "FieldMap", "", ""};

◆ m_g4commands

Gaudi::Property<std::vector<std::string> > iGeant4::G4LegacyTransportTool::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 G4LegacyTransportTool.h.

155 {
156 this, "G4Commands", {}, "Commands to send to the G4UI"};

◆ m_g4RunManagerHelper

PublicToolHandle<ISF::IG4RunManagerHelper> iGeant4::G4LegacyTransportTool::m_g4RunManagerHelper
private
Initial value:
{
this, "G4RunManagerHelper",
"iGeant4::G4RunManagerHelper/G4RunManagerHelper", ""}

Helper Tool to provide G4RunManager.

Definition at line 143 of file G4LegacyTransportTool.h.

143 {
144 this, "G4RunManagerHelper",
145 "iGeant4::G4RunManagerHelper/G4RunManagerHelper", ""};

◆ m_inputConverter

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

Service to convert ISF_Particles into a G4Event.

Definition at line 177 of file G4LegacyTransportTool.h.

177 {
178 this, "InputConverter", "ISF_InputConverter", ""};

◆ m_libList

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

Definition at line 148 of file G4LegacyTransportTool.h.

148{this, "Dll", "", ""};

◆ m_mcEventCollectionName

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

Definition at line 140 of file G4LegacyTransportTool.h.

140 {
141 this, "McEventCollection", "TruthEvent", ""};

◆ m_nrOfEntries

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

Definition at line 126 of file G4LegacyTransportTool.h.

126{0};

◆ m_physicsInitializationTools

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

Definition at line 188 of file G4LegacyTransportTool.h.

188{this, "PhysicsInitializationTools", {}, "Physics initialization happening after Geant4 initialization"};

◆ m_physList

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

Definition at line 149 of file G4LegacyTransportTool.h.

149{this, "Physics", "", ""};

◆ m_physListSvc

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

Physics List Service.

Definition at line 180 of file G4LegacyTransportTool.h.

180 {this, "PhysicsListSvc",
181 "PhysicsListSvc", ""};

◆ m_pRunMgr

G4AtlasRunManager* iGeant4::G4LegacyTransportTool::m_pRunMgr {}
private

Definition at line 146 of file G4LegacyTransportTool.h.

146{};

◆ m_quietMode

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

Definition at line 153 of file G4LegacyTransportTool.h.

153{this, "QuietMode", false, ""};

◆ m_randomStreamName

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

Random Stream Name.

Definition at line 167 of file G4LegacyTransportTool.h.

167 {this, "RandomStreamName",
168 "Geant4", ""};

◆ m_recordFlux

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

Definition at line 152 of file G4LegacyTransportTool.h.

152{this, "RecordFlux", false, ""};

◆ m_releaseGeoModel

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

Definition at line 151 of file G4LegacyTransportTool.h.

151{this, "ReleaseGeoModel", true, ""};

◆ m_rndmGenSvc

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

Definition at line 164 of file G4LegacyTransportTool.h.

164 {this, "RandomNumberService",
165 "AthRNGSvc", ""};

◆ m_runTimer

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

Definition at line 128 of file G4LegacyTransportTool.h.

128{nullptr};

◆ m_senDetTool

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

Sensitive Detector Master Tool.

Definition at line 183 of file G4LegacyTransportTool.h.

183 {
184 this, "SenDetMasterTool", "SensitiveDetectorMasterTool", ""};

◆ m_useMT

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

Activate multi-threading configuration.

Definition at line 158 of file G4LegacyTransportTool.h.

158 {this, "MultiThreading", false,
159 "Multi-threading specific settings"};

◆ m_userActionSvc

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

user action service

Definition at line 173 of file G4LegacyTransportTool.h.

173 {this, "UserActionSvc", "",
174 ""};

◆ m_userLimitsSvc

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

Definition at line 170 of file G4LegacyTransportTool.h.

170 {this, "UserLimitsSvc",
171 "UserLimitsSvc", ""};

The documentation for this class was generated from the following files: