ATLAS Offline Software
Loading...
Searching...
No Matches
ISF::ActsFatrasSimTool Class Reference

#include <ActsFatrasSimTool.h>

Inheritance diagram for ISF::ActsFatrasSimTool:

Classes

struct  HitSurfaceSelector
 Simple struct to select surfaces where hits should be generated. More...
struct  SingleParticleSimulation
 Single particle simulation with fixed propagator, interactions, and decay. More...

Public Types

using Generator = std::ranlux48
using Navigator = Acts::Navigator
using ChargedStepper = Acts::EigenStepper<Acts::EigenStepperDefaultExtension>
using ChargedPropagator = Acts::Propagator<ChargedStepper, Navigator>
using NeutralStepper = Acts::StraightLineStepper
using NeutralPropagator = Acts::Propagator<NeutralStepper, Navigator>
using ChargedSelector = ActsFatras::ChargedSelector
using ChargedInteractions
using ChargedSimulation
using NeutralSelector = ActsFatras::NeutralSelector
using NeutralInteractions = ActsFatras::InteractionList<ActsFatras::PhotonConversion>
using NeutralSimulation
using Simulation

Public Member Functions

Amg::Vector3D convertMom3FromActs (const Acts::Vector3 &actsMom)
 Convert ACTS momentum to Athena momentum.
Amg::Vector3D convertPos3FromActs (const Acts::Vector3 &actsPos)
 ActsFatrasSimTool (const std::string &type, const std::string &name, const IInterface *parent)
virtual ~ActsFatrasSimTool ()
virtual StatusCode initialize () override
virtual StatusCode simulate (const EventContext &ctx, ISFParticle &isp, ISFParticleContainer &, McEventCollection *) override
virtual StatusCode simulateVector (const EventContext &ctx, const ISFParticleVector &particles, ISFParticleContainer &secondaries, McEventCollection *mcEventCollection, McEventCollection *shadowTruth=nullptr) override
 Simulation call for vectors of particles.
virtual StatusCode setupEvent (const EventContext &) override
 Setup Event chain - in case of a begin-of event action is needed.
virtual StatusCode releaseEvent (const EventContext &ctx) override
 Release Event chain - in case of an end-of event action is needed.
virtual ISF::SimulationFlavor simFlavor () const override
virtual StatusCode sysInitialize () override
 Gaudi sysInitialize() methods.
virtual StatusCode setupEventST () override
 Setup Event chain - in case of a begin-of event action is needed (called by ISimulationSvc).
virtual StatusCode releaseEventST () override
 Release Event chain - in case of an end-of event action is needed (called by ISimulationSvc).
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

template<class T>
StatusCode retrieveTool (ToolHandle< T > &thandle)
bool checkStartSurface (const Acts::MagneticFieldContext &mctx, const Acts::GeometryContext &anygctx, const ChargedPropagator &chargedPropagator, const Acts::BoundTrackParameters &startParameters, Acts::Direction navDir=Acts::Direction::Forward(), double pathLimit=std::numeric_limits< double >::max()) const
int getATLASProcessCode (ActsFatras::GenerationProcess actspt)

Private Attributes

ActsTrk::ContextUtility m_ctxProvider {this}
 Context provider for geometry, magnetic field and calibration contexts.
SiHitCollection m_pixelSiHits
SiHitCollection m_sctSiHits
ServiceHandle< IAthRNGSvcm_rngSvc {this, "RNGService", "AthRNGSvc"}
ATHRNG::RNGWrapper *m_randomEngine ATLAS_THREAD_SAFE {}
Gaudi::Property< std::string > m_randomEngineName
ServiceHandle< ISF::IGeoIDSvcm_geoIDSvc {this, "GeoIDSvc", "ISF::GeoIDSvc"}
PublicToolHandle< ActsTrk::IExtrapolationToolm_extrapolationTool {this, "ExtrapolationTool", "ActsExtrapolationTool"}
ServiceHandle< ActsTrk::ITrackingGeometrySvcm_trackingGeometrySvc {this, "TrackingGeometrySvc", "ActsTrackingGeometrySvc"}
std::shared_ptr< const Acts::TrackingGeometry > m_trackingGeometry
std::shared_ptr< const Acts::Logger > m_logger {nullptr}
PublicToolHandle< ISF::IParticleFilterm_particleFilter
ServiceHandle< ISF::ITruthSvcm_truthRecordSvc {this, "TruthRecordService", "ISF_TruthRecordSvc", ""}
ToolHandle< ActsFatrasWriteHandlerm_ActsFatrasWriteHandler
Gaudi::Property< double > m_interact_minPt
Gaudi::Property< bool > m_meanEnergyLoss {this, "MeanEnergyLoss", true, "Toggle between mean and mode evaluation of energy loss"}
Gaudi::Property< bool > m_includeGgradient {this, "IncludeGgradient", true, "Boolean flag for inclusion of d(dEds)d(q/p) into energy loss"}
Gaudi::Property< double > m_momentumCutOff {this, "MomentumCutOff", 0., "Cut-off value for the momentum in SI units"}
Gaudi::Property< double > m_maxStep
Gaudi::Property< double > m_maxRungeKuttaStepTrials
Gaudi::Property< double > m_maxStepSize
Gaudi::Property< double > m_pathLimit
Gaudi::Property< bool > m_loopProtection
Gaudi::Property< double > m_loopFraction
Gaudi::Property< double > m_tolerance
Gaudi::Property< double > m_stepSizeCutOff
Gaudi::Property< std::map< int, int > > m_processTypeMap

Detailed Description

Definition at line 76 of file ActsFatrasSimTool.h.

Member Typedef Documentation

◆ ChargedInteractions

Initial value:
ActsFatras::StandardChargedElectroMagneticInteractions

Definition at line 194 of file ActsFatrasSimTool.h.

◆ ChargedPropagator

Definition at line 185 of file ActsFatrasSimTool.h.

◆ ChargedSelector

using ISF::ActsFatrasSimTool::ChargedSelector = ActsFatras::ChargedSelector

Definition at line 193 of file ActsFatrasSimTool.h.

◆ ChargedSimulation

Initial value:
ActsFatras::NoDecay>
ActsFatras::StandardChargedElectroMagneticInteractions ChargedInteractions
Acts::Propagator< ChargedStepper, Navigator > ChargedPropagator
Simple struct to select surfaces where hits should be generated.
Single particle simulation with fixed propagator, interactions, and decay.

Definition at line 196 of file ActsFatrasSimTool.h.

◆ ChargedStepper

using ISF::ActsFatrasSimTool::ChargedStepper = Acts::EigenStepper<Acts::EigenStepperDefaultExtension>

Definition at line 184 of file ActsFatrasSimTool.h.

◆ Generator

using ISF::ActsFatrasSimTool::Generator = std::ranlux48

Definition at line 180 of file ActsFatrasSimTool.h.

◆ Navigator

using ISF::ActsFatrasSimTool::Navigator = Acts::Navigator

Definition at line 182 of file ActsFatrasSimTool.h.

◆ NeutralInteractions

using ISF::ActsFatrasSimTool::NeutralInteractions = ActsFatras::InteractionList<ActsFatras::PhotonConversion>

Definition at line 201 of file ActsFatrasSimTool.h.

◆ NeutralPropagator

Definition at line 188 of file ActsFatrasSimTool.h.

◆ NeutralSelector

using ISF::ActsFatrasSimTool::NeutralSelector = ActsFatras::NeutralSelector

Definition at line 200 of file ActsFatrasSimTool.h.

◆ NeutralSimulation

Initial value:
NeutralPropagator, NeutralInteractions, ActsFatras::NoSurface,
ActsFatras::NoDecay>
Acts::Propagator< NeutralStepper, Navigator > NeutralPropagator
ActsFatras::InteractionList< ActsFatras::PhotonConversion > NeutralInteractions

Definition at line 202 of file ActsFatrasSimTool.h.

◆ NeutralStepper

using ISF::ActsFatrasSimTool::NeutralStepper = Acts::StraightLineStepper

Definition at line 187 of file ActsFatrasSimTool.h.

◆ Simulation

Initial value:
ActsFatras::MultiParticleSimulation<
ActsFatras::NeutralSelector NeutralSelector
ActsFatras::ChargedSelector ChargedSelector
SingleParticleSimulation< ChargedPropagator, ChargedInteractions, HitSurfaceSelector, ActsFatras::NoDecay > ChargedSimulation
SingleParticleSimulation< NeutralPropagator, NeutralInteractions, ActsFatras::NoSurface, ActsFatras::NoDecay > NeutralSimulation

Definition at line 206 of file ActsFatrasSimTool.h.

Constructor & Destructor Documentation

◆ ActsFatrasSimTool()

ISF::ActsFatrasSimTool::ActsFatrasSimTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 20 of file ActsFatrasSimTool.cxx.

23 : BaseSimulatorTool(type, name, parent) {}
BaseSimulatorTool()
Default constructor.

◆ ~ActsFatrasSimTool()

ISF::ActsFatrasSimTool::~ActsFatrasSimTool ( )
virtual

Definition at line 25 of file ActsFatrasSimTool.cxx.

25{}

Member Function Documentation

◆ checkStartSurface()

bool ISF::ActsFatrasSimTool::checkStartSurface ( const Acts::MagneticFieldContext & mctx,
const Acts::GeometryContext & anygctx,
const ChargedPropagator & chargedPropagator,
const Acts::BoundTrackParameters & startParameters,
Acts::Direction navDir = Acts::Direction::Forward(),
double pathLimit = std::numeric_limits<double>::max() ) const
private

Definition at line 401 of file ActsFatrasSimTool.cxx.

407{
408
409 ATH_MSG_VERBOSE(name() << "::" << __FUNCTION__ << " begin");
410 using ActorList =
411 Acts::ActorList<Acts::detail::SteppingLogger, Acts::MaterialInteractor>;
412 using PropagatorOptions = typename ChargedPropagator::template Options<ActorList>;
413
414 ATH_MSG_VERBOSE(name() << "::" << __FUNCTION__ << " Setting up propagator options for start surface check.");
415 PropagatorOptions options(anygctx, mctx);
416 options.loopProtection = (Acts::VectorHelpers::perp(startParameters.momentum()) < 300 * 1_MeV);
417 options.direction = navDir;
418 options.pathLimit = pathLimit;
419
420 // The state creation triggers the initial volume/surface lookup
421 ATH_MSG_VERBOSE(name() << "::" << __FUNCTION__ << " Initializing propagator state with start parameters: position "
422 << startParameters.position(anygctx).transpose() << ", momentum "
423 << startParameters.momentum().transpose());
424 auto state = chargedPropagator.makeState(options);
425 ATH_MSG_VERBOSE(name() << "::" << __FUNCTION__ << " Created propagator state. Now initializing with start parameters.");
426 auto initResult = chargedPropagator.initialize(state, startParameters);
427 if (!initResult.ok()) {
428 ATH_MSG_WARNING(name() << "::" << __FUNCTION__ << " Failed to initialize propagator state: "
429 << initResult.error().message());
430 return false;
431 }
432 return true;
433}
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)

◆ chronoStart()

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

wrapper call to start chrono with given tag

Definition at line 97 of file BaseSimulatorTool.h.

97 {
98 if (m_chrono) return m_chrono->chronoStart( tag);
99 return nullptr;
100 }
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 103 of file BaseSimulatorTool.h.

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

◆ convertMom3FromActs()

Amg::Vector3D ISF::ActsFatrasSimTool::convertMom3FromActs ( const Acts::Vector3 & actsMom)
inline

Convert ACTS momentum to Athena momentum.

Definition at line 211 of file ActsFatrasSimTool.h.

211 {
212 Amg::Vector3D threeMom{Amg::Vector3D::Zero()};
213 threeMom[Amg::x] = ActsTrk::energyToAthena(actsMom[Acts::eMom0]);
214 threeMom[Amg::y] = ActsTrk::energyToAthena(actsMom[Acts::eMom1]);
215 threeMom[Amg::z] = ActsTrk::energyToAthena(actsMom[Acts::eMom2]);
216 return threeMom;
217 }
constexpr double energyToAthena(const double actsE)
Converts an energy scalar from Acts to Athena units.
Eigen::Matrix< double, 3, 1 > Vector3D

◆ convertPos3FromActs()

Amg::Vector3D ISF::ActsFatrasSimTool::convertPos3FromActs ( const Acts::Vector3 & actsPos)
inline

Definition at line 219 of file ActsFatrasSimTool.h.

219 {
220 Amg::Vector3D pos{Amg::Vector3D::Zero()};
221 pos[Amg::x] = ActsTrk::lengthToAthena(actsPos[Acts::ePos0]);
222 pos[Amg::y] = ActsTrk::lengthToAthena(actsPos[Acts::ePos1]);
223 pos[Amg::z] = ActsTrk::lengthToAthena(actsPos[Acts::ePos2]);
224 return pos;
225 }
constexpr double lengthToAthena(const double actsL)
Converts a length scalar from Acts to Athena units.

◆ getATLASProcessCode()

int ISF::ActsFatrasSimTool::getATLASProcessCode ( ActsFatras::GenerationProcess actspt)
inlineprivate

Definition at line 336 of file ActsFatrasSimTool.h.

336{return m_processTypeMap[static_cast<uint32_t>(actspt)];};
Gaudi::Property< std::map< int, int > > m_processTypeMap
setEventNumber uint32_t

◆ initialize()

StatusCode ISF::ActsFatrasSimTool::initialize ( )
overridevirtual

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 27 of file ActsFatrasSimTool.cxx.

27 {
29 ATH_CHECK(m_ctxProvider.initialize());
30 ATH_MSG_INFO("ISF::ActsFatrasSimTool update with ACTS version: v"
31 << Acts::VersionMajor << "." << Acts::VersionMinor << "."
32 << Acts::VersionPatch << " [" << Acts::CommitHash.value_or("unknown hash") << "]");
33 // Retrieve particle filter
34 ATH_CHECK(m_particleFilter.retrieve());
35 ATH_MSG_INFO("Using particle filter: " << m_particleFilter.typeAndName());
36 // setup logger
37 m_logger = makeActsAthenaLogger(this, std::string("ActsFatras"),std::string("ActsFatrasSimTool"));
38
39 // Geometry identifier service
40 if ( !m_geoIDSvc.empty() && m_geoIDSvc.retrieve().isFailure()){
41 ATH_MSG_FATAL ("Could not retrieve " << m_geoIDSvc);
42 return StatusCode::FAILURE;
43 }
44
45 // retrive tracking geo tool
47 m_trackingGeometry = m_trackingGeometrySvc->trackingGeometry();
48
49 // Acts Extrapolator
51 ATH_MSG_INFO( "- ActsExtrapolationTool : " << m_extrapolationTool.typeAndName() );
52
53 //retrive Magnetfield tool
54 ATH_MSG_VERBOSE("Using ATLAS magnetic field service");
55
56 // Random number service
57 if (m_rngSvc.retrieve().isFailure()) {
58 ATH_MSG_FATAL("Could not retrieve " << m_rngSvc);
59 return StatusCode::FAILURE;
60 }
61 // Get own engine with own seeds
62 m_randomEngine = m_rngSvc->getEngine(this, m_randomEngineName.value());
63 if (!m_randomEngine) {
64 ATH_MSG_FATAL("Could not get random engine '" << m_randomEngineName.value() << "'");
65 return StatusCode::FAILURE;
66 }
67
68 // ISF truth service
69 ATH_CHECK (m_truthRecordSvc.retrieve());
70 ATH_MSG_DEBUG( "- Using ISF TruthRecordSvc : " << m_truthRecordSvc.typeAndName() );
71 return StatusCode::SUCCESS;
72}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
ServiceHandle< IAthRNGSvc > m_rngSvc
PublicToolHandle< ActsTrk::IExtrapolationTool > m_extrapolationTool
std::shared_ptr< const Acts::TrackingGeometry > m_trackingGeometry
std::shared_ptr< const Acts::Logger > m_logger
ActsTrk::ContextUtility m_ctxProvider
Context provider for geometry, magnetic field and calibration contexts.
ServiceHandle< ISF::ITruthSvc > m_truthRecordSvc
ServiceHandle< ActsTrk::ITrackingGeometrySvc > m_trackingGeometrySvc
PublicToolHandle< ISF::IParticleFilter > m_particleFilter
ServiceHandle< ISF::IGeoIDSvc > m_geoIDSvc
Gaudi::Property< std::string > m_randomEngineName
virtual StatusCode initialize() override

◆ releaseEvent()

virtual StatusCode ISF::ActsFatrasSimTool::releaseEvent ( const EventContext & )
inlineoverridevirtual

Release Event chain - in case of an end-of event action is needed.

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 245 of file ActsFatrasSimTool.h.

245 {
246 std::vector<SiHitCollection> hitcolls;
247 hitcolls.push_back(m_pixelSiHits);
248 hitcolls.push_back(m_sctSiHits);
249 ATH_CHECK(m_ActsFatrasWriteHandler->WriteHits(hitcolls,ctx));
250 ATH_CHECK(m_truthRecordSvc->releaseEvent());
251 return StatusCode::SUCCESS; };
SiHitCollection m_pixelSiHits
ToolHandle< ActsFatrasWriteHandler > m_ActsFatrasWriteHandler

◆ releaseEventST()

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

Release Event chain - in case of an end-of event action is needed (called by ISimulationSvc).

Reimplemented in ISF::BaseSimulatorG4Tool, and ISF::FastCaloSimV2Tool.

Definition at line 93 of file BaseSimulatorTool.h.

94 { return releaseEvent(Gaudi::Hive::currentContext()); }
virtual StatusCode releaseEvent(const EventContext &) override
Release Event chain - in case of an end-of event action is needed.

◆ retrieveTool()

template<class T>
StatusCode ISF::ActsFatrasSimTool::retrieveTool ( ToolHandle< T > & thandle)
inlineprivate

Definition at line 263 of file ActsFatrasSimTool.h.

263 {
264 if (!thandle.empty() && thandle.retrieve().isFailure()) {
265 ATH_MSG_FATAL("Cannot retrieve " << thandle << ". Abort.");
266 return StatusCode::FAILURE;
267 } else ATH_MSG_DEBUG("Successfully retrieved " << thandle);
268 return StatusCode::SUCCESS;
269 }

◆ setupEvent()

virtual StatusCode ISF::ActsFatrasSimTool::setupEvent ( const EventContext & )
inlineoverridevirtual

Setup Event chain - in case of a begin-of event action is needed.

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 240 of file ActsFatrasSimTool.h.

240 {
241 ATH_CHECK(m_truthRecordSvc->initializeTruthCollection());
242 m_pixelSiHits.Clear();
243 m_sctSiHits.Clear();
244 return StatusCode::SUCCESS; };

◆ setupEventST()

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

Setup Event chain - in case of a begin-of event action is needed (called by ISimulationSvc).

Reimplemented in ISF::BaseSimulatorG4Tool, and ISF::FastCaloSimV2Tool.

Definition at line 66 of file BaseSimulatorTool.h.

67 { return setupEvent(Gaudi::Hive::currentContext()); }
virtual StatusCode setupEvent(const EventContext &) override
Setup Event chain - in case of a begin-of event action is needed.

◆ simFlavor()

virtual ISF::SimulationFlavor ISF::ActsFatrasSimTool::simFlavor ( ) const
inlineoverridevirtual

Definition at line 252 of file ActsFatrasSimTool.h.

252 {
253 return ISF::Fatras; };

◆ simulate()

StatusCode ISF::ActsFatrasSimTool::simulate ( const EventContext & ctx,
ISFParticle & isp,
ISFParticleContainer & secondaries,
McEventCollection * mcEventCollection )
overridevirtual

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 74 of file ActsFatrasSimTool.cxx.

76 {
77 ATH_MSG_VERBOSE("Particle " << isp << " received for simulation.");
78 // Check if particle passes filter, if there is one
79 if (!m_particleFilter.empty() && !m_particleFilter->passFilter(isp)) {
80 ATH_MSG_VERBOSE("ISFParticle " << isp << " does not pass selection. Ignoring.");
81 return StatusCode::SUCCESS;
82 }
83 // Process ParticleState from particle stack
84 // Wrap the input ISFParticle in an STL vector with size of 1
85 const ISF::ISFParticleVector ispVector(1, &isp);
86 ATH_CHECK(this->simulateVector(ctx, ispVector, secondaries, mcEventCollection));
87 ATH_MSG_VERBOSE("Simulation done");
88 return StatusCode::SUCCESS;
89}
virtual StatusCode simulateVector(const EventContext &ctx, const ISFParticleVector &particles, ISFParticleContainer &secondaries, McEventCollection *mcEventCollection, McEventCollection *shadowTruth=nullptr) override
Simulation call for vectors of particles.
std::vector< ISF::ISFParticle * > ISFParticleVector
ISFParticle vector.

◆ simulateVector()

StatusCode ISF::ActsFatrasSimTool::simulateVector ( const EventContext & ctx,
const ISFParticleVector & particles,
ISFParticleContainer & secondaries,
McEventCollection * mcEventCollection,
McEventCollection * = nullptr )
overridevirtual

Simulation call for vectors of particles.

Reimplemented from ISF::BaseSimulatorTool.

Definition at line 91 of file ActsFatrasSimTool.cxx.

95 {
96 // filter particles
97 std::vector<ISFParticle*> selectedParticles;
98 for (const auto isfp : particles) {
99 if (!m_particleFilter.empty() && !m_particleFilter->passFilter(*isfp)) {
100 ATH_MSG_VERBOSE("ISFParticle " << *isfp << " does not pass selection. Ignoring.");
101 continue;
102 }
103 selectedParticles.push_back(isfp);
104 }
105 if (selectedParticles.empty()) {
106 ATH_MSG_VERBOSE("No particles passed selection. Ignoring.");
107 return StatusCode::SUCCESS;
108 }
109 // Set random seed for current event
110 m_randomEngine->setSeed(m_randomEngineName, ctx);
111 CLHEP::HepRandomEngine* randomEngine = m_randomEngine->getEngine(ctx);
112 Generator generator(CLHEP::RandFlat::shoot(randomEngine->flat()));
113 ATH_MSG_VERBOSE(name() << " RNG seed " << CLHEP::RandFlat::shoot(randomEngine->flat()));
114 ATH_MSG_VERBOSE(name() << " received vector of size "
115 << selectedParticles.size() << " particles for simulation.");
116
117 // construct the ACTS simulator
118 Acts::Navigator navigator( Acts::Navigator::Config{ m_trackingGeometry }, m_logger);
119 auto bField = std::make_shared<ATLASMagneticFieldWrapper>();
120 auto chargedStepper = ChargedStepper(std::move(bField));
121 auto neutralStepper = NeutralStepper();
122 auto chargedPropagator = ChargedPropagator(chargedStepper, navigator, m_logger);
123 auto neutralPropagator = NeutralPropagator(neutralStepper, navigator, m_logger);
124 ChargedSimulation simulatorCharged(std::move(chargedPropagator), m_logger);
125 NeutralSimulation simulatorNeutral(std::move(neutralPropagator), m_logger);
126 Simulation simulator=Simulation(std::move(simulatorCharged),std::move(simulatorNeutral));
127 ATH_MSG_VERBOSE(name() << " Min pT for interaction " << m_interact_minPt * Acts::UnitConstants::MeV << " GeV");
128 // Acts propagater options
129 simulator.charged.maxStepSize = m_maxStepSize;
130 simulator.charged.maxStep = m_maxStep;
131 simulator.charged.pathLimit = m_pathLimit;
132 simulator.charged.maxRungeKuttaStepTrials = m_maxRungeKuttaStepTrials;
133 simulator.charged.loopProtection = m_loopProtection;
134 simulator.charged.loopFraction = m_loopFraction;
135 simulator.charged.targetTolerance = m_tolerance;
136 simulator.charged.stepSizeCutOff = m_stepSizeCutOff;
137 // Create interaction list
138 simulator.charged.interactions = ActsFatras::makeStandardChargedElectroMagneticInteractions(m_interact_minPt * Acts::UnitConstants::MeV);
139
140 // Construct the ACTS propagator for starting surface check
141 auto surfaceCheckPropagator = ChargedPropagator(chargedStepper, navigator);
142
143 // get Geo and Mag map
144 ATH_MSG_VERBOSE(name() << " Getting per event Geo and Mag map");
145 auto mctx = m_ctxProvider.getMagneticFieldContext(ctx);
146 auto anygctx = m_ctxProvider.getGeometryContext(ctx);
147 // Loop over ISFParticleVector and process each separately
148 ATH_MSG_VERBOSE(name() << " Processing particles in ISFParticleVector.");
149 for (const auto isfp : selectedParticles) {
150 // ====ACTSFatras Simulation====
151 // //
152 // input/output particle and hits containers
153 // Convert to ActsFatras::Particle
154 // ISF: Energy, mass, and momentum are in MeV, position in mm
155 // Acts: Energy, mass, and momentum are in GeV, position in mm
156 ATH_MSG_DEBUG(name() << " Convert ISF::Particle(mass) " << isfp->id()<<"|" << *isfp<<"(" << isfp->mass() << ")");
157 std::vector<ActsFatras::Particle> input = std::vector<ActsFatras::Particle>{
158 ActsFatras::Particle(ActsFatras::Barcode().withVertexPrimary(0).withParticle(isfp->id()), static_cast<Acts::PdgParticle>(isfp->pdgCode()),
159 isfp->charge(),isfp->mass() * Acts::UnitConstants::MeV)
160 .setDirection(Acts::makeDirectionFromPhiEta(isfp->momentum().phi(), isfp->momentum().eta()))
161 .setAbsoluteMomentum(isfp->momentum().mag() * Acts::UnitConstants::MeV)
162 .setPosition4(ActsTrk::convertPosToActs(isfp->position(), isfp->timeStamp()))};
163 ATH_MSG_DEBUG(name() << " Propagating ActsFatras::Particle vertex|particle|generation|subparticle, " << input[0]);
164 std::vector<ActsFatras::Particle> simulatedInitial;
165 std::vector<ActsFatras::Particle> simulatedFinal;
166 std::vector<ActsFatras::Hit> hits;
167 // simulate
168 auto result=simulator.simulate(anygctx, mctx, generator, input, simulatedInitial, simulatedFinal, hits);
169 auto simulatedFailure=result.value();
170 if (simulatedFailure.size()>0){
171 for (const auto& simfail : simulatedFailure){
172 auto errCode = Acts::make_error_code(Acts::PropagatorError(simfail.error.value()));
173 ATH_MSG_WARNING(name() << " Particle id " <<simfail.particle.particleId()<< ": fail to be simulated during Propagation: " << errCode.message());
174 ATH_MSG_WARNING(name() << " Particle vertex|particle|generation|subparticle"<<simfail.particle << " starts from position" << Acts::toString(simfail.particle.position()) << " and direction " << Acts::toString(simfail.particle.direction()));
175 return StatusCode::SUCCESS;
176 }
177 }
178
179 ATH_MSG_DEBUG(name() << " initial particle " << simulatedInitial[0]);
180 ATH_MSG_DEBUG(name() << " ActsFatras simulator hits: " << hits.size());
181 int i = 0;
182 for (const auto& hit : hits) {
183 ATH_MSG_DEBUG(name() << " hit pos: " << hit.position() );
184 ++i;
185 if (i>5) break;
186 }
187 ATH_MSG_DEBUG(name() << " No. of particles after ActsFatras simulator: " << simulatedFinal.size());
188 if (!simulatedFinal.empty()){
189 ATH_MSG_DEBUG(name() << " start procesing secondaries");
190 auto itr = simulatedFinal.begin();
191 // Save hits of isfp
192 std::vector<ActsFatras::Hit> particle_hits;
193 if (itr->numberOfHits() > 0) {
194 std::copy(hits.begin(), hits.begin()+itr->numberOfHits(), std::back_inserter(particle_hits));
196 }
197 // Process secondaries
198 auto isKilled = !itr->isAlive();
199 int maxGeneration = simulatedFinal.back().particleId().generation();
200 ATH_MSG_DEBUG(name() << " maxGeneration: "<< maxGeneration);
201 for (int gen = 0; gen <= maxGeneration; ++gen){
202 ATH_MSG_DEBUG(name() << " start with generation "<< gen << "|" << maxGeneration << ": "<< *itr);
203 auto vecsecisfp = std::make_unique<ISF::ISFParticleVector>();
204 std::unique_ptr<ISF::ISFParticle> newisfp = nullptr; // Boundary crossing particle
205
206 while (itr != simulatedFinal.end() && static_cast<int>(itr->particleId().generation()) == gen) {
207 ATH_MSG_DEBUG(name() << " genration "<< gen << "|" << maxGeneration << ": "<< *itr);
208 if(itr->isSecondary()){
209 // convert final particles to ISF::particle
210 const auto pos = ActsTrk::convertPosFromActs(itr->fourPosition()).first;
211 const auto mom = ActsTrk::convertMomFromActs(itr->fourMomentum()).first;
212 double mass = itr->mass() / Acts::UnitConstants::MeV;
213 double charge = itr->charge();
214 int pdgid = itr->pdg();
215 auto properTime = ActsTrk::timeToAthena(itr->time());
216 const int status = 1 + HepMC::SIM_STATUS_THRESHOLD;
217 const int id = HepMC::UNDEFINED_ID;
218 auto secisfp = std::make_unique<ISF::ISFParticle>(pos,mom,mass,charge,pdgid,status,properTime,*isfp,id);
219 secisfp->setNextGeoID(m_geoIDSvc->identifyNextGeoID(*secisfp));
220 ATH_MSG_DEBUG(name() <<" secondaries particle (ACTS): "<<*itr<< "("<<itr->momentum()<<")|time "<<itr->time()<<"|process "<< getATLASProcessCode(itr->process()));
221 ATH_MSG_DEBUG(name() <<" secondaries particle (ISF): pdg=" << secisfp->pdgCode()
222 << " pos=" << secisfp->position() << " mom=" << secisfp->momentum()
223 << " GeoID=" << m_geoIDSvc->identifyNextGeoID(*secisfp));
224 vecsecisfp->push_back(secisfp.release());
225 }
226 else{
227 // Primary particle handling
228 ATH_MSG_DEBUG(name() <<" primary particle found with generation ("<< gen <<")");
229 // After simulation, check particle's final state
230 if (!isKilled) {
231 auto fisfp = std::make_unique<ISF::ISFParticle>(*isfp);
232 fisfp->updateMomentum(ActsTrk::convertMomFromActs(itr->fourMomentum()).first);
233 fisfp->updatePosition(ActsTrk::convertPosFromActs(itr->fourPosition()).first);
234 ATH_MSG_DEBUG(name() << " After simulation, primary particle state: " << *fisfp);
235 if (!m_particleFilter.empty() && !m_particleFilter->passFilter(*fisfp)) {
236 ATH_MSG_VERBOSE("ISFParticle" << fisfp << " after simulation does not pass selection. Ignoring for boundary check.");
237 continue;
238 }
239 ATH_MSG_DEBUG(name() << " [ISF] original GeoID: " << m_geoIDSvc->identifyGeoID(*isfp)
240 << " new particle GeoID: " << m_geoIDSvc->identifyGeoID(*fisfp)
241 << ", nextGeoID: " << m_geoIDSvc->identifyNextGeoID(*fisfp));
242
243 // Use ActsExtrapolationTool
244 ATH_MSG_DEBUG(name() << " Extrapolating using ActsExtrapolationTool");
245
246 // Convert to ACTS BoundTrackParameters for extrapolation
247 Acts::BoundTrackParameters startParams = Acts::BoundTrackParameters::createCurvilinear(
248 itr->fourPosition(), itr->direction(), itr->qOverP(), std::nullopt, itr->hypothesis());
249
250 //=============== try if a starting surface exist before passing to Extrapolator ==
251 auto do_exit_startsurface = checkStartSurface(mctx, anygctx, surfaceCheckPropagator, startParams);
252 ATH_MSG_DEBUG(name() << " checkStartSurface returned: " << do_exit_startsurface);
253 if (do_exit_startsurface) {
254 ATH_MSG_DEBUG(name() << " Particle starts at a valid surface, doing extrapolation...");
255
256 // Extrapolate and get propagation steps
258 Amg::Vector3D entryPos{Amg::Vector3D::Zero()};
259 try {
260 auto stepsResult = m_extrapolationTool->propagationSteps(ctx, startParams, Acts::Direction::Forward());
261 auto steps = stepsResult.value().first;
262 ATH_MSG_DEBUG(name() << " Number of propagation steps: " << steps.size());
263 if (steps.size() != 0) {
264 for (const auto& step : steps) {
265 ATH_MSG_DEBUG(name() << " [Acts] Step at position " << step.position
266 << " (eta " << Acts::VectorHelpers::eta(step.position)
267 << ") with GeoID " << step.geoID);
268 entryPos = convertPos3FromActs(step.position);
269 nextGeoID = m_geoIDSvc->identifyGeoID(entryPos);
270 ATH_MSG_DEBUG(name() << " [Acts] GeoID from service: " << nextGeoID);
271 if (nextGeoID > AtlasDetDescr::fAtlasID) { // Valid boundary crossing
272 ATH_MSG_DEBUG(name() << " Boundary crossing detected at GeoID " << nextGeoID);
273 break;
274 }
275 }
276 } else {
277 ATH_MSG_WARNING(name() << " No propagation steps returned by ActsExtrapolationTool");
278 }
279 }
280 catch (const std::exception& e) {
281 ATH_MSG_WARNING(name() << " extrapolation [" << m_extrapolationTool.name() << "] failed: " << e.what() << "\nSkip boundary check for " << *fisfp);
282 break; // Skip boundary check for this particle and continue with next one
283 }
284
285 if (fisfp && nextGeoID > AtlasDetDescr::fAtlasID){
286 const auto mom = ActsTrk::convertMomFromActs(itr->fourMomentum()).first;
287 double mass = itr->mass() / Acts::UnitConstants::MeV;
288 double charge = itr->charge();
289 int pdgid = itr->pdg();
290 auto properTime = ActsTrk::timeToAthena(itr->time());
291
292 // Create boundary crossing particle
293 newisfp = std::make_unique<ISF::ISFParticle>(entryPos, mom, mass, charge, pdgid, isfp->status(), properTime, *isfp, isfp->id(), isfp->barcode());
294 newisfp->setNextGeoID(nextGeoID);
295 ATH_MSG_DEBUG(name() << " Truthbinding of parent ISFParticle: " << (isfp->getTruthBinding() ? "exists" : "null"));
296 if (isfp->getTruthBinding()) {
297 ATH_MSG_DEBUG(name() << " Current GenParticle: " << isfp->getTruthBinding()->getCurrentGenParticle());
298 }
299 ATH_MSG_DEBUG(name() << " Created new ISFParticle at boundary with nextGeoID: "
301 << "(" << nextGeoID << ")");
302 }
303
304 // Handle boundary crossing particle separately - DON'T add to vecsecisfp yet
305 if (newisfp && nextGeoID > AtlasDetDescr::fAtlasID) {
306 ATH_MSG_DEBUG(name() << " [ISF] Processing boundary particle with nextGeoID: "
307 << AtlasDetDescr::AtlasRegionHelper::getName(newisfp->nextGeoID())
308 << "(" << newisfp->nextGeoID() << ")");
309
310 // Identify Entrylayer
312
313 switch(nextGeoID) {
315 entryLayer = ISF::fAtlasCaloEntry;
316 ATH_MSG_DEBUG("Particle crossing to Calorimeter");
317 break;
319 entryLayer = ISF::fAtlasMuonEntry;
320 ATH_MSG_DEBUG("Particle crossing to Muon System");
321 break;
322 default:
323 ATH_MSG_DEBUG("Particle at unspecified boundary");
324 break;
325 }
326
327 if (entryLayer != ISF::fUnsetEntryLayer) {
328 vecsecisfp->push_back(newisfp.release()); // Add boundary crossing particle to secondaries vector
329 } else {
330 ATH_MSG_WARNING("Invalid entry layer for boundary particle");
331 }
332 }
333 }
334 else {
335 ATH_MSG_DEBUG(name() << " No starting surface found, skipping boundary check and extrapolation.");
336 }
337 } // end of !isKilled
338 } // end of primary vs secondary
339 ++itr;
340 } // end of while loop over particles in generation
341
342 // Process truth for this generation
343 if (!vecsecisfp->empty()) {
344 // Determine process code and geoID based on whether we have boundary crossing
345 int processCode = 0;
347 auto isParentKilled = ISF::fPrimarySurvives;
348
349 if (newisfp) {
350 // Boundary crossing - use boundary info
351 processCode = 91; // Boundary crossing has no process
352 geoID = newisfp->nextGeoID();
353 isParentKilled = ISF::fKillsPrimary;
354 } else {
355 // Regular secondaries - use process from last particle
356 processCode = getATLASProcessCode((itr-1)->process());
357 geoID = (isfp->nextGeoID() <= AtlasDetDescr::fUndefinedAtlasRegion) ?
358 AtlasDetDescr::fAtlasID : isfp->nextGeoID();
359 isParentKilled = isKilled && gen==maxGeneration ? ISF::fKillsPrimary : ISF::fPrimarySurvives;
360 }
361
362 ISF::ISFTruthIncident truth(*isfp,
363 *vecsecisfp,
364 processCode,
365 geoID,
366 isParentKilled);
367
368 ATH_MSG_DEBUG(name() << " Truth incident parentPt2(MinPt2) " << truth.parentPt2() <<" (100 MeV)");
369 ATH_MSG_DEBUG(name() << " Truth incident ChildPt2(MinPt2) " << truth.childrenPt2Pass(300) <<" (300 MeV)");
370 m_truthRecordSvc->registerTruthIncident(truth, true);
371 truth.updateParentAfterIncidentProperties();
372 truth.updateChildParticleProperties();
373 for (auto *secisfp : *vecsecisfp){
374 if (secisfp->getTruthBinding()) {
375 secondaries.push_back(secisfp);
376 ATH_MSG_DEBUG(name() << " Secondary particle written out to truth.\n Parent ("
377 << *isfp << ")\n Secondary (" << *secisfp <<")");
378
379 ATH_MSG_DEBUG("Secondary particle push back to ISF, TruthBinding: " << secisfp->getTruthBinding()->getCurrentGenParticle() << " (current) | " << secisfp->getTruthBinding()->getPrimaryGenParticle() << " (primary) | " << secisfp->getTruthBinding()->getGenerationZeroGenParticle() << " (zero)");
380 if (secisfp->getTruthBinding()->getCurrentGenParticle() != nullptr) ATH_MSG_DEBUG("Secondary particle GenParticle EndVertex: " << (secisfp->getTruthBinding()->getCurrentGenParticle()->end_vertex() ? HepMC::barcode(secisfp->getTruthBinding()->getCurrentGenParticle()->end_vertex()) : 1));
381 } else {
382 ATH_MSG_WARNING("Secondary particle not written out to truth.\n Parent ("
383 << *isfp << ")\n Secondary (" << *secisfp <<")");
384 delete secisfp; // Clean up particles without truth binding
385 }
386 }
387 }
388 } // end of generation loop
389 } // end of !simulatedFinal.empty()
390 ATH_MSG_VERBOSE(name() << " No. of secondaries: " << secondaries.size());
391 ATH_MSG_DEBUG(name() << " End of particle " << isfp->id());
392
393 std::vector<ActsFatras::Particle>().swap(input);
394 std::vector<ActsFatras::Particle>().swap(simulatedInitial);
395 std::vector<ActsFatras::Particle>().swap(simulatedFinal);
396 std::vector<ActsFatras::Hit>().swap(hits);
397 } // end of isfp loop
398 return StatusCode::SUCCESS;
399}
double charge(const T &p)
Definition AtlasPID.h:997
static const char * getName(int region)
Gaudi::Property< double > m_maxStepSize
Acts::EigenStepper< Acts::EigenStepperDefaultExtension > ChargedStepper
Gaudi::Property< double > m_tolerance
Gaudi::Property< double > m_interact_minPt
bool checkStartSurface(const Acts::MagneticFieldContext &mctx, const Acts::GeometryContext &anygctx, const ChargedPropagator &chargedPropagator, const Acts::BoundTrackParameters &startParameters, Acts::Direction navDir=Acts::Direction::Forward(), double pathLimit=std::numeric_limits< double >::max()) const
Gaudi::Property< double > m_maxStep
Gaudi::Property< double > m_pathLimit
Gaudi::Property< double > m_stepSizeCutOff
Gaudi::Property< bool > m_loopProtection
int getATLASProcessCode(ActsFatras::GenerationProcess actspt)
ActsFatras::MultiParticleSimulation< ChargedSelector, ChargedSimulation, NeutralSelector, NeutralSimulation > Simulation
Gaudi::Property< double > m_maxRungeKuttaStepTrials
Gaudi::Property< double > m_loopFraction
Amg::Vector3D convertPos3FromActs(const Acts::Vector3 &actsPos)
Acts::StraightLineStepper NeutralStepper
const std::string process
std::pair< Amg::Vector3D, double > convertMomFromActs(const Acts::Vector4 &actsMom)
Converts an Acts four-momentum vector into an pair of an Athena three-momentum and the paritcle's ene...
constexpr double timeToAthena(T actsT)
Converts a time unit from Acts to Athena units.
std::pair< Amg::Vector3D, double > convertPosFromActs(const Acts::Vector4 &actsPos)
Converts an Acts 4-vector into a pair of an Athena spatial vector and the passed time.
Acts::Vector4 convertPosToActs(const Amg::Vector3D &athenaPos, const double athenaTime=0.)
Converts a position vector & time from Athena units into Acts units.
AtlasRegion
A simple enum of ATLAS regions and sub-detectors.
Definition AtlasRegion.h:21
int barcode(const T *p)
Definition Barcode.h:15
constexpr int UNDEFINED_ID
constexpr int SIM_STATUS_THRESHOLD
Constant definiting the status threshold for simulated particles, eg. can be used to separate generat...
EntryLayer
Identifiers for the TrackRecordCollections on the boundaries between CaloEntry: Inner Detector - Calo...
Definition EntryLayer.h:31
@ fUnsetEntryLayer
Definition EntryLayer.h:33
@ fAtlasCaloEntry
Definition EntryLayer.h:37
@ fAtlasMuonEntry
Definition EntryLayer.h:38
@ fKillsPrimary
@ fPrimarySurvives
generator
Configure Herwig7 These are the commands corresponding to what would go into the regular Herwig infil...
status
Definition merge.py:16

◆ sysInitialize()

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

Gaudi sysInitialize() methods.

Definition at line 48 of file BaseSimulatorTool.h.

49 {
51 ATH_CHECK( m_chrono.retrieve() );
52 return StatusCode::SUCCESS;
53 }
virtual StatusCode sysInitialize() override

Member Data Documentation

◆ ATLAS_THREAD_SAFE

ATHRNG::RNGWrapper* m_randomEngine ISF::ActsFatrasSimTool::ATLAS_THREAD_SAFE {}
private

Definition at line 280 of file ActsFatrasSimTool.h.

280{};

◆ m_ActsFatrasWriteHandler

ToolHandle<ActsFatrasWriteHandler> ISF::ActsFatrasSimTool::m_ActsFatrasWriteHandler
private
Initial value:
{
this, "ActsFatrasWriteHandler", "ActsFatrasWriteHandler"}

Definition at line 304 of file ActsFatrasSimTool.h.

304 {
305 this, "ActsFatrasWriteHandler", "ActsFatrasWriteHandler"};

◆ m_chrono

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

The timing service for general usage.

Definition at line 114 of file BaseSimulatorTool.h.

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

◆ m_ctxProvider

ActsTrk::ContextUtility ISF::ActsFatrasSimTool::m_ctxProvider {this}
private

Context provider for geometry, magnetic field and calibration contexts.

Definition at line 256 of file ActsFatrasSimTool.h.

256{this};

◆ m_extrapolationTool

PublicToolHandle<ActsTrk::IExtrapolationTool> ISF::ActsFatrasSimTool::m_extrapolationTool {this, "ExtrapolationTool", "ActsExtrapolationTool"}
private

Definition at line 288 of file ActsFatrasSimTool.h.

288{this, "ExtrapolationTool", "ActsExtrapolationTool"};

◆ m_geoIDSvc

ServiceHandle<ISF::IGeoIDSvc> ISF::ActsFatrasSimTool::m_geoIDSvc {this, "GeoIDSvc", "ISF::GeoIDSvc"}
private

Definition at line 285 of file ActsFatrasSimTool.h.

285{this, "GeoIDSvc", "ISF::GeoIDSvc"};

◆ m_includeGgradient

Gaudi::Property<bool> ISF::ActsFatrasSimTool::m_includeGgradient {this, "IncludeGgradient", true, "Boolean flag for inclusion of d(dEds)d(q/p) into energy loss"}
private

Definition at line 312 of file ActsFatrasSimTool.h.

312{this, "IncludeGgradient", true, "Boolean flag for inclusion of d(dEds)d(q/p) into energy loss"};

◆ m_interact_minPt

Gaudi::Property<double> ISF::ActsFatrasSimTool::m_interact_minPt
private
Initial value:
{this, "Interact_MinPt", 50.0,
"Min pT of the interactions (MeV)"}

Definition at line 307 of file ActsFatrasSimTool.h.

307 {this, "Interact_MinPt", 50.0,
308 "Min pT of the interactions (MeV)"};

◆ m_logger

std::shared_ptr<const Acts::Logger> ISF::ActsFatrasSimTool::m_logger {nullptr}
private

Definition at line 295 of file ActsFatrasSimTool.h.

295{nullptr};

◆ m_loopFraction

Gaudi::Property<double> ISF::ActsFatrasSimTool::m_loopFraction
private
Initial value:
{this, "LoopFraction", 0.5,
"Allowed loop fraction, 1 is a full loop"}

Definition at line 325 of file ActsFatrasSimTool.h.

325 {this, "LoopFraction", 0.5,
326 "Allowed loop fraction, 1 is a full loop"};

◆ m_loopProtection

Gaudi::Property<bool> ISF::ActsFatrasSimTool::m_loopProtection
private
Initial value:
{this, "LoopProtection", true,
"Loop protection, it adapts the pathLimit"}

Definition at line 323 of file ActsFatrasSimTool.h.

323 {this, "LoopProtection", true,
324 "Loop protection, it adapts the pathLimit"};

◆ m_maxRungeKuttaStepTrials

Gaudi::Property<double> ISF::ActsFatrasSimTool::m_maxRungeKuttaStepTrials
private
Initial value:
{this, "MaxRungeKuttaStepTrials", 10000,
"Maximum number of Runge-Kutta steps for the stepper step call"}

Definition at line 317 of file ActsFatrasSimTool.h.

317 {this, "MaxRungeKuttaStepTrials", 10000,
318 "Maximum number of Runge-Kutta steps for the stepper step call"};

◆ m_maxStep

Gaudi::Property<double> ISF::ActsFatrasSimTool::m_maxStep
private
Initial value:
{this, "MaxSteps", 2000,
"Max number of steps"}

Definition at line 315 of file ActsFatrasSimTool.h.

315 {this, "MaxSteps", 2000,
316 "Max number of steps"};

◆ m_maxStepSize

Gaudi::Property<double> ISF::ActsFatrasSimTool::m_maxStepSize
private
Initial value:
{this, "MaxStepSize", 3.0,
"Max step size (converted to Acts::UnitConstants::m)"}

Definition at line 319 of file ActsFatrasSimTool.h.

319 {this, "MaxStepSize", 3.0,
320 "Max step size (converted to Acts::UnitConstants::m)"};

◆ m_meanEnergyLoss

Gaudi::Property<bool> ISF::ActsFatrasSimTool::m_meanEnergyLoss {this, "MeanEnergyLoss", true, "Toggle between mean and mode evaluation of energy loss"}
private

Definition at line 311 of file ActsFatrasSimTool.h.

311{this, "MeanEnergyLoss", true, "Toggle between mean and mode evaluation of energy loss"};

◆ m_momentumCutOff

Gaudi::Property<double> ISF::ActsFatrasSimTool::m_momentumCutOff {this, "MomentumCutOff", 0., "Cut-off value for the momentum in SI units"}
private

Definition at line 313 of file ActsFatrasSimTool.h.

313{this, "MomentumCutOff", 0., "Cut-off value for the momentum in SI units"};

◆ m_particleFilter

PublicToolHandle<ISF::IParticleFilter> ISF::ActsFatrasSimTool::m_particleFilter
private
Initial value:
{
this, "ParticleFilter", "", "Particle filter kinematic cuts, etc."}

Definition at line 298 of file ActsFatrasSimTool.h.

298 {
299 this, "ParticleFilter", "", "Particle filter kinematic cuts, etc."};

◆ m_pathLimit

Gaudi::Property<double> ISF::ActsFatrasSimTool::m_pathLimit
private
Initial value:
{this, "PathLimit", 3000.0,
"Track path limit (converted to Acts::UnitConstants::cm)"}

Definition at line 321 of file ActsFatrasSimTool.h.

321 {this, "PathLimit", 3000.0,
322 "Track path limit (converted to Acts::UnitConstants::cm)"};

◆ m_pixelSiHits

SiHitCollection ISF::ActsFatrasSimTool::m_pixelSiHits
private

Definition at line 259 of file ActsFatrasSimTool.h.

◆ m_processTypeMap

Gaudi::Property<std::map<int,int> > ISF::ActsFatrasSimTool::m_processTypeMap
private
Initial value:
{this, "ProcessTypeMap",
{{0,0}, {1,201}, {2,14}, {3,3}, {4,121}}, "proessType map <ActsFatras,G4>"}

Definition at line 333 of file ActsFatrasSimTool.h.

333 {this, "ProcessTypeMap",
334 {{0,0}, {1,201}, {2,14}, {3,3}, {4,121}}, "proessType map <ActsFatras,G4>"};

◆ m_randomEngineName

Gaudi::Property<std::string> ISF::ActsFatrasSimTool::m_randomEngineName
private
Initial value:
{this, "RandomEngineName",
"RandomEngineName", "Name of random number stream"}

Definition at line 281 of file ActsFatrasSimTool.h.

281 {this, "RandomEngineName",
282 "RandomEngineName", "Name of random number stream"};

◆ m_rngSvc

ServiceHandle<IAthRNGSvc> ISF::ActsFatrasSimTool::m_rngSvc {this, "RNGService", "AthRNGSvc"}
private

Definition at line 279 of file ActsFatrasSimTool.h.

279{this, "RNGService", "AthRNGSvc"};

◆ m_sctSiHits

SiHitCollection ISF::ActsFatrasSimTool::m_sctSiHits
private

Definition at line 260 of file ActsFatrasSimTool.h.

◆ m_stepSizeCutOff

Gaudi::Property<double> ISF::ActsFatrasSimTool::m_stepSizeCutOff
private
Initial value:
{this, "StepSizeCutOff", 0.,
"Cut-off value for the step size"}

Definition at line 329 of file ActsFatrasSimTool.h.

329 {this, "StepSizeCutOff", 0.,
330 "Cut-off value for the step size"};

◆ m_tolerance

Gaudi::Property<double> ISF::ActsFatrasSimTool::m_tolerance
private
Initial value:
{this, "Tolerance", 0.0001,
"Tolerance for the error of the integration"}

Definition at line 327 of file ActsFatrasSimTool.h.

327 {this, "Tolerance", 0.0001,
328 "Tolerance for the error of the integration"};

◆ m_trackingGeometry

std::shared_ptr<const Acts::TrackingGeometry> ISF::ActsFatrasSimTool::m_trackingGeometry
private

Definition at line 292 of file ActsFatrasSimTool.h.

◆ m_trackingGeometrySvc

ServiceHandle<ActsTrk::ITrackingGeometrySvc> ISF::ActsFatrasSimTool::m_trackingGeometrySvc {this, "TrackingGeometrySvc", "ActsTrackingGeometrySvc"}
private

Definition at line 291 of file ActsFatrasSimTool.h.

291{this, "TrackingGeometrySvc", "ActsTrackingGeometrySvc"};

◆ m_truthRecordSvc

ServiceHandle<ISF::ITruthSvc> ISF::ActsFatrasSimTool::m_truthRecordSvc {this, "TruthRecordService", "ISF_TruthRecordSvc", ""}
private

Definition at line 301 of file ActsFatrasSimTool.h.

301{this, "TruthRecordService", "ISF_TruthRecordSvc", ""};

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