ATLAS Offline Software
RtSimplePolynomial.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"
7 using namespace MuonCalib;
8 
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 }
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 }
MuonCalib::RtSimplePolynomial::name
virtual std::string name() const override final
get the class name
Definition: RtSimplePolynomial.cxx:20
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:9
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
x
#define x
MuonCalib::CalibFunc::par
double par(unsigned int index) const
Definition: CalibFunc.h:41
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::tUpper
virtual double tUpper() const override final
Returns the upper time covered by the r-t.
Definition: RtSimplePolynomial.cxx:67
MuonCalib::RtSimplePolynomial::RtSimplePolynomial
RtSimplePolynomial(const ParVec &vec)
Definition: RtSimplePolynomial.cxx:9
MuonCalib::RtSimplePolynomial::tBinWidth
virtual double tBinWidth() const override final
Returns the step-size for the sampling.
Definition: RtSimplePolynomial.cxx:21
MuonCalib
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Definition: CscCalcPed.cxx:22
MuonCalib::CalibFunc::ParVec
std::vector< double > ParVec
Definition: CalibFunc.h:35
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
python.SystemOfUnits.rad
float rad
Definition: SystemOfUnits.py:126
RtSimplePolynomial.h
MuonCalib::RtSimplePolynomial::tLower
virtual double tLower() const override final
< get the lower drift-time bound
Definition: RtSimplePolynomial.cxx:66
ChebychevPoly.h
MuonCalib::IRtRelation::s_tBinWidth
static constexpr double s_tBinWidth
Definition: IRtRelation.h:60
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
THROW_EXCEPTION
#define THROW_EXCEPTION(MESSAGE)
Definition: throwExcept.h:10
MuonCalib::CalibFunc::parameters
const ParVec & parameters() const
Definition: CalibFunc.h:40
MuonCalib::IRtRelation::dReducedTimeDt
double dReducedTimeDt() const
Definition: IRtRelation.h:53
MuonCalib::CalibFunc::nPar
unsigned int nPar() const
Definition: CalibFunc.h:39
MuonCalib::RtSimplePolynomial::radius
virtual double radius(double t) const override final
get the drift velocity
Definition: RtSimplePolynomial.cxx:23
MuonCalib::IRtRelation::getReducedTime
double getReducedTime(const double t) const
map the in the interval [tLower;tUpper] onto the interval [-1.
Definition: IRtRelation.h:49
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
MuonCalib::IRtRelation
generic interface for a rt-relation
Definition: IRtRelation.h:19
MuonCalib::RtSimplePolynomial::driftVelocity
virtual double driftVelocity(double t) const override final
get the drift acceleration
Definition: RtSimplePolynomial.cxx:42
fitman.k
k
Definition: fitman.py:528