ATLAS Offline Software
Loading...
Searching...
No Matches
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
27// STL
28#include <utility>
29#include <deque>
30#include <optional>
31
32namespace Trk {
33
34class Surface;
35class CylinderBounds;
39class TrackingVolume;
40
42typedef std::pair<const TrackParameters*, double> TrackParametersWithPath;
43
45typedef std::pair<const Surface*, BoundaryCheck> DestSurf;
46
48static const InterfaceID IID_IPropagator("IPropagator", 1, 0);
49
54class IPropagator : virtual public IAlgTool
55{
56public:
58 virtual ~IPropagator() = default;
59
61 static const InterfaceID& interfaceID() { return IID_IPropagator; }
62
64 virtual std::unique_ptr<NeutralParameters> propagate(
65 const NeutralParameters& parameters,
66 const Surface& sf,
67 PropDirection dir,
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,
76 PropDirection dir,
77 const BoundaryCheck& bcheck,
78 const MagneticFieldProperties& mprop,
79 ParticleHypothesis particle = pion,
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,
98 PropDirection dir,
99 const MagneticFieldProperties& mprop,
100 ParticleHypothesis particle,
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,
113 PropDirection dir,
114 const MagneticFieldProperties& mprop,
115 ParticleHypothesis particle,
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,
131 PropDirection dir,
132 const MagneticFieldProperties& mprop,
133 ParticleHypothesis particle,
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,
149 PropDirection dir,
150 const BoundaryCheck& bcheck,
151 const MagneticFieldProperties& mprop,
152 std::optional<TransportJacobian>& jacob,
153 double& pathLength,
154 ParticleHypothesis particle = pion,
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,
164 PropDirection dir,
165 const BoundaryCheck& bcheck,
166 const MagneticFieldProperties& mprop,
167 ParticleHypothesis particle = pion,
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,
177 PropDirection dir,
178 const BoundaryCheck& bcheck,
179 const MagneticFieldProperties& mprop,
180 std::optional<TransportJacobian>& jacob,
181 ParticleHypothesis particle = pion,
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,
194 ParticleHypothesis particle = pion,
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,
222 ParticleHypothesis particle = pion,
223 const TrackingVolume* tVol = nullptr) const = 0;
224
225};
226
227} // end of namespace
228
229#endif // TRKEXINTERFACES_PROPAGATOR_H
230
Definition of component parameters for use in a mixture of many components. In this regime each track...
std::vector< FPGATrackSimHit > hitVector
The BoundaryCheck class allows to steer the way surface boundaries are used for inside/outside checks...
Bounds for a cylindrical Surface.
Interface class IPropagators It inherits from IAlgTool.
Definition IPropagator.h:55
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.
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.
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.
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.
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.
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.
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.
virtual ~IPropagator()=default
Virtual destructor.
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:
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.
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,...
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.
static const InterfaceID & interfaceID()
AlgTool and IAlgTool interface methods.
Definition IPropagator.h:61
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...
magnetic field properties to steer the behavior of the extrapolation
Abstract Base Class for tracking surfaces.
represents the track state (measurement, material, fit parameters and quality) at a surface.
An intersection with a Surface is given by.
Full Volume description used in Tracking, it inherits from Volume to get the geometrical structure,...
This class represents the jacobian for transforming initial track parameters to new track parameters ...
Ensure that the ATLAS eigen extensions are properly loaded.
PropDirection
PropDirection, enum for direction of the propagation.
@ anyDirection
std::pair< const TrackParameters *, double > TrackParametersWithPath
typedef for return type TrackParameters, pathlength
Definition IPropagator.h:42
std::vector< ComponentParameters > MultiComponentState
ParametersBase< NeutralParametersDim, Neutral > NeutralParameters
static const InterfaceID IID_IPropagator("IPropagator", 1, 0)
Interface ID for IPropagators.
@ qOverP
perigee
Definition ParamDefs.h:67
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
std::pair< const Surface *, BoundaryCheck > DestSurf
typedef for input surfaces, boundary check
Definition IPropagator.h:45
ParametersBase< TrackParametersDim, Charged > TrackParameters