ATLAS Offline Software
Loading...
Searching...
No Matches
RtChebyshev.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
6#include "GeoModelKernel/throwExcept.h"
7using namespace MuonCalib;
8
11 // check for consistency //
12 if (nPar() < 3) {
13 THROW_EXCEPTION("RtChebyshev::_init() - Not enough parameters!");
14 }
15 if (tLower() >= tUpper()) {
16 THROW_EXCEPTION("Lower time boundary ("<<tLower()<<")>= upper time ("<<tUpper()<<") boundary!");
17 }
18} // end RtChebyshev::_init
19
20std::string RtChebyshev::name() const { return "RtChebyshev"; }
21double RtChebyshev::tBinWidth() const { return s_tBinWidth; }
22
23double RtChebyshev::radius(double t) const {
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 Chebyshev 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) * chebyshevPoly1st(k, x);
42 }
43 return std::max(rad, 0.);
44}
45
46//*****************************************************************************
47double RtChebyshev::driftVelocity(double t) const {
48 // Set derivative to 0 outside of the bounds
49 if (t < tLower() || t > tUpper()) return 0.0;
50
51 // Argument of the Chebyshev polynomials
52 const double x = getReducedTime(t);
53 // Chain rule
54 const double dx_dt = dReducedTimeDt();
55 double drdt{0.};
56 for (unsigned int k = 1; k < nDoF(); ++k) {
57 // Calculate the contribution to dr/dt using k * U_{k-1}(x) * dx/dt
58 drdt += par(k+2) * chebyshevPoly1stPrime(k, x) * dx_dt;
59 }
60 return drdt;
61}
62double RtChebyshev::driftAcceleration(double t) const {
63 double acc{0.};
64 // Argument of the Chebyshev polynomials
65 const double x = getReducedTime(t);
66 const double dx_dt = std::pow(dReducedTimeDt(), 2);
67 for (unsigned int k = 2; k < nDoF(); ++k) {
68 acc += par(k+2) * chebyshevPoly1st2Prime(k, x) * dx_dt;
69 }
70 return acc * t;
71}
72double RtChebyshev::tLower() const { return par(0); }
73double RtChebyshev::tUpper() const { return par(1); }
74unsigned RtChebyshev::nDoF() const { return nPar() -2; }
75
76std::vector<double> RtChebyshev::rtParameters() const {
77 return std::vector<double>{parameters().begin() +2, parameters().end()};
78}
std::vector< size_t > vec
#define x
const ParVec & parameters() const
Definition CalibFunc.h:40
double par(unsigned int index) const
Definition CalibFunc.h:41
unsigned int nPar() const
Definition CalibFunc.h:39
std::vector< double > ParVec
Definition CalibFunc.h:35
generic interface for a rt-relation
Definition IRtRelation.h:19
static constexpr double s_tBinWidth
Definition IRtRelation.h:60
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 double driftAcceleration(double t) const override final
Returns the acceleration of the r-t relation.
virtual double tUpper() const override final
Returns the upper time covered by the r-t.
virtual unsigned nDoF() const override final
get the coefficients of the r(t) polynomial
std::vector< double > rtParameters() const
virtual std::string name() const override final
get the class name
RtChebyshev(const ParVec &vec)
initialization constructor,
virtual double tBinWidth() const override final
Returns the step-size for the sampling.
virtual double radius(double t) const override final
get the drift velocity
virtual double tLower() const override final
< get the lower drift-time bound
virtual double driftVelocity(double t) const override final
get the drift acceleration
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
constexpr double chebyshevPoly1st(const unsigned int order, const double x)
Returns the n-th Chebyshev polynomial of first kind evaluated at x (c.f.
constexpr double chebyshevPoly1st2Prime(const unsigned int order, const double x)
Returns the second derivative of the n-th Chebycheb polynomial of the first kind.
constexpr double chebyshevPoly1stPrime(const unsigned int order, const double x)
Returns the first derivative of the n-th Chebycheb polynomial of the first kind.
#define THROW_EXCEPTION(MESSAGE)
Definition throwExcept.h:10