37 const Int_t MaxIter = 3;
48 r[0] = r[1] = r[2] = 0.;
55 C[0] = C[2] = t.
RR / 3.5 / 3.5;
56 C[5] = (t.
dz / 2 / 3.5) * (t.
dz / 2 / 3.5);
65 for (
Int_t iteration = 0; iteration < MaxIter; ++iteration) {
90 for (vector<CbmKFTrackInterface*>::iterator itr =
Tracks.begin(); itr !=
Tracks.end(); ++itr) {
93 Bool_t err = T.Extrapolate(r0[2]);
99 std::vector<Double_t> covMatr(V, V + 15);
100 if (iteration == 0) {
101 for (
unsigned int j = 0; j < covMatr.size(); ++j)
107 Double_t zeta[2] = {r0[0] -
m[0], r0[1] -
m[1]};
112 Double_t S[3] = {(C0[0] + V[0]), -(C0[1] + V[1]), (C0[2] + V[2])};
113 Double_t s = S[2] * S[0] - S[1] * S[1];
114 Double_t chi2 = zeta[0] * zeta[0] * S[0] + 2 * zeta[0] * zeta[1] * S[1] + zeta[1] * zeta[1] * S[2];
115 if (chi2 > s * CutChi2)
120 s = V[0] * V[2] - V[1] * V[1];
124 a =
m[2] + s * ((V[3] * V[2] - V[4] * V[1]) * zeta[0] + (-V[3] * V[1] + V[4] * V[0]) * zeta[1]);
125 b =
m[3] + s * ((V[6] * V[2] - V[7] * V[1]) * zeta[0] + (-V[6] * V[1] + V[7] * V[0]) * zeta[1]);
134 Double_t zeta[2] = {
m[0] - (r[0] - a * (r[2] - r0[2])),
m[1] - (r[1] - b * (r[2] - r0[2]))};
138 Double_t CHt[3][2] = {{C[0] - a * C[3], C[1] - b * C[3]},
139 {C[1] - a * C[4], C[2] - b * C[4]},
140 {C[3] - a * C[5], C[4] - b * C[5]}};
144 Double_t S[3] = {V[0] + CHt[0][0] - a * CHt[2][0], V[1] + CHt[1][0] - b * CHt[2][0],
145 V[2] + CHt[1][1] - b * CHt[2][1]};
149 Double_t w = S[0] * S[2] - S[1] * S[1];
162 + 2 * zeta[0] * zeta[1] * S[1]
164 + zeta[1] * zeta[1] * S[2];
174 K[
i][0] = CHt[
i][0] * S[0] + CHt[
i][1] * S[1];
175 K[
i][1] = CHt[
i][0] * S[1] + CHt[
i][1] * S[2];
181 r[
i] += K[
i][0] * zeta[0] + K[
i][1] * zeta[1];
185 C[0] -= K[0][0] * CHt[0][0] + K[0][1] * CHt[0][1];
186 C[1] -= K[1][0] * CHt[0][0] + K[1][1] * CHt[0][1];
187 C[2] -= K[1][0] * CHt[1][0] + K[1][1] * CHt[1][1];
188 C[3] -= K[2][0] * CHt[0][0] + K[2][1] * CHt[0][1];
189 C[4] -= K[2][0] * CHt[1][0] + K[2][1] * CHt[1][1];
190 C[5] -= K[2][0] * CHt[2][0] + K[2][1] * CHt[2][1];