ATLAS Offline Software
RungeKuttaIntersector.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 // Runge-Kutta method for tracking a particle through a magnetic field
7 // (c) ATLAS Detector software
9 
10 #ifndef TRKEXRUNGEKUTTAINTERSECTOR_RUNGEKUTTAINTERSECTOR_H
11 #define TRKEXRUNGEKUTTAINTERSECTOR_RUNGEKUTTAINTERSECTOR_H
12 
13 #include <atomic>
14 
17 #include "GaudiKernel/PhysicalConstants.h"
18 #include "GaudiKernel/ToolHandle.h"
25 
26 namespace Trk {
27 
28 class RungeKuttaIntersector final : public extends<AthAlgTool, IIntersector> {
29 
30  public:
31  RungeKuttaIntersector(const std::string& type, const std::string& name,
32  const IInterface* parent);
33  virtual ~RungeKuttaIntersector() = default;
34 
35  virtual StatusCode initialize() override;
36  virtual StatusCode finalize() override;
37 
39  virtual std::optional<TrackSurfaceIntersection> intersectSurface(
40  const Surface& surface, const TrackSurfaceIntersection& trackIntersection,
41  const double qOverP) const override;
42 
44  virtual std::optional<TrackSurfaceIntersection> approachPerigeeSurface(
45  const PerigeeSurface& surface,
46  const TrackSurfaceIntersection& trackIntersection,
47  const double qOverP) const override;
48 
51  virtual std::optional<TrackSurfaceIntersection> approachStraightLineSurface(
52  const StraightLineSurface& surface,
53  const TrackSurfaceIntersection& trackIntersection,
54  const double qOverP) const override;
55 
58  virtual std::optional<TrackSurfaceIntersection> intersectCylinderSurface(
59  const CylinderSurface& surface,
60  const TrackSurfaceIntersection& trackIntersection,
61  const double qOverP) const override;
62 
64  virtual std::optional<TrackSurfaceIntersection> intersectDiscSurface(
65  const DiscSurface& surface,
66  const TrackSurfaceIntersection& trackIntersection,
67  const double qOverP) const override;
68 
70  virtual std::optional<TrackSurfaceIntersection> intersectPlaneSurface(
71  const PlaneSurface& surface,
72  const TrackSurfaceIntersection& trackIntersection,
73  const double qOverP) const override;
74 
77  virtual bool isValid(Amg::Vector3D /*startPosition*/,
78  Amg::Vector3D /*endPosition*/) const override {
79  return true;
80  }
81 
82  private:
83  // private methods
85  double& stepLength) const;
87  const Surface& surface, const double qOverP,
88  const double rStart, const double zStart,
89  const bool trapped) const;
90  double distanceToCylinder(const TrackSurfaceIntersection& isect,
91  const double cylinderRadius,
92  const double offsetRadius,
93  const Amg::Vector3D& offset,
94  double& stepLength) const;
95  double distanceToDisc(const TrackSurfaceIntersection& isect,
96  const double discZ, double& stepLength) const;
97 
98  double distanceToLine(const TrackSurfaceIntersection& isect,
99  const Amg::Vector3D& linePosition,
100  const Amg::Vector3D& lineDirection,
101  double& stepLength) const;
102 
103  double distanceToPlane(const TrackSurfaceIntersection& isect,
104  const Amg::Vector3D& planePosition,
105  const Amg::Vector3D& planeNormal,
106  double& stepLength) const;
107 
108  Amg::Vector3D field(const Amg::Vector3D& point,
109  MagField::AtlasFieldCache& fieldCache) const;
110 
111  void initializeFieldCache(MagField::AtlasFieldCache& fieldCache) const;
112 
113  std::optional<TrackSurfaceIntersection> newIntersection(
114  TrackSurfaceIntersection&& isect, const Surface& surface,
115  const double qOverP, const double rStart, const double zStart) const;
116 
118  const Amg::Vector3D& fieldValue, const double stepLength,
119  const double qOverP) const;
120 
122  double& stepLength, const double qOverP,
123  MagField::AtlasFieldCache& fieldCache) const;
124 
126  this, "AtlasFieldCacheCondObj", "fieldCondObj",
127  "Name of the Magnetic Field conditions object key"};
128 
129  // additional configuration
131 
132  // some precalculated constants:
133  const double m_caloR0;
134  const double m_caloR1;
135  const double m_caloR2;
136  const double m_caloR3;
137  const double m_caloR4;
138  const double m_caloZ0;
139  const double m_caloZ1;
140  const double m_caloZ2;
141  const double m_caloZ3;
142  const double m_inDetR0;
143  const double m_inDetR1;
144  const double m_inDetR2;
145  const double m_inDetZ0;
146  const double m_inDetZ1;
147  const double m_inDetZ2;
148  const double m_momentumThreshold;
150  const double m_muonR0;
151  const double m_muonZ0;
153  const double m_shortStepMin;
154  const double m_solenoidR;
155  const double m_solenoidZ;
156  double m_stepMax0;
157  double m_stepMax1;
158  double m_stepMax2;
159  double m_stepMax3;
160  double m_stepMax4;
162  const double m_third;
163  const double m_toroidR0;
164  const double m_toroidR1;
165  const double m_toroidR2;
166  const double m_toroidR3;
167  const double m_toroidZ0;
168  const double m_toroidZ1;
169  const double m_toroidZ2;
170  const double m_toroidZ3;
171  const double m_toroidZ4;
172  const double m_toroidZ5;
173  const double m_toroidZ6;
174  const double m_toroidZ7;
175  const double m_toroidZ8;
176 
177  // counters
178  mutable std::atomic<unsigned long long> m_countExtrapolations;
179  mutable std::atomic<unsigned long long> m_countShortStep;
180  mutable std::atomic<unsigned long long> m_countStep;
181  mutable std::atomic<unsigned long long> m_countStepReduction;
182 };
183 
184 //<<<<<< INLINE PRIVATE MEMBER FUNCTIONS >>>>>>
185 
187  const TrackSurfaceIntersection& isect, const double cylinderRadius,
188  const double offsetRadius, const Amg::Vector3D& offset,
189  double& stepLength) const {
190  const Amg::Vector3D& dir = isect.direction();
191 
192  double sinThsqinv = 1. / dir.perp2();
193  stepLength = (offset.x() * dir.x() + offset.y() * dir.y()) * sinThsqinv;
194  double deltaRSq = (cylinderRadius - offsetRadius) *
195  (cylinderRadius + offsetRadius) * sinThsqinv +
196  stepLength * stepLength;
197  if (deltaRSq > 0.)
198  stepLength += sqrt(deltaRSq);
199  return std::abs(stepLength);
200 }
201 
203  const TrackSurfaceIntersection& isect, const double discZ,
204  double& stepLength) const {
205  const Amg::Vector3D& pos = isect.position();
206  const Amg::Vector3D& dir = isect.direction();
207 
208  double distance = discZ - pos.z();
209  stepLength = distance / dir.z();
210  return std::abs(distance);
211 }
212 
214  const TrackSurfaceIntersection& isect, const Amg::Vector3D& linePosition,
215  const Amg::Vector3D& lineDirection, double& stepLength) const {
216  // offset joining track to line is given by
217  // offset = linePosition + a*lineDirection - trackPosition -
218  // b*trackDirection
219  //
220  // offset is perpendicular to both line and track at solution i.e.
221  // lineDirection.dot(offset) = 0
222  // trackDirection.dot(offset) = 0
223  const Amg::Vector3D& pos = isect.position();
224  const Amg::Vector3D& dir = isect.direction();
225 
226  double cosAngle = lineDirection.dot(dir);
227  stepLength = (linePosition - pos).dot(dir - lineDirection * cosAngle) /
228  (1. - cosAngle * cosAngle);
229  return std::abs(stepLength);
230 }
231 
233  const TrackSurfaceIntersection& isect, const Amg::Vector3D& planePosition,
234  const Amg::Vector3D& planeNormal, double& stepLength) const {
235  // take the normal component of the offset from track position to plane
236  // position this is equal to the normal component of the required distance
237  // along the track direction
238  const Amg::Vector3D& pos = isect.position();
239  const Amg::Vector3D& dir = isect.direction();
240 
241  double distance = planeNormal.dot(planePosition - pos);
242  stepLength = distance / planeNormal.dot(dir);
243  return std::abs(distance);
244 }
245 
247  MagField::AtlasFieldCache& fieldCache) const {
250  if (!fieldCondObj.isValid()) {
251  ATH_MSG_FATAL("Failed to get magnetic field conditions data "
253  }
254  fieldCondObj->getInitializedCache(fieldCache);
255 }
256 
258  const Amg::Vector3D& position,
259  MagField::AtlasFieldCache& fieldCache) const {
261  fieldCache.getField(position.data(), fieldValue.data());
262  return fieldValue;
263 }
264 
265 inline std::optional<TrackSurfaceIntersection> RungeKuttaIntersector::newIntersection(
266  TrackSurfaceIntersection&& isect, const Surface& surface,
267  const double qOverP, const double rStart, const double zStart) const {
268  // ensure intersection is valid (ie. on surface)
269  Intersection SLIntersect = surface.straightLineIntersection(
270  isect.position(), isect.direction(), false, false);
271  if (SLIntersect.valid) {
272  isect.position() = SLIntersect.position;
273  return std::move(isect);
274  }
275 
276  // invalid: take care to invalidate cache!
277  if (msgLvl(MSG::DEBUG)){
278  debugFailure(std::move(isect), surface, qOverP, rStart, zStart, false);
279  }
280 
281  return std::nullopt;
282 }
283 
284 } // namespace Trk
285 
286 #endif // TRKEXRUNGEKUTTAINTERSECTOR_RUNGEKUTTAINTERSECTOR_H
Trk::RungeKuttaIntersector::m_toroidZ0
const double m_toroidZ0
Definition: RungeKuttaIntersector.h:167
Trk::RungeKuttaIntersector::m_muonZ0
const double m_muonZ0
Definition: RungeKuttaIntersector.h:151
Trk::RungeKuttaIntersector::distanceToPlane
double distanceToPlane(const TrackSurfaceIntersection &isect, const Amg::Vector3D &planePosition, const Amg::Vector3D &planeNormal, double &stepLength) const
Definition: RungeKuttaIntersector.h:232
Trk::RungeKuttaIntersector::m_toroidR2
const double m_toroidR2
Definition: RungeKuttaIntersector.h:165
Trk::RungeKuttaIntersector
Definition: RungeKuttaIntersector.h:28
Trk::RungeKuttaIntersector::m_momentumWarnThreshold
const double m_momentumWarnThreshold
Definition: RungeKuttaIntersector.h:149
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
Trk::RungeKuttaIntersector::m_countStepReduction
std::atomic< unsigned long long > m_countStepReduction
Definition: RungeKuttaIntersector.h:181
Trk::Intersection
Definition: Intersection.h:24
Trk::RungeKuttaIntersector::m_inDetR1
const double m_inDetR1
Definition: RungeKuttaIntersector.h:143
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Trk::RungeKuttaIntersector::m_third
const double m_third
Definition: RungeKuttaIntersector.h:162
Trk::Surface::straightLineIntersection
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
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:351
Trk::RungeKuttaIntersector::m_stepMax1
double m_stepMax1
Definition: RungeKuttaIntersector.h:157
Trk::PerigeeSurface
Definition: PerigeeSurface.h:43
Trk::RungeKuttaIntersector::m_caloR2
const double m_caloR2
Definition: RungeKuttaIntersector.h:135
AtlasFieldCacheCondObj.h
Trk::RungeKuttaIntersector::m_countExtrapolations
std::atomic< unsigned long long > m_countExtrapolations
Definition: RungeKuttaIntersector.h:178
Trk::RungeKuttaIntersector::finalize
virtual StatusCode finalize() override
Definition: RungeKuttaIntersector.cxx:133
Trk::RungeKuttaIntersector::m_toroidZ6
const double m_toroidZ6
Definition: RungeKuttaIntersector.h:173
Trk::RungeKuttaIntersector::~RungeKuttaIntersector
virtual ~RungeKuttaIntersector()=default
Trk::RungeKuttaIntersector::intersectPlaneSurface
virtual std::optional< TrackSurfaceIntersection > intersectPlaneSurface(const PlaneSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : PlaneSurface.
Definition: RungeKuttaIntersector.cxx:393
Trk::RungeKuttaIntersector::m_inDetZ2
const double m_inDetZ2
Definition: RungeKuttaIntersector.h:147
Trk::RungeKuttaIntersector::m_toroidZ8
const double m_toroidZ8
Definition: RungeKuttaIntersector.h:175
Trk::RungeKuttaIntersector::initialize
virtual StatusCode initialize() override
Definition: RungeKuttaIntersector.cxx:107
Trk::RungeKuttaIntersector::distanceToCylinder
double distanceToCylinder(const TrackSurfaceIntersection &isect, const double cylinderRadius, const double offsetRadius, const Amg::Vector3D &offset, double &stepLength) const
Definition: RungeKuttaIntersector.h:186
Trk::RungeKuttaIntersector::m_stepsUntilTrapped
int m_stepsUntilTrapped
Definition: RungeKuttaIntersector.h:161
Trk::RungeKuttaIntersector::m_stepMax4
double m_stepMax4
Definition: RungeKuttaIntersector.h:160
Trk::RungeKuttaIntersector::m_toroidR3
const double m_toroidR3
Definition: RungeKuttaIntersector.h:166
Trk::RungeKuttaIntersector::m_productionMode
bool m_productionMode
Definition: RungeKuttaIntersector.h:130
Trk::RungeKuttaIntersector::RungeKuttaIntersector
RungeKuttaIntersector(const std::string &type, const std::string &name, const IInterface *parent)
Definition: RungeKuttaIntersector.cxx:50
Trk::RungeKuttaIntersector::m_shortStepMax
double m_shortStepMax
Definition: RungeKuttaIntersector.h:152
Trk::TrackSurfaceIntersection
Definition: TrackSurfaceIntersection.h:32
Trk::RungeKuttaIntersector::field
Amg::Vector3D field(const Amg::Vector3D &point, MagField::AtlasFieldCache &fieldCache) const
Definition: RungeKuttaIntersector.h:257
Trk::DiscSurface
Definition: DiscSurface.h:54
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
Trk::RungeKuttaIntersector::m_caloR4
const double m_caloR4
Definition: RungeKuttaIntersector.h:137
ReadCondHandle.h
Trk::RungeKuttaIntersector::m_caloR0
const double m_caloR0
Definition: RungeKuttaIntersector.h:133
Trk::RungeKuttaIntersector::m_stepMax2
double m_stepMax2
Definition: RungeKuttaIntersector.h:158
Trk::RungeKuttaIntersector::m_momentumThreshold
const double m_momentumThreshold
Definition: RungeKuttaIntersector.h:148
Trk::RungeKuttaIntersector::m_caloR1
const double m_caloR1
Definition: RungeKuttaIntersector.h:134
GeoPrimitives.h
Trk::RungeKuttaIntersector::m_stepMax3
double m_stepMax3
Definition: RungeKuttaIntersector.h:159
Trk::RungeKuttaIntersector::m_toroidZ3
const double m_toroidZ3
Definition: RungeKuttaIntersector.h:170
Trk::RungeKuttaIntersector::m_toroidZ7
const double m_toroidZ7
Definition: RungeKuttaIntersector.h:174
Trk::RungeKuttaIntersector::m_solenoidZ
const double m_solenoidZ
Definition: RungeKuttaIntersector.h:155
Trk::RungeKuttaIntersector::m_caloR3
const double m_caloR3
Definition: RungeKuttaIntersector.h:136
Trk::RungeKuttaIntersector::distanceToDisc
double distanceToDisc(const TrackSurfaceIntersection &isect, const double discZ, double &stepLength) const
Definition: RungeKuttaIntersector.h:202
Trk::TrackSurfaceIntersection::position
const Amg::Vector3D & position() const
Method to retrieve the position of the Intersection.
Definition: TrackSurfaceIntersection.h:80
Trk::RungeKuttaIntersector::m_toroidR1
const double m_toroidR1
Definition: RungeKuttaIntersector.h:164
Trk::RungeKuttaIntersector::m_caloZ2
const double m_caloZ2
Definition: RungeKuttaIntersector.h:140
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::CylinderSurface
Definition: CylinderSurface.h:55
Trk::RungeKuttaIntersector::step
void step(TrackSurfaceIntersection &isect, Amg::Vector3D &fieldValue, double &stepLength, const double qOverP, MagField::AtlasFieldCache &fieldCache) const
Definition: RungeKuttaIntersector.cxx:765
Trk::RungeKuttaIntersector::shortStep
void shortStep(TrackSurfaceIntersection &isect, const Amg::Vector3D &fieldValue, const double stepLength, const double qOverP) const
Definition: RungeKuttaIntersector.cxx:738
AthAlgTool.h
test_pyathena.parent
parent
Definition: test_pyathena.py:15
Trk::RungeKuttaIntersector::distanceToLine
double distanceToLine(const TrackSurfaceIntersection &isect, const Amg::Vector3D &linePosition, const Amg::Vector3D &lineDirection, double &stepLength) const
Definition: RungeKuttaIntersector.h:213
Trk::RungeKuttaIntersector::initializeFieldCache
void initializeFieldCache(MagField::AtlasFieldCache &fieldCache) const
Definition: RungeKuttaIntersector.h:246
Trk::RungeKuttaIntersector::m_caloZ1
const double m_caloZ1
Definition: RungeKuttaIntersector.h:139
Trk::RungeKuttaIntersector::m_countShortStep
std::atomic< unsigned long long > m_countShortStep
Definition: RungeKuttaIntersector.h:179
Trk::Intersection::position
Amg::Vector3D position
Definition: Intersection.h:25
dot.dot
def dot(G, fn, nodesToHighlight=[])
Definition: dot.py:5
Trk::RungeKuttaIntersector::m_toroidZ5
const double m_toroidZ5
Definition: RungeKuttaIntersector.h:172
beamspotman.dir
string dir
Definition: beamspotman.py:623
ReadCondHandleKey.h
EventPrimitives.h
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::RungeKuttaIntersector::m_inDetZ1
const double m_inDetZ1
Definition: RungeKuttaIntersector.h:146
Trk::RungeKuttaIntersector::isValid
virtual bool isValid(Amg::Vector3D, Amg::Vector3D) const override
IIntersector interface method for validity check over a particular extrapolation range.
Definition: RungeKuttaIntersector.h:77
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
Trk::RungeKuttaIntersector::m_muonR0
const double m_muonR0
Definition: RungeKuttaIntersector.h:150
Trk::RungeKuttaIntersector::assignStepLength
void assignStepLength(const TrackSurfaceIntersection &isect, double &stepLength) const
Definition: RungeKuttaIntersector.cxx:436
Trk::RungeKuttaIntersector::m_fieldCacheCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Definition: RungeKuttaIntersector.h:125
Trk::RungeKuttaIntersector::m_solenoidR
const double m_solenoidR
Definition: RungeKuttaIntersector.h:154
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
IIntersector.h
Trk::TrackSurfaceIntersection::direction
const Amg::Vector3D & direction() const
Method to retrieve the direction at the Intersection.
Definition: TrackSurfaceIntersection.h:88
Trk::Intersection::valid
bool valid
Definition: Intersection.h:28
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
SG::ReadCondHandleKey< AtlasFieldCacheCondObj >
Trk::RungeKuttaIntersector::m_inDetZ0
const double m_inDetZ0
Definition: RungeKuttaIntersector.h:145
taskman.fieldValue
fieldValue
Definition: taskman.py:493
Trk::RungeKuttaIntersector::intersectCylinderSurface
virtual std::optional< TrackSurfaceIntersection > intersectCylinderSurface(const CylinderSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : CylinderSurface.
Definition: RungeKuttaIntersector.cxx:280
Trk::PlaneSurface
Definition: PlaneSurface.h:64
Trk::RungeKuttaIntersector::m_toroidR0
const double m_toroidR0
Definition: RungeKuttaIntersector.h:163
Trk::RungeKuttaIntersector::m_caloZ3
const double m_caloZ3
Definition: RungeKuttaIntersector.h:141
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:67
Trk::RungeKuttaIntersector::m_inDetR0
const double m_inDetR0
Definition: RungeKuttaIntersector.h:142
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
Trk::RungeKuttaIntersector::m_caloZ0
const double m_caloZ0
Definition: RungeKuttaIntersector.h:138
MagField::AtlasFieldCache::getField
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,...
Definition: AtlasFieldCache.cxx:42
Trk::RungeKuttaIntersector::m_toroidZ4
const double m_toroidZ4
Definition: RungeKuttaIntersector.h:171
Trk::RungeKuttaIntersector::m_stepMax0
double m_stepMax0
Definition: RungeKuttaIntersector.h:156
Trk::RungeKuttaIntersector::intersectSurface
virtual std::optional< TrackSurfaceIntersection > intersectSurface(const Surface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for general Surface type.
Definition: RungeKuttaIntersector.cxx:155
Trk::RungeKuttaIntersector::approachPerigeeSurface
virtual std::optional< TrackSurfaceIntersection > approachPerigeeSurface(const PerigeeSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : PerigeeSurface.
Definition: RungeKuttaIntersector.cxx:196
Trk::RungeKuttaIntersector::m_countStep
std::atomic< unsigned long long > m_countStep
Definition: RungeKuttaIntersector.h:180
Trk::RungeKuttaIntersector::approachStraightLineSurface
virtual std::optional< TrackSurfaceIntersection > approachStraightLineSurface(const StraightLineSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : StraightLineSurface.
Definition: RungeKuttaIntersector.cxx:238
Trk::RungeKuttaIntersector::m_inDetR2
const double m_inDetR2
Definition: RungeKuttaIntersector.h:144
Trk::RungeKuttaIntersector::intersectDiscSurface
virtual std::optional< TrackSurfaceIntersection > intersectDiscSurface(const DiscSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : DiscSurface.
Definition: RungeKuttaIntersector.cxx:352
TrackSurfaceIntersection.h
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Trk::RungeKuttaIntersector::newIntersection
std::optional< TrackSurfaceIntersection > newIntersection(TrackSurfaceIntersection &&isect, const Surface &surface, const double qOverP, const double rStart, const double zStart) const
Definition: RungeKuttaIntersector.h:265
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
Trk::RungeKuttaIntersector::m_toroidZ2
const double m_toroidZ2
Definition: RungeKuttaIntersector.h:169
Trk::RungeKuttaIntersector::m_shortStepMin
const double m_shortStepMin
Definition: RungeKuttaIntersector.h:153
Trk::RungeKuttaIntersector::m_toroidZ1
const double m_toroidZ1
Definition: RungeKuttaIntersector.h:168
Trk::StraightLineSurface
Definition: StraightLineSurface.h:51
Trk::RungeKuttaIntersector::debugFailure
void debugFailure(TrackSurfaceIntersection &&isect, const Surface &surface, const double qOverP, const double rStart, const double zStart, const bool trapped) const
Definition: RungeKuttaIntersector.cxx:639