Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
StepEngine.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // StaticEngine.cxx, (c) ATLAS Detector software
8 
9 // STL
10 #include <sstream>
11 // Trk include
12 #include "TrkExEngine/StepEngine.h"
13 
14 // constructor
15 Trk::StepEngine::StepEngine(const std::string& t, const std::string& n, const IInterface* p)
16 : AthAlgTool(t,n,p)
17 {
18  declareInterface<Trk::IExtrapolationEngine>(this);
19 }
20 
21 // destructor
23 = default;
24 
25 
26 // the interface method initialize
28 {
29  m_sopPrefix = m_sopPrefix_prop;
30  m_sopPostfix = m_sopPostfix_prop;
31 
32  if (m_propagator.retrieve().isFailure()){
33  EX_MSG_FATAL("", "initialize", "", "failed to retrieve propagator '"<< m_propagator << "'. Aborting." );
34  return StatusCode::FAILURE;
35  } else
36  EX_MSG_DEBUG("", "initialize", "", "successfully retrieved '" << m_propagator << "'." );
37 
38  if (m_materialEffectsEngine.retrieve().isFailure()){
39  EX_MSG_FATAL("", "initialize", "", "failed to retrieve material effect engine '"<< m_materialEffectsEngine << "'. Aborting." );
40  return StatusCode::FAILURE;
41  } else
42  EX_MSG_DEBUG("", "initialize", "", "successfully retrieved '" << m_materialEffectsEngine << "'." );
43 
44  if (m_navigationEngine.retrieve().isFailure()){
45  EX_MSG_FATAL("", "initialize", "", "failed to retrieve navigation engine '"<< m_navigationEngine << "'. Aborting." );
46  return StatusCode::FAILURE;
47  } else
48  EX_MSG_DEBUG("", "initialize", "", "successfully retrieved '" << m_navigationEngine << "'." );
49 
50  EX_MSG_DEBUG("", "initialize", "", "successful." );
51 
52  m_targetSurfaces.setDebugModeOff();
53 
54  return StatusCode::SUCCESS;
55 }
56 
57 // the interface method finalize
59 {
60  EX_MSG_DEBUG("", "finalize", "", "successful." );
61  return StatusCode::SUCCESS;
62 }
63 
64 
67  const Surface* sf,
68  const BoundaryCheck& bcheck) const
69 {
70  // check the input
72  if (!ecCharged.leadVolume) { // should not happen : try to recover anyway
73  Trk::ExtrapolationCode eVol = m_navigationEngine->resolvePosition(ecCharged,ecCharged.propDirection,false);
74  if (!eVol.isSuccessOrRecovered() && !eVol.inProgress()) return eVol;
75  }
76 
77  // cache the last lead parameters, useful in case a navigation error occured
78  ecCharged.lastLeadParameters = ecCharged.leadParameters;
79  // new extrapolation call : find possible target surfaces
80  //Trk::TargetSurfaceVector ts;
81  //Trk::ExtrapolationCode eCode = targetSurfacesT(ecCharged,ts,false,sf,bcheck);
82 
83  // test new class
84  Trk::ExtrapolationCode exC = m_targetSurfaces.setOnInput(ecCharged,sf,bcheck);
85 
86  // catch an infinite loop in frame navigation
87  if (exC==Trk::ExtrapolationCode::FailureLoop) { // should not happen : try to recover once
88 
89  EX_MSG_WARNING("", "extrapolate", "", "frame navigation recovery attempt for:"<< ecCharged.leadVolume->volumeName());
90 
91  Trk::ExtrapolationCode eVol = m_navigationEngine->resolvePosition(ecCharged,ecCharged.propDirection,true);
92  if (!eVol.isSuccessOrRecovered() && !eVol.inProgress()) return eVol;
93  //ts.clear();
94  //eVol = targetSurfacesT(ecCharged,ts,false,sf,bcheck);
95  exC = m_targetSurfaces.setOnInput(ecCharged,sf,bcheck);
96  if (!eVol.isSuccessOrRecovered() && !eVol.inProgress()) return eVol;
97  }
98 
99  // build PathLimit from eCell info
100  Trk::PathLimit pathLim(ecCharged.materialLimitX0-ecCharged.materialX0, ecCharged.materialProcess);
101  // build TimeLimit from eCell info
102  //Trk::TimeLimit timeLim(ecCharged.timeLimit,ecCharged.time,201); // Fatras decay code
103  Trk::TimeLimit timeLim(-1.,ecCharged.time,201); // temporary till time limit absent in eCell
104 
105  // loop over intersections
106  // std::vector<unsigned int> solutions;
107  Trk::TargetSurfaceVector solutions;
108  while (ecCharged.leadParameters ) {
109  solutions.clear();
110  // TODO pass TargetSurfaces directly to the propagator
111 
112  EX_MSG_VERBOSE(ecCharged.navigationStep, "propagate", "loop", "starting propagation at position : " << ecCharged.leadParameters->position()<<","<<ecCharged.leadParameters->momentum() );
113  if (m_debugCall) EX_MSG_DEBUG(ecCharged.navigationStep, "propagate", "debug loop", "starting propagation at position : " << ecCharged.leadParameters->position()<<","<<ecCharged.leadParameters->momentum() );
114  //const Trk::TrackParameters* nextPar = m_propagator->propagateT(*ecCharged.leadParameters,m_targetSurfaces,ecCharged.propDirection,
115  // ecCharged.mFieldMode, ecCharged.pHypothesis, solutions,
116  // pathLim,timeLim,ecCharged.navigationCurvilinear,hitVector);
117  // cache the last lead parameters, useful in case a navigation error occured
118  //ecCharged.lastLeadParameters = ecCharged.leadParameters;
119 
120  Trk::ExtrapolationCode eCode = m_propagator->propagate(
121  Gaudi::Hive::currentContext(),
122  ecCharged,
123  m_targetSurfaces,
124  solutions);
125 
126  // enforced debugging
127  if (eCode==Trk::ExtrapolationCode::FailureNavigation && m_debugAndFix) {
128  if (m_debugCall) {
129  EX_MSG_INFO(ecCharged.navigationStep, "extrapolate", "loop:debug mode:"," stopping execution for further debugging");
130  exit(0);
131  } else {
132  // repeat the call with printout && stop the execution
133  EX_MSG_INFO(ecCharged.navigationStep, "extrapolate", "loop:debug mode:","rerun last extrapolation call"<<ecCharged.lastLeadParameters->position());
134  ecCharged.leadParameters = ecCharged.lastLeadParameters;
135  ecCharged.leadVolume = nullptr;
136  m_debugCall = true;
137  m_targetSurfaces.setDebugModeOn();
138  eCode = extrapolate(ecCharged,sf,bcheck);
139  exit(0);
140  }
141  }
142 
143  const Trk::TrackParameters* nextPar = (eCode.isSuccess() || eCode.inProgress()) ? ecCharged.leadParameters : nullptr ;
144  if (!nextPar) EX_MSG_VERBOSE(ecCharged.navigationStep, "propagate", "loop", "propagation failed ");
145  else EX_MSG_VERBOSE(ecCharged.navigationStep, "propagate", "loop", "propagated to :"<< nextPar->position());
146 
147  if (!nextPar) return ( sf ? Trk::ExtrapolationCode::FailureDestination : eCode ) ;
148 
149  EX_MSG_VERBOSE(ecCharged.navigationStep, "propagate", "loop", "propagation arrived at position : " << ecCharged.leadParameters->position() );
150  if (m_debugCall) EX_MSG_DEBUG(ecCharged.navigationStep, "propagate", "loop", "propagation arrived at position : " << ecCharged.leadParameters->position() );
151 
152  // record the parameters as sensitive or passive depending on the surface
153  //Trk::ExtrapolationMode::eMode emode = csf.object->isActive() ? Trk::ExtrapolationMode::CollectSensitive : Trk::ExtrapolationMode::CollectPassive;
154  // fill the corresponding parameters, the material effects updator can attach material to them
155  // ecCharged.stepParameters(ecCharged.leadParameters, Trk::ExtrapolationMode::CollectPassive);
156 
157  // handle extrapolation step
158  Trk::ExtrapolationCode eStep = handleIntersection(ecCharged,solutions);
159 
160  if (eStep != Trk::ExtrapolationCode::InProgress ) return eStep;
161  }
162 
164  }
165 
166 
169  const Surface* sf,
170  const BoundaryCheck& bcheck) const
171 {
172  // check the input
173 
175  if (!ecNeutral.leadVolume) { // should not happen : try to recover anyway
176  Trk::ExtrapolationCode eVol = m_navigationEngine->resolvePosition(ecNeutral,ecNeutral.propDirection,false);
177  if (!eVol.isSuccessOrRecovered() && !eVol.inProgress()) return eVol;
178  }
179 
180  // new extrapolation call : find valid intersections
181  Trk::TargetSurfaceVector ts; ts.clear();
182  Trk::ExtrapolationCode eCode = targetSurfacesT(ecNeutral,ts,true,sf,bcheck);
183 
184  CHECK_ECODE_SUCCESS(ecNeutral, eCode);
185 
186  // catch an infinite loop in frame navigation
187  if (eCode==Trk::ExtrapolationCode::FailureLoop) { // should not happen : try to recover once
188  Trk::ExtrapolationCode eVol = m_navigationEngine->resolvePosition(ecNeutral,ecNeutral.propDirection,true);
189  if (!eVol.isSuccessOrRecovered() && !eVol.inProgress()) return eVol;
190  ts.clear();
191  eVol = targetSurfacesT(ecNeutral,ts,true,sf,bcheck);
192  if (!eVol.isSuccessOrRecovered() && !eVol.inProgress()) return eVol;
193  }
194 
195  // catch an infinite loop in frame navigation
196  if (!ecNeutral.leadVolume) { // should not happen : try to recover once
197  Trk::ExtrapolationCode eVol = m_navigationEngine->resolvePosition(ecNeutral,ecNeutral.propDirection);
198  if (!eVol.isSuccessOrRecovered() && !eVol.inProgress()) return eVol;
199 
200  eVol = targetSurfacesT(ecNeutral,ts,true,sf,bcheck);
201  if (!eVol.isSuccessOrRecovered() && !eVol.inProgress()) return eVol;
202 
203  }
204 
205  // loop over intersections
206  for (auto & t : ts) {
207 
208 
210  if ( t.sfType == Trk::SurfNavigType::BoundaryFrame ) {
211  const auto &bounds = ecNeutral.leadVolume->boundarySurfaces();
212  const Trk::TrackingVolume* nextVolume = bounds[t.index]->attachedVolume(t.intersection,
213  ecNeutral.leadParameters->momentum(),
214  ecNeutral.propDirection);
215 
216  if (!nextVolume) return Trk::ExtrapolationCode::SuccessBoundaryReached;
217 
218  ecNeutral.leadParameters = new Trk::NeutralCurvilinearParameters(t.intersection,ecNeutral.leadParameters->momentum(),0.);
219 
220  // - geometrySignature change and configuration to stop then triggers a Success
221  bool stopAtThisBoundary = ecNeutral.checkConfigurationMode(Trk::ExtrapolationMode::StopAtBoundary)
222  && (nextVolume->geometrySignature() != ecNeutral.leadVolume->geometrySignature());
223  // fill the boundary into the cache if successfully hit boundary surface
224  // - only cache if those are not the final parameters caused by a StopAtBoundary
225  if (!stopAtThisBoundary)
227  // loop protection - relaxed for the cases where you start from the boundary
228  if (ecNeutral.leadVolume == nextVolume ) {
229  // the start parameters where on the boundary already give a relaxed return code
230  // if (&bSurface == eCell.lastBoundarySurface) return Trk::ExtrapolationCode::Unset;
231  // give some screen output as of why this happens
232  EX_MSG_VERBOSE(ecNeutral.navigationStep, "navigation", "", "loop detected while trying to leave TrackingVolume '" << nextVolume->volumeName() << ".");
233  // return a loop failure, parameter deletion will be done by cache
235  }
236  // break if configured to break at volume boundary and signature change
237  if (stopAtThisBoundary){
238  EX_MSG_VERBOSE(ecNeutral.navigationStep, "navigation", "", "geometry signature change from " <<
239  ecNeutral.leadVolume->geometrySignature() << " to " << nextVolume->geometrySignature());
240  ecNeutral.nextGeometrySignature = nextVolume->geometrySignature();
241  // return the boundary reached
243  }
244  // remember the last boundary surface for loop protection
245  // ecNeutral.lastBoundarySurface = &bounds[index];
246  ecNeutral.lastBoundaryParameters = ecNeutral.leadParameters;
247  // set next volume
248  ecNeutral.leadVolume = nextVolume;
250  }
251  }
252 
254  }
255 
256 
258  Trk::TargetSurfaceVector&ts, bool trueOrdered) const
259 {
260  Trk::DistanceSolution distSol = tt.surf->straightLineDistanceEstimate(pos,mom);
261 
262  double dist = distSol.first();
263  Amg::Vector3D posi = pos + dist*mom;
264  // skip trivial solutions
265  if (distSol.numberOfSolutions()>1 && dist<m_tolerance && distSol.second()>m_tolerance) {
266  dist = distSol.second();
267  posi = pos + dist*mom;
268  if (trueOrdered && !tt.surf->isOnSurface(posi,tt.bcheck,m_tolerance,m_tolerance) ) return;
269  double dAbs = distSol.currentDistance(true);
270  tt.setDistance(dist,fabs(dAbs),distSol.signedDistance() && dAbs!=0. ? dAbs/fabs(dAbs) : 0.);
271  tt.setPosition(posi);
272  ts.push_back(tt);
273  return;
274  }
275  // save closest solution
276  if (!trueOrdered || dist>m_tolerance ) {
277  double dAbs = distSol.currentDistance(true);
278  tt.setDistance(dist,fabs(dAbs),distSol.signedDistance() && dAbs!=0. ? dAbs/fabs(dAbs) : 0.);
279  tt.setPosition(posi);
280  ts.push_back(tt);
281  }
282 
283  // save multiple intersection for neutral transport
284  if (distSol.numberOfSolutions()>1 && distSol.second()>m_tolerance && trueOrdered) {
285  dist = distSol.second();
286  posi = pos + dist*mom;
287  if ( tt.surf->isOnSurface(posi,tt.bcheck,m_tolerance,m_tolerance) ) {
288  double dAbs = distSol.currentDistance(true);
289  tt.setDistance(dist,fabs(dAbs),distSol.signedDistance() && dAbs!=0. ? dAbs/fabs(dAbs) : 0.);
290  tt.setPosition(posi);
291  ts.push_back(tt);
292  }
293  }
294 
295  }
296 
297 // handle extrapolation step
299  Trk::TargetSurfaceVector& solutions) const
300 {
301  for (const auto & thisSurface : solutions){
302  // destination
303  if ( thisSurface.sfType == Trk::SurfNavigType::Target ){
305  }
306  // frame boundary : update of target surfaces
307  if ( thisSurface.sfType == Trk::SurfNavigType::BoundaryFrame ) {
308  return resolveFrameBoundaryT(ecCharged,ecCharged.leadParameters->position(),
309  thisSurface.index);
310  }
311  }
313 }
Trk::ExtrapolationCell::materialLimitX0
double materialLimitX0
given material limit in X0
Definition: ExtrapolationCell.h:273
Trk::DistanceSolution::currentDistance
double currentDistance(bool signedDist=false) const
Current distance to surface (spatial), signed (along/opposite to surface normal) if input argument tr...
Trk::DistanceSolution::signedDistance
bool signedDistance() const
This method indicates availability of signed current distance (false for Perigee and StraighLineSurfa...
Trk::StepEngine::handleIntersection
Trk::ExtrapolationCode handleIntersection(ExCellCharged &ecCharged, Trk::TargetSurfaceVector &solutions) const
handle extrapolation step
Definition: StepEngine.cxx:298
Trk::StepEngine::finalize
virtual StatusCode finalize() override
AlgTool finalize method.
Definition: StepEngine.cxx:58
Trk::ExtrapolationCode::inProgress
bool inProgress() const
return inProgress
Definition: ExtrapolationCell.h:150
Trk::DistanceSolution
Definition: DistanceSolution.h:25
Trk::TargetSurface
target surface info ( navigation )
Definition: TargetSurfaces.h:56
Trk::ExtrapolationMode::CollectBoundary
@ CollectBoundary
Definition: ExtrapolationCell.h:58
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
Trk::TrackingVolume::geometrySignature
GeometrySignature geometrySignature() const
return the Signature
Trk::DistanceSolution::numberOfSolutions
int numberOfSolutions() const
Number of intersection solutions.
Trk::StepEngine::evaluateDistance
void evaluateDistance(Trk::TargetSurface &tt, const Amg::Vector3D &pos, const Amg::Vector3D &mom, Trk::TargetSurfaceVector &ts, bool trueOrdered) const
distance calculations
Definition: StepEngine.cxx:257
Trk::TrackingVolume::boundarySurfaces
std::vector< SharedObject< BoundarySurface< TrackingVolume > > > & boundarySurfaces()
Method to return the BoundarySurfaces.
Definition: TrackingVolume.cxx:982
Trk::ExtrapolationCell::propDirection
PropDirection propDirection
this is the propagation direction
Definition: ExtrapolationCell.h:260
Trk::StepEngine::~StepEngine
virtual ~StepEngine()
Destructor.
Trk::ExtrapolationCode::SuccessBoundaryReached
@ SuccessBoundaryReached
Definition: ExtrapolationCell.h:113
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Trk::DistanceSolution::first
double first() const
Distance to first intersection solution along direction.
Trk::ExtrapolationCode::SuccessDestination
@ SuccessDestination
Definition: ExtrapolationCell.h:112
Trk::ExtrapolationCode::FailureDestination
@ FailureDestination
Definition: ExtrapolationCell.h:120
python.ElectronD3PDObject.Target
Target
Definition: ElectronD3PDObject.py:172
Trk::ExtrapolationCell::stepParameters
void stepParameters(const T *pars, ExtrapolationMode::eMode fillMode)
fill or attach the parameters from a step - memory management steered by extrapolationConfiguration
Definition: ExtrapolationCell.h:538
Trk::ExtrapolationCell::navigationStep
int navigationStep
a counter of the navigation Step
Definition: ExtrapolationCell.h:268
Trk::ExtrapolationCell::materialX0
double materialX0
collected material so far in units of X0
Definition: ExtrapolationCell.h:272
Trk::ExtrapolationCell::nextGeometrySignature
GeometrySignature nextGeometrySignature
when a boundary is reached the geometry signature is updated to the next volume one
Definition: ExtrapolationCell.h:265
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
EX_MSG_FATAL
#define EX_MSG_FATAL(navstep, step, idx, x)
Definition: ExtrapolationMacros.h:16
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
Trk::ExtrapolationCode::isSuccessOrRecovered
bool isSuccessOrRecovered() const
return success or recovered
Definition: ExtrapolationCell.h:162
Trk::ExtrapolationCode::FailureNavigation
@ FailureNavigation
Definition: ExtrapolationCell.h:122
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::DistanceSolution::second
double second() const
Distance to second intersection solution along direction (for a cylinder surface)
Trk::ExtrapolationCode::isSuccess
bool isSuccess() const
return success
Definition: ExtrapolationCell.h:153
Trk::NeutralCurvilinearParameters
CurvilinearParametersT< NeutralParametersDim, Neutral, PlaneSurface > NeutralCurvilinearParameters
Definition: NeutralParameters.h:27
Trk::ExtrapolationCode
Definition: ExtrapolationCell.h:105
EX_MSG_INFO
#define EX_MSG_INFO(navstep, step, idx, x)
Definition: ExtrapolationMacros.h:12
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::TimeLimit
Definition: HelperStructs.h:58
Trk::ExtrapolationCell::materialProcess
int materialProcess
the material process to be generated
Definition: ExtrapolationCell.h:276
calibdata.exit
exit
Definition: calibdata.py:236
Trk::ExtrapolationCell::checkConfigurationMode
bool checkConfigurationMode(ExtrapolationMode::eMode em) const
check the configuration mode
Definition: ExtrapolationCell.h:352
Trk::BoundaryFrame
@ BoundaryFrame
Definition: TargetSurfaces.h:41
Trk::ExtrapolationCell::lastBoundaryParameters
T * lastBoundaryParameters
this is the last boundary surface to prevent loops
Definition: ExtrapolationCell.h:253
Trk::ExtrapolationCell::lastLeadParameters
T * lastLeadParameters
this is for caching the last valid
Definition: ExtrapolationCell.h:258
Trk::TrackingVolume::volumeName
const std::string & volumeName() const
Returns the VolumeName - for debug reason, might be depreciated later.
Trk::StepEngine::extrapolate
virtual ExtrapolationCode extrapolate(ExCellCharged &ecCharged, const Surface *sf=0, const BoundaryCheck &bcheck=true) const override
charged extrapolation - public interface
Definition: StepEngine.cxx:66
Trk::PathLimit
Definition: HelperStructs.h:34
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::ExtrapolationCode::FailureConfiguration
@ FailureConfiguration
Definition: ExtrapolationCell.h:124
EX_MSG_DEBUG
#define EX_MSG_DEBUG(navstep, step, idx, x)
Definition: ExtrapolationMacros.h:13
EX_MSG_VERBOSE
#define EX_MSG_VERBOSE(navstep, step, idx, x)
Definition: ExtrapolationMacros.h:14
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
Trk::ExtrapolationCell
Definition: ExtrapolationCell.h:231
Trk::ExtrapolationCell::leadParameters
T * leadParameters
the one last truely valid parameter in the stream
Definition: ExtrapolationCell.h:246
mapkey::sf
@ sf
Definition: TElectronEfficiencyCorrectionTool.cxx:38
Trk::TargetSurfaceVector
std::vector< TargetSurface > TargetSurfaceVector
Definition: TargetSurfaces.h:121
Trk::BoundaryCheck
Definition: BoundaryCheck.h:51
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
Trk::StepEngine::StepEngine
StepEngine(const std::string &, const std::string &, const IInterface *)
Constructor.
Definition: StepEngine.cxx:15
EX_MSG_WARNING
#define EX_MSG_WARNING(navstep, step, idx, x)
Definition: ExtrapolationMacros.h:15
MuonHough::extrapolate
float extrapolate(const MuonLayerHough::Maximum &ref, const MuonLayerHough::Maximum &ex, bool doparabolic=false)
Definition: MuonLayerHough.cxx:521
Trk::ExtrapolationCell::time
float time
timing info
Definition: ExtrapolationCell.h:297
StepEngine.h
AthAlgTool
Definition: AthAlgTool.h:26
python.CaloScaleNoiseConfig.ts
ts
Definition: CaloScaleNoiseConfig.py:87
Trk::ExtrapolationCode::FailureLoop
@ FailureLoop
Definition: ExtrapolationCell.h:121
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Trk::ExtrapolationMode::StopAtBoundary
@ StopAtBoundary
Definition: ExtrapolationCell.h:55
Trk::ExtrapolationCell::leadVolume
const TrackingVolume * leadVolume
the lead Volume - carrying the navigation stream
Definition: ExtrapolationCell.h:248
Trk::TrackingVolume
Definition: TrackingVolume.h:121
TileDCSDataPlotter.tt
tt
Definition: TileDCSDataPlotter.py:874
CHECK_ECODE_SUCCESS
#define CHECK_ECODE_SUCCESS(ecell, ecode)
Definition: ExtrapolationMacros.h:28
Trk::StepEngine::initialize
virtual StatusCode initialize() override
AlgTool initialize method.
Definition: StepEngine.cxx:27
Trk::ExtrapolationCode::InProgress
@ InProgress
Definition: ExtrapolationCell.h:111