|  | ATLAS Offline Software
    | 
 
 
 
#include <RungeKuttaIntersector.h>
|  | 
|  | RungeKuttaIntersector (const std::string &type, const std::string &name, const IInterface *parent) | 
|  | 
| virtual | ~RungeKuttaIntersector ()=default | 
|  | 
| virtual StatusCode | initialize () override | 
|  | 
| virtual StatusCode | finalize () override | 
|  | 
| virtual std::optional< TrackSurfaceIntersection > | intersectSurface (const Surface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override | 
|  | IIntersector interface method for general Surface type.  More... 
 | 
|  | 
| virtual std::optional< TrackSurfaceIntersection > | approachPerigeeSurface (const PerigeeSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override | 
|  | IIntersector interface method for specific Surface type : PerigeeSurface.  More... 
 | 
|  | 
| virtual std::optional< TrackSurfaceIntersection > | approachStraightLineSurface (const StraightLineSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override | 
|  | IIntersector interface method for specific Surface type : StraightLineSurface.  More... 
 | 
|  | 
| virtual std::optional< TrackSurfaceIntersection > | intersectCylinderSurface (const CylinderSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override | 
|  | IIntersector interface method for specific Surface type : CylinderSurface.  More... 
 | 
|  | 
| virtual std::optional< TrackSurfaceIntersection > | intersectDiscSurface (const DiscSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override | 
|  | IIntersector interface method for specific Surface type : DiscSurface.  More... 
 | 
|  | 
| virtual std::optional< TrackSurfaceIntersection > | intersectPlaneSurface (const PlaneSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override | 
|  | IIntersector interface method for specific Surface type : PlaneSurface.  More... 
 | 
|  | 
| virtual bool | isValid (Amg::Vector3D, Amg::Vector3D) const override | 
|  | IIntersector interface method for validity check over a particular extrapolation range.  More... 
 | 
|  | 
|  | 
| void | assignStepLength (const TrackSurfaceIntersection &isect, double &stepLength) const | 
|  | 
| void | debugFailure (TrackSurfaceIntersection &&isect, const Surface &surface, const double qOverP, const double rStart, const double zStart, const bool trapped) const | 
|  | 
| double | distanceToCylinder (const TrackSurfaceIntersection &isect, const double cylinderRadius, const double offsetRadius, const Amg::Vector3D &offset, double &stepLength) const | 
|  | 
| double | distanceToDisc (const TrackSurfaceIntersection &isect, const double discZ, double &stepLength) const | 
|  | 
| double | distanceToLine (const TrackSurfaceIntersection &isect, const Amg::Vector3D &linePosition, const Amg::Vector3D &lineDirection, double &stepLength) const | 
|  | 
| double | distanceToPlane (const TrackSurfaceIntersection &isect, const Amg::Vector3D &planePosition, const Amg::Vector3D &planeNormal, double &stepLength) const | 
|  | 
| Amg::Vector3D | field (const Amg::Vector3D &point, MagField::AtlasFieldCache &fieldCache) const | 
|  | 
| void | initializeFieldCache (MagField::AtlasFieldCache &fieldCache) const | 
|  | 
| std::optional< TrackSurfaceIntersection > | newIntersection (TrackSurfaceIntersection &&isect, const Surface &surface, const double qOverP, const double rStart, const double zStart) const | 
|  | 
| void | shortStep (TrackSurfaceIntersection &isect, const Amg::Vector3D &fieldValue, const double stepLength, const double qOverP) const | 
|  | 
| void | step (TrackSurfaceIntersection &isect, Amg::Vector3D &fieldValue, double &stepLength, const double qOverP, MagField::AtlasFieldCache &fieldCache) const | 
|  | 
Definition at line 28 of file RungeKuttaIntersector.h.
 
◆ RungeKuttaIntersector()
      
        
          | Trk::RungeKuttaIntersector::RungeKuttaIntersector | ( | const std::string & | type, | 
        
          |  |  | const std::string & | name, | 
        
          |  |  | const IInterface * | parent | 
        
          |  | ) |  |  | 
      
 
 
◆ ~RungeKuttaIntersector()
  
  | 
        
          | virtual Trk::RungeKuttaIntersector::~RungeKuttaIntersector | ( |  | ) |  |  | virtualdefault | 
 
 
◆ approachPerigeeSurface()
IIntersector interface method for specific Surface type : PerigeeSurface. 
Definition at line 142 of file RungeKuttaIntersector.cxx.
  147     TrackSurfaceIntersection isect = trackIntersection;
 
  149     const double rStart = 
pos.perp();
 
  150     const double zStart = 
pos.z();
 
  156     const Amg::Vector3D& lineDirection  = (surface.transform().rotation()).col(2);
 
  157     double stepLength = 0;
 
  160     double previousDistance         = 1.1*
distance;
 
  165         if (isTrapped(
distance, previousDistance, stepsUntilTrapped)) {
 
  168                                                   rStart, zStart, 
true);
 
 
 
 
◆ approachStraightLineSurface()
IIntersector interface method for specific Surface type : StraightLineSurface. 
Definition at line 184 of file RungeKuttaIntersector.cxx.
  189     TrackSurfaceIntersection isect = trackIntersection;
 
  191     const double rStart = 
pos.perp();
 
  192     const double zStart = 
pos.z();
 
  198     const Amg::Vector3D& lineDirection  = (surface.transform().rotation()).col(2);
 
  199     double stepLength = 0;
 
  202     double previousDistance         = 1.1*
distance;
 
  207         if (isTrapped(
distance, previousDistance, stepsUntilTrapped)) {
 
  210                                                   rStart, zStart, 
true);
 
 
 
 
◆ assignStepLength()
Definition at line 382 of file RungeKuttaIntersector.cxx.
  386     const double sinTheta = isect.direction().perp();
 
  391     const double zCurrent = std::abs(
pos.z());
 
  392     const double rCurrent = 
pos.perp();
 
  406             } 
else if (zCurrent > 
m_inDetZ2 || sinTheta < 0.35) {
 
  412             else if (zCurrent > 
m_inDetZ1 && sinTheta < 0.60) {
 
  435         else if (rCurrent < 1000.)  
 
  437             if (zCurrent > 700.) {
 
  444             else if (zCurrent > 420. && sinTheta < 0.60) {
 
  449             if (rCurrent > 900.) {
 
  460             if (zCurrent < 3000.)
 
  491         } 
else if (
radius < 5300.) {
 
  499         else if (
phi > 0.04 ||
 
  550         } 
else if (zCurrent < m_toroidZ0 || zCurrent > 
m_toroidZ1 ||
 
  575     if (std::abs(stepLength) < stepMax)
 
  577     if (stepLength > 0.) {
 
  578         stepLength = stepMax;
 
  580         stepLength = -stepMax;
 
 
 
 
◆ debugFailure()
Definition at line 585 of file RungeKuttaIntersector.cxx.
  596     const double sinTheta = isect.direction().perp();
 
  599     const double rCurrent = isect.position().perp();
 
  602     if (rCurrent > rStart)
 
  604       log << 
MSG::DEBUG << std::setiosflags(std::ios::fixed|std::ios::right)
 
  605         << 
" fail to intersect surface when extrapolating outwards from R,Z" 
  606         << std::setw(8) << std::setprecision(1) << rStart << 
"," 
  607         << std::setw(7) << std::setprecision(0) << zStart << 
" mm, with pt" 
  608         << std::setw(7) << std::setprecision(2) << 
pt << 
" GeV, direction eta" 
  609         << std::setw(5) << std::setprecision(2) << isect.direction().eta();
 
  613       log << 
MSG::DEBUG << std::setiosflags(std::ios::fixed|std::ios::right)
 
  614         << 
" fail to intersect surface when extrapolating inwards from R,Z" 
  615         << std::setw(8) << std::setprecision(1) << rStart << 
"," 
  616         << std::setw(7) << std::setprecision(0) << zStart << 
" mm, with pt" 
  617         << std::setw(7) << std::setprecision(2) << 
pt << 
" GeV, direction eta" 
  618         << std::setw(5) << std::setprecision(2) << isect.direction().eta();
 
  623     if (
dynamic_cast<const PlaneSurface*
>(&surface))
 
  625         double stepLength = 0;
 
  626         (void)
distanceToPlane (isect, surface.center(),surface.normal(), stepLength);
 
  627         log << 
MSG::DEBUG << std::setiosflags(std::ios::fixed|std::ios::right) << 
"   PlaneSurface" 
  628         << 
" at R,Z" << std::setw(8) << std::setprecision(1) << surface.center().perp() << 
"," 
  629         << std::setw(7) << std::setprecision(0) << surface.center().z()
 
  630         << 
"  at line distance " << std::setw(9) << std::setprecision(1) << stepLength;
 
  634     else if (
dynamic_cast<const CylinderSurface*
>(&surface))
 
  636       double cylinderRadius = (surface.globalReferencePoint() - surface.center()).
perp();
 
  638       double rCurrent       = 
offset.perp();
 
  639         double stepLength = 0;
 
  643           log << 
MSG::DEBUG << std::setiosflags(std::ios::fixed|std::ios::right)
 
  644             << 
"  closest approach to CylinderSurface at radius " 
  645             << std::setw(9) << std::setprecision(4) << rCurrent
 
  646             << 
" mm.  Cylinder radius " << std::setw(9) << std::setprecision(4) << cylinderRadius << 
" mm" 
  651           log << 
MSG::DEBUG << std::setiosflags(std::ios::fixed|std::ios::right) << 
"  CylinderSurface" 
  652             << 
"  radius " << std::setw(6) << std::setprecision(1) << cylinderRadius
 
  653             << 
"  rCurrent " << std::setw(6) << std::setprecision(1) << rCurrent
 
  654             << 
"  distance " << std::setw(6) << std::setprecision(1) << stepLength;
 
  659     else if (
dynamic_cast<const DiscSurface*
>(&surface))
 
  661         double stepLength = 0;
 
  663         log << 
MSG::DEBUG << std::setiosflags(std::ios::fixed|std::ios::right) << 
"   DiscSurface" 
  664         << 
" at R,Z" << std::setw(8) << std::setprecision(1) << surface.center().perp() << 
"," 
  665         << std::setw(7) << std::setprecision(0) << surface.center().z()
 
  666         << 
"  at line distance " << std::setw(9) << std::setprecision(1) << stepLength;
 
  670     else if (
dynamic_cast<const PerigeeSurface*
>(&surface))
 
  672       log << 
MSG::DEBUG << std::setiosflags(std::ios::fixed|std::ios::right) << 
"   PerigeeSurface  " 
  675     else if (
dynamic_cast<const StraightLineSurface*
>(&surface))
 
  677       log << 
MSG::DEBUG << std::setiosflags(std::ios::fixed|std::ios::right) << 
"   StraightLineSurface  " 
 
 
 
◆ distanceToCylinder()
Definition at line 220 of file RungeKuttaIntersector.h.
  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);
 
 
 
 
◆ distanceToDisc()
◆ distanceToLine()
Definition at line 247 of file RungeKuttaIntersector.h.
  260   double cosAngle = lineDirection.dot(
dir);
 
  261   stepLength = (linePosition - 
pos).
dot(
dir - lineDirection * cosAngle) /
 
  262                (1. - cosAngle * cosAngle);
 
  263   return std::abs(stepLength);
 
 
 
 
◆ distanceToPlane()
◆ field()
◆ finalize()
  
  | 
        
          | StatusCode Trk::RungeKuttaIntersector::finalize | ( |  | ) |  |  | overridevirtual | 
 
Definition at line 79 of file RungeKuttaIntersector.cxx.
   86              << 
" taking an average" << std::setw(7) << std::setprecision(1)
 
   88              << 
" full steps," << std::setw(5) << std::setprecision(2)
 
   90              << 
" step reductions and" << std::setw(5) << std::setprecision(2)
 
   92              << 
" short final steps";
 
   96     return StatusCode::SUCCESS;
 
 
 
 
◆ initialize()
  
  | 
        
          | StatusCode Trk::RungeKuttaIntersector::initialize | ( |  | ) |  |  | overridevirtual | 
 
 
◆ initializeFieldCache()
Definition at line 280 of file RungeKuttaIntersector.h.
  284   if (!fieldCondObj.isValid()) {
 
  285     ATH_MSG_FATAL(
"Failed to get magnetic field conditions data " 
  288   fieldCondObj->getInitializedCache(fieldCache);
 
 
 
 
◆ intersectCylinderSurface()
IIntersector interface method for specific Surface type : CylinderSurface. 
Definition at line 226 of file RungeKuttaIntersector.cxx.
  231     TrackSurfaceIntersection isect = trackIntersection;
 
  233     const double rStart = 
pos.perp();
 
  234     const double zStart = 
pos.z();
 
  240     double cylinderRadius   = (surface.globalReferencePoint() - surface.center()).
perp();
 
  242     double rCurrent     = 
offset.perp();
 
  243     double stepLength = 0;
 
  246     double previousDistance     = 1.1*
distance;
 
  247     bool trapped = 
false;
 
  252         if (isTrapped(
distance, previousDistance, stepsUntilTrapped)) {
 
  257         double rPrevious= rCurrent;
 
  259         offset      = surface.center() - isect.position();
 
  261         double deltaR1  = rCurrent - rPrevious;
 
  262         double deltaR2  = cylinderRadius - rCurrent;    
 
  292                                           rStart, zStart, 
true);
 
 
 
 
◆ intersectDiscSurface()
IIntersector interface method for specific Surface type : DiscSurface. 
Definition at line 298 of file RungeKuttaIntersector.cxx.
  303     TrackSurfaceIntersection isect = trackIntersection;
 
  305     const double rStart = 
pos.perp();
 
  306     const double zStart = 
pos.z();
 
  312     double stepLength = 0;
 
  315     double previousDistance     = 1.1*
distance;
 
  320         if (isTrapped(
distance, previousDistance, stepsUntilTrapped)) {
 
  323                                                   rStart, zStart, 
true);
 
 
 
 
◆ intersectPlaneSurface()
IIntersector interface method for specific Surface type : PlaneSurface. 
Definition at line 339 of file RungeKuttaIntersector.cxx.
  344     TrackSurfaceIntersection isect = trackIntersection;
 
  346     const double rStart = 
pos.perp();
 
  347     const double zStart = 
pos.z();
 
  353     double stepLength = 0;
 
  356     double previousDistance = 1.1*
distance;
 
  361         if (isTrapped(
distance, previousDistance, stepsUntilTrapped)) {
 
  364                                                   rStart, zStart, 
true);
 
 
 
 
◆ intersectSurface()
IIntersector interface method for general Surface type. 
Definition at line 101 of file RungeKuttaIntersector.cxx.
  112     const auto surfaceType = surface.type();
 
  115                                    trackIntersection, 
qOverP);
 
  119           static_cast<const StraightLineSurface&
>(surface), trackIntersection,
 
  124           static_cast<const CylinderSurface&
>(surface), trackIntersection,
 
  129                                   trackIntersection, 
qOverP);
 
  133                                     trackIntersection, 
qOverP);
 
 
 
 
◆ isValid()
◆ newIntersection()
Definition at line 299 of file RungeKuttaIntersector.h.
  303   Intersection SLIntersect = surface.straightLineIntersection(
 
  304       isect.position(), isect.direction(), 
false, 
false);
 
  305   if (SLIntersect.valid) {
 
  306     isect.position() = SLIntersect.position;
 
  307     return std::move(isect);
 
 
 
 
◆ shortStep()
Definition at line 684 of file RungeKuttaIntersector.cxx.
  694     double    stepOverP     =  0.5*stepLength*cOverP;
 
  702     pos             += stepLength*(
dir + 
m_third*(product0+product1+product2));
 
  705     dir             += 
m_third*(product0+product3 + 2.*(product1+product2));
 
  706     isect.pathlength()      += stepLength;
 
 
 
 
◆ step()
Definition at line 711 of file RungeKuttaIntersector.cxx.
  721     double    stepOverP     =  0.5*stepLength*cOverP;
 
  728     Amg::Vector3D product1  =  stepOverP*direction1.cross(fieldValue1);
 
  730     Amg::Vector3D product2  =  stepOverP*direction2.cross(fieldValue1);
 
  737     if ((fieldValue1 - 0.5 * (
fieldValue + fieldAtEnd)).
mag() > 0.00001 &&
 
  739       if (stepLength > 0.) {
 
  745       stepOverP = 0.5 * stepLength * cOverP;
 
  749           pos + 0.5 * stepLength * (
dir + 0.5 * product0);
 
  752       product1 = stepOverP * direction1p.cross(fieldValue1p);
 
  754       product2 = stepOverP * direction2p.cross(fieldValue1p);
 
  757           stepLength * (
dir + 
m_third * (product0 + product1 + product2));
 
  758       fieldAtEnd = 
field(
pos + offsetAtEnd, fieldCache);
 
  762     Amg::Vector3D product3 = stepOverP * direction3.cross(fieldAtEnd);
 
  763     dir += 
m_third * (product0 + product3 + 2. * (product1 + product2));
 
  766     isect.pathlength() += stepLength;
 
 
 
 
◆ m_caloR0
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_caloR0 = 1900.*Gaudi::Units::mm |  | private | 
 
 
◆ m_caloR1
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_caloR1 = 2500.*Gaudi::Units::mm |  | private | 
 
 
◆ m_caloR2
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_caloR2 = 3500.*Gaudi::Units::mm |  | private | 
 
 
◆ m_caloR3
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_caloR3 = 3700.*Gaudi::Units::mm |  | private | 
 
 
◆ m_caloR4
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_caloR4 = 3800.*Gaudi::Units::mm |  | private | 
 
 
◆ m_caloZ0
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_caloZ0 = 2350.*Gaudi::Units::mm |  | private | 
 
 
◆ m_caloZ1
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_caloZ1 = 2600.*Gaudi::Units::mm |  | private | 
 
 
◆ m_caloZ2
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_caloZ2 = 3600.*Gaudi::Units::mm |  | private | 
 
 
◆ m_caloZ3
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_caloZ3 = 6000.*Gaudi::Units::mm |  | private | 
 
 
◆ m_countExtrapolations
  
  | 
        
          | std::atomic<unsigned long long> Trk::RungeKuttaIntersector::m_countExtrapolations = 0 |  | mutableprivate | 
 
 
◆ m_countShortStep
  
  | 
        
          | std::atomic<unsigned long long> Trk::RungeKuttaIntersector::m_countShortStep = 0 |  | mutableprivate | 
 
 
◆ m_countStep
  
  | 
        
          | std::atomic<unsigned long long> Trk::RungeKuttaIntersector::m_countStep = 0 |  | mutableprivate | 
 
 
◆ m_countStepReduction
  
  | 
        
          | std::atomic<unsigned long long> Trk::RungeKuttaIntersector::m_countStepReduction = 0 |  | mutableprivate | 
 
 
◆ m_fieldCacheCondObjInputKey
Initial value:{
      this, "AtlasFieldCacheCondObj", "fieldCondObj",
      "Name of the Magnetic Field conditions object key"}
Definition at line 125 of file RungeKuttaIntersector.h.
 
 
◆ m_inDetR0
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_inDetR0 = 400.*Gaudi::Units::mm |  | private | 
 
 
◆ m_inDetR1
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_inDetR1 = 350.*Gaudi::Units::mm |  | private | 
 
 
◆ m_inDetR2
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_inDetR2 = 800.*Gaudi::Units::mm |  | private | 
 
 
◆ m_inDetZ0
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_inDetZ0 = 350.*Gaudi::Units::mm |  | private | 
 
 
◆ m_inDetZ1
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_inDetZ1 = 420.*Gaudi::Units::mm |  | private | 
 
 
◆ m_inDetZ2
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_inDetZ2 = 700.*Gaudi::Units::mm |  | private | 
 
 
◆ m_momentumThreshold
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_momentumThreshold = 1./20.*Gaudi::Units::MeV |  | private | 
 
 
◆ m_momentumWarnThreshold
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_momentumWarnThreshold = 1./450.*Gaudi::Units::MeV |  | private | 
 
 
◆ m_muonR0
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_muonR0 = 4300.*Gaudi::Units::mm |  | private | 
 
 
◆ m_muonZ0
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_muonZ0 = 6600.*Gaudi::Units::mm |  | private | 
 
 
◆ m_productionMode
  
  | 
        
          | BooleanProperty Trk::RungeKuttaIntersector::m_productionMode {this, "ProductionMode", true} |  | private | 
 
 
◆ m_shortStepMax
  
  | 
        
          | double Trk::RungeKuttaIntersector::m_shortStepMax = 3.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_shortStepMin
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_shortStepMin = 10.*Gaudi::Units::nanometer |  | private | 
 
 
◆ m_solenoidR
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_solenoidR = 1300.*Gaudi::Units::mm |  | private | 
 
 
◆ m_solenoidZ
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_solenoidZ = 3500.*Gaudi::Units::mm |  | private | 
 
 
◆ m_stepMax0
  
  | 
        
          | double Trk::RungeKuttaIntersector::m_stepMax0 = 8.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_stepMax1
  
  | 
        
          | double Trk::RungeKuttaIntersector::m_stepMax1 = 40.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_stepMax2
  
  | 
        
          | double Trk::RungeKuttaIntersector::m_stepMax2 = 80.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_stepMax3
  
  | 
        
          | double Trk::RungeKuttaIntersector::m_stepMax3 = 160.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_stepMax4
  
  | 
        
          | double Trk::RungeKuttaIntersector::m_stepMax4 = 320.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_stepsUntilTrapped
  
  | 
        
          | int Trk::RungeKuttaIntersector::m_stepsUntilTrapped = 2000 |  | private | 
 
 
◆ m_third
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_third = 1./3. |  | private | 
 
 
◆ m_toroidR0
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidR0 = 1850.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidR1
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidR1 = 3500.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidR2
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidR2 = 6000.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidR3
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidR3 = 6500.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidZ0
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidZ0 = 7000.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidZ1
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidZ1 = 8000.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidZ2
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidZ2 = 8700.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidZ3
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidZ3 = 9100.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidZ4
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidZ4 = 9500.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidZ5
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidZ5 = 9800.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidZ6
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidZ6 = 11400.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidZ7
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidZ7 = 12900.0*Gaudi::Units::mm |  | private | 
 
 
◆ m_toroidZ8
  
  | 
        
          | const double Trk::RungeKuttaIntersector::m_toroidZ8 = 14000.0*Gaudi::Units::mm |  | private | 
 
 
The documentation for this class was generated from the following files:
 
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
Scalar perp() const
perp method - perpenticular length
std::atomic< unsigned long long > m_countExtrapolations
BooleanProperty m_productionMode
virtual std::optional< TrackSurfaceIntersection > intersectPlaneSurface(const PlaneSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : PlaneSurface.
double distanceToCylinder(const TrackSurfaceIntersection &isect, const double cylinderRadius, const double offsetRadius, const Amg::Vector3D &offset, double &stepLength) const
Amg::Vector3D field(const Amg::Vector3D &point, MagField::AtlasFieldCache &fieldCache) const
const std::string & key() const
Return the StoreGate ID for the referenced object.
double deltaR2(double rapidity1, double phi1, double rapidity2, double phi2)
from bare rapidity,phi
const double m_momentumThreshold
msgSvc
Provide convenience handles for various services.
double distanceToDisc(const TrackSurfaceIntersection &isect, const double discZ, double &stepLength) const
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=[])
void assignStepLength(const TrackSurfaceIntersection &isect, double &stepLength) const
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
StatusCode initialize(bool used=true)
Eigen::Matrix< double, 3, 1 > Vector3D
virtual std::optional< TrackSurfaceIntersection > intersectCylinderSurface(const CylinderSurface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP) const override
IIntersector interface method for specific Surface type : CylinderSurface.
#define ATH_MSG_WARNING(x)
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 > 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
Scalar mag() const
mag method
void debugFailure(TrackSurfaceIntersection &&isect, const Surface &surface, const double qOverP, const double rStart, const double zStart, const bool trapped) const