ATLAS Offline Software
Loading...
Searching...
No Matches
Muon::MuonGetClosestParameters Class Reference

#include <MuonGetClosestParameters.h>

Collaboration diagram for Muon::MuonGetClosestParameters:

Static Public Member Functions

static double distance (const Trk::TrackParameters &pars, const Amg::Vector3D &pos)
static std::unique_ptr< Trk::TrackParametersclosestParameters (const Trk::Track &track, const Amg::Vector3D &pos, bool onlyUseMeasured=false)
static std::unique_ptr< Trk::TrackParametersclosestParameters (const Trk::Track &track, const Trk::Surface &surf, bool onlyUseMeasured=false)
static std::unique_ptr< Trk::TrackParametersclosestParameters (const Trk::Track &track, const Trk::TrackParameters &pars, bool onlyUseMeasured=false)

Detailed Description

Definition at line 14 of file MuonGetClosestParameters.h.

Member Function Documentation

◆ closestParameters() [1/3]

std::unique_ptr< Trk::TrackParameters > Muon::MuonGetClosestParameters::closestParameters ( const Trk::Track & track,
const Amg::Vector3D & pos,
bool onlyUseMeasured = false )
inlinestatic

Definition at line 19 of file MuonGetClosestParameters.h.

19 {
20 const DataVector<const Trk::TrackParameters>* pars = track.trackParameters();
21 if (!pars || pars->empty()) { return nullptr; }
22
23 bool firstOk = onlyUseMeasured ? pars->front()->covariance() != nullptr : true;
24 bool lastOk = onlyUseMeasured ? pars->back()->covariance() != nullptr : true;
25
26 const double distFront = distance(*pars->front(), pos);
27 if (distFront > 0. && firstOk) { return pars->front()->uniqueClone(); }
28
29 const double distBack = distance(*pars->back(), pos);
30 if (distBack < 0. && lastOk) { return pars->back()->uniqueClone(); }
31
32 bool startFront = std::abs(distFront) < distBack;
33
34 const Trk::TrackParameters* result{nullptr}, *prevresult{nullptr};
35 if (startFront) {
36 double prevDist = distFront - 1.;
37 // loop over parameters, calculate distance
40 for (; it != it_end; ++it) {
41 if (onlyUseMeasured && !(*it)->covariance()) continue;
42
43 double dist = distance(**it, pos);
44 // check whether dist flips sign, if this happens select either the current hit or the previous
45 if (dist > 0.) {
46 if (std::abs(dist) < std::abs(prevDist))
47 result = *it;
48 else if (it == pars->begin())
49 result = *it;
50 else
51 result = prevresult;
52 break;
53 }
54 prevDist = dist;
55 prevresult = *it;
56 }
57 } else {
58 double prevDist = distBack + 1.;
59 // loop over parameters, calculate distance
62 for (; it != it_end; ++it) {
63 if (onlyUseMeasured && !(*it)->covariance()) continue;
64
65 const double dist = distance(**it, pos);
66 // check whether dist flips sign, if this happens select either the current hit or the previous
67 if (dist < 0.) {
68 if (std::abs(dist) < std::abs(prevDist))
69 result = *it;
70 else if (it == pars->rbegin())
71 result = *it;
72 else
73 result = prevresult;
74 break;
75 }
76 prevDist = dist;
77 prevresult = *it;
78 }
79 }
80
81 return result ? result->uniqueClone() : nullptr;
82 }
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
Definition DataVector.h:838
std::reverse_iterator< const_iterator > const_reverse_iterator
Standard const_reverse_iterator.
Definition DataVector.h:847
static double distance(const Trk::TrackParameters &pars, const Amg::Vector3D &pos)
ParametersBase< TrackParametersDim, Charged > TrackParameters

◆ closestParameters() [2/3]

std::unique_ptr< Trk::TrackParameters > Muon::MuonGetClosestParameters::closestParameters ( const Trk::Track & track,
const Trk::Surface & surf,
bool onlyUseMeasured = false )
inlinestatic

Definition at line 84 of file MuonGetClosestParameters.h.

86 {
87 return closestParameters(track, surf.center(), onlyUseMeasured);
88 }
static std::unique_ptr< Trk::TrackParameters > closestParameters(const Trk::Track &track, const Amg::Vector3D &pos, bool onlyUseMeasured=false)
const Amg::Vector3D & center() const
Returns the center position of the Surface.

◆ closestParameters() [3/3]

std::unique_ptr< Trk::TrackParameters > Muon::MuonGetClosestParameters::closestParameters ( const Trk::Track & track,
const Trk::TrackParameters & pars,
bool onlyUseMeasured = false )
inlinestatic

Definition at line 90 of file MuonGetClosestParameters.h.

92 {
93 return closestParameters(track, pars.position(), onlyUseMeasured);
94 }

◆ distance()

double Muon::MuonGetClosestParameters::distance ( const Trk::TrackParameters & pars,
const Amg::Vector3D & pos )
inlinestatic

Definition at line 16 of file MuonGetClosestParameters.h.

16 {
17 return (pars.position() - pos).dot(pars.momentum().unit());
18 }

The documentation for this class was generated from the following file: