ATLAS Offline Software
Loading...
Searching...
No Matches
TrChebyshev.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6#include "GeoModelKernel/throwExcept.h"
7#include "Acts/Utilities/detail/Polynomials.hpp"
8namespace MuonCalib{
10 if (minRadius() >= maxRadius()) {
11 THROW_EXCEPTION("Minimum radius greater than maximum radius!");
12 }
13 }
14 std::string TrChebyshev::name() const { return "TrChebyshev"; }
15
16 std::optional<double> TrChebyshev::driftTime(const double r) const {
17 if (r < minRadius() || r > maxRadius()) return std::nullopt;
18 const double reducedR = getReducedR(r);
19 double time{0.};
20 for (unsigned int k = 0; k < nDoF(); ++k) {
21 time += par(k+2) * Acts::detail::chebychevPolyTn(reducedR, k);
22 }
23 return std::make_optional(time);
24
25
26 }
27 std::optional<double> TrChebyshev::driftTimePrime(const double r) const {
28 if (r < minRadius() || r > maxRadius()) return std::nullopt;
29 const double reducedR = getReducedR(r);
30 const double dt_dr = getReducedRPrime();
31 double dtdr{0.};
32 for (unsigned int k = 1; k < nDoF(); ++k) {
33 dtdr += par(k+2) * Acts::detail::chebychevPolyTn(reducedR, k, 1) * dt_dr;
34 }
35 return std::make_optional(dtdr);
36
37 }
38 std::optional<double> TrChebyshev::driftTime2Prime(const double r) const {
39 if (r < minRadius() || r > maxRadius()) return std::nullopt;
40 const double reducedR = getReducedR(r);
41 const double dt_dr = std::pow(getReducedRPrime(), 2);
42 double d2tdr2{0.};
43 for (unsigned int k = 2; k < nDoF(); ++k) {
44 d2tdr2 += par(k+2) * Acts::detail::chebychevPolyTn(reducedR, k, 2) * dt_dr;
45 }
46 return std::make_optional(d2tdr2);
47 }
48
49 double TrChebyshev::minRadius() const { return par(0); }
50 double TrChebyshev::maxRadius() const { return par(1); }
51 unsigned TrChebyshev::nDoF() const { return nPar() -2; }
52}
std::vector< size_t > vec
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
double getReducedR(const double r) const
Maps the radius interval [minRadius;maxRadius] to [-1;1] where the minimal radius is on the lower end...
Definition ITrRelation.h:42
ITrRelation(const ParVec &parameters)
Constructor taking the input r-t relation & the vector of parameters.
Definition ITrRelation.h:20
double getReducedRPrime() const
Returns the derivative of the reduced radisu w.r.t r.
Definition ITrRelation.h:46
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 ...
virtual double minRadius() const override final
Returns the minimum drift-radius.
virtual std::string name() const override final
virtual std::optional< double > driftTimePrime(const double r) const override final
TrChebyshev(const ParVec &vec)
virtual std::optional< double > driftTime2Prime(const double r) const override final
virtual unsigned nDoF() const override final
Returns the number of degrees of freedom of the tr relation.
virtual double maxRadius() const override final
Returns the maximum drift-radius.
int r
Definition globals.cxx:22
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
#define THROW_EXCEPTION(MESSAGE)
Definition throwExcept.h:10