21 if (not ptrFacet)
return false;
29 const double startDriftLengthSigma =
sqrt(startDriftLengthVar);
30 const double startWeight = 1.0 / startDriftLengthVar;
34 const double middleDriftLengthSigma =
sqrt(middleDriftLengthVar);
35 const double middleWeight = 1.0 / middleDriftLengthVar;
39 const double endDriftLengthSigma =
sqrt(endDriftLengthVar);
40 const double endWeight = 1.0 / endDriftLengthVar;
42 const double sumWeight = startWeight + middleWeight + endWeight;
52 const double startOptimalStep = startDistance * startWeight / sumWeight;
53 const double middleOptimalStep = middleDistance * middleWeight / sumWeight;
54 const double endOptimalStep = endDistance * endWeight / sumWeight;
56 const double startChi2 = startDistance * (startDistance - startOptimalStep) * startWeight;
57 const double middleChi2 = middleDistance * (middleDistance - middleOptimalStep) * middleWeight;
58 const double endChi2 = endDistance * (endDistance - endOptimalStep) * endWeight;
60 const ROOT::Math::XYVector& startToMiddleTangentialVector = startToMiddleLine.
tangential();
61 const ROOT::Math::XYVector& startToEndTangentialVector = startToEndLine.
tangential();
62 const ROOT::Math::XYVector& middleToEndTangentialVector = middleToEndLine.
tangential();
64 const double startToMiddleLength = startToMiddleTangentialVector.R();
65 const double startToEndLength = startToEndTangentialVector.R();
66 const double middleToEndLength = middleToEndTangentialVector.R();
68 const double startPhi = ROOT::Math::VectorUtil::DeltaPhi(startToMiddleTangentialVector, startToEndTangentialVector);
69 const double middlePhi = ROOT::Math::VectorUtil::DeltaPhi(startToMiddleTangentialVector, middleToEndTangentialVector);
70 const double endPhi = ROOT::Math::VectorUtil::DeltaPhi(startToEndTangentialVector, middleToEndTangentialVector);
72 const double startToMiddleSigmaPhi = startDriftLengthSigma / startToMiddleLength;
73 const double startToEndSigmaPhi = startDriftLengthSigma / startToEndLength;
75 const double middleToStartSigmaPhi = middleDriftLengthSigma / startToMiddleLength;
76 const double middleToEndSigmaPhi = middleDriftLengthSigma / middleToEndLength;
78 const double endToStartSigmaPhi = endDriftLengthSigma / startToEndLength;
79 const double endToMiddleSigmaPhi = endDriftLengthSigma / middleToEndLength;
81 const double startPhiSigma = hypot3(startToEndSigmaPhi - startToMiddleSigmaPhi,
82 middleToStartSigmaPhi,
85 const double middlePhiSigma = hypot3(startToMiddleSigmaPhi,
86 middleToStartSigmaPhi + middleToEndSigmaPhi,
89 const double endPhiSigma = hypot3(startToEndSigmaPhi,
91 endToStartSigmaPhi - endToMiddleSigmaPhi);
93 const double startPhiPull = startPhi / startPhiSigma;
94 const double middlePhiPull = middlePhi / middlePhiSigma;
95 const double endPhiPull = endPhi / endPhiSigma;
97 const double curv = 2 * middlePhi / startToEndLength;
98 const double curvSigma = 2 * middlePhiSigma / startToEndLength;
99 const double curvPull = middlePhiPull / startToEndLength;
101 var<
named(
"start_phi")>() = startPhi;
102 var<
named(
"start_phi_sigma")>() = startPhiSigma;
103 var<
named(
"start_phi_pull")>() = startPhiPull;
104 var<
named(
"start_d")>() = startDistance;
105 var<
named(
"start_chi2")>() = startChi2;
107 var<
named(
"middle_phi")>() = middlePhi;
108 var<
named(
"middle_phi_sigma")>() = middlePhiSigma;
109 var<
named(
"middle_phi_pull")>() = middlePhiPull;
110 var<
named(
"middle_d")>() = middleDistance;
111 var<
named(
"middle_chi2")>() = middleChi2;
114 var<
named(
"end_phi_sigma")>() = endPhiSigma;
115 var<
named(
"end_phi_pull")>() = endPhiPull;
116 var<
named(
"end_d")>() = endDistance;
119 var<
named(
"s")>() = startToEndLength;
122 var<
named(
"curv_sigma")>() = curvSigma;
123 var<
named(
"curv_pull")>() = curvPull;