ATLAS Offline Software
LocalExtrapolatorCache.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3  */
4 
5 #ifndef TRKEXTOOLS_LOCALEXCACHE_H
6 #define TRKEXTOOLS_LOCALEXCACHE_H
7 #include "ExtrUniquePtrHolder.h"
9 #include "ParametersNextVolume.h"
11 #include "TrkGeometry/TrackingGeometry.h" //because of m_trackingGeometry-> in header
12 #include "TrkExInterfaces/INavigator.h" //using navigator. in this header
13 #include <utility>
14 #include <vector>
15 #include <string>
16 #include <memory>
17 
18  namespace Trk{
19  class Surface;
20  class ExtrapolationCache;
21  class EnergyLoss;
22  class TrackStateOnSurface;
23  }
24 
25 namespace Dbg {
26  // counters to gather statistics for abort conditions
27  struct PropStat {
28  std::atomic<unsigned int> m_maxRecursionCount{};
29  std::atomic<unsigned int> m_maxPropagations{};
30  std::atomic<unsigned int> m_maxMethodSequence{};
31  };
32 }
33 
34 namespace Trk{
35 struct Cache
36  {
37  using TrackParametersUVector = std::vector<std::unique_ptr<Trk::TrackParameters>>;
38  using identifiedParameters_t = std::vector<std::pair<std::unique_ptr<Trk::TrackParameters>, int>>;
39  using DestSurf = std::pair<const Surface*, BoundaryCheck>;
47  std::vector<Trk::IMaterialEffectsUpdator::ICache> m_MaterialUpCache;
49  bool m_dense = false;
50  unsigned int m_layerResolved{};
51  unsigned int m_methodSequence = 0;
52  const Surface* m_destinationSurface = nullptr;
54  const Volume* m_boundaryVolume = nullptr;
56  const Surface* m_recallSurface = nullptr;
58  const Layer* m_recallLayer = nullptr;
64  //Tracking Geometry ptr
66  //path
67  double m_path{};
69  //to a vector of unique parameters of detector elements
72  bool m_cacheLastMatLayer = false;
73  const Layer* m_lastMaterialLayer = nullptr;
77  const Trk::EnergyLoss* m_cacheEloss = nullptr;
79  std::vector<const Trk::TrackStateOnSurface*>* m_matstates = nullptr;
80  // for active volumes
81  std::unique_ptr<identifiedParameters_t> m_identifiedParameters{};
82  //
83  std::pair<unsigned int, unsigned int> m_denseResolved{};
84  //
85  std::vector<DestSurf> m_staticBoundaries{};
86  std::vector<DestSurf> m_detachedBoundaries{};
87  std::vector<DestSurf> m_denseBoundaries{};
88  std::vector<DestSurf> m_navigBoundaries{};
89  std::vector<DestSurf> m_layers{};
90  //
91  std::vector<std::pair<const Trk::DetachedTrackingVolume*, unsigned int>> m_detachedVols{};
92  std::vector<std::pair<const Trk::TrackingVolume*, unsigned int>> m_denseVols{};
93  std::vector<std::pair<const Trk::TrackingVolume*, const Trk::Layer*>> m_navigLays{};
94  std::vector<std::pair<const Trk::Surface*, Trk::BoundaryCheck>> m_navigSurfs{};
95  std::vector<const Trk::DetachedTrackingVolume*> m_navigVols{};
96  std::vector<std::pair<const Trk::TrackingVolume*, unsigned int>> m_navigVolsInt{};
97 
98  // To gather statistics to tune abort condition based for to large call depth, or too many propagations
101  std::array<unsigned short,kNRecursionValues> m_recursionCount {}; // current-recursion-level, max
102  unsigned int m_nPropagations {};
104 
105  //methods
107  ~Cache();
108  Cache(const std::vector<const IMaterialEffectsUpdator*> & updaters);
109 
110  void setTrackingGeometry(const Trk::INavigator& navigator,
111  const EventContext& ctx) {
112  if (!m_trackingGeometry) {
113  m_trackingGeometry = navigator.trackingGeometry(ctx);
114  }
115  }
116 
117  const Trk::TrackingVolume* volume(const EventContext&,
118  const Amg::Vector3D& gp) const {
119  assert(m_trackingGeometry);
121  }
122 
126 
129 
130  //
131  void
132  populateMatEffUpdatorCache(const std::vector<const IMaterialEffectsUpdator*> & updaters);
133 
135  void
136  setRecallInformation(const Surface&,const Layer&,const TrackingVolume&);
137 
138  void
140 
142  std::string
143  to_string(const std::string& txt) const;
144 
146  bool
147  elossPointerOverwritten() const;
148 
150  std::string
151  elossPointerErrorMsg(int lineNumber=0) const;
152 
154  void
156 
158  void
159  addOneNavigationLayer(const Trk::TrackingVolume* pDetVol, const Trk::Layer* pLayer, bool boundaryCheck=true);
160 
162  void
163  addOneNavigationLayer(const Trk::Layer* pLayer, bool boundaryCheck=true);
164 
166  void
168  };
169  }
170  #endif
171 
172 
Trk::Cache::subMaterialEffectsUpdatorCache
IMaterialEffectsUpdator::ICache & subMaterialEffectsUpdatorCache()
Definition: LocalExtrapolatorCache.cxx:58
Trk::Cache::m_detachedBoundaries
std::vector< DestSurf > m_detachedBoundaries
Definition: LocalExtrapolatorCache.h:86
Trk::Cache::m_denseVols
std::vector< std::pair< const Trk::TrackingVolume *, unsigned int > > m_denseVols
Definition: LocalExtrapolatorCache.h:92
Trk::Cache::Cache
Cache(Dbg::PropStat &stat)
Definition: LocalExtrapolatorCache.cxx:20
Trk::Cache::m_ownedPtrs
Trk::ExtrUniquePtrHolder< Trk::TrackParameters > m_ownedPtrs
parameters to be used for final propagation in case of fallback
Definition: LocalExtrapolatorCache.h:41
Trk::Cache::m_detachedVols
std::vector< std::pair< const Trk::DetachedTrackingVolume *, unsigned int > > m_detachedVols
Definition: LocalExtrapolatorCache.h:91
Trk::IMaterialEffectsUpdator::ICache
Cache class to allow passing information to/between calls.
Definition: IMaterialEffectsUpdator.h:63
Dbg::PropStat
Definition: LocalExtrapolatorCache.h:27
Trk::Cache::kMaxRecursionCount
@ kMaxRecursionCount
Definition: LocalExtrapolatorCache.h:100
Trk::Cache::m_lastValidParameters
Trk::TrackParameters * m_lastValidParameters
return helper for parameters and boundary
Definition: LocalExtrapolatorCache.h:43
TrackParameters.h
Trk::Cache::ERecursionValues
ERecursionValues
Definition: LocalExtrapolatorCache.h:100
Trk::Cache::m_MaterialUpCache
std::vector< Trk::IMaterialEffectsUpdator::ICache > m_MaterialUpCache
internal switch for resolved configuration
Definition: LocalExtrapolatorCache.h:47
Trk::Cache
Definition: LocalExtrapolatorCache.h:36
Trk::Cache::m_extrapolationCache
Trk::ExtrapolationCache * m_extrapolationCache
cache pointer for Eloss
Definition: LocalExtrapolatorCache.h:75
Trk::Cache::m_navigBoundaries
std::vector< DestSurf > m_navigBoundaries
Definition: LocalExtrapolatorCache.h:88
Trk::Cache::m_recallTrackingVolume
const TrackingVolume * m_recallTrackingVolume
Definition: LocalExtrapolatorCache.h:60
Trk::Cache::m_layers
std::vector< DestSurf > m_layers
Definition: LocalExtrapolatorCache.h:89
Trk::Cache::populateMatEffUpdatorCache
void populateMatEffUpdatorCache(const std::vector< const IMaterialEffectsUpdator * > &updaters)
Definition: LocalExtrapolatorCache.cxx:63
Trk::Cache::m_parametersOnDetElements
TrackParametersUVector * m_parametersOnDetElements
cache layer with last material update
Definition: LocalExtrapolatorCache.h:70
Trk::Cache::m_navigLays
std::vector< std::pair< const Trk::TrackingVolume *, const Trk::Layer * > > m_navigLays
Definition: LocalExtrapolatorCache.h:93
Surface
Definition: Trigger/TrigAccel/TrigCudaFitter/src/Surface.h:8
ParametersNextVolume.h
Trk::Cache::setRecallInformation
void setRecallInformation(const Surface &, const Layer &, const TrackingVolume &)
Private method for setting recall Information.
Definition: LocalExtrapolatorCache.cxx:72
Trk::Cache::retrieveBoundaries
void retrieveBoundaries()
Retrieve boundaries.
Definition: LocalExtrapolatorCache.cxx:118
Trk::Cache::resetRecallInformation
void resetRecallInformation()
Definition: LocalExtrapolatorCache.cxx:79
Trk::Cache::m_path
double m_path
Pointer (not owning) pointing.
Definition: LocalExtrapolatorCache.h:67
ExtrUniquePtrHolder.h
Dbg::PropStat::m_maxRecursionCount
std::atomic< unsigned int > m_maxRecursionCount
Definition: LocalExtrapolatorCache.h:28
Trk::Cache::identifiedParameters_t
std::vector< std::pair< std::unique_ptr< Trk::TrackParameters >, int > > identifiedParameters_t
Definition: LocalExtrapolatorCache.h:38
Trk::Cache::kContinue
@ kContinue
Definition: LocalExtrapolatorCache.h:103
Trk::Cache::addOneNavigationLayer
void addOneNavigationLayer(const Trk::TrackingVolume *pDetVol, const Trk::Layer *pLayer, bool boundaryCheck=true)
Add one layer and navigLayer.
Definition: LocalExtrapolatorCache.cxx:128
Trk::Cache::kRecursionCountExceeded
@ kRecursionCountExceeded
Definition: LocalExtrapolatorCache.h:103
Trk::INavigator::trackingGeometry
virtual const TrackingGeometry * trackingGeometry(const EventContext &ctx) const =0
INavigator interface method - returns the TrackingGeometry used for navigation.
Trk::Cache::m_boundaryVolume
const Volume * m_boundaryVolume
Destination Surface for recall.
Definition: LocalExtrapolatorCache.h:54
Trk::Cache::m_layerResolved
unsigned int m_layerResolved
Definition: LocalExtrapolatorCache.h:50
Trk::Cache::m_statPtr
Dbg::PropStat * m_statPtr
Definition: LocalExtrapolatorCache.h:99
Trk::Cache::EStatus
EStatus
Definition: LocalExtrapolatorCache.h:103
Trk::Cache::m_matstates
std::vector< const Trk::TrackStateOnSurface * > * m_matstates
Definition: LocalExtrapolatorCache.h:79
Trk::TrackingGeometry
Definition: TrackingGeometry.h:66
Trk::Cache::m_denseResolved
std::pair< unsigned int, unsigned int > m_denseResolved
Definition: LocalExtrapolatorCache.h:83
Trk::Cache::m_dense
bool m_dense
Definition: LocalExtrapolatorCache.h:49
Trk::Cache::m_navigSurfs
std::vector< std::pair< const Trk::Surface *, Trk::BoundaryCheck > > m_navigSurfs
Definition: LocalExtrapolatorCache.h:94
Trk::Cache::m_highestVolume
const Trk::TrackingVolume * m_highestVolume
Definition: LocalExtrapolatorCache.h:63
Trk::Cache::m_staticBoundaries
std::vector< DestSurf > m_staticBoundaries
Definition: LocalExtrapolatorCache.h:85
Trk::ParametersNextVolume
Definition: ParametersNextVolume.h:13
Trk::Cache::m_denseBoundaries
std::vector< DestSurf > m_denseBoundaries
Definition: LocalExtrapolatorCache.h:87
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::Cache::m_recallSurface
const Surface * m_recallSurface
Destination Layer for recall.
Definition: LocalExtrapolatorCache.h:56
Trk::Cache::m_currentDense
const Trk::TrackingVolume * m_currentDense
Definition: LocalExtrapolatorCache.h:62
Trk::Cache::m_trackingGeometry
const Trk::TrackingGeometry * m_trackingGeometry
Definition: LocalExtrapolatorCache.h:65
Trk::Cache::m_recursionCount
std::array< unsigned short, kNRecursionValues > m_recursionCount
Definition: LocalExtrapolatorCache.h:101
Dbg::PropStat::m_maxMethodSequence
std::atomic< unsigned int > m_maxMethodSequence
Definition: LocalExtrapolatorCache.h:30
beamspotman.stat
stat
Definition: beamspotman.py:262
Trk::Cache::m_recallLayer
const Layer * m_recallLayer
Destination TrackingVolume for recall.
Definition: LocalExtrapolatorCache.h:58
Dbg
Definition: MeasurementToTruthAssociationAlg.h:36
Trk::Cache::elossPointerErrorMsg
std::string elossPointerErrorMsg(int lineNumber=0) const
String error message if the cache has a problem.
Definition: LocalExtrapolatorCache.cxx:109
Trk::Cache::m_destinationSurface
const Surface * m_destinationSurface
the boundary volume check
Definition: LocalExtrapolatorCache.h:52
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::Cache::DestSurf
std::pair< const Surface *, BoundaryCheck > DestSurf
The class holding the unique ptr during the extrapolation loop.
Definition: LocalExtrapolatorCache.h:40
IMaterialEffectsUpdator.h
Trk::EnergyLoss
This class describes energy loss material effects in the ATLAS tracking EDM.
Definition: EnergyLoss.h:34
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::Cache::m_methodSequence
unsigned int m_methodSequence
Definition: LocalExtrapolatorCache.h:51
Trk::Cache::TrackParametersUVector
std::vector< std::unique_ptr< Trk::TrackParameters > > TrackParametersUVector
Definition: LocalExtrapolatorCache.h:37
INavigator.h
Trk::Cache::elossPointerOverwritten
bool elossPointerOverwritten() const
Check cache integrity.
Definition: LocalExtrapolatorCache.cxx:104
Trk::TrackingGeometry::lowestTrackingVolume
const TrackingVolume * lowestTrackingVolume(const Amg::Vector3D &gp) const
return the lowest tracking Volume
Definition: TrackingGeometry.cxx:48
Trk::Cache::m_navigVols
std::vector< const Trk::DetachedTrackingVolume * > m_navigVols
Definition: LocalExtrapolatorCache.h:95
Trk::Cache::kNRecursionValues
@ kNRecursionValues
Definition: LocalExtrapolatorCache.h:100
Trk::Cache::to_string
std::string to_string(const std::string &txt) const
String representation of cache.
Definition: LocalExtrapolatorCache.cxx:86
Trk::Cache::copyToNavigationSurfaces
void copyToNavigationSurfaces()
Insert navigation surfaces from layers, dense boundaries, navig boundaries and detached boundaries.
Definition: LocalExtrapolatorCache.cxx:140
TrackingGeometry.h
Trk::INavigator
Definition: INavigator.h:68
Trk::Cache::~Cache
~Cache()
Definition: LocalExtrapolatorCache.cxx:36
Trk::Cache::kCurrentRecursionCount
@ kCurrentRecursionCount
Definition: LocalExtrapolatorCache.h:100
Trk::ExtrUniquePtrHolder
Definition: ExtrUniquePtrHolder.h:31
Trk::Cache::m_navigVolsInt
std::vector< std::pair< const Trk::TrackingVolume *, unsigned int > > m_navigVolsInt
Definition: LocalExtrapolatorCache.h:96
Trk::Cache::m_cacheLastMatLayer
bool m_cacheLastMatLayer
Definition: LocalExtrapolatorCache.h:72
Dbg::PropStat::m_maxPropagations
std::atomic< unsigned int > m_maxPropagations
Definition: LocalExtrapolatorCache.h:29
Trk::Cache::volume
const Trk::TrackingVolume * volume(const EventContext &, const Amg::Vector3D &gp) const
Definition: LocalExtrapolatorCache.h:117
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:79
Trk::Volume
Definition: Volume.h:36
Trk::TrackingVolume
Definition: TrackingVolume.h:119
Trk::ExtrapolationCache
Definition: ExtrapolationCache.h:26
Trk::Cache::m_cacheEloss
const Trk::EnergyLoss * m_cacheEloss
cache of TrackStateOnSurfaces
Definition: LocalExtrapolatorCache.h:77
Trk::Cache::m_lastMaterialLayer
const Layer * m_lastMaterialLayer
cache for collecting the total X0 ans Eloss
Definition: LocalExtrapolatorCache.h:73
Trk::Cache::m_status
enum Trk::Cache::EStatus m_status
Trk::Cache::m_currentStatic
const Trk::TrackingVolume * m_currentStatic
Definition: LocalExtrapolatorCache.h:61
Trk::Cache::m_parametersAtBoundary
ParametersNextVolume m_parametersAtBoundary
Caches per MaterialUpdator.
Definition: LocalExtrapolatorCache.h:45
Trk::Cache::m_identifiedParameters
std::unique_ptr< identifiedParameters_t > m_identifiedParameters
Definition: LocalExtrapolatorCache.h:81
Trk::Layer
Definition: Layer.h:72
Trk::Cache::setTrackingGeometry
void setTrackingGeometry(const Trk::INavigator &navigator, const EventContext &ctx)
Definition: LocalExtrapolatorCache.h:110
Trk::Cache::m_nPropagations
unsigned int m_nPropagations
Definition: LocalExtrapolatorCache.h:102