ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
MuonSpectrometer
MuonCalib
MdtCalib
MdtCalibData
src
RtSimplePolynomial.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
#include "
MdtCalibData/RtSimplePolynomial.h
"
5
#include "GeoModelKernel/throwExcept.h"
6
#include <cmath>
7
using namespace
MuonCalib
;
8
9
RtSimplePolynomial::RtSimplePolynomial
(
const
ParVec
&
vec
) :
10
IRtRelation
(
vec
) {
11
// check for consistency //
12
if
(
nPar
() < 3) {
13
THROW_EXCEPTION
(
"RtSimplePolynomial::_init() - Not enough parameters!"
);
14
}
15
if
(
tLower
() >=
tUpper
()) {
16
THROW_EXCEPTION
(
"Lower time boundary ("
<<
tLower
()<<
")>= upper time ("
<<
tUpper
()<<
") boundary!"
);
17
}
18
}
// end RtSimplePolynomial::_init
19
20
std::string
RtSimplePolynomial::name
()
const
{
return
"RtSimplePolynomial"
; }
21
double
RtSimplePolynomial::tBinWidth
()
const
{
return
s_tBinWidth
; }
22
23
double
RtSimplePolynomial::radius
(
double
t)
const
{
25
// INITIAL TIME CHECK //
27
if
(t <
tLower
())
return
0.0;
28
if
(t >
tUpper
())
return
14.6;
29
30
double
rad{0.0};
// auxiliary radius
31
const
double
x
=
getReducedTime
(t);
33
// CALCULATE r(t) //
35
for
(
unsigned
int
k = 0; k <
nDoF
(); k++) {
36
rad +=
par
(k+2) * std::pow(
x
,k);
37
}
38
return
std::max(rad, 0.);
39
}
40
41
//*****************************************************************************
42
double
RtSimplePolynomial::driftVelocity
(
double
t)
const
{
43
// Set derivative to 0 outside of the bounds
44
if
(t <
tLower
() || t >
tUpper
())
return
0.0;
45
46
// Chain rule
47
double
drdt{0.};
48
const
double
x
=
getReducedTime
(t);
49
// Chain rule
50
const
double
dx_dt =
dReducedTimeDt
();
51
for
(
unsigned
int
k = 1; k <
nDoF
(); ++k) {
52
drdt +=
par
(k+2) * k * std::pow(
x
,k-1)*dx_dt;
53
}
54
return
drdt;
55
}
56
double
RtSimplePolynomial::driftAcceleration
(
double
t)
const
{
57
double
acc{0.};
58
const
double
x
=
getReducedTime
(t);
59
// Chain rule
60
const
double
dx_dt =
dReducedTimeDt
();
61
for
(
unsigned
int
k = 2; k <
nDoF
(); ++k) {
62
acc +=
par
(k+2) *k * (k-1) * std::pow(
x
,k-2)*std::pow(dx_dt,2);
63
}
64
return
acc * t;
65
}
66
double
RtSimplePolynomial::tLower
()
const
{
return
par
(0); }
67
double
RtSimplePolynomial::tUpper
()
const
{
return
par
(1); }
68
unsigned
RtSimplePolynomial::nDoF
()
const
{
return
nPar
() -2; }
69
70
std::vector<double>
RtSimplePolynomial::rtParameters
()
const
{
71
return
std::vector<double>{
parameters
().begin() +2,
parameters
().end()};
72
}
vec
std::vector< size_t > vec
Definition
CombinationsGeneratorTest.cxx:9
RtSimplePolynomial.h
x
#define x
MuonCalib::CalibFunc::parameters
const ParVec & parameters() const
Definition
CalibFunc.h:40
MuonCalib::CalibFunc::par
double par(unsigned int index) const
Definition
CalibFunc.h:41
MuonCalib::CalibFunc::nPar
unsigned int nPar() const
Definition
CalibFunc.h:39
MuonCalib::CalibFunc::ParVec
std::vector< double > ParVec
Definition
CalibFunc.h:35
MuonCalib::IRtRelation
generic interface for a rt-relation
Definition
IRtRelation.h:19
MuonCalib::IRtRelation::s_tBinWidth
static constexpr double s_tBinWidth
Definition
IRtRelation.h:60
MuonCalib::IRtRelation::dReducedTimeDt
double dReducedTimeDt() const
Definition
IRtRelation.h:53
MuonCalib::IRtRelation::getReducedTime
double getReducedTime(const double t) const
map the in the interval [tLower;tUpper] onto the interval [-1.;1.
Definition
IRtRelation.h:49
MuonCalib::RtSimplePolynomial::RtSimplePolynomial
RtSimplePolynomial(const ParVec &vec)
Definition
RtSimplePolynomial.cxx:9
MuonCalib::RtSimplePolynomial::driftAcceleration
virtual double driftAcceleration(double t) const override final
Returns the acceleration of the r-t relation.
Definition
RtSimplePolynomial.cxx:56
MuonCalib::RtSimplePolynomial::nDoF
virtual unsigned nDoF() const override final
get the coefficients of the r(t) polynomial
Definition
RtSimplePolynomial.cxx:68
MuonCalib::RtSimplePolynomial::rtParameters
std::vector< double > rtParameters() const
Definition
RtSimplePolynomial.cxx:70
MuonCalib::RtSimplePolynomial::name
virtual std::string name() const override final
get the class name
Definition
RtSimplePolynomial.cxx:20
MuonCalib::RtSimplePolynomial::tBinWidth
virtual double tBinWidth() const override final
Returns the step-size for the sampling.
Definition
RtSimplePolynomial.cxx:21
MuonCalib::RtSimplePolynomial::tUpper
virtual double tUpper() const override final
Returns the upper time covered by the r-t.
Definition
RtSimplePolynomial.cxx:67
MuonCalib::RtSimplePolynomial::tLower
virtual double tLower() const override final
< get the lower drift-time bound
Definition
RtSimplePolynomial.cxx:66
MuonCalib::RtSimplePolynomial::driftVelocity
virtual double driftVelocity(double t) const override final
get the drift acceleration
Definition
RtSimplePolynomial.cxx:42
MuonCalib::RtSimplePolynomial::radius
virtual double radius(double t) const override final
get the drift velocity
Definition
RtSimplePolynomial.cxx:23
MuonCalib
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Definition
CscCalcPed.cxx:21
THROW_EXCEPTION
#define THROW_EXCEPTION(MESSAGE)
Definition
throwExcept.h:10
Generated on
for ATLAS Offline Software by
1.17.0