12#include "GaudiKernel/SystemOfUnits.h"
32 const std::string& name,
33 const IInterface* parent)
36 declareInterface<Trk::IPropagator>(
this);
55 return StatusCode::SUCCESS;
61 return StatusCode::SUCCESS;
64std::unique_ptr<NeutralParameters>
69 bool curvilinear)
const
71 return m_linePropagator->propagate(parameters,surface,dir,boundsCheck,curvilinear);
74std::unique_ptr<TrackParameters>
88 return std::move(
cache.m_parameters);
91std::unique_ptr<TrackParameters>
98 std::optional<TransportJacobian>& ,
107 return std::move(
cache.m_parameters);
110std::unique_ptr<TrackParameters>
125 return std::move(
cache.m_parameters);
128std::unique_ptr<TrackParameters>
135 std::optional<TransportJacobian>& ,
143 return std::move(
cache.m_parameters);
146std::optional<Trk::TrackSurfaceIntersection>
156 auto solution =
cache.m_intersection;
166 bool curvilinear)
const
168 cache.m_parameters =
nullptr;
169 if (!
cache.m_intersection)
return;
174 cache.m_parameters=std::make_unique<CurvilinearParameters>(
cache.m_intersection->position(),
175 cache.m_intersection->direction().phi(),
176 cache.m_intersection->direction().theta(),
182 cache.m_intersection->direction(),
183 cache.m_charge,std::nullopt);
194 cache.m_charge = parameters.charge();
195 cache.m_momentum = parameters.momentum();
196 cache.m_parameters=
nullptr;
199 cache.m_intersection = std::make_optional<TrackSurfaceIntersection>(
cache.m_position,
cache.m_momentum*
cache.m_qOverP,0.);
203 cache.m_intersection =
205 if (!
cache.m_intersection)
220 <<
cache.m_intersection->pathlength() );
224 ATH_MSG_DEBUG(
" requested oppositeMomentum, but pathlength "
225 <<
cache.m_intersection->pathlength() );
228 cache.m_intersection=std::nullopt;
233 <<
" intersection at r,phi,z "
234 << std::setw(10) << std::setprecision(1) <<
cache.m_intersection->position().perp()
235 << std::setw(9) << std::setprecision(4) <<
cache.m_intersection->position().phi()
236 << std::setw(10) << std::setprecision(1) <<
cache.m_intersection->position().z()
238 << std::setw(9) << std::setprecision(3) << 1./std::abs(
cache.m_qOverP*Gaudi::Units::GeV) );
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
bool msgLvl(const MSG::Level lvl) const
The BoundaryCheck class allows to steer the way surface boundaries are used for inside/outside checks...
ToolHandle< IIntersector > m_intersector
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 override final
Propagation interface without Covariance matrix propagation the pathlength has to be returned for eve...
virtual std::optional< Trk::TrackSurfaceIntersection > intersect(const EventContext &ctx, const TrackParameters &parm, const Surface &sf, const MagneticFieldProperties &mprop, ParticleHypothesis particle=pion, const TrackingVolume *tVol=nullptr) const override final
Intersection interface: The intersection interface might be used by the material service as well to e...
IntersectorWrapper(const std::string &type, const std::string &name, const IInterface *parent)
void findIntersection(Cache &cache, const TrackParameters ¶meters, const Surface &surface, PropDirection dir=Trk::anyDirection) const
void createParameters(Cache &cache, const Surface &surface, const BoundaryCheck &boundsCheck, bool curvilinear) const
~IntersectorWrapper(void)
virtual StatusCode initialize() override final
virtual std::unique_ptr< NeutralParameters > propagate(const NeutralParameters &, const Surface &, PropDirection, const BoundaryCheck &, bool) const override final
N 0) Neutral parameters method .
ToolHandle< IPropagator > m_linePropagator
virtual StatusCode finalize() override final
magnetic field properties to steer the behavior of the extrapolation
Abstract Base Class for tracking surfaces.
virtual ChargedTrackParametersUniquePtr createUniqueTrackParameters(double l1, double l2, double phi, double theat, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const =0
Use the Surface as a ParametersBase constructor, from local parameters - charged.
Full Volume description used in Tracking, it inherits from Volume to get the geometrical structure,...
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the ATLAS eigen extensions are properly loaded.
PropDirection
PropDirection, enum for direction of the propagation.
ParametersBase< NeutralParametersDim, Neutral > NeutralParameters
TrackSurfaceIntersection(const Amg::Vector3D &pos, const Amg::Vector3D &dir, double path)
Constructor.
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
ParametersBase< TrackParametersDim, Charged > TrackParameters
const IIntersectionCache * cache() const
Retrieve the associated cache block, if it exists.