ATLAS Offline Software
IPropagator.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // IPropagator.h, (c) ATLAS Detector software
8 
9 #ifndef TRKEXINTERFACES_IPROPAGATOR_H
10 #define TRKEXINTERFACES_IPROPAGATOR_H
11 
12 // Gaudi
13 #include "GaudiKernel/EventContext.h"
14 #include "GaudiKernel/IAlgTool.h"
15 #include "GaudiKernel/ThreadLocalContext.h"
16 
17 // Trk
28 // STL
29 #include <utility>
30 #include <deque>
31 #include <optional>
32 
33 namespace Trk {
34 
35 class Surface;
36 class CylinderBounds;
37 class MagneticFieldProperties;
38 class TransportJacobian;
39 class TrackStateOnSurface;
40 
42 typedef std::pair<const TrackParameters*, double> TrackParametersWithPath;
43 
45 typedef std::pair<const Surface*, BoundaryCheck> DestSurf;
46 
48 static const InterfaceID IID_IPropagator("IPropagator", 1, 0);
49 
54 class IPropagator : virtual public IAlgTool
55 {
56 public:
58  virtual ~IPropagator() = default;
59 
61  static const InterfaceID& interfaceID() { return IID_IPropagator; }
62 
64  virtual std::unique_ptr<NeutralParameters> propagate(
66  const Surface& sf,
68  const BoundaryCheck& bcheck,
69  bool returnCurv = false) const = 0;
70 
72  virtual std::unique_ptr<TrackParameters> propagate(
73  const EventContext& ctx,
74  const TrackParameters& parm,
75  const Surface& sf,
77  const BoundaryCheck& bcheck,
78  const MagneticFieldProperties& mprop,
80  bool returnCurv = false,
81  const TrackingVolume* tVol = nullptr) const = 0;
82 
85  const EventContext& ctx,
86  const MultiComponentState& multiComponentState,
87  const Surface& surface,
88  const MagneticFieldProperties& fieldProperties,
89  const PropDirection direction = Trk::anyDirection,
90  const BoundaryCheck& boundaryCheck = true,
91  const ParticleHypothesis particleHypothesis = nonInteracting) const = 0;
92 
94  virtual std::unique_ptr<TrackParameters> propagate(
95  const EventContext& ctx,
96  const TrackParameters& parm,
97  std::vector<DestSurf>& sfs,
99  const MagneticFieldProperties& mprop,
101  std::vector<unsigned int>& solutions,
102  double& path,
103  bool usePathLim = false,
104  bool returnCurv = false,
105  const TrackingVolume* tVol = nullptr) const = 0;
106 
109  virtual std::unique_ptr<TrackParameters> propagateT(
110  const EventContext& ctx,
111  const TrackParameters& parm,
112  std::vector<DestSurf>& sfs,
114  const MagneticFieldProperties& mprop,
116  std::vector<unsigned int>& solutions,
117  PathLimit& pathLim,
118  TimeLimit& timeLim,
119  bool returnCurv,
120  const TrackingVolume* tVol,
121  std::vector<Trk::HitInfo>*& hitVector) const = 0;
122 
127  virtual std::unique_ptr<TrackParameters> propagateM(
128  const EventContext& ctx,
129  const TrackParameters& parm,
130  std::vector<DestSurf>& sfs,
132  const MagneticFieldProperties& mprop,
134  std::vector<unsigned int>& solutions,
135  std::vector<const Trk::TrackStateOnSurface*>*& matstates,
136  std::vector<std::pair<std::unique_ptr<Trk::TrackParameters>, int>>*
137  intersections,
138  double& path,
139  bool usePathLim = false,
140  bool returnCurv = false,
141  const TrackingVolume* tVol = nullptr,
142  Trk::ExtrapolationCache* cache = nullptr) const = 0;
143 
145  virtual std::unique_ptr<TrackParameters> propagate(
146  const EventContext& ctx,
147  const TrackParameters& parm,
148  const Surface& sf,
150  const BoundaryCheck& bcheck,
151  const MagneticFieldProperties& mprop,
152  std::optional<TransportJacobian>& jacob,
153  double& pathLength,
155  bool returnCurv = false,
156  const TrackingVolume* tVol = nullptr) const = 0;
157 
160  virtual std::unique_ptr<TrackParameters> propagateParameters(
161  const EventContext& ctx,
162  const TrackParameters& parm,
163  const Surface& sf,
165  const BoundaryCheck& bcheck,
166  const MagneticFieldProperties& mprop,
168  bool returnCurv = false,
169  const TrackingVolume* tVol = nullptr) const = 0;
170 
173  virtual std::unique_ptr<TrackParameters> propagateParameters(
174  const EventContext& ctx,
175  const TrackParameters& parm,
176  const Surface& sf,
178  const BoundaryCheck& bcheck,
179  const MagneticFieldProperties& mprop,
180  std::optional<TransportJacobian>& jacob,
182  bool returnCurv = false,
183  const TrackingVolume* tVol = nullptr) const = 0;
184 
189  virtual std::optional<TrackSurfaceIntersection> intersect(
190  const EventContext& ctx,
191  const TrackParameters& parm,
192  const Surface& sf,
193  const MagneticFieldProperties& mprop,
195  const TrackingVolume* tVol = nullptr) const = 0;
196 
199  virtual std::optional<TrackSurfaceIntersection> intersectSurface(
200  const EventContext& ctx,
201  const Surface& surface,
202  const TrackSurfaceIntersection& trackIntersection,
203  const double qOverP,
204  const MagneticFieldProperties& mft,
205  ParticleHypothesis particle) const = 0;
206 
216  virtual void globalPositions(const EventContext& ctx,
217  std::deque<Amg::Vector3D>& positionslist,
218  const TrackParameters& parm,
219  const MagneticFieldProperties& mprop,
220  const CylinderBounds& cylbo,
221  double stepSize,
223  const TrackingVolume* tVol = nullptr) const = 0;
224 
228  const EventContext& ctx,
229  Trk::ExCellCharged& eCell,
230  Trk::TargetSurfaces& sfs,
231  Trk::TargetSurfaceVector& solutions) const = 0;
232 
233 };
234 
235 } // end of namespace
236 
237 #endif // TRKEXINTERFACES_PROPAGATOR_H
238 
Trk::IPropagator::propagateM
virtual std::unique_ptr< TrackParameters > propagateM(const EventContext &ctx, const TrackParameters &parm, std::vector< DestSurf > &sfs, PropDirection dir, const MagneticFieldProperties &mprop, ParticleHypothesis particle, std::vector< unsigned int > &solutions, std::vector< const Trk::TrackStateOnSurface * > *&matstates, std::vector< std::pair< std::unique_ptr< Trk::TrackParameters >, int >> *intersections, double &path, bool usePathLim=false, bool returnCurv=false, const TrackingVolume *tVol=nullptr, Trk::ExtrapolationCache *cache=nullptr) const =0
Propagation interface: The propagation method with internal material collection.
Trk::anyDirection
@ anyDirection
Definition: PropDirection.h:22
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
Trk::IPropagator::propagateT
virtual std::unique_ptr< TrackParameters > propagateT(const EventContext &ctx, const TrackParameters &parm, std::vector< DestSurf > &sfs, PropDirection dir, const MagneticFieldProperties &mprop, ParticleHypothesis particle, std::vector< unsigned int > &solutions, PathLimit &pathLim, TimeLimit &timeLim, bool returnCurv, const TrackingVolume *tVol, std::vector< Trk::HitInfo > *&hitVector) const =0
Propagate parameters and covariance with search of closest surface time included.
athena.path
path
python interpreter configuration --------------------------------------—
Definition: athena.py:126
TrackParameters.h
TargetSurfaces.h
Trk::MagneticFieldProperties
Definition: MagneticFieldProperties.h:31
Trk::IPropagator::~IPropagator
virtual ~IPropagator()=default
Virtual destructor.
Trk::IPropagator::propagate
virtual std::unique_ptr< TrackParameters > propagate(const EventContext &ctx, const TrackParameters &parm, const Surface &sf, PropDirection dir, const BoundaryCheck &bcheck, const MagneticFieldProperties &mprop, ParticleHypothesis particle=pion, bool returnCurv=false, const TrackingVolume *tVol=nullptr) const =0
Main propagation method without transport jacobian production.
Trk::IPropagator::propagate
virtual std::unique_ptr< TrackParameters > propagate(const EventContext &ctx, const TrackParameters &parm, const Surface &sf, PropDirection dir, const BoundaryCheck &bcheck, const MagneticFieldProperties &mprop, std::optional< TransportJacobian > &jacob, double &pathLength, ParticleHypothesis particle=pion, bool returnCurv=false, const TrackingVolume *tVol=nullptr) const =0
Main propagation method with transport jacobian production.
hitVector
std::vector< FPGATrackSimHit > hitVector
Definition: FPGATrackSimCluster.h:23
Surface
Definition: Trigger/TrigAccel/TrigCudaFitter/src/Surface.h:7
PropDirection.h
Trk::TrackSurfaceIntersection
Definition: TrackSurfaceIntersection.h:32
NeutralParameters.h
Trk::IPropagator::interfaceID
static const InterfaceID & interfaceID()
AlgTool and IAlgTool interface methods.
Definition: IPropagator.h:61
ExtrapolationCache.h
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
HelperStructs.h
Trk::IPropagator::multiStatePropagate
virtual Trk::MultiComponentState multiStatePropagate(const EventContext &ctx, const MultiComponentState &multiComponentState, const Surface &surface, const MagneticFieldProperties &fieldProperties, const PropDirection direction=Trk::anyDirection, const BoundaryCheck &boundaryCheck=true, const ParticleHypothesis particleHypothesis=nonInteracting) const =0
Main propagation method for Multi Component state.
Trk::PropDirection
PropDirection
Definition: PropDirection.h:19
Trk::TrackParametersWithPath
std::pair< const TrackParameters *, double > TrackParametersWithPath
typedef for return type TrackParameters, pathlength
Definition: IPropagator.h:39
Trk::IPropagator
Definition: IPropagator.h:55
Trk::CylinderBounds
Definition: CylinderBounds.h:46
Trk::pion
@ pion
Definition: ParticleHypothesis.h:29
Trk::ExtrapolationCode
Definition: ExtrapolationCell.h:105
Trk::MultiComponentState
std::vector< ComponentParameters > MultiComponentState
Definition: ComponentParameters.h:27
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::DestSurf
std::pair< const Surface *, BoundaryCheck > DestSurf
typedef for input surfaces, boundary check
Definition: IPropagator.h:45
Trk::TimeLimit
Definition: HelperStructs.h:58
ParticleHypothesis.h
Trk::IPropagator::intersect
virtual std::optional< TrackSurfaceIntersection > intersect(const EventContext &ctx, const TrackParameters &parm, const Surface &sf, const MagneticFieldProperties &mprop, ParticleHypothesis particle=pion, const TrackingVolume *tVol=nullptr) const =0
Intersection interface: The intersection interface might be used by the material service as well to e...
beamspotman.dir
string dir
Definition: beamspotman.py:623
Trk::IPropagator::propagateParameters
virtual std::unique_ptr< TrackParameters > propagateParameters(const EventContext &ctx, const TrackParameters &parm, const Surface &sf, PropDirection dir, const BoundaryCheck &bcheck, const MagneticFieldProperties &mprop, ParticleHypothesis particle=pion, bool returnCurv=false, const TrackingVolume *tVol=nullptr) const =0
Main propagation method for parameters only.
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:25
Trk::IPropagator::intersectSurface
virtual std::optional< TrackSurfaceIntersection > intersectSurface(const EventContext &ctx, const Surface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP, const MagneticFieldProperties &mft, ParticleHypothesis particle) const =0
Intersection and Intersector interface:
Trk::PathLimit
Definition: HelperStructs.h:34
Trk::IPropagator::propagate
virtual Trk::ExtrapolationCode propagate(const EventContext &ctx, Trk::ExCellCharged &eCell, Trk::TargetSurfaces &sfs, Trk::TargetSurfaceVector &solutions) const =0
Propagation method needed for StepEngine.
Trk::IPropagator::propagate
virtual std::unique_ptr< TrackParameters > propagate(const EventContext &ctx, const TrackParameters &parm, std::vector< DestSurf > &sfs, PropDirection dir, const MagneticFieldProperties &mprop, ParticleHypothesis particle, std::vector< unsigned int > &solutions, double &path, bool usePathLim=false, bool returnCurv=false, const TrackingVolume *tVol=nullptr) const =0
Propagate parameters and covariance with search of closest surface.
ComponentParameters.h
Definition of component parameters for use in a mixture of many components. In this regime each track...
Trk::ExtrapolationCell
Definition: ExtrapolationCell.h:231
mapkey::sf
@ sf
Definition: TElectronEfficiencyCorrectionTool.cxx:38
Trk::IPropagator::propagate
virtual std::unique_ptr< NeutralParameters > propagate(const NeutralParameters &parameters, const Surface &sf, PropDirection dir, const BoundaryCheck &bcheck, bool returnCurv=false) const =0
Main propagation method for NeutralParameters.
Trk::TargetSurfaceVector
std::vector< TargetSurface > TargetSurfaceVector
Definition: TargetSurfaces.h:121
Trk::BoundaryCheck
Definition: BoundaryCheck.h:51
BoundaryCheck.h
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:73
Trk::TargetSurfaces
Definition: TargetSurfaces.h:126
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
TrackSurfaceIntersection.h
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Trk::IPropagator::globalPositions
virtual void globalPositions(const EventContext &ctx, std::deque< Amg::Vector3D > &positionslist, const TrackParameters &parm, const MagneticFieldProperties &mprop, const CylinderBounds &cylbo, double stepSize, ParticleHypothesis particle=pion, const TrackingVolume *tVol=nullptr) const =0
GlobalPositions list interface: This is used mostly in pattern recognition in the road finder,...
Trk::TrackingVolume
Definition: TrackingVolume.h:121
Trk::IPropagator::propagateParameters
virtual std::unique_ptr< TrackParameters > propagateParameters(const EventContext &ctx, const TrackParameters &parm, const Surface &sf, PropDirection dir, const BoundaryCheck &bcheck, const MagneticFieldProperties &mprop, std::optional< TransportJacobian > &jacob, ParticleHypothesis particle=pion, bool returnCurv=false, const TrackingVolume *tVol=nullptr) const =0
Main propagation method for parameters only with transport jacobian production.
Trk::ExtrapolationCache
Definition: ExtrapolationCache.h:26