51 double Mass = Tr.GetMass();
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;
118 NDF = Tr.GetRefNDF();
119 Chi2 = Tr.GetRefChi2();
120 Q = (qp > 0.) ? 1 : ((qp < 0) ? -1 : 0);
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) {
171 for (
int i = 0;
i < 8;
i++)
173 for (
int i = 0;
i < 6;
i++)
177 if (iteration == 0) {
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];
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) {
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;
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];
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];
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) {
534 for (
int i = 0;
i < 8;
i++)
536 for (
int i = 0;
i < 6;
i++)
539 if (iteration == 0) {
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];
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]));
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;
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];
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];
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]));
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])
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];
1199 const Double_t c_light = 0.000299792458;
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;
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}};
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;
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)