24std::pair<double, double>
computeUV(
double gloX,
double gloY,
double gloZ,
int sensorID,
double radius)
26 const bool isTop = sensorID % 2 == 0;
27 const double phi = o2::math_utils::to02Pid(std::atan2(gloY, gloX));
28 const double phiBorder1 = o2::math_utils::to02Pid(((isTop ? 0. : 1.) * TMath::Pi()) + std::asin(
constants::equatorialGap / 2. / radius));
29 const double phiBorder2 = o2::math_utils::to02Pid(((isTop ? 1. : 2.) * TMath::Pi()) - std::asin(
constants::equatorialGap / 2. / radius));
30 const double u = (((phi - phiBorder1) * 2.) / (phiBorder2 - phiBorder1)) - 1.;
31 const double v = ((2. * gloZ + constants::segment::lengthSensitive) / constants::segment::lengthSensitive) - 1.;
37 const double csci = 1. / std::sqrt(1. - (snp * snp));
38 return {.dydx = snp * csci, .dzdx = tgl * csci};
43 std::vector<double> p(order + 1);
48 for (
int n = 1;
n < order; ++
n) {
49 p[
n + 1] = ((2 *
n + 1) *
x * p[
n] -
n * p[
n - 1]) / (
n + 1);
58 std::vector<double> d(order + 1, 0.);
62 for (
int n = 1;
n < order; ++
n) {
63 d[
n + 1] = ((2 *
n + 1) * p[
n]) + d[
n - 1];
72 std::vector<double> d(order + 1, 0.);
73 for (
int n = 1;
n < order; ++
n) {
74 d[
n + 1] = ((2 *
n + 1) * d1[
n]) + d[
n - 1];
General auxilliary methods.
std::vector< double > legendrePolsD2(int order, double x)
std::vector< double > legendrePolsD1(int order, double x)
TrackSlopes computeTrackSlopes(double snp, double tgl)
double phiScale(double radius)
std::vector< double > legendrePols(int order, double x)
std::pair< double, double > computeUV(double gloX, double gloY, double gloZ, int sensorID, double radius)
constexpr double equatorialGap