ATLAS Offline Software
Loading...
Searching...
No Matches
TrLegendre.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
7#include "GeoModelKernel/throwExcept.h"
8
9namespace MuonCalib{
11 if (minRadius() >= maxRadius()) {
12 THROW_EXCEPTION("Minimum radius greater than maximum radius!");
13 }
14 }
15 std::string TrLegendre::name() const { return "TrLegendre"; }
16
17 std::optional<double> TrLegendre::driftTime(const double r) const {
18 if (r < minRadius() || r > maxRadius()) return std::nullopt;
19 const double reducedR = getReducedR(r);
20 double time{0.};
21 for (unsigned int k = 0; k < nDoF(); ++k) {
22 time += par(k+2) * legendrePoly(k, reducedR);
23 }
24 return std::make_optional(time);
25
26
27 }
28 std::optional<double> TrLegendre::driftTimePrime(const double r) const {
29 if (r < minRadius() || r > maxRadius()) return std::nullopt;
30 const double reducedR = getReducedR(r);
31 const double dt_dr = getReducedRPrime();
32 double dtdr{0.};
33 for (unsigned int k = 1; k < nDoF(); ++k) {
34 dtdr += par(k+2) * legendreDeriv(k, 1, reducedR) * dt_dr;
35 }
36 return std::make_optional(dtdr);
37
38 }
39 std::optional<double> TrLegendre::driftTime2Prime(const double r) const {
40 if (r < minRadius() || r > maxRadius()) return std::nullopt;
41 const double reducedR = getReducedR(r);
42 const double dt_dr = std::pow(getReducedRPrime(), 2);
43 double d2tdr2{0.};
44 for (unsigned int k = 2; k < nDoF(); ++k) {
45 d2tdr2 += par(k+2) * legendreDeriv(k, 2, reducedR) * dt_dr;
46 }
47 return std::make_optional(d2tdr2);
48 }
49 double TrLegendre::minRadius() const { return par(0); }
50 double TrLegendre::maxRadius() const { return par(1); }
51 unsigned TrLegendre::nDoF() const { return nPar() -2; }
52
53}
54
55
56
57
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 double maxRadius() const override final
Returns the maximum drift-radius.
TrLegendre(const ParVec &vec)
virtual std::string name() const override final
virtual std::optional< double > driftTime2Prime(const double r) const override final
virtual std::optional< double > driftTimePrime(const double r) const override final
virtual unsigned nDoF() const override final
Returns the number of degrees of freedom of the tr relation.
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.
int r
Definition globals.cxx:22
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
constexpr double legendrePoly(const unsigned l, const double x)
Calculates the legendre polynomial of rank l at x.
constexpr double legendreDeriv(const unsigned l, const unsigned d, const double x)
Evaluates the n-th derivative of the l-th Legendre polynomial.
#define THROW_EXCEPTION(MESSAGE)
Definition throwExcept.h:10