Loading [MathJax]/extensions/tex2jax.js
 |
ATLAS Offline Software
|
Go to the documentation of this file.
10 #ifndef TRKEXRUNGEKUTTAINTERSECTOR_RUNGEKUTTAINTERSECTOR_H
11 #define TRKEXRUNGEKUTTAINTERSECTOR_RUNGEKUTTAINTERSECTOR_H
17 #include "GaudiKernel/PhysicalConstants.h"
18 #include "GaudiKernel/ToolHandle.h"
41 const double qOverP)
const override;
47 const double qOverP)
const override;
54 const double qOverP)
const override;
61 const double qOverP)
const override;
67 const double qOverP)
const override;
73 const double qOverP)
const override;
85 double& stepLength)
const;
88 const double rStart,
const double zStart,
89 const bool trapped)
const;
91 const double cylinderRadius,
92 const double offsetRadius,
94 double& stepLength)
const;
96 const double discZ,
double& stepLength)
const;
101 double& stepLength)
const;
106 double& stepLength)
const;
115 const double qOverP,
const double rStart,
const double zStart)
const;
119 const double qOverP)
const;
122 double& stepLength,
const double qOverP,
126 this,
"AtlasFieldCacheCondObj",
"fieldCondObj",
127 "Name of the Magnetic Field conditions object key"};
223 double& stepLength)
const {
226 double sinThsqinv = 1. /
dir.perp2();
228 double deltaRSq = (cylinderRadius - offsetRadius) *
229 (cylinderRadius + offsetRadius) * sinThsqinv +
230 stepLength * stepLength;
232 stepLength += sqrt(deltaRSq);
233 return std::abs(stepLength);
238 double& stepLength)
const {
249 const Amg::Vector3D& lineDirection,
double& stepLength)
const {
260 double cosAngle = lineDirection.dot(
dir);
261 stepLength = (linePosition -
pos).
dot(
dir - lineDirection * cosAngle) /
262 (1. - cosAngle * cosAngle);
263 return std::abs(stepLength);
268 const Amg::Vector3D& planeNormal,
double& stepLength)
const {
275 double distance = planeNormal.dot(planePosition -
pos);
284 if (!fieldCondObj.isValid()) {
285 ATH_MSG_FATAL(
"Failed to get magnetic field conditions data "
288 fieldCondObj->getInitializedCache(fieldCache);
301 const double qOverP,
const double rStart,
const double zStart)
const {
304 isect.position(), isect.direction(),
false,
false);
305 if (SLIntersect.
valid) {
307 return std::move(isect);
320 #endif // TRKEXRUNGEKUTTAINTERSECTOR_RUNGEKUTTAINTERSECTOR_H
double distanceToPlane(const TrackSurfaceIntersection &isect, const Amg::Vector3D &planePosition, const Amg::Vector3D &planeNormal, double &stepLength) const
const double m_momentumWarnThreshold
std::atomic< unsigned long long > m_countStepReduction
Intersection straightLineIntersection(const T &pars, bool forceDir=false, const Trk::BoundaryCheck &bchk=false) const
fst straight line intersection schema - templated for charged and neutral parameters
std::atomic< unsigned long long > m_countExtrapolations
BooleanProperty m_productionMode
virtual StatusCode finalize() override
virtual ~RungeKuttaIntersector()=default
virtual std::optional< TrackSurfaceIntersection > intersectPlaneSurface(const PlaneSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : PlaneSurface.
virtual StatusCode initialize() override
double distanceToCylinder(const TrackSurfaceIntersection &isect, const double cylinderRadius, const double offsetRadius, const Amg::Vector3D &offset, double &stepLength) const
RungeKuttaIntersector(const std::string &type, const std::string &name, const IInterface *parent)
Amg::Vector3D field(const Amg::Vector3D &point, MagField::AtlasFieldCache &fieldCache) const
const std::string & key() const
Return the StoreGate ID for the referenced object.
const double m_momentumThreshold
double distanceToDisc(const TrackSurfaceIntersection &isect, const double discZ, double &stepLength) const
const Amg::Vector3D & position() const
Method to retrieve the position of the Intersection.
::StatusCode StatusCode
StatusCode definition for legacy code.
void step(TrackSurfaceIntersection &isect, Amg::Vector3D &fieldValue, double &stepLength, const double qOverP, MagField::AtlasFieldCache &fieldCache) const
void shortStep(TrackSurfaceIntersection &isect, const Amg::Vector3D &fieldValue, const double stepLength, const double qOverP) const
double distanceToLine(const TrackSurfaceIntersection &isect, const Amg::Vector3D &linePosition, const Amg::Vector3D &lineDirection, double &stepLength) const
void initializeFieldCache(MagField::AtlasFieldCache &fieldCache) const
std::atomic< unsigned long long > m_countShortStep
def dot(G, fn, nodesToHighlight=[])
Ensure that the ATLAS eigen extensions are properly loaded.
virtual bool isValid(Amg::Vector3D, Amg::Vector3D) const override
IIntersector interface method for validity check over a particular extrapolation range.
void assignStepLength(const TrackSurfaceIntersection &isect, double &stepLength) const
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Eigen::Matrix< double, 3, 1 > Vector3D
const Amg::Vector3D & direction() const
Method to retrieve the direction at the Intersection.
virtual std::optional< TrackSurfaceIntersection > intersectCylinderSurface(const CylinderSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : CylinderSurface.
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
void getField(const double *ATH_RESTRICT xyz, double *ATH_RESTRICT bxyz, double *ATH_RESTRICT deriv=nullptr)
get B field value at given position xyz[3] is in mm, bxyz[3] is in kT if deriv[9] is given,...
virtual std::optional< TrackSurfaceIntersection > intersectSurface(const Surface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for general Surface type.
virtual std::optional< TrackSurfaceIntersection > approachPerigeeSurface(const PerigeeSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : PerigeeSurface.
std::atomic< unsigned long long > m_countStep
virtual std::optional< TrackSurfaceIntersection > approachStraightLineSurface(const StraightLineSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : StraightLineSurface.
virtual std::optional< TrackSurfaceIntersection > intersectDiscSurface(const DiscSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : DiscSurface.
std::optional< TrackSurfaceIntersection > newIntersection(TrackSurfaceIntersection &&isect, const Surface &surface, const double qOverP, const double rStart, const double zStart) const
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
const double m_shortStepMin
void debugFailure(TrackSurfaceIntersection &&isect, const Surface &surface, const double qOverP, const double rStart, const double zStart, const bool trapped) const