ATLAS Offline Software
ExtrapolationCell.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // ExtrapolationCell.h, (c) ATLAS Detector software
8 
9 #ifndef TRKEXUTILS_EXTRAPOLATIONCELL_H
10 #define TRKEXUTILS_EXTRAPOLATIONCELL_H
11 
20 #include "TrkSurfaces/Surface.h"
21 
22 #ifndef TRKEXUTILS_CHECKPATHMACRO
23 #define TRKEXUTILS_CHECKPATHMACRO
24 #define reachedLimit(current, limit, tolerance) \
25  ((limit) > 0 && \
26  (((current) < (limit)) \
27  ? ((current) - (limit)) * ((current) - (limit)) / ((limit) * (limit)) < \
28  (tolerance) * (tolerance) \
29  : true))
30 #endif
31 
32 namespace Trk {
33 
34 class MaterialProperties;
35 class TrackingVolume;
36 class Layer;
37 // class Surface;
38 
43 {
44 
45 public:
46  enum eMode
47  {
48  Direct = 1, // call propagator directly, no navigation
49  Destination = 2, // try to hit the destination, if not other means to stop
50  StopWithPathLimit = 3, // stop when the path limit is reached
52  4, // stop when the material limit is reached in X0
54  5, // stop when the material limit is reached in L0
55  StopAtBoundary = 6, // stop at the next ID / Calo / MS boundary
56  CollectSensitive = 7, // collect parameters on sensitive elements
57  CollectPassive = 8, // collect parameters on passive layers
58  CollectBoundary = 9, // collect parameters on boundary parameters
59  CollectMaterial = 10, // collect all material on the way
60  CollectJacobians = 11, // collect the transport jacobians
61  CollectPathSteps = 12, // collect the single path steps
62  AvoidFallback = 13, // don't fallback to propagation
63  FATRAS = 14 // force initial radialDirection to be outward
64  };
65 };
66 
71 {
72 public:
74  ExtrapolationConfig(unsigned int evalue = 0)
75  : m_value(evalue)
76  {}
77 
80  : m_value(eConfig.m_value)
81  {}
82 
85  {
86  // set the bit corresponding to this mode
87  m_value |= (1 << int(em));
88  }
89 
92  {
93  // check if the bit is set or not
94  return (m_value & (1 << int(em)));
95  }
96 
97 private:
98  unsigned int m_value;
99 };
100 
105 {
106 
107 public:
108  enum eCode
109  {
110  Unset = 0, // no code set yet
111  InProgress = 1, // successful : extrapolation in process
112  SuccessDestination = 2, // successful : destination reached
114  3, // successful : boundary reached & configured to do so
116  4, // successful : path limit reached & configured to do so
118  5, // successful : material limit reached & configured to do so
119  Recovered = 6, // successful : recovered & configured to do so
120  FailureDestination = 7, // failure : could not reach destination
121  FailureLoop = 8, // failure : loop or oscillation between volumes
122  FailureNavigation = 9, // failure : general navigation failure
123  FailureUpdateKill = 10, // failure : updated track under threshold
124  FailureConfiguration = 11, // failure : general configuration failure
125  LeftKnownWorld = 12 // successful ? failure ? if we just knew ...
126  };
127 
130 
131  /* create a simple extrapolation code */
133  : code(c)
134  {}
135 
138  {
139  code = ec;
140  return (*this);
141  }
142 
144  bool operator==(const eCode& ec) const { return (ec == code); }
145 
147  bool operator!=(const eCode& ec) const { return (ec != code); }
148 
150  bool inProgress() const { return (code == InProgress); }
151 
153  bool isSuccess() const { return (code > InProgress && code < Recovered); }
154 
157  {
158  return (code > SuccessDestination && code < Recovered);
159  }
160 
162  bool isSuccessOrRecovered() const
163  {
164  return (code > InProgress && code <= FailureDestination);
165  }
166 
168  bool isFailure() const { return (code > Recovered); }
169 
171  bool isFailureOrRecovered() const { return (code > SuccessMaterialLimit); };
172 
174  const std::string& toString() const { return s_ecodeNames[code]; }
175 
176 private:
177  static const std::vector<std::string> s_ecodeNames;
178 };
179 
186 template<class T>
188 {
189 public:
190  const T* parameters;
191  const Surface* surface;
192  const Layer*
199  const TransportJacobian*
201  double pathLength;
202  float time;
203 
204  ExtrapolationStep(const T* pars = 0, const Surface* sf = nullptr,
205  const ExtrapolationConfig& eConfig = ExtrapolationConfig(),
206  const MaterialProperties* mprop = nullptr,
207  const TransportJacobian* tjac = nullptr,
208  double pLength = -1.)
209  : parameters(pars),
210  surface(sf),
211  layer(nullptr),
212  stepConfiguration(eConfig),
213  material(mprop),
214  materialPosition(Amg::Vector3D(0., 0., 0.)),
215  materialScaling(1.),
216  transportJacobian(tjac),
217  pathLength(pLength),
218  time(0) {}
219 };
220 
229 template<class T>
231 {
232 public:
234  const TrackingVolume*
236  const Layer* startLayer;
237 
240  const Layer* endLayer;
242  const Surface*
245 
247  const TrackingVolume*
249  const Layer* leadLayer;
251 
254  const Surface*
257 
262 
266 
269  double pathLength;
270  double pathLimit;
271 
272  double materialX0;
274  double materialL0;
277 
283  bool navigationCurvilinear;
285  bool sensitiveCurvilinear;
289 
291  std::vector<ExtrapolationStep<T>>
293 
296 
297  float time;
299  float zOaTrX;
300  float zX;
301 
303  ExtrapolationCell(T& sParameters,
305  unsigned int econfig = 1)
306  : startParameters(&sParameters)
307  , startVolume(nullptr)
308  , startLayer(nullptr)
309  , endParameters(0)
310  , endVolume(nullptr)
311  , endLayer(nullptr)
312  , endSurface(nullptr)
313  , leadParameters(&sParameters)
314  , leadVolume(nullptr)
315  , leadLayer(nullptr)
316  , leadLayerSurface(nullptr)
318  , lastBoundarySurface(nullptr)
319  , lastLeadParameters(&sParameters)
320  , propDirection(pDir)
321  , radialDirection(1)
323  , navigationStep(0)
324  , pathLength(0.)
325  , pathLimit(-1)
326  , materialX0(0.)
327  , materialLimitX0(-1.)
328  , materialL0(0.)
329  , materialLimitL0(-1.)
330  , materialProcess(0)
331  , pHypothesis(Trk::pion)
334  , navigationCurvilinear(true)
335  , sensitiveCurvilinear(false)
336  , destinationCurvilinear(false)
337  , extrapolationConfiguration(econfig)
338  , eLoss(nullptr)
339  , zOaTrX(0.)
340  , zX(0.)
341  {}
342 
345  {
346  // set the bit corresponding to this mode
348  }
349 
352  {
353  // check if the bit is set or not
355  }
356 
358  bool onLastBoundary() const
359  {
361  }
362 
365  void stepParameters(const T* pars, ExtrapolationMode::eMode fillMode);
366 
369  void stepTransport(const Surface& sf,
370  double pathLength = 0.,
371  const TransportJacobian* tjac = nullptr);
372 
375  void addMaterial(double sfactor, const MaterialProperties* mprop = nullptr);
376  void addMaterial(double step, const Material* mat = nullptr);
377 
380  void stepMaterial(const Surface& sf,
381  const Layer* lay,
382  const Amg::Vector3D& position,
383  double sfactor,
384  const MaterialProperties* mprop = nullptr);
385 
387  bool initialVolume() const { return (leadVolume == startVolume); }
388 
390  bool finalVolumeReached() const
391  {
392  return (leadVolume == endVolume && endVolume);
393  }
394 
396  bool pathLimitReached(double tolerance = 0.001) const
397  {
400  }
401 
403  bool materialLimitReached(double tolerance = 0.001) const
404  {
405  return ((checkConfigurationMode(
411  }
412 
414  void restartAtDestination();
415 
417  void finalize(const ExtrapolationCode& ec);
418 
420  void emptyGarbageBin(const ExtrapolationCode& ec);
421 
424  {
425  pHypothesis = hypo;
426  }
427 
430  {
431  // in FATRAS extrapolation mode force radial direction to be outwards (+1)
433  radialDirection = 1;
434  else {
435  // if the endSurface is given, it is used to evaluate the radial direction
436  // else the leadParamenters are used
437  if (endSurface) {
438  if (leadParameters->position().perp() >
440  radialDirection = -1;
441  } else {
442  if (leadParameters->position().perp() >
443  (leadParameters->position() +
444  propDirection * leadParameters->momentum().unit())
445  .perp())
446  radialDirection = -1;
447  }
448  }
449  }
450 
454  {
455  // this checks the radial compatibility - not needed for outwards moving
456  if (radialDirection > 0)
457  return true;
458  // this was radially inwards moving and stays like this
459  if (leadParameters->position().perp() >
460  (leadParameters->position() +
461  propDirection * leadParameters->momentum().unit())
462  .perp())
463  return true;
464  // radial direction changed
465  return false;
466  }
467 
468 private:
469  std::vector<const T*> m_garbageCollection;
470 };
471 
472 template<class T>
473 void
475 {
477  startParameters = endParameters;
478  startVolume = endVolume;
479  startLayer = endLayer;
480  endParameters = 0;
481  endVolume = 0;
482  endLayer = 0;
483  endSurface = 0;
484  leadParameters = startParameters;
485  leadVolume = 0;
486  leadLayer = 0;
487  leadLayerSurface = 0;
488  lastBoundaryParameters = 0;
489  lastBoundarySurface = 0;
490  lastLeadParameters = startParameters;
491  navigationStep = 0;
492  pathLength = 0.;
493  materialX0 = 0.;
494  materialL0 = 0.;
495  if (eLoss)
496  eLoss->set(0., 0., 0., 0., 0., 0.);
497  // clear the vector
498  extrapolationSteps.clear();
499 }
500 
501 template<class T>
502 void
504 {
505  // set the leadParameters to the endParameters if anything happened here and
506  // the code wass succesful
507  if (ec.isSuccessOrRecovered() && leadParameters != startParameters) {
508  // end parameters are the last lead parameters !< @TODO check if we need a
509  // clone here! should not be necessary
510  endParameters = leadParameters->clone();
511  }
512  // now do the cleanup - will delete the step content if eCode is failure
513  emptyGarbageBin(ec);
514  delete eLoss;
515 }
516 
517 template<class T>
518 void
520 {
521  for (auto bC : m_garbageCollection)
522  delete bC;
523  m_garbageCollection.clear();
524  // in case of failure of the extrapolation stream, clear all the caches
525  if (ec.isFailure()) {
526  for (auto& es : extrapolationSteps) {
527  delete es.parameters;
528  delete es.transportJacobian;
529  }
530  // now clear the vector
531  extrapolationSteps.clear();
532  }
533 }
534 
535 template<class T>
536 void
539 {
540  // this is the garbage bin collection
541  if (!checkConfigurationMode(fillMode)) {
542  // only dump them in the garbage bin
543  m_garbageCollection.push_back(parameters);
544  return;
545  }
546  // find out if you want to attach or you need a new one
547  // current step surface
548  const Surface* cssf = &(parameters->associatedSurface());
549  // get the last step surface - if it is identical with the current one ->
550  // attach information
551  const Surface* lssf =
552  extrapolationSteps.size()
553  ? extrapolationSteps[extrapolationSteps.size() - 1].surface
554  : 0;
555  // create a new step
556  if (cssf != lssf)
557  extrapolationSteps.push_back(ExtrapolationStep<T>());
558  // fill the parameters, the surface and add the mode
559  extrapolationSteps[extrapolationSteps.size() - 1].parameters = parameters;
560  extrapolationSteps[extrapolationSteps.size() - 1].surface = cssf;
561  extrapolationSteps[extrapolationSteps.size() - 1].stepConfiguration.addMode(
562  fillMode);
563 }
564 
565 template<class T>
566 void
568  double pLength,
569  const TransportJacobian* tjac)
570 {
571  // find out if you want to attach or you need a new one
572  // current step surface
573  const Surface* cssf = &sf;
574  // get the last step surface - if it is identical with the current one ->
575  // attach information
576  const Surface* lssf =
577  extrapolationSteps.size()
578  ? extrapolationSteps[extrapolationSteps.size() - 1].surface
579  : 0;
580  // only create a new step for a transport jacobian
581  if (tjac) {
582  // create a new step
583  if (cssf != lssf)
584  extrapolationSteps.push_back(ExtrapolationStep<T>());
585  // set the surface
586  extrapolationSteps[extrapolationSteps.size() - 1].surface = cssf;
587  // set the the transport information
588  extrapolationSteps[extrapolationSteps.size() - 1].transportJacobian = tjac;
589  extrapolationSteps[extrapolationSteps.size() - 1].stepConfiguration.addMode(
591  // fill the step path length
592  if (pLength > 0.) {
593  extrapolationSteps[extrapolationSteps.size() - 1].pathLength = pLength;
594  extrapolationSteps[extrapolationSteps.size() - 1]
595  .stepConfiguration.addMode(Trk::ExtrapolationMode::CollectPathSteps);
596  }
597  } else {
598  // let's just fill the pathLength information
599  pathLength += pLength;
600  }
601 }
602 
603 template<class T>
604 void
606  const MaterialProperties* mprop)
607 {
608 
609  // fill the material if there
610  if (mprop) {
611  // the overal material
612  materialX0 += sfactor * mprop->thicknessInX0();
613  materialL0 += sfactor * mprop->thicknessInL0();
614  zOaTrX += mprop->zOverAtimesRho() * sfactor * mprop->thicknessInX0();
615  zX += mprop->averageZ() * sfactor * mprop->thicknessInX0();
616  }
617 }
618 
619 template<class T>
620 void
622 {
623 
624  // fill the material if there
625  if (mat && step > 0.) {
626  // the overal material
627  materialX0 += step / mat->X0;
628  materialL0 += step / mat->L0;
629  zOaTrX += mat->zOverAtimesRho() * step / mat->X0;
630  zX += mat->averageZ() * step / mat->X0;
631  }
632 }
633 
634 template<class T>
635 void
637  const Layer* lay,
638  const Amg::Vector3D& mposition,
639  double sfactor,
640  const MaterialProperties* mprop)
641 {
642 
643  // add material to the global counter
644  addMaterial(sfactor, mprop);
645  // find out if you want to attach or you need a new one
646  // current step surface
647  const Surface* cssf = &sf;
648  // get the last step surface - if it is identical with the current one ->
649  // attach information
650  const Surface* lssf =
651  extrapolationSteps.size()
652  ? extrapolationSteps[extrapolationSteps.size() - 1].surface
653  : 0;
654  // create a new step
655  if (cssf != lssf)
656  extrapolationSteps.push_back(ExtrapolationStep<T>());
657  // set the surface
658  extrapolationSteps[extrapolationSteps.size() - 1].surface = cssf;
659  extrapolationSteps[extrapolationSteps.size() - 1].layer = lay;
660  // fill the material if there
661  if (mprop) {
662  // record the step information
663  extrapolationSteps[extrapolationSteps.size() - 1].material = mprop;
664  extrapolationSteps[extrapolationSteps.size() - 1].stepConfiguration.addMode(
666  extrapolationSteps[extrapolationSteps.size() - 1].materialPosition =
667  mposition;
668  extrapolationSteps[extrapolationSteps.size() - 1].materialScaling = sfactor;
669  }
670 }
671 
672 } // end of namespace
673 
674 #endif // TRKEXUTILS_EXTRAPOLATIONCELL_H
675 
Trk::ExtrapolationCell::materialLimitX0
double materialLimitX0
given material limit in X0
Definition: ExtrapolationCell.h:273
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
Trk::ExtrapolationCell::restartAtDestination
void restartAtDestination()
prepare destination as new start point - optimised for Kalman filtering
Definition: ExtrapolationCell.h:474
Trk::ExtrapolationMode::CollectPassive
@ CollectPassive
Definition: ExtrapolationCell.h:57
Trk::TransportJacobian
Definition: TransportJacobian.h:46
EnergyLoss.h
Trk::ExtrapolationStep::materialScaling
double materialScaling
scale factor for the material as calculated
Definition: ExtrapolationCell.h:198
Trk::ExtrapolationCode::Unset
@ Unset
Definition: ExtrapolationCell.h:110
Trk::ExtrapolationCell::destinationCurvilinear
bool destinationCurvilinear
return curvilinear parameters even on destination
Definition: ExtrapolationCell.h:288
Trk::ExtrapolationCell::extrapolationSteps
std::vector< ExtrapolationStep< T > > extrapolationSteps
parameters on sensitive detector elements
Definition: ExtrapolationCell.h:292
Trk::ExtrapolationCell::lastBoundarySurface
const Surface * lastBoundarySurface
this is the last boundary surface to prevent loops
Definition: ExtrapolationCell.h:256
Trk::ExtrapolationConfig::m_value
unsigned int m_value
Definition: ExtrapolationCell.h:98
Trk::ExtrapolationCell::m_garbageCollection
std::vector< const T * > m_garbageCollection
Definition: ExtrapolationCell.h:469
GeometrySignature.h
Trk::ExtrapolationCode::FailureUpdateKill
@ FailureUpdateKill
Definition: ExtrapolationCell.h:123
Trk::MagneticFieldProperties
Definition: MagneticFieldProperties.h:31
Trk::ExtrapolationCode::inProgress
bool inProgress() const
return inProgress
Definition: ExtrapolationCell.h:150
Surface.h
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
Trk::ExtrapolationMode::StopWithMaterialLimitL0
@ StopWithMaterialLimitL0
Definition: ExtrapolationCell.h:53
Trk::ExtrapolationCell::addConfigurationMode
void addConfigurationMode(ExtrapolationMode::eMode em)
add a configuration mode
Definition: ExtrapolationCell.h:344
GeometrySignature
MaterialProperties.h
Trk::ExtrapolationStep::layer
const Layer * layer
the associatedLayer() or materialLayer() of the surface
Definition: ExtrapolationCell.h:193
Trk::ExtrapolationCell::onLastBoundary
bool onLastBoundary() const
check if you are still at the last boundary surface
Definition: ExtrapolationCell.h:358
Trk::ExtrapolationMode::CollectBoundary
@ CollectBoundary
Definition: ExtrapolationCell.h:58
Trk::ExtrapolationCell::propDirection
PropDirection propDirection
this is the propagation direction
Definition: ExtrapolationCell.h:260
Trk::ExtrapolationMode
enumeration to decode - for Extrapolation steering
Definition: ExtrapolationCell.h:43
Trk::ExtrapolationCell::pHypothesis
ParticleHypothesis pHypothesis
what particle hypothesis to be used, default : pion
Definition: ExtrapolationCell.h:279
Trk::ExtrapolationConfig::ExtrapolationConfig
ExtrapolationConfig(unsigned int evalue=0)
Constructor.
Definition: ExtrapolationCell.h:74
mat
GeoMaterial * mat
Definition: LArDetectorConstructionTBEC.cxx:53
Trk::ExtrapolationMode::StopWithPathLimit
@ StopWithPathLimit
Definition: ExtrapolationCell.h:50
Trk::MaterialProperties::thicknessInX0
float thicknessInX0() const
Return the radiationlength fraction.
Trk::ExtrapolationCell::emptyGarbageBin
void emptyGarbageBin(const ExtrapolationCode &ec)
memory cleanup
Definition: ExtrapolationCell.h:519
Trk::ExtrapolationCell::sensitiveCurvilinear
bool sensitiveCurvilinear
stay in curvilinear parameters even on the destination surface
Definition: ExtrapolationCell.h:286
Trk::ExtrapolationCode::operator==
bool operator==(const eCode &ec) const
== operator to eCode
Definition: ExtrapolationCell.h:144
Trk::ExtrapolationCell::endLayer
const Layer * endLayer
the end Layer - can be optionally 0 (needs other trigger to stop)
Definition: ExtrapolationCell.h:241
Trk::ExtrapolationCell::stepTransport
void stepTransport(const Surface &sf, double pathLength=0., const TransportJacobian *tjac=nullptr)
fill transport information - path length and TransportJacobian
Definition: ExtrapolationCell.h:567
Trk::MaterialProperties::thicknessInL0
float thicknessInL0() const
Return the nuclear interaction length fraction.
PropDirection.h
Trk::ExtrapolationCell::stepMaterial
void stepMaterial(const Surface &sf, const Layer *lay, const Amg::Vector3D &position, double sfactor, const MaterialProperties *mprop=nullptr)
fill or attach material, jacobian, step length
Definition: ExtrapolationCell.h:636
Trk::MaterialUpdateMode
MaterialUpdateMode
This is a steering enum to force the material update it can be: (1) addNoise (-1) removeNoise Second ...
Definition: MaterialUpdateMode.h:18
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
Trk::ExtrapolationCode::SuccessBoundaryReached
@ SuccessBoundaryReached
Definition: ExtrapolationCell.h:113
Trk::ExtrapolationMode::CollectPathSteps
@ CollectPathSteps
Definition: ExtrapolationCell.h:61
Trk::Surface::globalReferencePoint
virtual const Amg::Vector3D & globalReferencePoint() const
Returns a global reference point on the surface, for PlaneSurface, StraightLineSurface,...
TransportJacobian.h
Trk::ExtrapolationCell::pathLimitReached
bool pathLimitReached(double tolerance=0.001) const
the materialLimitReached
Definition: ExtrapolationCell.h:396
Trk::ExtrapolationCode::SuccessDestination
@ SuccessDestination
Definition: ExtrapolationCell.h:112
Trk::ExtrapolationStep
Definition: ExtrapolationCell.h:188
Trk::ExtrapolationCode::FailureDestination
@ FailureDestination
Definition: ExtrapolationCell.h:120
python.RingerConstants.Layer
Layer
Definition: RingerConstants.py:42
Trk::ExtrapolationCell::startVolume
const TrackingVolume * startVolume
the start volume - needed for the volumeToVolume loop
Definition: ExtrapolationCell.h:235
Trk::ExtrapolationCell::pathLength
double pathLength
the path length accumulated
Definition: ExtrapolationCell.h:269
Trk::ExtrapolationCell::leadLayer
const Layer * leadLayer
the lead Layer - carrying the navigation stream
Definition: ExtrapolationCell.h:249
Trk::ExtrapolationCell::zX
float zX
z*dInX0 (for average calculations)
Definition: ExtrapolationCell.h:300
Trk::ExtrapolationCell::eLoss
EnergyLoss * eLoss
cumulated energy loss
Definition: ExtrapolationCell.h:298
Trk::ExtrapolationCell::setParticleHypothesis
void setParticleHypothesis(const ParticleHypothesis &hypo)
set ParticleHypothesis
Definition: ExtrapolationCell.h:423
Trk::ExtrapolationCode::operator!=
bool operator!=(const eCode &ec) const
!= operator to eCode
Definition: ExtrapolationCell.h:147
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:537
Trk::ExtrapolationStep::stepConfiguration
ExtrapolationConfig stepConfiguration
sensitive, passive, boundary to name the parameters
Definition: ExtrapolationCell.h:194
MagneticFieldProperties.h
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
Trk::ExtrapolationMode::eMode
eMode
Definition: ExtrapolationCell.h:47
Trk::ExtrapolationCell::navigationStep
int navigationStep
a counter of the navigation Step
Definition: ExtrapolationCell.h:268
Trk::ExtrapolationStep::material
const MaterialProperties * material
the associated material
Definition: ExtrapolationCell.h:196
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
Trk::PropDirection
PropDirection
Definition: PropDirection.h:19
Trk::ExtrapolationCode::isSuccessOrRecovered
bool isSuccessOrRecovered() const
return success or recovered
Definition: ExtrapolationCell.h:162
Trk::ExtrapolationCell::radialDirection
int radialDirection
for checking if navigation is radially towards the IP, this has consequences for entering cylinders
Definition: ExtrapolationCell.h:261
Trk::ExtrapolationCode::Recovered
@ Recovered
Definition: ExtrapolationCell.h:119
Trk::ExtrapolationCode::FailureNavigation
@ FailureNavigation
Definition: ExtrapolationCell.h:122
Trk::ExtrapolationCode::LeftKnownWorld
@ LeftKnownWorld
Definition: ExtrapolationCell.h:125
Trk::ExtrapolationMode::FATRAS
@ FATRAS
Definition: ExtrapolationCell.h:63
Trk::ExtrapolationMode::Destination
@ Destination
Definition: ExtrapolationCell.h:49
Trk::ExtrapolationCell::materialL0
double materialL0
collected material so far in units of L0
Definition: ExtrapolationCell.h:274
Trk::ExtrapolationCode::isSuccess
bool isSuccess() const
return success
Definition: ExtrapolationCell.h:153
Trk::pion
@ pion
Definition: ParticleHypothesis.h:29
Trk::ExtrapolationConfig::addMode
void addMode(ExtrapolationMode::eMode em)
add a configuration mode
Definition: ExtrapolationCell.h:84
Trk::ExtrapolationCell::setRadialDirection
void setRadialDirection()
estimate the radial direction of the extrapolation cell
Definition: ExtrapolationCell.h:429
Trk::ExtrapolationCode
Definition: ExtrapolationCell.h:105
Trk::ExtrapolationCell::endParameters
T * endParameters
by pointer - are newly created and can be optionally 0
Definition: ExtrapolationCell.h:238
Trk::ExtrapolationCode::SuccessPathLimit
@ SuccessPathLimit
Definition: ExtrapolationCell.h:115
Trk::ExtrapolationMode::CollectSensitive
@ CollectSensitive
Definition: ExtrapolationCell.h:56
Trk::ExtrapolationCode::s_ecodeNames
static const std::vector< std::string > s_ecodeNames
Definition: ExtrapolationCell.h:177
Trk::ExtrapolationMode::CollectJacobians
@ CollectJacobians
Definition: ExtrapolationCell.h:60
Trk::ExtrapolationCell::startParameters
T * startParameters
by reference - need to be defined
Definition: ExtrapolationCell.h:233
ParticleHypothesis.h
Trk::ExtrapolationCell::materialProcess
int materialProcess
the material process to be generated
Definition: ExtrapolationCell.h:276
Trk::ExtrapolationConfig::checkMode
bool checkMode(ExtrapolationMode::eMode em) const
check the configuration mode
Definition: ExtrapolationCell.h:91
Trk::Unsigned
@ Unsigned
Definition: GeometrySignature.h:33
Trk::FullField
@ FullField
Field is set to be realistic, but within a given Volume.
Definition: MagneticFieldMode.h:21
Trk::ExtrapolationCell::checkConfigurationMode
bool checkConfigurationMode(ExtrapolationMode::eMode em) const
check the configuration mode
Definition: ExtrapolationCell.h:351
reachedLimit
#define reachedLimit(current, limit, tolerance)
Definition: ExtrapolationCell.h:24
Trk::ExtrapolationMode::AvoidFallback
@ AvoidFallback
Definition: ExtrapolationCell.h:62
Trk::ExtrapolationStep::parameters
const T * parameters
the parameters of this step
Definition: ExtrapolationCell.h:190
Trk::ExtrapolationCode::SuccessMaterialLimit
@ SuccessMaterialLimit
Definition: ExtrapolationCell.h:117
Trk::ExtrapolationCell::lastBoundaryParameters
T * lastBoundaryParameters
this is the last boundary surface to prevent loops
Definition: ExtrapolationCell.h:253
tolerance
Definition: suep_shower.h:17
Trk::ExtrapolationCell::lastLeadParameters
T * lastLeadParameters
this is for caching the last valid
Definition: ExtrapolationCell.h:258
Trk::ExtrapolationCode::isSuccessBeforeDestination
bool isSuccessBeforeDestination() const
return sucess other than destination reached
Definition: ExtrapolationCell.h:156
Trk::ExtrapolationCell::ExtrapolationCell
ExtrapolationCell(T &sParameters, PropDirection pDir=alongMomentum, unsigned int econfig=1)
start parameters are compulsory
Definition: ExtrapolationCell.h:303
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::ExtrapolationCell::materialLimitL0
double materialLimitL0
given material limit in L0
Definition: ExtrapolationCell.h:275
Trk::ExtrapolationCode::isFailureOrRecovered
bool isFailureOrRecovered() const
return failure or recovered
Definition: ExtrapolationCell.h:171
Trk::ExtrapolationCode::isFailure
bool isFailure() const
return failure
Definition: ExtrapolationCell.h:168
Amg
Definition of ATLAS Math & Geometry primitives (Amg)
Definition: AmgStringHelpers.h:19
Trk::ExtrapolationCell::materialUpdateMode
MaterialUpdateMode materialUpdateMode
how to deal with the material effect, default: addNoise
Definition: ExtrapolationCell.h:282
Trk::ExtrapolationConfig
Definition: ExtrapolationCell.h:71
Trk::ExtrapolationCell::pathLimit
double pathLimit
the maximal limit of the extrapolation
Definition: ExtrapolationCell.h:270
Trk::ExtrapolationCode::code
eCode code
the actual code
Definition: ExtrapolationCell.h:129
Trk::EnergyLoss
This class describes energy loss material effects in the ATLAS tracking EDM.
Definition: EnergyLoss.h:34
Trk::ExtrapolationMode::Direct
@ Direct
Definition: ExtrapolationCell.h:48
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::ExtrapolationMode::CollectMaterial
@ CollectMaterial
Definition: ExtrapolationCell.h:59
Trk::ExtrapolationCode::FailureConfiguration
@ FailureConfiguration
Definition: ExtrapolationCell.h:124
Trk::ExtrapolationConfig::ExtrapolationConfig
ExtrapolationConfig(const ExtrapolationConfig &eConfig)
Copy Constructor.
Definition: ExtrapolationCell.h:79
MaterialUpdateMode.h
Trk::ExtrapolationStep::pathLength
double pathLength
the path length from the last step
Definition: ExtrapolationCell.h:201
Trk::ExtrapolationCell::zOaTrX
float zOaTrX
z/A*rho*dInX0 (for average calculations)
Definition: ExtrapolationCell.h:299
Trk::MaterialProperties
Definition: MaterialProperties.h:40
Trk::ExtrapolationCell
Definition: ExtrapolationCell.h:231
Trk::ExtrapolationCell::addMaterial
void addMaterial(double sfactor, const MaterialProperties *mprop=nullptr)
fill or attach material, jacobian, step length
Definition: ExtrapolationCell.h:605
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::ExtrapolationStep::ExtrapolationStep
ExtrapolationStep(const T *pars=0, const Surface *sf=nullptr, const ExtrapolationConfig &eConfig=ExtrapolationConfig(), const MaterialProperties *mprop=nullptr, const TransportJacobian *tjac=nullptr, double pLength=-1.)
Definition: ExtrapolationCell.h:204
Trk::ExtrapolationCode::ExtrapolationCode
ExtrapolationCode(eCode c)
Definition: ExtrapolationCell.h:132
Trk::addNoise
@ addNoise
Definition: MaterialUpdateMode.h:19
Trk::MaterialProperties::averageZ
float averageZ() const
Returns the average Z of the material.
Trk::ExtrapolationCell::navigationCurvilinear
bool navigationCurvilinear
stay in curvilinear parameters where possible, default : true
Definition: ExtrapolationCell.h:284
Trk::ExtrapolationCell::materialLimitReached
bool materialLimitReached(double tolerance=0.001) const
the materialLimitReached
Definition: ExtrapolationCell.h:403
Trk::ExtrapolationCode::eCode
eCode
Definition: ExtrapolationCell.h:109
LArCellBinning.step
step
Definition: LArCellBinning.py:158
Trk::ExtrapolationCell::initialVolume
bool initialVolume() const
check if this is the initial volume
Definition: ExtrapolationCell.h:387
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
Trk::ExtrapolationCell::finalize
void finalize(const ExtrapolationCode &ec)
finalize call - this one is called by the ExtrapoaltionEngine
Definition: ExtrapolationCell.h:503
Trk::MaterialProperties::zOverAtimesRho
float zOverAtimesRho() const
Return the .
Trk::ExtrapolationCell::checkRadialCompatibility
bool checkRadialCompatibility() const
check whether the propagation stays compatible with initial radial direction
Definition: ExtrapolationCell.h:453
Trk::ExtrapolationCell::time
float time
timing info
Definition: ExtrapolationCell.h:297
Trk::Material
Definition: Material.h:116
Trk::ExtrapolationMode::StopWithMaterialLimitX0
@ StopWithMaterialLimitX0
Definition: ExtrapolationCell.h:51
Trk::ExtrapolationCell::endVolume
const TrackingVolume * endVolume
the end Volume - can be optionally 0 (needs other trigger to stop)
Definition: ExtrapolationCell.h:239
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::ExtrapolationCell::startLayer
const Layer * startLayer
the start layer - needed for layerToLayer loop
Definition: ExtrapolationCell.h:236
Trk::ExtrapolationStep::materialPosition
Amg::Vector3D materialPosition
position from where the material is taken
Definition: ExtrapolationCell.h:197
Trk::TrackingVolume
Definition: TrackingVolume.h:121
python.compressB64.c
def c
Definition: compressB64.py:93
Trk::ExtrapolationCell::finalVolumeReached
bool finalVolumeReached() const
trigger for final volume
Definition: ExtrapolationCell.h:390
Trk::ExtrapolationCell::endSurface
const Surface * endSurface
keep track of the destination surface - can be optionally 0
Definition: ExtrapolationCell.h:244
Trk::ExtrapolationCell::mFieldMode
MagneticFieldProperties mFieldMode
what magnetic field mode to be used, default : fullField
Definition: ExtrapolationCell.h:281
Trk::ExtrapolationCell::extrapolationConfiguration
ExtrapolationConfig extrapolationConfiguration
overall global configuration
Definition: ExtrapolationCell.h:295
Trk::ExtrapolationCode::operator=
ExtrapolationCode & operator=(const eCode &ec)
assigment operator - because we can
Definition: ExtrapolationCell.h:137
Trk::ExtrapolationStep::transportJacobian
const TransportJacobian * transportJacobian
the transport jacobian from the last step
Definition: ExtrapolationCell.h:200
Trk::ExtrapolationStep::surface
const Surface * surface
the surface where the step is bound
Definition: ExtrapolationCell.h:191
Trk::ExtrapolationCode::toString
const std::string & toString() const
toString
Definition: ExtrapolationCell.h:174
Trk::ExtrapolationCode::InProgress
@ InProgress
Definition: ExtrapolationCell.h:111
Trk::Layer
Definition: Layer.h:73
Trk::ExtrapolationStep::time
float time
timing info
Definition: ExtrapolationCell.h:202
Trk::ExtrapolationCell::leadLayerSurface
const Surface * leadLayerSurface
if the lead layer has sub structure that is the first one to start with
Definition: ExtrapolationCell.h:250