14#include "CbmKFTrack.h"
15#include "CbmStsKFTrackFitter.h"
19#include "CbmKFParticleDatabase.h"
33 , AtProductionVertex(0)
36 fDaughtersIds.push_back(Track->
Id());
47 Double_t a =
m[2], b =
m[3], qp =
m[4];
57 double c2 = 1. / (1. + a * a + b * b);
62 double pz =
sqrt(p2 * c2);
65 double E =
sqrt(Mass * Mass + p2);
67 double H[3] = {-px * c2, -py * c2, -pz * pq};
68 double HE = -pq * p2 / E;
79 double cxpz = H[0] * V[3] + H[1] * V[6] + H[2] * V[10];
80 double cypz = H[0] * V[4] + H[1] * V[7] + H[2] * V[11];
81 double capz = H[0] * V[5] + H[1] * V[8] + H[2] * V[12];
82 double cbpz = H[0] * V[8] + H[1] * V[9] + H[2] * V[13];
83 double cqpz = H[0] * V[12] + H[1] * V[13] + H[2] * V[14];
84 double cpzpz = H[0] * H[0] * V[5] + H[1] * H[1] * V[9] + H[2] * H[2] * V[14]
85 + 2 * (H[0] * H[1] * V[8] + H[0] * H[2] * V[12] + H[1] * H[2] * V[13]);
93 C[6] = V[3] * pz + a * cxpz;
94 C[7] = V[4] * pz + a * cypz;
96 C[9] = V[5] * pz * pz + 2 * a * pz * capz + a * a * cpzpz;
97 C[10] = V[6] * pz + b * cxpz;
98 C[11] = V[7] * pz + b * cypz;
100 C[13] = V[8] * pz * pz + a * pz * cbpz + b * pz * capz + a * b * cpzpz;
101 C[14] = V[9] * pz * pz + 2 * b * pz * cbpz + b * b * cpzpz;
105 C[18] = capz * pz + a * cpzpz;
106 C[19] = cbpz * pz + b * cpzpz;
111 C[24] = HE * (V[12] * pz + a * cqpz);
112 C[25] = HE * (V[13] * pz + b * cqpz);
114 C[27] = HE * HE * V[14];
115 C[28] =
C[29] =
C[30] =
C[31] =
C[32] =
C[33] =
C[34] = 0;
120 Q = (qp > 0.) ? 1 : ((qp < 0) ? -1 : 0);
128 double s0 =
sqrt(C[0]);
129 double s1 =
sqrt(C[2]);
130 double s2 =
sqrt(C[5]);
131 double s3 =
sqrt(C[9]);
132 double s4 =
sqrt(C[14]);
134 cout << C[1] / s0 / s1 <<
" " << s1 <<
" ";
135 cout << C[3] / s0 / s2 <<
" " << C[4] / s1 / s2 <<
" " << s2 <<
" ";
136 cout << C[6] / s0 / s3 <<
" " << C[7] / s1 / s3 <<
" " << C[8] / s2 / s3 <<
" " << s3 <<
" ";
137 cout << C[10] / s0 / s4 <<
" " << C[11] / s1 / s4 <<
" " << C[12] / s2 / s4 <<
" " << C[13] / s3 / s4 <<
" " << s4
146 const Int_t MaxIter = 3;
149 r[0] =
r[1] =
r[2] = 0.;
150 C[0] =
C[2] =
C[5] = 1.;
151 C[1] =
C[3] =
C[4] = 0;
156 C[0] =
C[2] = t.
R * t.
R / 9.;
158 C[1] =
C[3] =
C[4] = 0;
167 for (Int_t iteration = 0; iteration < MaxIter; ++iteration) {
169 Double_t r0[8], C0[6];
171 for (
int i = 0;
i < 8;
i++)
173 for (
int i = 0;
i < 6;
i++)
177 if (iteration == 0) {
178 Double_t VertexGuess[3];
180 Double_t fTDaughter[(int)vDaughters.size()][6];
183 vector<CbmKFTrack*> TrV;
186 for (vector<CbmKFTrackInterface*>::iterator tr = vDaughters.begin(); tr != vDaughters.end(); ++tr) {
188 fTDaughter[nvect][0] = Tr->
GetTrack()[0];
189 fTDaughter[nvect][1] = Tr->
GetTrack()[1];
190 fTDaughter[nvect][2] = Tr->
GetTrack()[2];
191 fTDaughter[nvect][3] = Tr->
GetTrack()[3];
192 fTDaughter[nvect][4] = Tr->
GetTrack()[4];
193 fTDaughter[nvect][5] = Tr->
GetTrack()[5];
208 if (TMath::Abs(fTDaughter[0][3] - fTDaughter[1][3]) > 0.001)
209 z = (fTDaughter[0][3] * fTDaughter[0][5] - fTDaughter[1][3] * fTDaughter[1][5] + fTDaughter[1][1]
211 / (fTDaughter[0][3] - fTDaughter[1][3]);
224 r0[0] = VertexGuess[0];
225 r0[1] = VertexGuess[1];
226 r0[2] = VertexGuess[2];
234 for (Int_t
i = 0;
i < 36; ++
i)
237 C[0] =
C[2] =
C[5] = 100.;
243 MF->GetFieldValue(r0, B);
244 const Double_t c_light = 0.000299792458;
254 for (vector<CbmKFTrackInterface*>::iterator tr = vDaughters.begin(); tr != vDaughters.end(); ++tr) {
259 Double_t*
m = Daughter.
r;
260 Double_t* Cd = Daughter.
C;
262 Double_t
d[3] = {r0[0] -
m[0], r0[1] -
m[1], r0[2] -
m[2]};
264 .1 + 10. *
sqrt((
d[0] *
d[0] +
d[1] *
d[1] +
d[2] *
d[2]) / (
m[3] *
m[3] +
m[4] *
m[4] +
m[5] *
m[5]));
268 h[0] =
m[3] * SigmaS;
269 h[1] =
m[4] * SigmaS;
270 h[2] =
m[5] * SigmaS;
271 h[3] = (h[1] * B[2] - h[2] * B[1]) * Daughter.
Q;
272 h[4] = (h[2] * B[0] - h[0] * B[2]) * Daughter.
Q;
273 h[5] = (h[0] * B[1] - h[1] * B[0]) * Daughter.
Q;
277 Double_t zeta[3] = {r0[0] -
m[0], r0[1] -
m[1], r0[2] -
m[2]};
279 Double_t Vv[6] = {Cd[0] + h[0] * h[0], Cd[1] + h[1] * h[0], Cd[2] + h[1] * h[1],
280 Cd[3] + h[2] * h[0], Cd[4] + h[2] * h[1], Cd[5] + h[2] * h[2]};
282 Double_t Vvp[9] = {Cd[6] + h[0] * h[3], Cd[7] + h[1] * h[3], Cd[8] + h[2] * h[3],
283 Cd[10] + h[0] * h[4], Cd[11] + h[1] * h[4], Cd[12] + h[2] * h[4],
284 Cd[15] + h[0] * h[5], Cd[16] + h[1] * h[5], Cd[17] + h[2] * h[5]};
288 Double_t Si[6] = {Vv[0] + C0[0], Vv[1] + C0[1], Vv[2] + C0[2],
289 Vv[3] + C0[3], Vv[4] + C0[4], Vv[5] + C0[5]};
290 Double_t S[6] = {Si[2] * Si[5] - Si[4] * Si[4], Si[3] * Si[4] - Si[1] * Si[5],
291 Si[0] * Si[5] - Si[3] * Si[3], Si[1] * Si[4] - Si[2] * Si[3],
292 Si[1] * Si[3] - Si[0] * Si[4], Si[0] * Si[2] - Si[1] * Si[1]};
293 Double_t det = (Si[0] * S[0] + Si[1] * S[1] + Si[3] * S[3]);
294 Double_t chi2 = (+(S[0] * zeta[0] + S[1] * zeta[1] + S[3] * zeta[2]) * zeta[0]
295 + (S[1] * zeta[0] + S[2] * zeta[1] + S[4] * zeta[2]) * zeta[1]
296 + (S[3] * zeta[0] + S[4] * zeta[1] + S[5] * zeta[2]) * zeta[2]);
297 if (chi2 > 2 * CutChi2 * det)
301 double S[6] = {Vv[2] * Vv[5] - Vv[4] * Vv[4], Vv[3] * Vv[4] - Vv[1] * Vv[5],
302 Vv[0] * Vv[5] - Vv[3] * Vv[3], Vv[1] * Vv[4] - Vv[2] * Vv[3],
303 Vv[1] * Vv[3] - Vv[0] * Vv[4], Vv[0] * Vv[2] - Vv[1] * Vv[1]};
305 double s = (Vv[0] * S[0] + Vv[1] * S[1] + Vv[3] * S[3]);
306 s = (s > 1.E-20) ? 1. / s : 0;
315 Double_t Sz[3] = {(S[0] * zeta[0] + S[1] * zeta[1] + S[3] * zeta[2]),
316 (S[1] * zeta[0] + S[2] * zeta[1] + S[4] * zeta[2]),
317 (S[3] * zeta[0] + S[4] * zeta[1] + S[5] * zeta[2])};
319 Double_t x =
m[3] + Vvp[0] * Sz[0] + Vvp[1] * Sz[1] + Vvp[2] * Sz[2];
320 Double_t y =
m[4] + Vvp[3] * Sz[0] + Vvp[4] * Sz[1] + Vvp[5] * Sz[2];
321 Double_t z =
m[5] + Vvp[6] * Sz[0] + Vvp[7] * Sz[1] + Vvp[8] * Sz[2];
326 h[3] = (h[1] * B[2] - h[2] * B[1]) * Daughter.
Q;
327 h[4] = (h[2] * B[0] - h[0] * B[2]) * Daughter.
Q;
328 h[5] = (h[0] * B[1] - h[1] * B[0]) * Daughter.
Q;
333 V[0] = Cd[0] + h[0] * h[0];
334 V[1] = Cd[1] + h[1] * h[0];
335 V[2] = Cd[2] + h[1] * h[1];
336 V[3] = Cd[3] + h[2] * h[0];
337 V[4] = Cd[4] + h[2] * h[1];
338 V[5] = Cd[5] + h[2] * h[2];
340 V[6] = Cd[6] + h[3] * h[0];
341 V[7] = Cd[7] + h[3] * h[1];
342 V[8] = Cd[8] + h[3] * h[2];
343 V[9] = Cd[9] + h[3] * h[3];
345 V[10] = Cd[10] + h[4] * h[0];
346 V[11] = Cd[11] + h[4] * h[1];
347 V[12] = Cd[12] + h[4] * h[2];
348 V[13] = Cd[13] + h[4] * h[3];
349 V[14] = Cd[14] + h[4] * h[4];
351 V[15] = Cd[15] + h[5] * h[0];
352 V[16] = Cd[16] + h[5] * h[1];
353 V[17] = Cd[17] + h[5] * h[2];
354 V[18] = Cd[18] + h[5] * h[3];
355 V[19] = Cd[19] + h[5] * h[4];
356 V[20] = Cd[20] + h[5] * h[5];
373 for (
int i = 0;
i < 7;
i++)
375 for (
int i = 0;
i < 28;
i++)
384 double Si[6] = {
C[0] + V[0],
C[1] + V[1],
C[2] + V[2],
C[3] + V[3],
C[4] + V[4],
C[5] + V[5]};
386 S[0] = Si[2] * Si[5] - Si[4] * Si[4];
387 S[1] = Si[3] * Si[4] - Si[1] * Si[5];
388 S[2] = Si[0] * Si[5] - Si[3] * Si[3];
389 S[3] = Si[1] * Si[4] - Si[2] * Si[3];
390 S[4] = Si[1] * Si[3] - Si[0] * Si[4];
391 S[5] = Si[0] * Si[2] - Si[1] * Si[1];
393 double s = (Si[0] * S[0] + Si[1] * S[1] + Si[3] * S[3]);
394 s = (s > 1.E-20) ? 1. / s : 0;
405 Double_t zeta[3] = {
m[0] -
r[0],
m[1] -
r[1],
m[2] -
r[2]};
427 Double_t CHt0[7], CHt1[7], CHt2[7];
438 CHt0[3] =
C[6] - V[6];
439 CHt1[3] =
C[7] - V[7];
440 CHt2[3] =
C[8] - V[8];
441 CHt0[4] =
C[10] - V[10];
442 CHt1[4] =
C[11] - V[11];
443 CHt2[4] =
C[12] - V[12];
444 CHt0[5] =
C[15] - V[15];
445 CHt1[5] =
C[16] - V[16];
446 CHt2[5] =
C[17] - V[17];
447 CHt0[6] =
C[21] - V[21];
448 CHt1[6] =
C[22] - V[22];
449 CHt2[6] =
C[23] - V[23];
453 Double_t K0[7], K1[7], K2[7];
455 for (Int_t
i = 0;
i < 7; ++
i) {
456 K0[
i] = CHt0[
i] * S[0] + CHt1[
i] * S[1] + CHt2[
i] * S[3];
457 K1[
i] = CHt0[
i] * S[1] + CHt1[
i] * S[2] + CHt2[
i] * S[4];
458 K2[
i] = CHt0[
i] * S[3] + CHt1[
i] * S[4] + CHt2[
i] * S[5];
463 for (Int_t
i = 0;
i < 7; ++
i)
464 r[
i] += K0[
i] * zeta[0] + K1[
i] * zeta[1] + K2[
i] * zeta[2];
468 for (Int_t
i = 0, k = 0;
i < 7; ++
i) {
469 for (Int_t j = 0; j <=
i; ++j, ++k)
470 C[k] -= K0[
i] * CHt0[j] + K1[
i] * CHt1[j] + K2[
i] * CHt2[j];
475 Chi2 += (S[0] * zeta[0] + S[1] * zeta[1] + S[3] * zeta[2]) * zeta[0]
476 + (S[1] * zeta[0] + S[2] * zeta[1] + S[4] * zeta[2]) * zeta[1]
477 + (S[3] * zeta[0] + S[4] * zeta[1] + S[5] * zeta[2]) * zeta[2];
481 if (iteration == 0) {
487 double dx = Parent->
GetRefX() -
r[0];
488 double dy = Parent->
GetRefY() -
r[1];
489 double dz = Parent->
GetRefZ() -
r[2];
490 r0[7] =
r[7] =
sqrt((dx * dx + dy * dy + dz * dz) / (
r[3] *
r[3] +
r[4] *
r[4] +
r[5] *
r[5]));
509 const Int_t MaxIter = 3;
512 r[0] =
r[1] =
r[2] = 0.;
513 C[0] =
C[2] =
C[5] = 1.;
514 C[1] =
C[3] =
C[4] = 0;
519 C[0] =
C[2] = t.
R * t.
R / 9.;
521 C[1] =
C[3] =
C[4] = 0;
530 for (Int_t iteration = 0; iteration < MaxIter; ++iteration) {
532 Double_t r0[8], C0[6];
534 for (
int i = 0;
i < 8;
i++)
536 for (
int i = 0;
i < 6;
i++)
539 if (iteration == 0) {
540 Double_t VertexGuess[3];
542 Double_t fTDaughter[(int)vDaughters.size()][6];
545 vector<CbmKFTrack*> TrV;
548 for (vector<CbmKFParticle*>::iterator tr = vDaughters.begin(); tr != vDaughters.end(); ++tr) {
554 fTDaughter[nvect][0] = Tr->
GetTrack()[0];
555 fTDaughter[nvect][1] = Tr->
GetTrack()[1];
556 fTDaughter[nvect][2] = Tr->
GetTrack()[2];
557 fTDaughter[nvect][3] = Tr->
GetTrack()[3];
558 fTDaughter[nvect][4] = Tr->
GetTrack()[4];
559 fTDaughter[nvect][5] = Tr->
GetTrack()[5];
575 if (TMath::Abs(fTDaughter[0][3] - fTDaughter[1][3]) > 0.001)
576 z = (fTDaughter[0][3] * fTDaughter[0][5] - fTDaughter[1][3] * fTDaughter[1][5] + fTDaughter[1][1]
578 / (fTDaughter[0][3] - fTDaughter[1][3]);
592 r0[0] = VertexGuess[0];
593 r0[1] = VertexGuess[1];
594 r0[2] = VertexGuess[2];
602 for (Int_t
i = 0;
i < 36; ++
i)
605 C[0] =
C[2] =
C[5] = 100.;
611 MF->GetFieldValue(r0, B);
612 const Double_t c_light = 0.000299792458;
622 for (vector<CbmKFParticle*>::iterator tr = vDaughters.begin(); tr != vDaughters.end(); ++tr) {
625 Double_t dx_aprox = Daughter.
r[0] - r0[0];
626 Double_t dy_aprox = Daughter.
r[1] - r0[1];
627 Double_t dz_aprox = Daughter.
r[2] - r0[2];
629 sqrt((dx_aprox * dx_aprox + dy_aprox * dy_aprox + dz_aprox * dz_aprox)
630 / (Daughter.
r[3] * Daughter.
r[3] + Daughter.
r[4] * Daughter.
r[4] + Daughter.
r[5] * Daughter.
r[5]));
634 Double_t*
m = Daughter.
r;
635 Double_t* Cd = Daughter.
C;
637 Double_t
d[3] = {r0[0] -
m[0], r0[1] -
m[1], r0[2] -
m[2]};
639 .1 + 10. *
sqrt((
d[0] *
d[0] +
d[1] *
d[1] +
d[2] *
d[2]) / (
m[3] *
m[3] +
m[4] *
m[4] +
m[5] *
m[5]));
643 h[0] =
m[3] * SigmaS;
644 h[1] =
m[4] * SigmaS;
645 h[2] =
m[5] * SigmaS;
646 h[3] = (h[1] * B[2] - h[2] * B[1]) * Daughter.
Q;
647 h[4] = (h[2] * B[0] - h[0] * B[2]) * Daughter.
Q;
648 h[5] = (h[0] * B[1] - h[1] * B[0]) * Daughter.
Q;
652 Double_t zeta[3] = {r0[0] -
m[0], r0[1] -
m[1], r0[2] -
m[2]};
654 Double_t Vv[6] = {Cd[0] + h[0] * h[0], Cd[1] + h[1] * h[0], Cd[2] + h[1] * h[1],
655 Cd[3] + h[2] * h[0], Cd[4] + h[2] * h[1], Cd[5] + h[2] * h[2]};
657 Double_t Vvp[9] = {Cd[6] + h[0] * h[3], Cd[7] + h[1] * h[3], Cd[8] + h[2] * h[3],
658 Cd[10] + h[0] * h[4], Cd[11] + h[1] * h[4], Cd[12] + h[2] * h[4],
659 Cd[15] + h[0] * h[5], Cd[16] + h[1] * h[5], Cd[17] + h[2] * h[5]};
663 Double_t Si[6] = {Vv[0] + C0[0], Vv[1] + C0[1], Vv[2] + C0[2],
664 Vv[3] + C0[3], Vv[4] + C0[4], Vv[5] + C0[5]};
665 Double_t S[6] = {Si[2] * Si[5] - Si[4] * Si[4], Si[3] * Si[4] - Si[1] * Si[5],
666 Si[0] * Si[5] - Si[3] * Si[3], Si[1] * Si[4] - Si[2] * Si[3],
667 Si[1] * Si[3] - Si[0] * Si[4], Si[0] * Si[2] - Si[1] * Si[1]};
668 Double_t det = (Si[0] * S[0] + Si[1] * S[1] + Si[3] * S[3]);
669 Double_t chi2 = (+(S[0] * zeta[0] + S[1] * zeta[1] + S[3] * zeta[2]) * zeta[0]
670 + (S[1] * zeta[0] + S[2] * zeta[1] + S[4] * zeta[2]) * zeta[1]
671 + (S[3] * zeta[0] + S[4] * zeta[1] + S[5] * zeta[2]) * zeta[2]);
672 if (chi2 > 2 * CutChi2 * det)
676 double S[6] = {Vv[2] * Vv[5] - Vv[4] * Vv[4], Vv[3] * Vv[4] - Vv[1] * Vv[5],
677 Vv[0] * Vv[5] - Vv[3] * Vv[3], Vv[1] * Vv[4] - Vv[2] * Vv[3],
678 Vv[1] * Vv[3] - Vv[0] * Vv[4], Vv[0] * Vv[2] - Vv[1] * Vv[1]};
680 double s = (Vv[0] * S[0] + Vv[1] * S[1] + Vv[3] * S[3]);
681 s = (s > 1.E-20) ? 1. / s : 0;
690 Double_t Sz[3] = {(S[0] * zeta[0] + S[1] * zeta[1] + S[3] * zeta[2]),
691 (S[1] * zeta[0] + S[2] * zeta[1] + S[4] * zeta[2]),
692 (S[3] * zeta[0] + S[4] * zeta[1] + S[5] * zeta[2])};
694 Double_t x =
m[3] + Vvp[0] * Sz[0] + Vvp[1] * Sz[1] + Vvp[2] * Sz[2];
695 Double_t y =
m[4] + Vvp[3] * Sz[0] + Vvp[4] * Sz[1] + Vvp[5] * Sz[2];
696 Double_t z =
m[5] + Vvp[6] * Sz[0] + Vvp[7] * Sz[1] + Vvp[8] * Sz[2];
701 h[3] = (h[1] * B[2] - h[2] * B[1]) * Daughter.
Q;
702 h[4] = (h[2] * B[0] - h[0] * B[2]) * Daughter.
Q;
703 h[5] = (h[0] * B[1] - h[1] * B[0]) * Daughter.
Q;
708 V[0] = Cd[0] + h[0] * h[0];
709 V[1] = Cd[1] + h[1] * h[0];
710 V[2] = Cd[2] + h[1] * h[1];
711 V[3] = Cd[3] + h[2] * h[0];
712 V[4] = Cd[4] + h[2] * h[1];
713 V[5] = Cd[5] + h[2] * h[2];
715 V[6] = Cd[6] + h[3] * h[0];
716 V[7] = Cd[7] + h[3] * h[1];
717 V[8] = Cd[8] + h[3] * h[2];
718 V[9] = Cd[9] + h[3] * h[3];
720 V[10] = Cd[10] + h[4] * h[0];
721 V[11] = Cd[11] + h[4] * h[1];
722 V[12] = Cd[12] + h[4] * h[2];
723 V[13] = Cd[13] + h[4] * h[3];
724 V[14] = Cd[14] + h[4] * h[4];
726 V[15] = Cd[15] + h[5] * h[0];
727 V[16] = Cd[16] + h[5] * h[1];
728 V[17] = Cd[17] + h[5] * h[2];
729 V[18] = Cd[18] + h[5] * h[3];
730 V[19] = Cd[19] + h[5] * h[4];
731 V[20] = Cd[20] + h[5] * h[5];
748 for (
int i = 0;
i < 7;
i++)
750 for (
int i = 0;
i < 28;
i++)
759 double Si[6] = {
C[0] + V[0],
C[1] + V[1],
C[2] + V[2],
C[3] + V[3],
C[4] + V[4],
C[5] + V[5]};
761 S[0] = Si[2] * Si[5] - Si[4] * Si[4];
762 S[1] = Si[3] * Si[4] - Si[1] * Si[5];
763 S[2] = Si[0] * Si[5] - Si[3] * Si[3];
764 S[3] = Si[1] * Si[4] - Si[2] * Si[3];
765 S[4] = Si[1] * Si[3] - Si[0] * Si[4];
766 S[5] = Si[0] * Si[2] - Si[1] * Si[1];
768 double s = (Si[0] * S[0] + Si[1] * S[1] + Si[3] * S[3]);
769 s = (s > 1.E-20) ? 1. / s : 0;
780 Double_t zeta[3] = {
m[0] -
r[0],
m[1] -
r[1],
m[2] -
r[2]};
802 Double_t CHt0[7], CHt1[7], CHt2[7];
813 CHt0[3] =
C[6] - V[6];
814 CHt1[3] =
C[7] - V[7];
815 CHt2[3] =
C[8] - V[8];
816 CHt0[4] =
C[10] - V[10];
817 CHt1[4] =
C[11] - V[11];
818 CHt2[4] =
C[12] - V[12];
819 CHt0[5] =
C[15] - V[15];
820 CHt1[5] =
C[16] - V[16];
821 CHt2[5] =
C[17] - V[17];
822 CHt0[6] =
C[21] - V[21];
823 CHt1[6] =
C[22] - V[22];
824 CHt2[6] =
C[23] - V[23];
828 Double_t K0[7], K1[7], K2[7];
830 for (Int_t
i = 0;
i < 7; ++
i) {
831 K0[
i] = CHt0[
i] * S[0] + CHt1[
i] * S[1] + CHt2[
i] * S[3];
832 K1[
i] = CHt0[
i] * S[1] + CHt1[
i] * S[2] + CHt2[
i] * S[4];
833 K2[
i] = CHt0[
i] * S[3] + CHt1[
i] * S[4] + CHt2[
i] * S[5];
838 for (Int_t
i = 0;
i < 7; ++
i)
839 r[
i] += K0[
i] * zeta[0] + K1[
i] * zeta[1] + K2[
i] * zeta[2];
843 for (Int_t
i = 0, k = 0;
i < 7; ++
i) {
844 for (Int_t j = 0; j <=
i; ++j, ++k)
845 C[k] -= K0[
i] * CHt0[j] + K1[
i] * CHt1[j] + K2[
i] * CHt2[j];
850 Chi2 += (S[0] * zeta[0] + S[1] * zeta[1] + S[3] * zeta[2]) * zeta[0]
851 + (S[1] * zeta[0] + S[2] * zeta[1] + S[4] * zeta[2]) * zeta[1]
852 + (S[3] * zeta[0] + S[4] * zeta[1] + S[5] * zeta[2]) * zeta[2];
856 if (iteration == 0) {
862 double dx = Parent->
GetRefX() -
r[0];
863 double dy = Parent->
GetRefY() -
r[1];
864 double dz = Parent->
GetRefZ() -
r[2];
865 r0[7] =
r[7] =
sqrt((dx * dx + dy * dy + dz * dz) / (
r[3] *
r[3] +
r[4] *
r[4] +
r[5] *
r[5]));
882 H[0] = H[1] = H[2] = 0.;
888 double m2 = r0[6] * r0[6] - r0[3] * r0[3] - r0[4] * r0[4] - r0[5] * r0[5];
890 double zeta = Mass * Mass - m2;
891 for (Int_t
i = 0;
i < 8; ++
i)
892 zeta -= H[
i] * (
r[
i] - r0[
i]);
896 for (Int_t
i = 0;
i < 8; ++
i) {
898 for (Int_t j = 0; j < 8; ++j)
899 CHt[
i] +=
Cij(
i, j) * H[j];
906 Chi2 += zeta * zeta * S;
908 for (Int_t
i = 0, ii = 0;
i < 8; ++
i) {
909 Double_t Ki = CHt[
i] * S;
911 for (Int_t j = 0; j <=
i; ++j)
912 C[ii++] -= Ki * CHt[j];
931 Ai[0] =
C[4] *
C[4] -
C[2] *
C[5];
932 Ai[1] =
C[1] *
C[5] -
C[3] *
C[4];
933 Ai[3] =
C[2] *
C[3] -
C[1] *
C[4];
934 double det = 1. / (
C[0] * Ai[0] +
C[1] * Ai[1] +
C[3] * Ai[3]);
938 Ai[2] = (
C[3] *
C[3] -
C[0] *
C[5]) * det;
939 Ai[4] = (
C[0] *
C[4] -
C[1] *
C[3]) * det;
940 Ai[5] = (
C[1] *
C[1] -
C[0] *
C[2]) * det;
944 B[0][0] =
C[6] * Ai[0] +
C[7] * Ai[1] +
C[8] * Ai[3];
945 B[0][1] =
C[6] * Ai[1] +
C[7] * Ai[2] +
C[8] * Ai[4];
946 B[0][2] =
C[6] * Ai[3] +
C[7] * Ai[4] +
C[8] * Ai[5];
948 B[1][0] =
C[10] * Ai[0] +
C[11] * Ai[1] +
C[12] * Ai[3];
949 B[1][1] =
C[10] * Ai[1] +
C[11] * Ai[2] +
C[12] * Ai[4];
950 B[1][2] =
C[10] * Ai[3] +
C[11] * Ai[4] +
C[12] * Ai[5];
952 B[2][0] =
C[15] * Ai[0] +
C[16] * Ai[1] +
C[17] * Ai[3];
953 B[2][1] =
C[15] * Ai[1] +
C[16] * Ai[2] +
C[17] * Ai[4];
954 B[2][2] =
C[15] * Ai[3] +
C[16] * Ai[4] +
C[17] * Ai[5];
956 B[3][0] =
C[21] * Ai[0] +
C[22] * Ai[1] +
C[23] * Ai[3];
957 B[3][1] =
C[21] * Ai[1] +
C[22] * Ai[2] +
C[23] * Ai[4];
958 B[3][2] =
C[21] * Ai[3] +
C[22] * Ai[4] +
C[23] * Ai[5];
960 B[4][0] =
C[28] * Ai[0] +
C[29] * Ai[1] +
C[30] * Ai[3];
961 B[4][1] =
C[28] * Ai[1] +
C[29] * Ai[2] +
C[30] * Ai[4];
962 B[4][2] =
C[28] * Ai[3] +
C[29] * Ai[4] +
C[30] * Ai[5];
964 double z[3] = {
m[0] -
r[0],
m[1] -
r[1],
m[2] -
r[2]};
967 double AV[6] = {
C[0] - V[0],
C[1] - V[1],
C[2] - V[2],
C[3] - V[3],
C[4] - V[4],
C[5] - V[5]};
969 AVi[0] = AV[4] * AV[4] - AV[2] * AV[5];
970 AVi[1] = AV[1] * AV[5] - AV[3] * AV[4];
971 AVi[2] = AV[3] * AV[3] - AV[0] * AV[5];
972 AVi[3] = AV[2] * AV[3] - AV[1] * AV[4];
973 AVi[4] = AV[0] * AV[4] - AV[1] * AV[3];
974 AVi[5] = AV[1] * AV[1] - AV[0] * AV[2];
976 det = 1. / (AV[0] * AVi[0] + AV[1] * AVi[1] + AV[3] * AVi[3]);
985 Double_t dChi2 = (+(AVi[0] * z[0] + AVi[1] * z[1] + AVi[3] * z[2]) * z[0]
986 + (AVi[1] * z[0] + AVi[2] * z[1] + AVi[4] * z[2]) * z[1]
987 + (AVi[3] * z[0] + AVi[4] * z[1] + AVi[5] * z[2]) * z[2])
989 Chi2 += TMath::Abs(dChi2);
995 r[3] += B[0][0] * z[0] + B[0][1] * z[1] + B[0][2] * z[2];
996 r[4] += B[1][0] * z[0] + B[1][1] * z[1] + B[1][2] * z[2];
997 r[5] += B[2][0] * z[0] + B[2][1] * z[1] + B[2][2] * z[2];
998 r[6] += B[3][0] * z[0] + B[3][1] * z[1] + B[3][2] * z[2];
999 r[7] += B[4][0] * z[0] + B[4][1] * z[1] + B[4][2] * z[2];
1010 d0 = B[0][0] * V[0] + B[0][1] * V[1] + B[0][2] * V[3] -
C[6];
1011 d1 = B[0][0] * V[1] + B[0][1] * V[2] + B[0][2] * V[4] -
C[7];
1012 d2 = B[0][0] * V[3] + B[0][1] * V[4] + B[0][2] * V[5] -
C[8];
1017 C[9] += d0 * B[0][0] + d1 * B[0][1] + d2 * B[0][2];
1019 d0 = B[1][0] * V[0] + B[1][1] * V[1] + B[1][2] * V[3] -
C[10];
1020 d1 = B[1][0] * V[1] + B[1][1] * V[2] + B[1][2] * V[4] -
C[11];
1021 d2 = B[1][0] * V[3] + B[1][1] * V[4] + B[1][2] * V[5] -
C[12];
1026 C[13] += d0 * B[0][0] + d1 * B[0][1] + d2 * B[0][2];
1027 C[14] += d0 * B[1][0] + d1 * B[1][1] + d2 * B[1][2];
1029 d0 = B[2][0] * V[0] + B[2][1] * V[1] + B[2][2] * V[3] -
C[15];
1030 d1 = B[2][0] * V[1] + B[2][1] * V[2] + B[2][2] * V[4] -
C[16];
1031 d2 = B[2][0] * V[3] + B[2][1] * V[4] + B[2][2] * V[5] -
C[17];
1036 C[18] += d0 * B[0][0] + d1 * B[0][1] + d2 * B[0][2];
1037 C[19] += d0 * B[1][0] + d1 * B[1][1] + d2 * B[1][2];
1038 C[20] += d0 * B[2][0] + d1 * B[2][1] + d2 * B[2][2];
1040 d0 = B[3][0] * V[0] + B[3][1] * V[1] + B[3][2] * V[3] -
C[21];
1041 d1 = B[3][0] * V[1] + B[3][1] * V[2] + B[3][2] * V[4] -
C[22];
1042 d2 = B[3][0] * V[3] + B[3][1] * V[4] + B[3][2] * V[5] -
C[23];
1047 C[24] += d0 * B[0][0] + d1 * B[0][1] + d2 * B[0][2];
1048 C[25] += d0 * B[1][0] + d1 * B[1][1] + d2 * B[1][2];
1049 C[26] += d0 * B[2][0] + d1 * B[2][1] + d2 * B[2][2];
1050 C[27] += d0 * B[3][0] + d1 * B[3][1] + d2 * B[3][2];
1052 d0 = B[4][0] * V[0] + B[4][1] * V[1] + B[4][2] * V[3] -
C[28];
1053 d1 = B[4][0] * V[1] + B[4][1] * V[2] + B[4][2] * V[4] -
C[29];
1054 d2 = B[4][0] * V[3] + B[4][1] * V[4] + B[4][2] * V[5] -
C[30];
1059 C[31] += d0 * B[0][0] + d1 * B[0][1] + d2 * B[0][2];
1060 C[32] += d0 * B[1][0] + d1 * B[1][1] + d2 * B[1][2];
1061 C[33] += d0 * B[2][0] + d1 * B[2][1] + d2 * B[2][2];
1062 C[34] += d0 * B[3][0] + d1 * B[3][1] + d2 * B[3][2];
1063 C[35] += d0 * B[4][0] + d1 * B[4][1] + d2 * B[4][2];
1075 MF->GetFieldValue(r0, B);
1076 const Double_t c_light =
Q * 0.000299792458;
1092 h[3] = h[1] * B[2] - h[2] * B[1];
1093 h[4] = h[2] * B[0] - h[0] * B[2];
1094 h[5] = h[0] * B[1] - h[1] * B[0];
1098 c =
C[28] + h[0] *
C[35];
1099 C[0] += h[0] * (c +
C[28]);
1102 C[1] += h[1] *
C[28] + h[0] *
C[29];
1103 c =
C[29] + h[1] *
C[35];
1104 C[2] += h[1] * (c +
C[29]);
1107 C[3] += h[2] *
C[28] + h[0] *
C[30];
1108 C[4] += h[2] *
C[29] + h[1] *
C[30];
1109 c =
C[30] + h[2] *
C[35];
1110 C[5] += h[2] * (c +
C[30]);
1113 C[6] += h[3] *
C[28] + h[0] *
C[31];
1114 C[7] += h[3] *
C[29] + h[1] *
C[31];
1115 C[8] += h[3] *
C[30] + h[2] *
C[31];
1116 c =
C[31] + h[3] *
C[35];
1117 C[9] += h[3] * (c +
C[31]);
1120 C[10] += h[4] *
C[28] + h[0] *
C[32];
1121 C[11] += h[4] *
C[29] + h[1] *
C[32];
1122 C[12] += h[4] *
C[30] + h[2] *
C[32];
1123 C[13] += h[4] *
C[31] + h[3] *
C[32];
1124 c =
C[32] + h[4] *
C[35];
1125 C[14] += h[4] * (c +
C[32]);
1128 C[15] += h[5] *
C[28] + h[0] *
C[33];
1129 C[16] += h[5] *
C[29] + h[1] *
C[33];
1130 C[17] += h[5] *
C[30] + h[2] *
C[33];
1131 C[18] += h[5] *
C[31] + h[3] *
C[33];
1132 C[19] += h[5] *
C[32] + h[4] *
C[33];
1133 c =
C[33] + h[5] *
C[35];
1134 C[20] += h[5] * (c +
C[33]);
1137 C[21] += h[0] *
C[34];
1138 C[22] += h[1] *
C[34];
1139 C[23] += h[2] *
C[34];
1140 C[24] += h[3] *
C[34];
1141 C[25] += h[4] *
C[34];
1142 C[26] += h[5] *
C[34];
1147 if (r0 && r0 !=
r) {
1148 r0[0] += dS * r0[3];
1149 r0[1] += dS * r0[4];
1150 r0[2] += dS * r0[5];
1157 double C6 =
C[6] + dS *
C[9];
1158 double C11 =
C[11] + dS *
C[14];
1159 double C17 =
C[17] + dS *
C[20];
1160 double SC13 = dS *
C[13];
1161 double SC18 = dS *
C[18];
1162 double SC19 = dS *
C[19];
1164 C[0] += dS * (
C[6] + C6);
1165 C[2] += dS * (
C[11] + C11);
1166 C[5] += dS * (
C[17] + C17);
1172 C[1] += dS * (
C[10] +
C[7]);
1173 C[3] += dS * (
C[15] +
C[8]);
1174 C[4] += dS * (
C[16] +
C[12]);
1183 C[21] += dS *
C[24];
1184 C[22] += dS *
C[25];
1185 C[23] += dS *
C[26];
1186 C[28] += dS *
C[31];
1187 C[29] += dS *
C[32];
1188 C[30] += dS *
C[33];
1199 const Double_t
c_light = 0.000299792458;
1206 Double_t px =
r[3], py =
r[4], pz =
r[5];
1208 Double_t sx = 0, sy = 0, sz = 0, syy = 0, syz = 0, syyy = 0, Sx = 0, Sy = 0, Sz = 0, Syy = 0, Syz = 0, Syyy = 0;
1213 Double_t p0[3], p1[3], p2[3];
1221 p2[0] =
r[0] + px * dS;
1222 p2[1] =
r[1] + py * dS;
1223 p2[2] =
r[2] + pz * dS;
1225 p1[0] = 0.5 * (p0[0] + p2[0]);
1226 p1[1] = 0.5 * (p0[1] + p2[1]);
1227 p1[2] = 0.5 * (p0[2] + p2[2]);
1231 MF->GetFieldValue(p0, B[0]);
1232 MF->GetFieldValue(p1, B[1]);
1233 MF->GetFieldValue(p2, B[2]);
1235 Double_t Sy1 = (7 * B[0][1] + 6 * B[1][1] - B[2][1]) * c * dS * dS / 96.;
1236 Double_t Sy2 = (B[0][1] + 2 * B[1][1]) * c * dS * dS / 6.;
1244 MF->GetFieldValue(p0, B[0]);
1245 MF->GetFieldValue(p1, B[1]);
1246 MF->GetFieldValue(p2, B[2]);
1248 sx = c * (B[0][0] + 4 * B[1][0] + B[2][0]) * dS / 6.;
1249 sy = c * (B[0][1] + 4 * B[1][1] + B[2][1]) * dS / 6.;
1250 sz = c * (B[0][2] + 4 * B[1][2] + B[2][2]) * dS / 6.;
1252 Sx = c * (B[0][0] + 2 * B[1][0]) * dS * dS / 6.;
1253 Sy = c * (B[0][1] + 2 * B[1][1]) * dS * dS / 6.;
1254 Sz = c * (B[0][2] + 2 * B[1][2]) * dS * dS / 6.;
1256 Double_t c2[3][3] = {{5, -4, -1}, {44, 80, -4}, {11, 44, 5}};
1257 Double_t C2[3][3] = {{38, 8, -4}, {148, 208, -20}, {3, 36, 3}};
1258 for (Int_t n = 0; n < 3; n++)
1259 for (Int_t
m = 0;
m < 3;
m++) {
1260 syz += c2[n][
m] * B[n][1] * B[
m][2];
1261 Syz += C2[n][
m] * B[n][1] * B[
m][2];
1264 syz *= c * c * dS * dS / 360.;
1265 Syz *= c * c * dS * dS * dS / 2520.;
1267 syy = c * (B[0][1] + 4 * B[1][1] + B[2][1]) * dS;
1268 syyy = syy * syy * syy / 1296;
1269 syy = syy * syy / 72;
1271 Syy = (B[0][1] * (38 * B[0][1] + 156 * B[1][1] - B[2][1]) + B[1][1] * (208 * B[1][1] + 16 * B[2][1])
1272 + B[2][1] * (3 * B[2][1]))
1273 * dS * dS * dS * c * c / 2520.;
1275 * (B[0][1] * (85 * B[0][1] + 526 * B[1][1] - 7 * B[2][1])
1276 + B[1][1] * (1376 * B[1][1] + 84 * B[2][1]) + B[2][1] * (19 * B[2][1]))
1277 + B[1][1] * (B[1][1] * (1376 * B[1][1] + 256 * B[2][1]) + B[2][1] * (62 * B[2][1]))
1278 + B[2][1] * B[2][1] * (3 * B[2][1]))
1279 * dS * dS * dS * dS * c * c * c / 90720.;
1283 for (
int i = 0;
i < 8;
i++)
1284 for (
int j = 0; j < 8; j++)
1292 J[0][5] = Syyy - Sy;
1302 J[2][3] = Sy - Syyy;
1311 J[3][5] = syyy - sy;
1321 J[5][3] = sy - syyy;
1324 J[6][6] = J[7][7] = 1;
1326 r[0] += J[0][3] * px + J[0][4] * py + J[0][5] * pz;
1327 r[1] += J[1][3] * px + J[1][4] * py + J[1][5] * pz;
1328 r[2] += J[2][3] * px + J[2][4] * py + J[2][5] * pz;
1329 r[3] = J[3][3] * px + J[3][4] * py + J[3][5] * pz;
1330 r[4] = J[4][3] * px + J[4][4] * py + J[4][5] * pz;
1331 r[5] = J[5][3] * px + J[5][4] * py + J[5][5] * pz;
1333 if (r0 && r0 !=
r) {
1338 r0[0] += J[0][3] * px + J[0][4] * py + J[0][5] * pz;
1339 r0[1] += J[1][3] * px + J[1][4] * py + J[1][5] * pz;
1340 r0[2] += J[2][3] * px + J[2][4] * py + J[2][5] * pz;
1341 r0[3] = J[3][3] * px + J[3][4] * py + J[3][5] * pz;
1342 r0[4] = J[4][3] * px + J[4][4] * py + J[4][5] * pz;
1343 r0[5] = J[5][3] * px + J[5][4] * py + J[5][5] * pz;
1354 for (
int i = 0;
i < 8;
i++)
1366 for (
int i = 0;
i < 8;
i++)
1381 Double_t px =
r[3], py =
r[4], pz =
r[5];
1382 Double_t p =
sqrt(px * px + py * py + pz * pz);
1383 Double_t pzi = 1 / pz;
1384 Double_t qp = 1 / p;
1396 Double_t qp3 = qp * qp * qp;
1397 Double_t pzi2 = pzi * pzi;
1399 Double_t cXpz =
C[15] - T[2] *
C[17];
1400 Double_t cYpz =
C[16] - T[3] *
C[17];
1401 Double_t cqpx = -qp3 * (px *
C[9] + py *
C[13] + pz *
C[18]);
1402 Double_t cqpy = -qp3 * (px *
C[13] + py *
C[14] + pz *
C[19]);
1403 Double_t cqpz = -qp3 * (px *
C[18] + py *
C[19] + pz *
C[20]);
1405 Cov[0] =
C[0] + T[2] * (-2 *
C[3] + T[2] *
C[5]);
1406 Cov[1] =
C[1] - T[2] *
C[4] + T[3] * (-
C[3] + T[2] *
C[5]);
1407 Cov[2] =
C[2] + T[3] * (-2 *
C[4] + T[3] *
C[5]);
1408 Cov[3] = pzi * (
C[6] - T[2] * (
C[8] + cXpz));
1409 Cov[4] = pzi * (
C[7] - T[3] *
C[8] - T[2] * cYpz);
1410 Cov[5] = pzi2 * (
C[9] + T[2] * (-2 *
C[18] + T[2] *
C[20]));
1411 Cov[6] = pzi * (
C[10] - T[2] *
C[12] - T[3] * cXpz);
1412 Cov[7] = pzi * (
C[11] - T[3] * (
C[12] + cYpz));
1413 Cov[8] = pzi2 * (
C[13] - T[2] *
C[19] - T[3] *
C[18] + T[2] * T[3] *
C[20]);
1414 Cov[9] = pzi2 * (
C[14] + T[3] * (-2 *
C[19] + T[3] *
C[20]));
1415 Cov[10] = -qp3 * (px *
C[6] + py *
C[10] + pz *
C[15]) - T[2] * cqpz;
1416 Cov[11] = -qp3 * (px *
C[7] + py *
C[11] + pz *
C[16]) - T[3] * cqpz;
1417 Cov[12] = pzi * (cqpx - T[2] * cqpz);
1418 Cov[13] = pzi * (cqpy - T[3] * cqpz);
1419 Cov[14] = -qp3 * (px * cqpx + py * cqpy + pz * cqpz);
1427 for (
int i = 0;
i < 6;
i++)
1438 Double_t x2 = x * x;
1439 Double_t y2 = y * y;
1440 Double_t z2 = z * z;
1441 Double_t p2 = x2 + y2 + z2;
1443 Error_ =
sqrt((x2 *
C[9] + y2 *
C[14] + z2 *
C[20] + 2 * (x * y *
C[13] + x * z *
C[18] + y * z *
C[19])) / p2);
1450 Double_t S = (
r[3] *
r[3] *
C[9] +
r[4] *
r[4] *
C[14] +
r[5] *
r[5] *
C[20] +
r[6] *
r[6] *
C[27]
1452 * (+
r[3] *
r[4] *
C[13] +
r[5] * (
r[3] *
C[18] +
r[4] *
C[19])
1453 -
r[6] * (
r[3] *
C[24] +
r[4] *
C[25] +
r[5] *
C[26])));
1454 Double_t m2 =
r[6] *
r[6] -
r[3] *
r[3] -
r[4] *
r[4] -
r[5] *
r[5];
1455 M = (m2 > 1.e-20) ?
sqrt(m2) : 0.;
1456 Error_ = (S >= 0 && m2 > 1.e-20) ?
sqrt(S / m2) : 1.e4;
1465 Double_t x2 = x * x;
1466 Double_t y2 = y * y;
1467 Double_t z2 = z * z;
1468 Double_t p2 = x2 + y2 + z2;
1472 + t * t / p2 * (x2 *
C[9] + y2 *
C[14] + z2 *
C[20] + 2 * (x * y *
C[13] + x * z *
C[18] + y * z *
C[19]))
1473 + 2 * t * (x *
C[31] + y *
C[32] + z *
C[33]));
1480 Double_t cTM = (-
r[3] *
C[31] -
r[4] *
C[32] -
r[5] *
C[33] +
r[6] *
C[34]);
1482 Error_ =
sqrt(
m *
m *
C[35] + 2 *
r[7] * cTM +
r[7] *
r[7] * dm * dm);
1487 return 0.5 * TMath::Log((
r[6] +
r[5]) / (
r[6] -
r[5]));
1491 return TMath::Sqrt(
r[3] *
r[3] +
r[4] *
r[4]);
1495 return TMath::ATan2(
GetPt(),
r[5]);
1499 return TMath::ATan2(
r[4],
r[3]);
1505 Double_t dx = xyz[0] -
r[0];
1506 Double_t dy = xyz[1] -
r[1];
1507 Double_t dz = xyz[2] -
r[2];
1508 Double_t p2 =
r[3] *
r[3] +
r[4] *
r[4] +
r[5] *
r[5];
1510 if (
Q == 0 &&
r[2] < xyz[2])
1511 return sqrt((dx * dx + dy * dy + dz * dz) / p2);
1512 if (
Q == 0 &&
r[2] >= xyz[2])
1513 return -
sqrt((dx * dx + dy * dy + dz * dz) / p2);
1515 const Double_t kCLight = 0.000299792458;
1518 MF->GetFieldValue(
r, B);
1520 Double_t bq1 = B[0] *
Q * kCLight;
1521 Double_t bq2 = B[1] *
Q * kCLight;
1522 Double_t bq3 = B[2] *
Q * kCLight;
1523 Double_t a = dx *
r[3] + dy *
r[4] + dz *
r[5];
1524 Double_t B2 = B[0] * B[0] + B[1] * B[1] + B[2] * B[2];
1525 Double_t bq =
Q * kCLight *
sqrt(B2);
1526 Double_t pB =
r[3] * B[0] +
r[4] * B[1] +
r[5] * B[2];
1527 Double_t rB = dx * B[0] + dy * B[1] + dz * B[2];
1528 Double_t pt2 = p2 - pB * pB / B2;
1529 a = a - pB * rB / B2;
1536 if (TMath::Abs(bq) < 1.e-8)
1539 dS = TMath::ATan2(bq * a, pt2 + bq1 * (dz *
r[4] - dy *
r[5]) - bq2 * (dz *
r[3] - dx *
r[5])
1540 + bq3 * (dy *
r[3] - dx *
r[4]))
const Float_t d
Z-ccordinate of the first GEM-station.
friend F32vec4 sqrt(const F32vec4 &a)
static void multQSQt(Int_t N, const Double_t Q[], const Double_t S[], Double_t S_out[])
static CbmKFParticleDatabase * Instance()
void GetMomentum(Double_t &P, Double_t &Error)
void Extrapolate(Double_t r0[], double T)
void GetMass(Double_t &M, Double_t &Error)
void ExtrapolateLine(Double_t r0[], double T)
void GetLifeTime(Double_t &T, Double_t &Error)
void GetDecayLength(Double_t &L, Double_t &Error)
Double_t GetRapidity() const
Double_t & Cij(Int_t i, Int_t j)
void GetKFVertex(CbmKFVertexInterface &vtx)
void TransportToProductionVertex()
Double_t GetTheta() const
void MeasureProductionVertex(Double_t r0[], CbmKFVertexInterface *Parent)
Bool_t AtProductionVertex
void TransportToDecayVertex()
Double_t GetDStoPoint(const Double_t xyz[]) const
void MeasureMass(Double_t r0[], Double_t Mass)
void GetKFTrack(CbmKFTrackInterface *Track)
void Convert(Double_t r0[], bool ToProduction)
void ConstructFromKFParticle(vector< CbmKFParticle * > &vDaughters, CbmKFVertexInterface *Parent=0, Double_t Mass=-1, Double_t CutChi2=-1)
void Construct(vector< CbmKFTrackInterface * > &vDaughters, CbmKFVertexInterface *Parent=0, Double_t Mass=-1, Double_t CutChi2=-1)
virtual Double_t * GetTrack()
Is it electron.
virtual Int_t & GetRefNDF()
Chi^2 after fit.
Int_t Extrapolate(Double_t z, Double_t *QP0=0, Bool_t line=false)
Access to i-th hit.
virtual Double_t * GetCovMatrix()
array[6] of track parameters(x,y,tx,ty,qp,z)
virtual Double_t & GetRefChi2()
array[15] of covariance matrix
Double_t * GetTrack()
Is it electron.
Double_t & GetRefChi2()
array[15] of covariance matrix
Int_t & GetRefNDF()
Chi^2 after fit.
Double_t * GetCovMatrix()
array[6] of track parameters(x,y,tx,ty,qp,z)
virtual Double_t & GetRefY()
virtual Double_t & GetRefX()
virtual Double_t & GetRefZ()
virtual Double_t & GetRefChi2()
Array[6] of covariance matrix.
virtual Int_t & GetRefNDF()
Chi^2 after fit.
virtual Double_t * GetCovMatrix()
static CbmKF * Instance()
BmnNewFieldMap * GetMagneticField()
std::vector< CbmKFTube > vTargets