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

This class contains the implementation of an r(t) relationship parametrized by a linear combination of Legendre polyonomials. More...

#include <RtLegendre.h>

Inheritance diagram for MuonCalib::RtLegendre:
Collaboration diagram for MuonCalib::RtLegendre:

Public Types

using ParVec = std::vector<double>

Public Member Functions

 RtLegendre (const ParVec &vec)
 initialization constructor,
virtual std::string name () const override final
 get the class name
virtual double radius (double t) const override final
 get the drift velocity
virtual double driftVelocity (double t) const override final
 get the drift acceleration
virtual double driftAcceleration (double t) const override final
 Returns the acceleration of the r-t relation.
virtual double tLower () const override final
 < get the lower drift-time bound
virtual double tUpper () const override final
 Returns the upper time covered by the r-t.
virtual double tBinWidth () const override final
 get the number of parameters used to describe the r(t) relationship
unsigned int numberOfRtParameters () const
 get the coefficients of the r(t) polynomial
std::vector< double > rtParameters () const
virtual unsigned nDoF () const override final
 Returns the number of degrees of freedom of the relation function.
virtual std::string typeName () const override final
double GetTmaxDiff () const
 return the difference in total dirft time between the two multilayers (ML1 - ML2)
bool hasTmaxDiff () const
void SetTmaxDiff (const double d)
 set the difference in total drift time betwene the two multilayers (ML1 - ML2)
double getReducedTime (const double t) const
 map the in the interval [tLower;tUpper] onto the interval [-1.;1.
double dReducedTimeDt () const
 CalibFunc (const ParVec &vec)
unsigned int nPar () const
const ParVecparameters () const
double par (unsigned int index) const

Static Protected Attributes

static constexpr double s_tBinWidth = 1.e-3

Private Attributes

std::optional< double > m_tmax_diff {std::nullopt}
ParVec m_parameters {}

Detailed Description

This class contains the implementation of an r(t) relationship parametrized by a linear combination of Legendre polyonomials.

Convention:

\[ r(t) = \sum_{k=0}^{K} p_k*T_k(2*(t-0.5*(tupper+tlower))/(tupper-tlower) \]

where T_k is the Legendre polynomial of k-th order, tupper and tlower are upper and lower drift-time bounds.

Units: [t] = ns, [r] = mm, [v] = mm/ns.

Definition at line 29 of file RtLegendre.h.

Member Typedef Documentation

◆ ParVec

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

Definition at line 35 of file CalibFunc.h.

Constructor & Destructor Documentation

◆ RtLegendre()

RtLegendre::RtLegendre ( const ParVec & vec)
explicit

initialization constructor,

size of ParVec - 2 = order of the r(t) polynomial,

ParVec[0] = t_low (smallest allowed drift time), ParVec[1] = t_up (largest allowed drift time). ParVec[2...] = parameters of the Legendre polynomial

Definition at line 9 of file RtLegendre.cxx.

9 :
10 IRtRelation(vec) {
11 // check for consistency //
12 if (nPar() < 3) {
13 THROW_EXCEPTION("RtLegendre::_init() - Not enough parameters!");
14 }
15 if (tLower() >= tUpper()) {
16 THROW_EXCEPTION("Lower time boundary >= upper time boundary!");
17 }
18} // end RtLegendre::_init
std::vector< size_t > vec
unsigned int nPar() const
Definition CalibFunc.h:39
virtual double tLower() const override final
< get the lower drift-time bound
virtual double tUpper() const override final
Returns the upper time covered by the r-t.
#define THROW_EXCEPTION(MESSAGE)
Definition throwExcept.h:10

Member Function Documentation

◆ CalibFunc()

MuonCalib::CalibFunc::CalibFunc ( const ParVec & vec)
inlineexplicitinherited

Definition at line 36 of file CalibFunc.h.

36 :

◆ dReducedTimeDt()

double MuonCalib::IRtRelation::dReducedTimeDt ( ) const
inlineinherited

Definition at line 53 of file IRtRelation.h.

53 {
54 return unitIntervalPrime(tLower(), tUpper());
55 }
virtual double tLower() const =0
Returns the lower time covered by the r-t.
virtual double tUpper() const =0
Returns the upper time covered by the r-t.
double unitIntervalPrime(const double lowerEdge, const double upperEdge)
Definition UtilFunc.h:15

◆ driftAcceleration()

double RtLegendre::driftAcceleration ( double t) const
finaloverridevirtual

Returns the acceleration of the r-t relation.

Implements MuonCalib::IRtRelation.

Definition at line 62 of file RtLegendre.cxx.

62 {
63 double acc{0.};
64 // Argument of the Legendre polynomials
65 const double x = getReducedTime(t);
66 const double dx_dt = std::pow(dReducedTimeDt(), 2);
67 for (unsigned int k = 0; k < nDoF(); ++k) {
68 acc += par(k+2) * Acts::detail::legendrePoly(x,k, 2) * dx_dt;
69 }
70 return acc * t;
71}
#define x
double par(unsigned int index) const
Definition CalibFunc.h:41
double dReducedTimeDt() const
Definition IRtRelation.h:53
double getReducedTime(const double t) const
map the in the interval [tLower;tUpper] onto the interval [-1.;1.
Definition IRtRelation.h:49
virtual unsigned nDoF() const override final
Returns the number of degrees of freedom of the relation function.

◆ driftVelocity()

double RtLegendre::driftVelocity ( double t) const
finaloverridevirtual

get the drift acceleration

Implements MuonCalib::IRtRelation.

Definition at line 47 of file RtLegendre.cxx.

47 {
48 return (radius(t + 1.0) - radius(t));
49 // Set derivative to 0 outside of the bounds
50 if (t < tLower() || t > tUpper()) return 0.0;
51
52 // Argument of the Legendre polynomials
53 const double x = getReducedTime(t);
54 // Chain rule
55 const double dx_dt = dReducedTimeDt();
56 double drdt{0.};
57 for (unsigned int k = 0; k < nDoF(); ++k) {
58 drdt += par(k+2) * Acts::detail::legendrePoly(x,k, 1) * dx_dt;
59 }
60 return drdt;
61}
virtual double radius(double t) const override final
get the drift velocity

◆ getReducedTime()

double MuonCalib::IRtRelation::getReducedTime ( const double t) const
inlineinherited

map the in the interval [tLower;tUpper] onto the interval [-1.;1.

] where tLower is mapped to -1. & tUpper to 1.;

Definition at line 49 of file IRtRelation.h.

49 {
50 return mapToUnitInterval(t, tLower(), tUpper());
51 }
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

◆ GetTmaxDiff()

double MuonCalib::IRtRelation::GetTmaxDiff ( ) const
inlineinherited

return the difference in total dirft time between the two multilayers (ML1 - ML2)

Definition at line 40 of file IRtRelation.h.

40{ return m_tmax_diff.value_or(0.); }
std::optional< double > m_tmax_diff
Definition IRtRelation.h:58

◆ hasTmaxDiff()

bool MuonCalib::IRtRelation::hasTmaxDiff ( ) const
inlineinherited

Definition at line 42 of file IRtRelation.h.

42{ return m_tmax_diff.has_value(); }

◆ name()

std::string RtLegendre::name ( ) const
finaloverridevirtual

get the class name

get the radius corresponding to the drift time t; if t is not within [t_low, t_up] an unphysical radius of 99999 is returned

Implements MuonCalib::CalibFunc.

Definition at line 20 of file RtLegendre.cxx.

20{ return "RtLegendre"; }

◆ nDoF()

unsigned int RtLegendre::nDoF ( ) const
finaloverridevirtual

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

Implements MuonCalib::IRtRelation.

Definition at line 74 of file RtLegendre.cxx.

74{ return nPar() -2; }

◆ nPar()

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

Definition at line 39 of file CalibFunc.h.

39{ return m_parameters.size(); }

◆ numberOfRtParameters()

unsigned int MuonCalib::RtLegendre::numberOfRtParameters ( ) const

get the coefficients of the r(t) polynomial

◆ 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 }
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; }

◆ radius()

double RtLegendre::radius ( double t) const
finaloverridevirtual

get the drift velocity

Implements MuonCalib::IRtRelation.

Definition at line 23 of file RtLegendre.cxx.

23 {
25 // INITIAL TIME CHECK //
27 if (t < tLower()) return 0.0;
28 if (t > tUpper()) return 14.6;
29
31 // VARIABLES //
33 // argument of the Legendre polynomials
34 double x = getReducedTime(t);
35 double rad{0.0}; // auxiliary radius
36
38 // CALCULATE r(t) //
40 for (unsigned int k = 0; k < nDoF(); k++) {
41 rad += par(k+2) * Acts::detail::legendrePoly(x,k);
42 }
43 return std::max(rad, 0.);
44}

◆ rtParameters()

std::vector< double > RtLegendre::rtParameters ( ) const

Definition at line 76 of file RtLegendre.cxx.

76 {
77 return std::vector<double>{parameters().begin() +2, parameters().end()};
78}
const ParVec & parameters() const
Definition CalibFunc.h:40

◆ SetTmaxDiff()

void MuonCalib::IRtRelation::SetTmaxDiff ( const double d)
inlineinherited

set the difference in total drift time betwene the two multilayers (ML1 - ML2)

Definition at line 45 of file IRtRelation.h.

◆ tBinWidth()

double RtLegendre::tBinWidth ( ) const
finaloverridevirtual

get the number of parameters used to describe the r(t) relationship

Implements MuonCalib::IRtRelation.

Definition at line 21 of file RtLegendre.cxx.

21{ return s_tBinWidth; }
static constexpr double s_tBinWidth
Definition IRtRelation.h:60

◆ tLower()

double RtLegendre::tLower ( ) const
finaloverridevirtual

< get the lower drift-time bound

get the upper drift-time bound

Implements MuonCalib::IRtRelation.

Definition at line 72 of file RtLegendre.cxx.

72{ return par(0); }

◆ tUpper()

double RtLegendre::tUpper ( ) const
finaloverridevirtual

Returns the upper time covered by the r-t.

Implements MuonCalib::IRtRelation.

Definition at line 73 of file RtLegendre.cxx.

73{ return par(1); }

◆ typeName()

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

Implements MuonCalib::CalibFunc.

Definition at line 23 of file IRtRelation.h.

23{ return "IRtRelation"; }

Member Data Documentation

◆ m_parameters

ParVec MuonCalib::CalibFunc::m_parameters {}
privateinherited

Definition at line 48 of file CalibFunc.h.

48{};

◆ m_tmax_diff

std::optional<double> MuonCalib::IRtRelation::m_tmax_diff {std::nullopt}
privateinherited

Definition at line 58 of file IRtRelation.h.

58{std::nullopt};

◆ s_tBinWidth

double MuonCalib::IRtRelation::s_tBinWidth = 1.e-3
staticconstexprprotectedinherited

Definition at line 60 of file IRtRelation.h.


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