ATLAS Offline Software
Loading...
Searching...
No Matches
MuonCalib::TrRelationLookUp Class Reference

#include <TrRelationLookUp.h>

Inheritance diagram for MuonCalib::TrRelationLookUp:
Collaboration diagram for MuonCalib::TrRelationLookUp:

Public Types

using ParVec = std::vector<double>

Public Member Functions

 TrRelationLookUp (const IRtRelation &rtRelation)
virtual std::string name () const override final
virtual std::optional< double > driftTime (const double r) const override final
 Interface method for fetching the drift-time from the radius Returns a nullopt if the time is out of the boundaries.
virtual std::optional< double > driftTimePrime (const double r) const override final
virtual std::optional< double > driftTime2Prime (const double r) const override final
virtual double minRadius () const override final
 Returns the minimum drift-radius.
virtual double maxRadius () const override final
 Returns the maximum drift-radius.
virtual unsigned nDoF () const override final
 Returns the number of degrees of freedom of the tr relation.
virtual std::string typeName () const override final
double getReducedR (const double r) const
 Maps the radius interval [minRadius;maxRadius] to [-1;1] where the minimal radius is on the lower end.
double getReducedRPrime () const
 Returns the derivative of the reduced radisu w.r.t r.
unsigned int nPar () const
const ParVec & parameters () const
double par (unsigned int index) const

Private Member Functions

double getTFromR (const double radius, const IRtRelation &rtRelation) const

Private Attributes

std::vector< double > m_times {}
std::vector< double > m_radii {}
double m_minRadius {}
double m_maxRadius {}
ParVec m_parameters {}

Detailed Description

Definition at line 14 of file TrRelationLookUp.h.

Member Typedef Documentation

◆ ParVec

using MuonCalib::CalibFunc::ParVec = std::vector<double>
inherited

Definition at line 35 of file CalibFunc.h.

Constructor & Destructor Documentation

◆ TrRelationLookUp()

MuonCalib::TrRelationLookUp::TrRelationLookUp ( const IRtRelation & rtRelation)

Definition at line 14 of file TrRelationLookUp.cxx.

14 : ITrRelation{ParVec{}} {
15
16 constexpr std::size_t numPoints(100);
17 double stepSize{rtRelation.radius(rtRelation.tUpper()) / (numPoints - 1)};
18 m_times.resize(numPoints);
19 m_radii.resize(numPoints);
20
21 for(std::size_t i = 0; i < numPoints; ++i){
22 m_radii[i] = i * stepSize;
23 m_times[i] = getTFromR(m_radii[i], rtRelation);
24 }
25 m_minRadius = m_radii.front();
26 m_maxRadius = m_radii.back();
27 }
std::vector< double > ParVec
Definition CalibFunc.h:35
ITrRelation(const ParVec &parameters)
Constructor taking the input r-t relation & the vector of parameters.
Definition ITrRelation.h:20
std::vector< double > m_radii
double getTFromR(const double radius, const IRtRelation &rtRelation) const
std::vector< double > m_times

Member Function Documentation

◆ driftTime()

std::optional< double > MuonCalib::TrRelationLookUp::driftTime ( const double r) const
finaloverridevirtual

Interface method for fetching the drift-time from the radius Returns a nullopt if the time is out of the boundaries.

Implements MuonCalib::ITrRelation.

Definition at line 31 of file TrRelationLookUp.cxx.

31 {
32 if(r < minRadius()) return m_times.front();
33 if(r > maxRadius()) return m_times.back();
34 //Find the first element that is not less than r
35 auto it = std::lower_bound(m_radii.begin(), m_radii.end(), r);
36 //Find the distance to the element right before this one, since r lies between idx and idx+1
37 std::size_t idx = std::distance(m_radii.begin(), it) - 1;
38 double radius1 = m_radii[idx];
39 double radius2 = m_radii[idx + 1];
40 if (radius1 == radius2) return m_times[idx];
41 double time1 = m_times[idx];
42 double time2 = m_times[idx + 1];
43 return time1 + (time2 - time1) * (r - radius1) / (radius2 - radius1);
44 }
virtual double minRadius() const override final
Returns the minimum drift-radius.
virtual double maxRadius() const override final
Returns the maximum drift-radius.
int r
Definition globals.cxx:22

◆ driftTime2Prime()

std::optional< double > MuonCalib::TrRelationLookUp::driftTime2Prime ( const double r) const
finaloverridevirtual

Implements MuonCalib::ITrRelation.

Definition at line 59 of file TrRelationLookUp.cxx.

59 {
60 if(r < minRadius() || r > maxRadius()) return std::nullopt;
61 return 0.0;
62 }

◆ driftTimePrime()

std::optional< double > MuonCalib::TrRelationLookUp::driftTimePrime ( const double r) const
finaloverridevirtual

Implements MuonCalib::ITrRelation.

Definition at line 46 of file TrRelationLookUp.cxx.

46 {
47 if(r < minRadius() || r > maxRadius()) return 0.;
48 //do the same thing as above but return dt/dr
49 auto it = std::lower_bound(m_radii.begin(), m_radii.end(), r);
50 std::size_t idx = std::distance(m_radii.begin(), it) - 1;
51 double radius1 = m_radii[idx];
52 double radius2 = m_radii[idx + 1];
53 if (radius1 == radius2) return std::nullopt;
54 double time1 = m_times[idx];
55 double time2 = m_times[idx + 1];
56 return (time2 - time1) / (radius2 - radius1);
57 }

◆ getReducedR()

double MuonCalib::ITrRelation::getReducedR ( const double r) const
inlineinherited

Maps the radius interval [minRadius;maxRadius] to [-1;1] where the minimal radius is on the lower end.

Definition at line 42 of file ITrRelation.h.

42 {
44 }
virtual double maxRadius() const =0
Returns the maximum drift-radius.
virtual double minRadius() const =0
Returns the minimum drift-radius.
double mapToUnitInterval(const double x, const double lowerEdge, const double upperEdge)
Maps the number x which is in [lowEdge;upperEdge] to the interval [-1;1].
Definition UtilFunc.h:12

◆ getReducedRPrime()

double MuonCalib::ITrRelation::getReducedRPrime ( ) const
inlineinherited

Returns the derivative of the reduced radisu w.r.t r.

Definition at line 46 of file ITrRelation.h.

46 {
48 }
double unitIntervalPrime(const double lowerEdge, const double upperEdge)
Definition UtilFunc.h:15

◆ getTFromR()

double MuonCalib::TrRelationLookUp::getTFromR ( const double radius,
const IRtRelation & rtRelation ) const
private

Definition at line 67 of file TrRelationLookUp.cxx.

67 {
68 double precision{0.001};
69 double tMax{rtRelation.tUpper()};
70 double tMin{rtRelation.tLower()};
71
72 //Search for the drift time
73 while (tMax - tMin > 0.1 and std::abs(rtRelation.radius(0.5 * (tMin + tMax)) - radius) > precision) {
74 double midPoint = 0.5 * (tMin + tMax);
75 if (rtRelation.radius(midPoint) > radius) {
76 tMax = midPoint;
77 } else {
78 tMin = midPoint;
79 }
80 }
81 return 0.5 * (tMin + tMax);
82 }

◆ maxRadius()

double MuonCalib::TrRelationLookUp::maxRadius ( ) const
finaloverridevirtual

Returns the maximum drift-radius.

Implements MuonCalib::ITrRelation.

Definition at line 65 of file TrRelationLookUp.cxx.

65{ return m_maxRadius; }

◆ minRadius()

double MuonCalib::TrRelationLookUp::minRadius ( ) const
finaloverridevirtual

Returns the minimum drift-radius.

Implements MuonCalib::ITrRelation.

Definition at line 64 of file TrRelationLookUp.cxx.

64{ return m_minRadius; }

◆ name()

std::string MuonCalib::TrRelationLookUp::name ( ) const
finaloverridevirtual

Implements MuonCalib::CalibFunc.

Definition at line 29 of file TrRelationLookUp.cxx.

29{ return "TrRelationLookUp"; }

◆ nDoF()

unsigned MuonCalib::TrRelationLookUp::nDoF ( ) const
finaloverridevirtual

Returns the number of degrees of freedom of the tr relation.

Implements MuonCalib::ITrRelation.

Definition at line 11 of file TrRelationLookUp.cxx.

11 {
12 return m_times.size();
13 }

◆ nPar()

unsigned int MuonCalib::CalibFunc::nPar ( ) const
inlineinherited

Definition at line 39 of file CalibFunc.h.

39{ return m_parameters.size(); }

◆ par()

double MuonCalib::CalibFunc::par ( unsigned int index) const
inlineinherited

Definition at line 41 of file CalibFunc.h.

41 {
42 return index < nPar() ? m_parameters[index] : 0.;
43 }
unsigned int nPar() const
Definition CalibFunc.h:39
str index
Definition DeMoScan.py:362

◆ parameters()

const ParVec & MuonCalib::CalibFunc::parameters ( ) const
inlineinherited

Definition at line 40 of file CalibFunc.h.

40{ return m_parameters; }

◆ typeName()

virtual std::string MuonCalib::ITrRelation::typeName ( ) const
inlinefinaloverridevirtualinherited

Implements MuonCalib::CalibFunc.

Definition at line 24 of file ITrRelation.h.

24{ return "ITrRelation"; }

Member Data Documentation

◆ m_maxRadius

double MuonCalib::TrRelationLookUp::m_maxRadius {}
private

Definition at line 28 of file TrRelationLookUp.h.

28{};

◆ m_minRadius

double MuonCalib::TrRelationLookUp::m_minRadius {}
private

Definition at line 27 of file TrRelationLookUp.h.

27{};

◆ m_parameters

ParVec MuonCalib::CalibFunc::m_parameters {}
privateinherited

Definition at line 48 of file CalibFunc.h.

48{};

◆ m_radii

std::vector<double> MuonCalib::TrRelationLookUp::m_radii {}
private

Definition at line 26 of file TrRelationLookUp.h.

26{};

◆ m_times

std::vector<double> MuonCalib::TrRelationLookUp::m_times {}
private

Definition at line 25 of file TrRelationLookUp.h.

25{};

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