9#ifndef TRKEXINTERFACES_IPROPAGATOR_H
10#define TRKEXINTERFACES_IPROPAGATOR_H
13#include "GaudiKernel/EventContext.h"
14#include "GaudiKernel/IAlgTool.h"
15#include "GaudiKernel/ThreadLocalContext.h"
45typedef std::pair<const Surface*, BoundaryCheck>
DestSurf;
64 virtual std::unique_ptr<NeutralParameters>
propagate(
69 bool returnCurv =
false)
const = 0;
73 const EventContext& ctx,
80 bool returnCurv =
false,
85 const EventContext& ctx,
95 const EventContext& ctx,
97 std::vector<DestSurf>& sfs,
101 std::vector<unsigned int>& solutions,
103 bool usePathLim =
false,
104 bool returnCurv =
false,
110 const EventContext& ctx,
112 std::vector<DestSurf>& sfs,
116 std::vector<unsigned int>& solutions,
121 std::vector<Trk::HitInfo>*&
hitVector)
const = 0;
128 const EventContext& ctx,
130 std::vector<DestSurf>& sfs,
134 std::vector<unsigned int>& solutions,
135 std::vector<const Trk::TrackStateOnSurface*>* matstates,
136 std::vector<std::pair<std::unique_ptr<Trk::TrackParameters>,
int>>*
139 bool usePathLim =
false,
140 bool returnCurv =
false,
146 const EventContext& ctx,
152 std::optional<TransportJacobian>& jacob,
155 bool returnCurv =
false,
161 const EventContext& ctx,
168 bool returnCurv =
false,
174 const EventContext& ctx,
180 std::optional<TransportJacobian>& jacob,
182 bool returnCurv =
false,
189 virtual std::optional<TrackSurfaceIntersection>
intersect(
190 const EventContext& ctx,
200 const EventContext& ctx,
217 std::deque<Amg::Vector3D>& positionslist,
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.
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 ¶meters, 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.
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.
std::pair< const TrackParameters *, double > TrackParametersWithPath
typedef for return type TrackParameters, pathlength
std::vector< ComponentParameters > MultiComponentState
ParametersBase< NeutralParametersDim, Neutral > NeutralParameters
static const InterfaceID IID_IPropagator("IPropagator", 1, 0)
Interface ID for IPropagators.
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
std::pair< const Surface *, BoundaryCheck > DestSurf
typedef for input surfaces, boundary check
ParametersBase< TrackParametersDim, Charged > TrackParameters