ATLAS Offline Software
ISF_Fatras/ISF_FatrasTools/src/TransportTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // class header
6 #include "TransportTool.h"
7 
8 // Tracking
9 #include "TrkTrack/Track.h"
12 // iFatras includes
17 // ISF includes
18 #include "ISF_Event/ISFParticle.h"
23 // CLHEP
24 #include "CLHEP/Units/SystemOfUnits.h"
25 #include "CLHEP/Units/PhysicalConstants.h"
26 #include "CLHEP/Random/RandFlat.h"
27 //
28 // ROOT includes
29 #include "TTree.h"
30 
31 // AtlasDetDescr
34 
35 
36 #include <iostream>
37 
38 //#include "AtlasDetDescr/AtlasDetectorID.h"
39 /*=========================================================================
40  * DESCRIPTION OF FUNCTION:
41  * ==> see headerfile
42  *=======================================================================*/
44  const std::string& n,
45  const IInterface* p )
46  : base_class(t,n,p),
47  m_rndGenSvc("AtDSFMTGenSvc", n),
48  m_randomEngine(nullptr),
49  m_randomEngineName("FatrasRnd"),
50  m_validationOutput(false),
51  m_validationTool(""),
52  m_particleDecayHelper(""),
53  m_simHitCreatorID(""),
54  m_simHitCreatorMS(""),
55  m_extrapolator(""),
56  m_trackFilter(""),
57  m_neutralHadronFilter(""),
58  m_photonFilter(""),
59  m_iparticleHelper(""),
60  m_samplingTool(""),
61  m_errorPropagation(false),
62  m_hitsOff(false)
63 {
64  // validation output section
65  declareProperty( "ValidationOutput", m_validationOutput );
66  declareProperty( "PhysicsValidationTool", m_validationTool );
67  // tool handle for the particle decayer
68  declareProperty( "ParticleDecayHelper", m_particleDecayHelper );
69  // tool handle for the track creator
70  declareProperty( "SimHitCreatorID", m_simHitCreatorID );
71  declareProperty( "SimHitCreatorMS", m_simHitCreatorMS );
72  // tool handles for extrapolator(s)
73  declareProperty( "Extrapolator", m_extrapolator );
74  // tool handles for the filtering setup
75  declareProperty( "TrackFilter", m_trackFilter );
76  declareProperty( "NeutralFilter", m_neutralHadronFilter );
77  declareProperty( "PhotonFilter", m_photonFilter );
78  // tool handles ISF Framework
79  declareProperty( "ParticleHelper", m_iparticleHelper );
80  declareProperty( "TurnOffHitCreation", m_hitsOff );
81  declareProperty( "ProcessSamplingTool", m_samplingTool );
82  declareProperty("DoErrorPropagation", m_errorPropagation );
83  // service handles
84  declareProperty( "RandomNumberService", m_rndGenSvc );
85 }
86 
87 /*=========================================================================
88  * DESCRIPTION OF FUNCTION:
89  * ==> see headerfile
90  *=======================================================================*/
92 {
93  delete m_randomEngine;
94 }
95 
96 /*=========================================================================
97  * DESCRIPTION OF FUNCTION:
98  * ==> see headerfile
99  *=======================================================================*/
102 {
103 
104  ATH_MSG_DEBUG( "initialize()" );
105 
106  // Retrieve the tools one by one
107  if (retrieveTool<iFatras::ISimHitCreator>(m_simHitCreatorID).isFailure())
108  return StatusCode::FAILURE;
109  if (retrieveTool<iFatras::ISimHitCreator>(m_simHitCreatorMS).isFailure())
110  return StatusCode::FAILURE;
111  if (retrieveTool<Trk::ITimedExtrapolator>(m_extrapolator).isFailure())
112  return StatusCode::FAILURE;
113  if (retrieveTool<iFatras::IParticleDecayHelper>(m_particleDecayHelper).isFailure())
114  return StatusCode::FAILURE;
115  if (retrieveTool<ISF::IParticleFilter>(m_trackFilter).isFailure())
116  return StatusCode::FAILURE;
117  if (retrieveTool<ISF::IParticleFilter>(m_photonFilter).isFailure())
118  return StatusCode::FAILURE;
119  if (retrieveTool<ISF::IParticleFilter>(m_neutralHadronFilter).isFailure())
120  return StatusCode::FAILURE;
121  if (retrieveTool<ISF::IParticleHelper>(m_iparticleHelper).isFailure())
122  return StatusCode::FAILURE;
123  if (retrieveTool<iFatras::IProcessSamplingTool>(m_samplingTool).isFailure())
124  return StatusCode::FAILURE;
125  ATH_CHECK( m_validationTool.retrieve( DisableTool{ m_validationTool.empty() || !m_validationOutput } ) );
126 
127  if ( m_rndGenSvc.retrieve().isFailure() ){
128  ATH_MSG_FATAL( "Could not retrieve " << m_rndGenSvc );
129  return StatusCode::FAILURE;
130  }
131  //Get own engine with own seeds:
132  m_randomEngine = m_rndGenSvc->GetEngine(m_randomEngineName);
133  if (!m_randomEngine) {
134  ATH_MSG_FATAL( "Could not get random engine '" << m_randomEngineName << "'" );
135  return StatusCode::FAILURE;
136  }
137  ATH_MSG_DEBUG( "finalize() successful" );
138  return StatusCode::SUCCESS;
139 }
140 
141 /*=========================================================================
142  * DESCRIPTION OF FUNCTION:
143  * ==> see headerfile
144  *=======================================================================*/
146 {
147  ATH_MSG_DEBUG( "finalize() successful" );
148  return StatusCode::SUCCESS;
149 }
150 
151 /*=========================================================================
152  * DESCRIPTION OF FUNCTION:
153  * ==> see headerfile
154  *=======================================================================*/
155 ISF::ISFParticle* iFatras::TransportTool::process( const ISF::ISFParticle& isp, CLHEP::HepRandomEngine*) const
156 {
157  // copy the current particle onto the particle clipboard
159 
160  // if process/generation not set, assume primary
161  //if (m_validationOutput && !isp.getUserInformation()) {
162  // ISF::ParticleUserInformation* validInfo = new ISF::ParticleUserInformation();
163  // validInfo->setProcess(0);
164  // validInfo->setGeneration(0);
165  // isp.setUserInformation(validInfo);
166  //}
167 
168  ATH_MSG_VERBOSE ("[ fatras transport ] processing particle "<<isp.pdgCode() );
169 
170  std::vector<Trk::HitInfo>* hitVector = nullptr; // hit or no hit collection
171 
172  int absPdg = abs(isp.pdgCode());
173  bool photon = (absPdg == 22);
174  bool geantino = (absPdg == 999);
175  bool neutrino = (absPdg == 12) || (absPdg == 14) || (absPdg == 16);
176  bool charged = photon || geantino ? false : (isp.charge()*isp.charge() > 0) ;
177 
178  // particle Hypothesis for the extrapolation
179 
180  Trk::ParticleHypothesis pHypothesis = m_pdgToParticleHypothesis.convert(isp.pdgCode(),isp.charge());
181 
182  // geantinos not handled by PdgToParticleHypothesis - fix there
183  if ( absPdg == 999 ) pHypothesis = Trk::geantino;
184 
185  // chose the filter & extrapolator
186  const Trk::ITimedExtrapolator* processor = &(*m_extrapolator);
187  const ISF::IParticleFilter* filter = nullptr;
188 
189  if ( photon ) {
190  ATH_MSG_VERBOSE( "[ fatras transport ] Photon - use transport tool for photons");
191  filter = m_photonFilter.empty() ? nullptr : &(*m_photonFilter);
192  } else if ( neutrino ) {
193  ATH_MSG_VERBOSE( "[ fatras transport ] Particle is neutrino -> particle ignored.");
194  return nullptr;
195  } else if ( !charged ){
196  ATH_MSG_VERBOSE( "[ fatras transport ] Particle not charged - use transport tool for neutrals");
197  filter = m_neutralHadronFilter.empty() ? nullptr : &(*m_neutralHadronFilter);
198  } else {
199  ATH_MSG_VERBOSE( "[ fatras transport ] Particle is a lepton or charged hadron");
200  filter = m_trackFilter.empty() ? nullptr : &(*m_trackFilter);
201  }
202 
203  if (filter)
204  ATH_MSG_DEBUG( "[ fatras transport ] Determined processor and filter.");
205  else
206  ATH_MSG_DEBUG( "[ fatras transport ] Determined processor w/o filter.");
207 
208  // now transport the particle - if it passes the filter
209  if ( !processor || ( filter && !filter->passFilter(isp)) ) {
210  ATH_MSG_VERBOSE( "[ fatras transport ] Filter not passed, ignore particle.");
211  return nullptr;
212  }
213 
214  ATH_MSG_VERBOSE( "[ fatras transport ] The StackParticle passed filter - starting transport.");
215  // input parameters : curvilinear parameters
216  Trk::CurvilinearParameters inputPar(isp.position(),isp.momentum(),isp.charge());
217 
218  // stable vs. unstable check
219  double freepath = ( !m_particleDecayHelper.empty()) ? m_particleDecayHelper->freePath(isp) : - 1.;
220  ATH_MSG_VERBOSE( "[ fatras transport ] Particle free path : " << freepath);
221  // path limit -> time limit ( TODO : extract life-time directly from decay helper )
222  double tDec = freepath > 0. ? freepath : -1.;
223  int decayProc = 0;
224 
225  // beta calculated here for further use in validation
226  double mass = Trk::ParticleMasses::mass[pHypothesis];
227  double mom = isp.momentum().mag();
228  double beta = mom/sqrt(mom*mom+mass*mass);
229 
230  if ( tDec>0.) {
231  tDec = tDec/beta/CLHEP::c_light + isp.timeStamp();
232  decayProc = 201;
233  }
234 
235  Trk::TimeLimit timeLim(tDec,isp.timeStamp(),decayProc);
236 
237  // prompt decay
238  if ( freepath>0. && freepath<0.01 ) {
239  if (!m_particleDecayHelper.empty()) {
240  ATH_MSG_VERBOSE( "[ fatras transport ] Decay is triggered for input particle.");
241  m_particleDecayHelper->decay(isp,isp.position(),isp.momentum(),isp.timeStamp()); // Registers TruthIncident internally
242  }
243 
244  // validation mode - for all particle registered into stack
245  if ( m_validationOutput && m_validationTool.isEnabled() ) {
246  int endProcess = decayProc;
247  m_validationTool->saveISFParticleInfo(isp,endProcess,&inputPar,timeLim.time,0.);
248  }
249 
250  return nullptr;
251  }
252 
253  // presample interactions if not done already
254  Trk::PathLimit pathLim(-1.,0);
255  const ISF::MaterialPathInfo* matLimit = isp.getUserInformation() ? isp.getUserInformation()->materialLimit() : nullptr;
256  if (matLimit) {
257  pathLim=Trk::PathLimit( matLimit->dMax,matLimit->process);
258  pathLim.updateMat(matLimit->dCollected,13.,0.); // arbitrary Z choice : update MaterialPathInfo
259  } else if (absPdg!=999 && pHypothesis<99) { // need to resample
260  pathLim = m_samplingTool->sampleProcess(m_randomEngine, isp.momentum().mag(),isp.charge(),pHypothesis);
261  }
262 
263  // use extrapolation with path limit - automatic exit at subdetector boundary
264  // additional exercise due to the current mismatch in geoID
265  Trk::GeometrySignature nextGeoID=static_cast<Trk::GeometrySignature>(isp.nextGeoID());
266 
267  std::unique_ptr<const Trk::TrackParameters> eParameters = nullptr;
268 
269  // hit creation/energy deposit
270  hitVector = (!m_hitsOff) ? new std::vector<Trk::HitInfo> : nullptr;
271  if (hitVector) ATH_MSG_VERBOSE( "[ fatras transport ] hit creation activated");
272 
273  if ( !charged ) {
274 
275  eParameters = processor->transportNeutralsWithPathLimit(inputPar,
276  pathLim,
277  timeLim,
279  pHypothesis,
280  hitVector,
281  nextGeoID);
282 
283  } else {
284 
285  if (m_validationOutput && m_errorPropagation ) {
286  // input covariance matrix
287  AmgSymMatrix(5) inputCov;
288  inputCov.setZero();
289  std::unique_ptr<Trk::TrackParameters> measuredInputPar =
290  inputPar.associatedSurface()
291  .createUniqueTrackParameters(inputPar.parameters()[0],
292  inputPar.parameters()[1],
293  inputPar.parameters()[2],
294  inputPar.parameters()[3],
295  inputPar.parameters()[4],
296  std::move(inputCov));
297 
298  eParameters = processor->extrapolateWithPathLimit(*measuredInputPar,
299  pathLim,
300  timeLim,
302  pHypothesis,
303  hitVector,
304  nextGeoID);
305 
306  } else {
307 
308  eParameters = processor->extrapolateWithPathLimit(inputPar,
309  pathLim,
310  timeLim,
312  pHypothesis,
313  hitVector,
314  nextGeoID);
315  }
316  }
317 
318  // create hits
319  if (hitVector && !hitVector->empty()){
320  ATH_MSG_VERBOSE( "[ fatras transport ] processing .");
321  // create the hits from the parameters vector
322  if ( isp.nextGeoID()==AtlasDetDescr::fAtlasID ) {
323  if (!m_simHitCreatorID.empty()) m_simHitCreatorID->createHits(isp, *hitVector);
324  ATH_MSG_VERBOSE( "[ fatras transport ] ID hits processed.");
325  } else if ( isp.nextGeoID()==AtlasDetDescr::fUndefinedAtlasRegion ) {
326  ATH_MSG_WARNING( "[ fatras transport ] hit vector without Geo info");
327  } else if ( isp.nextGeoID()==AtlasDetDescr::fAtlasMS ) {
328  if (!m_simHitCreatorMS.empty()) m_simHitCreatorMS->createHits(isp, *hitVector);
329  ATH_MSG_VERBOSE( "[ fatras transport ] MS hits processed.");
330  }
331  // memory cleanup
332  delete hitVector; hitVector = nullptr;
333  }
334 
335  // additional exercise due to the current mismatch in geoID
337  if (nextGeoID<99) {
338  geoID = static_cast<AtlasDetDescr::AtlasRegion>(nextGeoID);
339  }
340 
341  // validation mode - for all particle registered into stack
342  if ( m_validationOutput && m_validationTool.isEnabled() ) {
343 
344  int dProc = ( timeLim.tMax>0. && timeLim.tMax<=timeLim.time ) ? timeLim.process : 0;
345  int mProc = ( pathLim.x0Max>0. && ( pathLim.x0Max <= pathLim.x0Collected ||
346  (pathLim.process>100 && pathLim.x0Max <= pathLim.l0Collected))) ? pathLim.process : 0;
347  int endProcess = eParameters ? 0 : ( dProc > mProc ? dProc : mProc );
348 
349  m_validationTool->saveISFParticleInfo(isp,endProcess,eParameters.get(),timeLim.time,pathLim.x0Collected);
350 
351  }
352 
353  // create the updated particle at the end of processing step
354  ISF::ISFParticle* uisp = eParameters ? m_iparticleHelper->updatedParticle(isp,
355  eParameters->position(),
356  eParameters->momentum(),
357  timeLim.time-isp.timeStamp()) : nullptr; // update expects time difference
358  // free memory
359  if ( hitVector ) {
360  delete hitVector;
361  }
362 
363  if (uisp && m_validationOutput) {
364  // save validation info
366  validInfo->setProcess(0);
367  if (isp.getUserInformation()) validInfo->setGeneration(isp.getUserInformation()->generation());
368  else validInfo->setGeneration(0); // assume primary parent
369  uisp->setUserInformation(validInfo);
370  }
371 
372  // TODO save material ? if (uisp && m_validationOutput) uisp->setX0(pathLim.x0Collected,m_eloss);
373 
374  // trigger decay or return to stack
375 
376  if (uisp && timeLim.tMax>0. && timeLim.time >=timeLim.tMax ) {
377  if (!m_particleDecayHelper.empty()) {
378  ATH_MSG_VERBOSE( "[ fatras transport ] Decay is triggered for input particle.");
379  m_particleDecayHelper->decay(*uisp,uisp->position(),uisp->momentum(),uisp->timeStamp()); // Registers TruthIncident internally
380  }
381  delete uisp;
382  return nullptr;
383  } else if (uisp) {
384  ATH_MSG_VERBOSE( "[ fatras transport ] Particle transported to detector boundary, return to stack, timing:" << uisp->timeStamp());
385  uisp->setNextGeoID(geoID);
386  return uisp;
387  }
388 
389  // nothing to be returned to the stack (and we should not get here at all)
390  return nullptr;
391 }
392 
iFatras::TransportTool::m_errorPropagation
bool m_errorPropagation
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:121
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
iFatras::TransportTool::m_simHitCreatorID
ToolHandle< ISimHitCreator > m_simHitCreatorID
The SimHit Creation.
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:105
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
ISF::ISFParticle::setNextGeoID
void setNextGeoID(AtlasDetDescr::AtlasRegion geoID)
register the next AtlasDetDescr::AtlasRegion
IParticleDecayHelper.h
TrackParameters.h
Trk::PathLimit::process
int process
Definition: HelperStructs.h:39
ITimedExtrapolator.h
iFatras::TransportTool::m_trackFilter
ToolHandle< ISF::IParticleFilter > m_trackFilter
Filtering setup & other ISF stuff.
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:112
iFatras::TransportTool::TransportTool
TransportTool(const std::string &, const std::string &, const IInterface *)
Constructor.
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.cxx:43
AtlasRegion.h
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
ISF::ParticleUserInformation::setProcess
void setProcess(int proc)
Definition: ParticleUserInformation.h:90
Trk::PathLimit::updateMat
void updateMat(float dX0, float Z, float dL0)
collected material update
Definition: HelperStructs.h:51
ISF::ParticleClipboard::getInstance
static ParticleClipboard & getInstance()
get the singleton instance
Definition: ParticleClipboard.h:61
iFatras::TransportTool::~TransportTool
virtual ~TransportTool()
Destructor.
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.cxx:91
AtlasDetDescr::AtlasRegion
AtlasRegion
Definition: AtlasRegion.h:27
hitVector
std::vector< FPGATrackSimHit > hitVector
Definition: FPGATrackSimCluster.h:23
ParticleClipboard.h
ISF::ISFParticle
Definition: ISFParticle.h:42
Trk::TimeLimit::process
int process
Definition: HelperStructs.h:61
iFatras::TransportTool::m_validationTool
ToolHandle< IPhysicsValidationTool > m_validationTool
the ntuple
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:99
ISF::MaterialPathInfo::dMax
float dMax
Definition: ParticleUserInformation.h:29
ISF::MaterialPathInfo::dCollected
float dCollected
Definition: ParticleUserInformation.h:30
ISF::ISFParticle::pdgCode
int pdgCode() const
PDG value.
AtlasDetDescr::fUndefinedAtlasRegion
@ fUndefinedAtlasRegion
Definition: AtlasRegion.h:29
iFatras::TransportTool::initialize
virtual StatusCode initialize() override
AlgTool initialize method.
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.cxx:101
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
IPhysicsValidationTool.h
Trk::ITimedExtrapolator::extrapolateWithPathLimit
virtual std::unique_ptr< const Trk::TrackParameters > extrapolateWithPathLimit(const Trk::TrackParameters &parm, Trk::PathLimit &pathLim, Trk::TimeLimit &time, Trk::PropDirection dir, Trk::ParticleHypothesis particle, std::vector< HitInfo > *&hitVector, Trk::GeometrySignature &nextGeoId, const Trk::TrackingVolume *boundaryVol=nullptr) const =0
Extrapolation method allowing treatment of unstable particles.
xAOD::geantino
@ geantino
Definition: TrackingPrimitives.h:193
iFatras::TransportTool::m_rndGenSvc
ServiceHandle< IAtRndmGenSvc > m_rndGenSvc
Random Generator service
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:92
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:52
dqt_zlumi_pandas.mass
mass
Definition: dqt_zlumi_pandas.py:170
iFatras::TransportTool::m_validationOutput
bool m_validationOutput
Validation output with histogram service.
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:98
ISF::ISFParticle::position
const Amg::Vector3D & position() const
The current position of the ISFParticle.
covarianceTool.filter
filter
Definition: covarianceTool.py:514
Track.h
RunExEngineTest.PathLimit
PathLimit
Definition: RunExEngineTest.py:61
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
Trk::ITimedExtrapolator::transportNeutralsWithPathLimit
virtual std::unique_ptr< const Trk::TrackParameters > transportNeutralsWithPathLimit(const Trk::TrackParameters &parm, Trk::PathLimit &pathLim, Trk::TimeLimit &time, Trk::PropDirection dir, Trk::ParticleHypothesis particle, std::vector< HitInfo > *&hitVector, Trk::GeometrySignature &nextGeoId, const Trk::TrackingVolume *boundaryVol=nullptr) const =0
Transport method for neutral and/or unstable particles.
iFatras::TransportTool::m_particleDecayHelper
ToolHandle< IParticleDecayHelper > m_particleDecayHelper
Particle Decay.
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:102
iFatras::TransportTool::m_hitsOff
bool m_hitsOff
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:122
ISFParticle.h
Trk::ITimedExtrapolator
Definition: ITimedExtrapolator.h:41
Trk::TimeLimit::tMax
float tMax
Definition: HelperStructs.h:59
Trk::GeometrySignature
GeometrySignature
Definition: GeometrySignature.h:24
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
Trk::PathLimit::x0Collected
float x0Collected
Definition: HelperStructs.h:36
iFatras::TransportTool::process
virtual ISF::ISFParticle * process(const ISF::ISFParticle &isp, CLHEP::HepRandomEngine *) const override
Creates a new ParticleState from a given ParticleState, universal transport tool.
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.cxx:155
AtlasDetDescr::fAtlasMS
@ fAtlasMS
Definition: AtlasRegion.h:36
ISF::ISFParticle::nextGeoID
AtlasDetDescr::AtlasRegion nextGeoID() const
next geoID the particle will be simulated in
iFatras::TransportTool::m_iparticleHelper
ToolHandle< ISF::IParticleHelper > m_iparticleHelper
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:115
beamspotman.n
n
Definition: beamspotman.py:731
IParticleFilter.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
IParticleHelper.h
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ISF::ParticleUserInformation
Definition: ParticleUserInformation.h:52
Trk::geantino
@ geantino
Definition: ParticleHypothesis.h:26
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::CurvilinearParametersT
Definition: CurvilinearParametersT.h:48
Trk::TimeLimit
Definition: HelperStructs.h:58
ParticleHypothesis.h
iFatras::TransportTool::m_neutralHadronFilter
ToolHandle< ISF::IParticleFilter > m_neutralHadronFilter
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:113
ISF::ParticleUserInformation::setGeneration
void setGeneration(int gen)
Definition: ParticleUserInformation.h:92
Trk::ParticleMasses::mass
constexpr double mass[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:53
iFatras::TransportTool::finalize
virtual StatusCode finalize() override
AlgTool finalize method.
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.cxx:145
ParticleUserInformation.h
Trk::CurvilinearParametersT::associatedSurface
virtual const S & associatedSurface() const override final
Access to the Surface method.
IProcessSamplingTool.h
ISF::ISFParticle::timeStamp
double timeStamp() const
Timestamp of the ISFParticle.
iFatras::TransportTool::m_photonFilter
ToolHandle< ISF::IParticleFilter > m_photonFilter
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:114
ISF::ISFParticle::momentum
const Amg::Vector3D & momentum() const
The current momentum vector of the ISFParticle.
AtlasDetDescr::fAtlasID
@ fAtlasID
Definition: AtlasRegion.h:33
ISF::ISFParticle::setUserInformation
void setUserInformation(ParticleUserInformation *userInfo)
Trk::PathLimit
Definition: HelperStructs.h:34
python.PhysicalConstants.c_light
float c_light
Definition: PhysicalConstants.py:63
ISF::ISFParticle::charge
double charge() const
charge of the particle
ISimHitCreator.h
Trk::PathLimit::l0Collected
float l0Collected
Definition: HelperStructs.h:37
iFatras::TransportTool::m_samplingTool
ToolHandle< IProcessSamplingTool > m_samplingTool
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:116
ISF::MaterialPathInfo
Definition: ParticleUserInformation.h:28
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
ISF::ParticleUserInformation::materialLimit
const MaterialPathInfo * materialLimit() const
Definition: ParticleUserInformation.h:88
xAOD::photon
@ photon
Definition: TrackingPrimitives.h:199
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
iFatras::TransportTool::m_simHitCreatorMS
ToolHandle< ISimHitCreator > m_simHitCreatorMS
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:106
Trk::TimeLimit::time
float time
Definition: HelperStructs.h:60
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
Trk::PathLimit::x0Max
float x0Max
Definition: HelperStructs.h:35
ISF::ParticleClipboard::setParticle
void setParticle(const ISF::ISFParticle &p)
save a particle on the clipboard
Definition: ParticleClipboard.h:67
MuonParameters::beta
@ beta
Definition: MuonParamDefs.h:144
TransportTool.h
ISF::ParticleUserInformation::generation
int generation() const
Definition: ParticleUserInformation.h:86
ISF::MaterialPathInfo::process
int process
Definition: ParticleUserInformation.h:31
iFatras::TransportTool::m_extrapolator
ToolHandle< Trk::ITimedExtrapolator > m_extrapolator
The Extrapolator setup.
Definition: ISF_Fatras/ISF_FatrasTools/src/TransportTool.h:109
CP::charged
@ charged
Definition: Reconstruction/PFlow/PFlowUtils/PFlowUtils/PFODefs.h:11
ISF::ISFParticle::getUserInformation
const ParticleUserInformation * getUserInformation() const
get/set ParticleUserInformation
ISF::IParticleFilter
Definition: IParticleFilter.h:28