11#ifndef TRKEXSTRAIGHTLINEINTERSECTOR_STRAIGHTLINEINTERSECTOR_H
12#define TRKEXSTRAIGHTLINEINTERSECTOR_STRAIGHTLINEINTERSECTOR_H
26 const IInterface* parent);
28 virtual StatusCode
finalize()
override;
34 const double qOverP)
const override;
40 const double )
const override;
47 const double )
const override;
54 const double )
const override;
60 const double )
const override;
66 const double )
const override;
78 const double cylinderRadius)
const;
80 const double discZ)
const;
99 double sinThsqinv = 1. / dir.perp2();
100 double stepLength = (-pos.x() * dir.x() - pos.y() * dir.y()) * sinThsqinv;
102 (cylinderRadius * cylinderRadius - pos.perp2()) * sinThsqinv +
103 stepLength * stepLength;
105 stepLength += sqrt(deltaRSq);
113 return (discZ - pos.z()) / dir.z();
128 double cosAngle = lineDirection.dot(dir);
129 return (linePosition - pos).dot(dir - lineDirection * cosAngle) /
130 (1. - cosAngle * cosAngle);
141 return planeNormal.dot(planePosition - pos) / planeNormal.dot(dir);
145 double stepLength)
const {
Class for a CylinderSurface in the ATLAS detector.
Class for a DiscSurface in the ATLAS detector.
Class describing the Line to which the Perigee refers to.
Class for a planaer rectangular or trapezoidal surface in the ATLAS detector.
virtual std::optional< TrackSurfaceIntersection > approachStraightLineSurface(const StraightLineSurface &surface, const TrackSurfaceIntersection &trackTrackSurfaceIntersection, const double) const override
IIntersector interface method for specific Surface type : StraightLineSurface.
double distanceToDisc(const TrackSurfaceIntersection &isect, const double discZ) const
double distanceToPlane(const TrackSurfaceIntersection &isect, const Amg::Vector3D &planePosition, const Amg::Vector3D &planeNormal) const
virtual bool isValid(Amg::Vector3D, Amg::Vector3D) const override
IIntersector interface method for validity check over a particular extrapolation range.
virtual std::optional< TrackSurfaceIntersection > approachPerigeeSurface(const PerigeeSurface &surface, const TrackSurfaceIntersection &trackTrackSurfaceIntersection, const double) const override
IIntersector interface method for specific Surface type : PerigeeSurface.
virtual std::optional< TrackSurfaceIntersection > intersectPlaneSurface(const PlaneSurface &surface, const TrackSurfaceIntersection &trackTrackSurfaceIntersection, const double) const override
IIntersector interface method for specific Surface type : PlaneSurface.
std::atomic< unsigned long long > m_countExtrapolations
virtual std::optional< TrackSurfaceIntersection > intersectSurface(const Surface &surface, const TrackSurfaceIntersection &trackTrackSurfaceIntersection, const double qOverP) const override
IIntersector interface method for general Surface type.
void step(TrackSurfaceIntersection &isect, double stepLength) const
double distanceToLine(const TrackSurfaceIntersection &isect, const Amg::Vector3D &linePosition, const Amg::Vector3D &lineDirection) const
double distanceToCylinder(const TrackSurfaceIntersection &isect, const double cylinderRadius) const
StraightLineIntersector(const std::string &type, const std::string &name, const IInterface *parent)
virtual std::optional< TrackSurfaceIntersection > intersectCylinderSurface(const CylinderSurface &surface, const TrackSurfaceIntersection &trackTrackSurfaceIntersection, const double) const override
IIntersector interface method for specific Surface type : CylinderSurface.
virtual StatusCode finalize() override
virtual std::optional< TrackSurfaceIntersection > intersectDiscSurface(const DiscSurface &surface, const TrackSurfaceIntersection &trackTrackSurfaceIntersection, const double) const override
IIntersector interface method for specific Surface type : DiscSurface.
Class for a StraightLineSurface in the ATLAS detector to describe dirft tube and straw like detectors...
Abstract Base Class for tracking surfaces.
An intersection with a Surface is given by.
const Amg::Vector3D & direction() const
Method to retrieve the direction at the Intersection.
const Amg::Vector3D & position() const
Method to retrieve the position of the Intersection.
double pathlength() const
Method to retrieve the pathlength propagated till the Intersection.
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the ATLAS eigen extensions are properly loaded.