51 static void useExtrapV2(
bool extrapV2 =
true) { sExtrapV2 = extrapV2; }
66 return extrapToVertex(trackParam, xVtx, yVtx, zVtx, errXVtx, errYVtx,
true,
true);
72 return extrapToVertex(trackParam, xVtx, yVtx, zVtx, errXVtx, errYVtx,
true,
false);
75 double xUpstream = 0.,
double yUpstream = 0.,
76 std::optional<double> zUpstream = std::nullopt)
80 return extrapToVertex(trackParam, 0., 0., zVtx, 0., 0.,
false,
true, xUpstream, yUpstream, zUpstream);
83 double xUpstream = 0.,
double yUpstream = 0.,
84 std::optional<double> zUpstream = std::nullopt)
88 return extrapToVertex(trackParam, 0., 0., zVtx, 0., 0.,
false,
false, xUpstream, yUpstream, zUpstream);
100 double errXVtx,
double errYVtx,
bool correctForMCS,
bool correctForEnergyLoss,
101 double xUpstream = 0.,
double yUpstream = 0., std::optional<double> zUpstream = std::nullopt);
103 static bool getAbsorberCorrectionParam(
double trackXYZIn[3],
double trackXYZOut[3],
double pTotal,
104 double& pathLength,
double& f0,
double& f1,
double& f2,
105 double& meanRho,
double& totalELoss,
double& sigmaELoss2);
107 static void addMCSEffectInAbsorber(
TrackParam&
param,
double signedPathLength,
double f0,
double f1,
double f2);
109 static double betheBloch(
double pTotal,
double pathLength,
double rho,
double atomicZ,
double atomicZoverA);
110 static double energyLossFluctuation(
double pTotal,
double pathLength,
double rho,
double atomicZoverA);
112 static bool correctMCSEffectInAbsorber(
TrackParam&
param,
double xVtx,
double yVtx,
double zVtx,
double errXVtx,
double errYVtx,
113 double absZBeg,
double pathLength,
double f0,
double f1,
double f2);
114 static void correctELossEffectInAbsorber(
TrackParam&
param,
double eLoss,
double sigmaELoss2);
116 static void cov2CovP(
const TMatrixD&
param, TMatrixD& cov);
117 static void covP2Cov(
const TMatrixD&
param, TMatrixD& covP);
119 static void convertTrackParamForExtrap(
TrackParam& trackParam,
double forwardBackward,
double*
v3);
120 static void recoverTrackParam(
double*
v3,
double Charge,
TrackParam& trackParam);
122 static bool extrapToZRungekutta(
TrackParam& trackParam,
double zEnd);
123 static bool extrapToZRungekuttaV2(
TrackParam& trackParam,
double zEnd);
124 static bool extrapOneStepRungekutta(
double charge,
double step,
const double* vect,
double* vout);
126 static constexpr double SMuMass = 0.105658;
127 static constexpr double SAbsZBeg = -90.;
128 static constexpr double SAbsZEnd = -505.;
129 static constexpr double SSimpleBPosition = -0.5 * (994.05 + 986.6);
130 static constexpr double SSimpleBLength = 0.5 * (502.1 + 309.4);
131 static constexpr int SMaxStepNumber = 5000;
132 static constexpr double SRungeKuttaMaxResidue = 0.002;
133 static constexpr double SRungeKuttaMaxResidueV2 = 0.01;
136 static constexpr double SMostProbBendingMomentum = 2.;
137 static constexpr double SMuonFilterZBeg = -1471.;
138 static constexpr double SMuonFilterThickness = 120.;
140 static constexpr double SMuonFilterZEnd = SMuonFilterZBeg - SMuonFilterThickness;
141 static constexpr double SMuonFilterX0 = 1.76;
142 static constexpr double SMIDZ = -1603.5;
144 static bool sExtrapV2;
146 static double sSimpleBValue;
147 static bool sFieldON;
149 static std::size_t sNCallExtrapToZCov;
150 static std::size_t sNCallField;