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
16// Trk
26// STL
27#include <utility>
28#include <deque>
29#include <optional>
30
31namespace Trk {
32
33class Surface;
34class CylinderBounds;
38class TrackingVolume;
39
41typedef std::pair<const TrackParameters*, double> TrackParametersWithPath;
42
44typedef std::pair<const Surface*, BoundaryCheck> DestSurf;
45
47static const InterfaceID IID_IPropagator("IPropagator", 1, 0);
48
53class IPropagator : virtual public IAlgTool
54{
55public:
57 virtual ~IPropagator() = default;
58
60 static const InterfaceID& interfaceID() { return IID_IPropagator; }
61
63 virtual std::unique_ptr<NeutralParameters> propagate(
64 const NeutralParameters& parameters,
65 const Surface& sf,
66 PropDirection dir,
67 const BoundaryCheck& bcheck,
68 bool returnCurv = false) const = 0;
69
71 virtual std::unique_ptr<TrackParameters> propagate(
72 const EventContext& ctx,
73 const TrackParameters& parm,
74 const Surface& sf,
75 PropDirection dir,
76 const BoundaryCheck& bcheck,
77 const MagneticFieldProperties& mprop,
78 ParticleHypothesis particle = pion,
79 bool returnCurv = false,
80 const TrackingVolume* tVol = nullptr) const = 0;
81
84 const EventContext& ctx,
85 const MultiComponentState& multiComponentState,
86 const Surface& surface,
87 const MagneticFieldProperties& fieldProperties,
89 const BoundaryCheck& boundaryCheck = true,
90 const ParticleHypothesis particleHypothesis = nonInteracting) const = 0;
91
93 virtual std::unique_ptr<TrackParameters> propagate(
94 const EventContext& ctx,
95 const TrackParameters& parm,
96 std::vector<DestSurf>& sfs,
97 PropDirection dir,
98 const MagneticFieldProperties& mprop,
99 ParticleHypothesis particle,
100 std::vector<unsigned int>& solutions,
101 double& path,
102 bool usePathLim = false,
103 bool returnCurv = false,
104 const TrackingVolume* tVol = nullptr) const = 0;
105
108 virtual std::unique_ptr<TrackParameters> propagateT(
109 const EventContext& ctx,
110 const TrackParameters& parm,
111 std::vector<DestSurf>& sfs,
112 PropDirection dir,
113 const MagneticFieldProperties& mprop,
114 ParticleHypothesis particle,
115 std::vector<unsigned int>& solutions,
116 PathLimit& pathLim,
117 TimeLimit& timeLim,
118 bool returnCurv,
119 const TrackingVolume* tVol,
120 std::vector<Trk::HitInfo>*& hitVector) const = 0;
121
126 virtual std::unique_ptr<TrackParameters> propagateM(
127 const EventContext& ctx,
128 const TrackParameters& parm,
129 std::vector<DestSurf>& sfs,
130 PropDirection dir,
131 const MagneticFieldProperties& mprop,
132 ParticleHypothesis particle,
133 std::vector<unsigned int>& solutions,
134 std::vector<const Trk::TrackStateOnSurface*>* matstates,
135 std::vector<std::pair<std::unique_ptr<Trk::TrackParameters>, int>>*
136 intersections,
137 double& path,
138 bool usePathLim = false,
139 bool returnCurv = false,
140 const TrackingVolume* tVol = nullptr,
141 Trk::ExtrapolationCache* cache = nullptr) const = 0;
142
144 virtual std::unique_ptr<TrackParameters> propagate(
145 const EventContext& ctx,
146 const TrackParameters& parm,
147 const Surface& sf,
148 PropDirection dir,
149 const BoundaryCheck& bcheck,
150 const MagneticFieldProperties& mprop,
151 std::optional<TransportJacobian>& jacob,
152 double& pathLength,
153 ParticleHypothesis particle = pion,
154 bool returnCurv = false,
155 const TrackingVolume* tVol = nullptr) const = 0;
156
159 virtual std::unique_ptr<TrackParameters> propagateParameters(
160 const EventContext& ctx,
161 const TrackParameters& parm,
162 const Surface& sf,
163 PropDirection dir,
164 const BoundaryCheck& bcheck,
165 const MagneticFieldProperties& mprop,
166 ParticleHypothesis particle = pion,
167 bool returnCurv = false,
168 const TrackingVolume* tVol = nullptr) const = 0;
169
172 virtual std::unique_ptr<TrackParameters> propagateParameters(
173 const EventContext& ctx,
174 const TrackParameters& parm,
175 const Surface& sf,
176 PropDirection dir,
177 const BoundaryCheck& bcheck,
178 const MagneticFieldProperties& mprop,
179 std::optional<TransportJacobian>& jacob,
180 ParticleHypothesis particle = pion,
181 bool returnCurv = false,
182 const TrackingVolume* tVol = nullptr) const = 0;
183
188 virtual std::optional<TrackSurfaceIntersection> intersect(
189 const EventContext& ctx,
190 const TrackParameters& parm,
191 const Surface& sf,
192 const MagneticFieldProperties& mprop,
193 ParticleHypothesis particle = pion,
194 const TrackingVolume* tVol = nullptr) const = 0;
195
198 virtual std::optional<TrackSurfaceIntersection> intersectSurface(
199 const EventContext& ctx,
200 const Surface& surface,
201 const TrackSurfaceIntersection& trackIntersection,
202 const double qOverP,
203 const MagneticFieldProperties& mft,
204 ParticleHypothesis particle) const = 0;
205
215 virtual void globalPositions(const EventContext& ctx,
216 std::deque<Amg::Vector3D>& positionslist,
217 const TrackParameters& parm,
218 const MagneticFieldProperties& mprop,
219 const CylinderBounds& cylbo,
220 double stepSize,
221 ParticleHypothesis particle = pion,
222 const TrackingVolume* tVol = nullptr) const = 0;
223
224};
225
226} // end of namespace
227
228#endif // TRKEXINTERFACES_PROPAGATOR_H
229
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:54
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:60
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.
Definition Surface.h:79
represents the track state (measurement, material, fit parameters and quality) at a surface.
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:41
std::vector< ComponentParameters > MultiComponentState
const Amg::Vector3D & direction() const
Method to retrieve the direction at the Intersection.
ParametersBase< NeutralParametersDim, Neutral > NeutralParameters
static const InterfaceID IID_IPropagator("IPropagator", 1, 0)
Interface ID for IPropagators.
TrackSurfaceIntersection(const Amg::Vector3D &pos, const Amg::Vector3D &dir, double path)
Constructor.
@ 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:44
ParametersBase< TrackParametersDim, Charged > TrackParameters
const IIntersectionCache * cache() const
Retrieve the associated cache block, if it exists.