466 for (
Int_t iter = 0; iter < maxIter; iter++) {
470 const Double_t kCLight = 0.000299792458;
485 if (Daughter.
fC[35] > 0) {
489 m[
i] = Daughter.
fP[
i];
491 mV[
i] = Daughter.
fC[
i];
497 Double_t mSi[6] = {ffC[0] + mV[0], ffC[1] + mV[1], ffC[2] + mV[2],
498 ffC[3] + mV[3], ffC[4] + mV[4], ffC[5] + mV[5]};
500 mS[0] = mSi[2] * mSi[5] - mSi[4] * mSi[4];
501 mS[1] = mSi[3] * mSi[4] - mSi[1] * mSi[5];
502 mS[2] = mSi[0] * mSi[5] - mSi[3] * mSi[3];
503 mS[3] = mSi[1] * mSi[4] - mSi[2] * mSi[3];
504 mS[4] = mSi[1] * mSi[3] - mSi[0] * mSi[4];
505 mS[5] = mSi[0] * mSi[2] - mSi[1] * mSi[1];
507 Double_t s = (mSi[0] * mS[0] + mSi[1] * mS[1] + mSi[3] * mS[3]);
518 Double_t zeta[3] = {
m[0] - ffP[0],
m[1] - ffP[1],
m[2] - ffP[2]};
522 Double_t mCHt0[7], mCHt1[7], mCHt2[7];
533 mCHt0[3] = ffC[6] - mV[6];
534 mCHt1[3] = ffC[7] - mV[7];
535 mCHt2[3] = ffC[8] - mV[8];
536 mCHt0[4] = ffC[10] - mV[10];
537 mCHt1[4] = ffC[11] - mV[11];
538 mCHt2[4] = ffC[12] - mV[12];
539 mCHt0[5] = ffC[15] - mV[15];
540 mCHt1[5] = ffC[16] - mV[16];
541 mCHt2[5] = ffC[17] - mV[17];
542 mCHt0[6] = ffC[21] - mV[21];
543 mCHt1[6] = ffC[22] - mV[22];
544 mCHt2[6] = ffC[23] - mV[23];
551 k0[
i] = mCHt0[
i] * mS[0] + mCHt1[
i] * mS[1] + mCHt2[
i] * mS[3];
552 k1[
i] = mCHt0[
i] * mS[1] + mCHt1[
i] * mS[2] + mCHt2[
i] * mS[4];
553 k2[
i] = mCHt0[
i] * mS[3] + mCHt1[
i] * mS[4] + mCHt2[
i] * mS[5];
558 if (iter < maxIter - 1) {
560 fVtxGuess[
i] = ffP[
i] + k0[
i] * zeta[0] + k1[
i] * zeta[1] + k2[
i] * zeta[2];
587 fP[
i] = ffP[
i] + k0[
i] * zeta[0] + k1[
i] * zeta[1] + k2[
i] * zeta[2];
591 for (
Int_t i = 0, k = 0;
i < 7; ++
i) {
592 for (
Int_t j = 0; j <=
i; ++j, ++k) {
593 fC[k] = ffC[k] - (k0[
i] * mCHt0[j] + k1[
i] * mCHt1[j] + k2[
i] * mCHt2[j]);
602 fChi2 += (mS[0] * zeta[0] + mS[1] * zeta[1] + mS[3] * zeta[2]) * zeta[0]
603 + (mS[1] * zeta[0] + mS[2] * zeta[1] + mS[4] * zeta[2]) * zeta[1]
604 + (mS[3] * zeta[0] + mS[4] * zeta[1] + mS[5] * zeta[2]) * zeta[2];
638 for (
Int_t iter = 0; iter < maxIter; iter++) {
642 const Double_t kCLight = 0.000299792458;
657 if (Daughter.
fC[35] > 0) {
661 m[
i] = Daughter.
fP[
i];
663 mV[
i] = Daughter.
fC[
i];
666 double massMf2 =
m[6] *
m[6] - (
m[3] *
m[3] +
m[4] *
m[4] +
m[5] *
m[5]);
667 double massRf2 =
fP[6] *
fP[6] - (
fP[3] *
fP[3] +
fP[4] *
fP[4] +
fP[5] *
fP[5]);
673 Double_t mSi[6] = {ffC[0] + mV[0], ffC[1] + mV[1], ffC[2] + mV[2],
674 ffC[3] + mV[3], ffC[4] + mV[4], ffC[5] + mV[5]};
676 mS[0] = mSi[2] * mSi[5] - mSi[4] * mSi[4];
677 mS[1] = mSi[3] * mSi[4] - mSi[1] * mSi[5];
678 mS[2] = mSi[0] * mSi[5] - mSi[3] * mSi[3];
679 mS[3] = mSi[1] * mSi[4] - mSi[2] * mSi[3];
680 mS[4] = mSi[1] * mSi[3] - mSi[0] * mSi[4];
681 mS[5] = mSi[0] * mSi[2] - mSi[1] * mSi[1];
683 Double_t s = (mSi[0] * mS[0] + mSi[1] * mS[1] + mSi[3] * mS[3]);
685 s = (s > 1.E-20) ? 1. / s : 0;
696 Double_t zeta[3] = {
m[0] - ffP[0],
m[1] - ffP[1],
m[2] - ffP[2]};
700 Double_t mCHt0[6], mCHt1[6], mCHt2[6];
711 mCHt0[3] = ffC[6] - mV[6];
712 mCHt1[3] = ffC[7] - mV[7];
713 mCHt2[3] = ffC[8] - mV[8];
714 mCHt0[4] = ffC[10] - mV[10];
715 mCHt1[4] = ffC[11] - mV[11];
716 mCHt2[4] = ffC[12] - mV[12];
717 mCHt0[5] = ffC[15] - mV[15];
718 mCHt1[5] = ffC[16] - mV[16];
719 mCHt2[5] = ffC[17] - mV[17];
726 k0[
i] = mCHt0[
i] * mS[0] + mCHt1[
i] * mS[1] + mCHt2[
i] * mS[3];
727 k1[
i] = mCHt0[
i] * mS[1] + mCHt1[
i] * mS[2] + mCHt2[
i] * mS[4];
728 k2[
i] = mCHt0[
i] * mS[3] + mCHt1[
i] * mS[4] + mCHt2[
i] * mS[5];
733 if (iter < maxIter - 1) {
735 fVtxGuess[
i] = ffP[
i] + k0[
i] * zeta[0] + k1[
i] * zeta[1] + k2[
i] * zeta[2];
741 Double_t mVHt0[6], mVHt1[6], mVHt2[6];
767 km0[
i] = mVHt0[
i] * mS[0] + mVHt1[
i] * mS[1] + mVHt2[
i] * mS[3];
768 km1[
i] = mVHt0[
i] * mS[1] + mVHt1[
i] * mS[2] + mVHt2[
i] * mS[4];
769 km2[
i] = mVHt0[
i] * mS[3] + mVHt1[
i] * mS[4] + mVHt2[
i] * mS[5];
775 mf[
i] = mf[
i] - km0[
i] * zeta[0] - km1[
i] * zeta[1] - km2[
i] * zeta[2];
777 Double_t energyMf =
TMath::Sqrt(massMf2 + (mf[3] * mf[3] + mf[4] * mf[4] + mf[5] * mf[5]));
780 for (
Int_t iC = 0; iC < 28; iC++)
788 hmf[3] = mf[3] / energyMf;
792 hmf[4] = mf[4] / energyMf;
796 hmf[5] = mf[5] / energyMf;
800 for (
Int_t i = 0, k = 0;
i < 6; ++
i) {
801 for (
Int_t j = 0; j <=
i; ++j, ++k) {
802 mVf[k] = mVf[k] - (km0[
i] * mVHt0[j] + km1[
i] * mVHt1[j] + km2[
i] * mVHt2[j]);
805 Double_t mVf24 = mVf[24], mVf25 = mVf[25], mVf26 = mVf[26];
806 mVf[21] = mVf[6] * hmf[3] + mVf[10] * hmf[4] + mVf[15] * hmf[5] + mVf[21] * hmf[6];
807 mVf[22] = mVf[7] * hmf[3] + mVf[11] * hmf[4] + mVf[16] * hmf[5] + mVf[22] * hmf[6];
808 mVf[23] = mVf[8] * hmf[3] + mVf[12] * hmf[4] + mVf[17] * hmf[5] + mVf[23] * hmf[6];
809 mVf[24] = mVf[9] * hmf[3] + mVf[13] * hmf[4] + mVf[18] * hmf[5] + mVf[24] * hmf[6];
810 mVf[25] = mVf[13] * hmf[3] + mVf[14] * hmf[4] + mVf[19] * hmf[5] + mVf[25] * hmf[6];
811 mVf[26] = mVf[18] * hmf[3] + mVf[19] * hmf[4] + mVf[20] * hmf[5] + mVf[26] * hmf[6];
812 mVf[27] = mVf[24] * hmf[3] + mVf[25] * hmf[4] + mVf[26] * hmf[5]
813 + (mVf24 * hmf[3] + mVf25 * hmf[4] + mVf26 * hmf[5] + mVf[27] * hmf[6])
821 Double_t mCCHt0[6], mCCHt1[6], mCCHt2[6];
847 krf0[
i] = mCCHt0[
i] * mS[0] + mCCHt1[
i] * mS[1] + mCCHt2[
i] * mS[3];
848 krf1[
i] = mCCHt0[
i] * mS[1] + mCCHt1[
i] * mS[2] + mCCHt2[
i] * mS[4];
849 krf2[
i] = mCCHt0[
i] * mS[3] + mCCHt1[
i] * mS[4] + mCCHt2[
i] * mS[5];
851 Double_t rf[7] = {ffP[0], ffP[1], ffP[2], ffP[3], ffP[4], ffP[5], ffP[6]};
854 rf[
i] = rf[
i] + krf0[
i] * zeta[0] + krf1[
i] * zeta[1] + krf2[
i] * zeta[2];
856 Double_t energyRf =
TMath::Sqrt(massRf2 + (rf[3] * rf[3] + rf[4] * rf[4] + rf[5] * rf[5]));
859 for (
Int_t iC = 0; iC < 28; iC++)
866 hrf[3] = rf[3] / energyRf;
870 hrf[4] = rf[4] / energyRf;
874 hrf[5] = rf[5] / energyRf;
878 for (
Int_t i = 0, k = 0;
i < 6; ++
i) {
879 for (
Int_t j = 0; j <=
i; ++j, ++k) {
880 mCf[k] = mCf[k] - (krf0[
i] * mCCHt0[j] + krf1[
i] * mCCHt1[j] + krf2[
i] * mCCHt2[j]);
883 Double_t mCf24 = mCf[24], mCf25 = mCf[25], mCf26 = mCf[26];
884 mCf[21] = mCf[6] * hrf[3] + mCf[10] * hrf[4] + mCf[15] * hrf[5] + mCf[21] * hrf[6];
885 mCf[22] = mCf[7] * hrf[3] + mCf[11] * hrf[4] + mCf[16] * hrf[5] + mCf[22] * hrf[6];
886 mCf[23] = mCf[8] * hrf[3] + mCf[12] * hrf[4] + mCf[17] * hrf[5] + mCf[23] * hrf[6];
887 mCf[24] = mCf[9] * hrf[3] + mCf[13] * hrf[4] + mCf[18] * hrf[5] + mCf[24] * hrf[6];
888 mCf[25] = mCf[13] * hrf[3] + mCf[14] * hrf[4] + mCf[19] * hrf[5] + mCf[25] * hrf[6];
889 mCf[26] = mCf[18] * hrf[3] + mCf[19] * hrf[4] + mCf[20] * hrf[5] + mCf[26] * hrf[6];
890 mCf[27] = mCf[24] * hrf[3] + mCf[25] * hrf[4] + mCf[26] * hrf[5]
891 + (mCf24 * hrf[3] + mCf25 * hrf[4] + mCf26 * hrf[5] + mCf[27] * hrf[6])
894 for (
Int_t iC = 21; iC < 28; iC++) {
899 fP[6] = energyRf + energyMf;
908 for (
int i = 0;
i < 3;
i++) {
909 for (
int j = 0; j < 3; j++) {
910 mDvp[
i][j] = km0[
i + 3] * mCCHt0[j] + km1[
i + 3] * mCCHt1[j] + km2[
i + 3] * mCCHt2[j];
911 mDpv[
i][j] = km0[
i] * mCCHt0[j + 3] + km1[
i] * mCCHt1[j + 3] + km2[
i] * mCCHt2[j + 3];
912 mDpp[
i][j] = km0[
i + 3] * mCCHt0[j + 3] + km1[
i + 3] * mCCHt1[j + 3] + km2[
i + 3] * mCCHt2[j + 3];
916 mDe[0] = hmf[3] * mDvp[0][0] + hmf[4] * mDvp[1][0] + hmf[5] * mDvp[2][0];
917 mDe[1] = hmf[3] * mDvp[0][1] + hmf[4] * mDvp[1][1] + hmf[5] * mDvp[2][1];
918 mDe[2] = hmf[3] * mDvp[0][2] + hmf[4] * mDvp[1][2] + hmf[5] * mDvp[2][2];
919 mDe[3] = hmf[3] * mDpp[0][0] + hmf[4] * mDpp[1][0] + hmf[5] * mDpp[2][0];
920 mDe[4] = hmf[3] * mDpp[0][1] + hmf[4] * mDpp[1][1] + hmf[5] * mDpp[2][1];
921 mDe[5] = hmf[3] * mDpp[0][2] + hmf[4] * mDpp[1][2] + hmf[5] * mDpp[2][2];
922 mDe[6] = 2 * (mDe[3] * hrf[3] + mDe[4] * hrf[4] + mDe[5] * hrf[5]);
954 fP[
i] = ffP[
i] + k0[
i] * zeta[0] + k1[
i] * zeta[1] + k2[
i] * zeta[2];
958 for (
Int_t i = 0, k = 0;
i < 6; ++
i) {
959 for (
Int_t j = 0; j <=
i; ++j, ++k) {
960 fC[k] = ffC[k] - (k0[
i] * mCHt0[j] + k1[
i] * mCHt1[j] + k2[
i] * mCHt2[j]);
964 for (
int i = 21;
i < 28;
i++)
972 fChi2 += (mS[0] * zeta[0] + mS[1] * zeta[1] + mS[3] * zeta[2]) * zeta[0]
973 + (mS[1] * zeta[0] + mS[2] * zeta[1] + mS[4] * zeta[2]) * zeta[1]
974 + (mS[3] * zeta[0] + mS[4] * zeta[1] + mS[5] * zeta[2]) * zeta[2];
1009 for (
Int_t iter = 0; iter < maxIter; iter++) {
1013 const Double_t kCLight = 0.000299792458;
1027 if (Daughter.
fC[35] > 0) {
1031 m[
i] = Daughter.
fP[
i];
1033 mV[
i] = Daughter.
fC[
i];
1039 Double_t mSi[6] = {ffC[0] + mV[0], ffC[1] + mV[1], ffC[2] + mV[2],
1040 ffC[3] + mV[3], ffC[4] + mV[4], ffC[5] + mV[5]};
1042 mS[0] = mSi[2] * mSi[5] - mSi[4] * mSi[4];
1043 mS[1] = mSi[3] * mSi[4] - mSi[1] * mSi[5];
1044 mS[2] = mSi[0] * mSi[5] - mSi[3] * mSi[3];
1045 mS[3] = mSi[1] * mSi[4] - mSi[2] * mSi[3];
1046 mS[4] = mSi[1] * mSi[3] - mSi[0] * mSi[4];
1047 mS[5] = mSi[0] * mSi[2] - mSi[1] * mSi[1];
1049 Double_t s = (mSi[0] * mS[0] + mSi[1] * mS[1] + mSi[3] * mS[3]);
1051 s = (s > 1.E-20) ? 1. / s : 0;
1061 Double_t zeta[3] = {
m[0] - ffP[0],
m[1] - ffP[1],
m[2] - ffP[2]};
1065 Double_t mCHt0[7], mCHt1[7], mCHt2[7];
1094 k0[
i] = mCHt0[
i] * mS[0] + mCHt1[
i] * mS[1] + mCHt2[
i] * mS[3];
1095 k1[
i] = mCHt0[
i] * mS[1] + mCHt1[
i] * mS[2] + mCHt2[
i] * mS[4];
1096 k2[
i] = mCHt0[
i] * mS[3] + mCHt1[
i] * mS[4] + mCHt2[
i] * mS[5];
1101 if (iter < maxIter - 1) {
1103 fVtxGuess[
i] = ffP[
i] + k0[
i] * zeta[0] + k1[
i] * zeta[1] + k2[
i] * zeta[2];
1111 Double_t mVHt0[7], mVHt1[7], mVHt2[7];
1140 km0[
i] = mVHt0[
i] * mS[0] + mVHt1[
i] * mS[1] + mVHt2[
i] * mS[3];
1141 km1[
i] = mVHt0[
i] * mS[1] + mVHt1[
i] * mS[2] + mVHt2[
i] * mS[4];
1142 km2[
i] = mVHt0[
i] * mS[3] + mVHt1[
i] * mS[4] + mVHt2[
i] * mS[5];
1146 ffP[
i] = ffP[
i] + k0[
i] * zeta[0] + k1[
i] * zeta[1] + k2[
i] * zeta[2];
1149 m[
i] =
m[
i] - km0[
i] * zeta[0] - km1[
i] * zeta[1] - km2[
i] * zeta[2];
1151 for (
Int_t i = 0, k = 0;
i < 7; ++
i) {
1152 for (
Int_t j = 0; j <=
i; ++j, ++k) {
1153 ffC[k] = ffC[k] - (k0[
i] * mCHt0[j] + k1[
i] * mCHt1[j] + k2[
i] * mCHt2[j]);
1157 for (
Int_t i = 0, k = 0;
i < 7; ++
i) {
1158 for (
Int_t j = 0; j <=
i; ++j, ++k) {
1159 mV[k] = mV[k] - (km0[
i] * mVHt0[j] + km1[
i] * mVHt1[j] + km2[
i] * mVHt2[j]);
1166 for (
Int_t j = 0; j < 7; ++j) {
1167 mDf[
i][j] = (km0[
i] * mCHt0[j] + km1[
i] * mCHt1[j] + km2[
i] * mCHt2[j]);
1172 for (
Int_t iPar1 = 0; iPar1 < 7; iPar1++) {
1173 for (
Int_t iPar2 = 0; iPar2 < 7; iPar2++) {
1174 mJ1[iPar1][iPar2] = 0;
1175 mJ2[iPar1][iPar2] = 0;
1179 Double_t mMassParticle = ffP[6] * ffP[6] - (ffP[3] * ffP[3] + ffP[4] * ffP[4] + ffP[5] * ffP[5]);
1180 Double_t mMassDaughter =
m[6] *
m[6] - (
m[3] *
m[3] +
m[4] *
m[4] +
m[5] *
m[5]);
1181 if (mMassParticle > 0)
1183 if (mMassDaughter > 0)
1199 for (
Int_t j = 0; j < 7; j++) {
1201 for (
Int_t k = 0; k < 7; k++) {
1202 mDJ[
i][j] += mDf[
i][k] * mJ1[j][k];
1208 for (
Int_t j = 0; j < 7; ++j) {
1210 for (
Int_t l = 0; l < 7; l++) {
1211 mDf[
i][j] += mJ2[
i][l] * mDJ[l][j];
1234 ffC[6] += mDf[3][0];
1235 ffC[7] += mDf[3][1];
1236 ffC[8] += mDf[3][2];
1237 ffC[10] += mDf[4][0];
1238 ffC[11] += mDf[4][1];
1239 ffC[12] += mDf[4][2];
1240 ffC[15] += mDf[5][0];
1241 ffC[16] += mDf[5][1];
1242 ffC[17] += mDf[5][2];
1243 ffC[21] += mDf[6][0];
1244 ffC[22] += mDf[6][1];
1245 ffC[23] += mDf[6][2];
1247 ffC[9] += mDf[3][3] + mDf[3][3];
1248 ffC[13] += mDf[4][3] + mDf[3][4];
1249 ffC[14] += mDf[4][4] + mDf[4][4];
1250 ffC[18] += mDf[5][3] + mDf[3][5];
1251 ffC[19] += mDf[5][4] + mDf[4][5];
1252 ffC[20] += mDf[5][5] + mDf[5][5];
1253 ffC[24] += mDf[6][3] + mDf[3][6];
1254 ffC[25] += mDf[6][4] + mDf[4][6];
1255 ffC[26] += mDf[6][5] + mDf[5][6];
1256 ffC[27] += mDf[6][6] + mDf[6][6];
1265 for (
Int_t i = 0, k = 0;
i < 7; ++
i) {
1266 for (
Int_t j = 0; j <=
i; ++j, ++k) {
1275 fChi2 += (mS[0] * zeta[0] + mS[1] * zeta[1] + mS[3] * zeta[2]) * zeta[0]
1276 + (mS[1] * zeta[0] + mS[2] * zeta[1] + mS[4] * zeta[2]) * zeta[1]
1277 + (mS[3] * zeta[0] + mS[4] * zeta[1] + mS[5] * zeta[2]) * zeta[2];
1296 fC[28] =
fC[29] =
fC[30] =
fC[31] =
fC[32] =
fC[33] =
fC[34] = 0;
1308 mB[0][0] =
fC[6] * mAi[0] +
fC[7] * mAi[1] +
fC[8] * mAi[3];
1309 mB[0][1] =
fC[6] * mAi[1] +
fC[7] * mAi[2] +
fC[8] * mAi[4];
1310 mB[0][2] =
fC[6] * mAi[3] +
fC[7] * mAi[4] +
fC[8] * mAi[5];
1312 mB[1][0] =
fC[10] * mAi[0] +
fC[11] * mAi[1] +
fC[12] * mAi[3];
1313 mB[1][1] =
fC[10] * mAi[1] +
fC[11] * mAi[2] +
fC[12] * mAi[4];
1314 mB[1][2] =
fC[10] * mAi[3] +
fC[11] * mAi[4] +
fC[12] * mAi[5];
1316 mB[2][0] =
fC[15] * mAi[0] +
fC[16] * mAi[1] +
fC[17] * mAi[3];
1317 mB[2][1] =
fC[15] * mAi[1] +
fC[16] * mAi[2] +
fC[17] * mAi[4];
1318 mB[2][2] =
fC[15] * mAi[3] +
fC[16] * mAi[4] +
fC[17] * mAi[5];
1320 mB[3][0] =
fC[21] * mAi[0] +
fC[22] * mAi[1] +
fC[23] * mAi[3];
1321 mB[3][1] =
fC[21] * mAi[1] +
fC[22] * mAi[2] +
fC[23] * mAi[4];
1322 mB[3][2] =
fC[21] * mAi[3] +
fC[22] * mAi[4] +
fC[23] * mAi[5];
1324 mB[4][0] =
fC[28] * mAi[0] +
fC[29] * mAi[1] +
fC[30] * mAi[3];
1325 mB[4][1] =
fC[28] * mAi[1] +
fC[29] * mAi[2] +
fC[30] * mAi[4];
1326 mB[4][2] =
fC[28] * mAi[3] +
fC[29] * mAi[4] +
fC[30] * mAi[5];
1331 Double_t mAVi[6] = {
fC[0] - mV[0],
fC[1] - mV[1],
fC[2] - mV[2],
fC[3] - mV[3],
fC[4] - mV[4],
fC[5] - mV[5]};
1335 Double_t dChi2 = (+(mAVi[0] * z[0] + mAVi[1] * z[1] + mAVi[3] * z[2]) * z[0]
1336 + (mAVi[1] * z[0] + mAVi[2] * z[1] + mAVi[4] * z[2]) * z[1]
1337 + (mAVi[3] * z[0] + mAVi[4] * z[1] + mAVi[5] * z[2]) * z[2]);
1350 fP[3] += mB[0][0] * z[0] + mB[0][1] * z[1] + mB[0][2] * z[2];
1351 fP[4] += mB[1][0] * z[0] + mB[1][1] * z[1] + mB[1][2] * z[2];
1352 fP[5] += mB[2][0] * z[0] + mB[2][1] * z[1] + mB[2][2] * z[2];
1353 fP[6] += mB[3][0] * z[0] + mB[3][1] * z[1] + mB[3][2] * z[2];
1354 fP[7] += mB[4][0] * z[0] + mB[4][1] * z[1] + mB[4][2] * z[2];
1365 d0 = mB[0][0] * mV[0] + mB[0][1] * mV[1] + mB[0][2] * mV[3] -
fC[6];
1366 d1 = mB[0][0] * mV[1] + mB[0][1] * mV[2] + mB[0][2] * mV[4] -
fC[7];
1367 d2 = mB[0][0] * mV[3] + mB[0][1] * mV[4] + mB[0][2] * mV[5] -
fC[8];
1372 fC[9] += d0 * mB[0][0] + d1 * mB[0][1] + d2 * mB[0][2];
1374 d0 = mB[1][0] * mV[0] + mB[1][1] * mV[1] + mB[1][2] * mV[3] -
fC[10];
1375 d1 = mB[1][0] * mV[1] + mB[1][1] * mV[2] + mB[1][2] * mV[4] -
fC[11];
1376 d2 = mB[1][0] * mV[3] + mB[1][1] * mV[4] + mB[1][2] * mV[5] -
fC[12];
1381 fC[13] += d0 * mB[0][0] + d1 * mB[0][1] + d2 * mB[0][2];
1382 fC[14] += d0 * mB[1][0] + d1 * mB[1][1] + d2 * mB[1][2];
1384 d0 = mB[2][0] * mV[0] + mB[2][1] * mV[1] + mB[2][2] * mV[3] -
fC[15];
1385 d1 = mB[2][0] * mV[1] + mB[2][1] * mV[2] + mB[2][2] * mV[4] -
fC[16];
1386 d2 = mB[2][0] * mV[3] + mB[2][1] * mV[4] + mB[2][2] * mV[5] -
fC[17];
1391 fC[18] += d0 * mB[0][0] + d1 * mB[0][1] + d2 * mB[0][2];
1392 fC[19] += d0 * mB[1][0] + d1 * mB[1][1] + d2 * mB[1][2];
1393 fC[20] += d0 * mB[2][0] + d1 * mB[2][1] + d2 * mB[2][2];
1395 d0 = mB[3][0] * mV[0] + mB[3][1] * mV[1] + mB[3][2] * mV[3] -
fC[21];
1396 d1 = mB[3][0] * mV[1] + mB[3][1] * mV[2] + mB[3][2] * mV[4] -
fC[22];
1397 d2 = mB[3][0] * mV[3] + mB[3][1] * mV[4] + mB[3][2] * mV[5] -
fC[23];
1402 fC[24] += d0 * mB[0][0] + d1 * mB[0][1] + d2 * mB[0][2];
1403 fC[25] += d0 * mB[1][0] + d1 * mB[1][1] + d2 * mB[1][2];
1404 fC[26] += d0 * mB[2][0] + d1 * mB[2][1] + d2 * mB[2][2];
1405 fC[27] += d0 * mB[3][0] + d1 * mB[3][1] + d2 * mB[3][2];
1407 d0 = mB[4][0] * mV[0] + mB[4][1] * mV[1] + mB[4][2] * mV[3] -
fC[28];
1408 d1 = mB[4][0] * mV[1] + mB[4][1] * mV[2] + mB[4][2] * mV[4] -
fC[29];
1409 d2 = mB[4][0] * mV[3] + mB[4][1] * mV[4] + mB[4][2] * mV[5] -
fC[30];
1414 fC[31] += d0 * mB[0][0] + d1 * mB[0][1] + d2 * mB[0][2];
1415 fC[32] += d0 * mB[1][0] + d1 * mB[1][1] + d2 * mB[1][2];
1416 fC[33] += d0 * mB[2][0] + d1 * mB[2][1] + d2 * mB[2][2];
1417 fC[34] += d0 * mB[3][0] + d1 * mB[3][1] + d2 * mB[3][2];
1418 fC[35] += d0 * mB[4][0] + d1 * mB[4][1] + d2 * mB[4][2];
1435 const Double_t energy2 = mP[6] * mP[6], p2 = mP[3] * mP[3] + mP[4] * mP[4] + mP[5] * mP[5], mass2 = mass * mass;
1437 const Double_t a = energy2 - p2 + 2. * mass2;
1438 const Double_t b = -2. * (energy2 + p2);
1439 const Double_t c = energy2 - p2 - mass2;
1445 Double_t d = 4. * energy2 * p2 - mass2 * (energy2 - p2 - 2. * mass2);
1447 lambda = (energy2 + p2 -
sqrt(d)) / a;
1453 for (iIter = 0; iIter < 100; iIter++) {
1454 Double_t lambda2 = lambda * lambda;
1455 Double_t lambda4 = lambda2 * lambda2;
1459 Double_t f = -mass2 * lambda4 + a * lambda2 + b * lambda + c;
1460 Double_t df = -4. * mass2 * lambda2 * lambda + 2. * a * lambda + b;
1468 const Double_t lpi = 1. / (1. + lambda);
1469 const Double_t lmi = 1. / (1. - lambda);
1473 Double_t lambda2 = lambda * lambda;
1475 Double_t dfl = -4. * mass2 * lambda2 * lambda + 2. * a * lambda + b;
1477 dfx[0] = -2. * (1. + lambda) * (1. + lambda) * mP[3];
1478 dfx[1] = -2. * (1. + lambda) * (1. + lambda) * mP[4];
1479 dfx[2] = -2. * (1. + lambda) * (1. + lambda) * mP[5];
1480 dfx[3] = 2. * (1. - lambda) * (1. - lambda) * mP[6];
1483 for (
int i = 0;
i < 4;
i++)
1484 dlx[
i] = -dfx[
i] / dfl;
1487 Double_t dxx[4] = {mP[3] * lm2i, mP[4] * lm2i, mP[5] * lm2i, -mP[6] * lp2i};
1490 for (
Int_t j = 0; j < 7; j++)
1497 for (
Int_t j = 3; j < 7; j++)
1498 mJ[
i][j] = dlx[j - 3] * dxx[
i - 3];
1507 for (
Int_t j = 0; j < 7; j++) {
1509 for (
Int_t k = 0; k < 7; k++) {
1510 mCJ[
i][j] += mC[
IJ(
i, k)] * mJ[j][k];
1516 for (
Int_t j = 0; j <=
i; ++j) {
1518 for (
Int_t l = 0; l < 7; l++) {
1519 mC[
IJ(
i, j)] += mJ[
i][l] * mCJ[l][j];
1924 const Double_t kCLight = 0.000299792458;
1928 Double_t s = 0, ds = 0, s1 = 0, ds1 = 0;
1937 Double_t p21 = (px1 * px1 + py1 * py1);
1945 Double_t a = (px * py1 - py * px1);
1946 Double_t b = (px * px1 + py * py1);
1948 Double_t ldx = bq * bq1 * dx - bq1 * py + bq * py1;
1949 Double_t ldy = bq * bq1 * dy + bq1 * px - bq * px1;
1950 Double_t l2 = ldx * ldx + ldy * ldy;
1952 Double_t cS = bq1 * p2 + bq * bq1 * (dy * px - dx * py) - bq * b;
1953 Double_t cS1 = bq * p21 - bq * bq1 * (dy * px1 - dx * py1) - bq1 * b;
1955 Double_t ca = bq * bq * bq1 * d2 + 2 * (cS + bq * bq * (py1 * dx - px1 * dy));
1956 Double_t ca1 = bq * bq1 * bq1 * d2 + 2 * (cS1 - bq1 * bq1 * (py * dx - px * dy));
1958 Double_t sa = 4 * l2 * p2 - ca * ca;
1959 Double_t sa1 = 4 * l2 * p21 - ca1 * ca1;
1967 s =
TMath::ATan2(bq * (bq1 * (dx * px + dy * py) + a), cS) / bq;
1970 s = ((dx * px + dy * py) + (py * px1 - px * py1) / bq1) / p2;
1971 ds = s * s - (d2 - 2 * (px1 * dy - py1 * dx) / bq1) / p2;
1978 s1 =
TMath::ATan2(-bq1 * (bq * (dx * px1 + dy * py1) + a), cS1) / bq1;
1981 s1 = (-(dx * px1 + dy * py1) + (py * px1 - px * py1) / bq) / p21;
1982 ds1 = s1 * s1 - (d2 + 2 * (px * dy - py * dx) / bq) / p21;
1988 Double_t ss[2], ss1[2], g[2][5], g1[2][5];
2004 sB = (1. - bs * kOvSqr6) * (1. + bs * kOvSqr6) * ss[
i];
2007 g[
i][0] =
fP[0] + sB * px + cB * py;
2008 g[
i][1] =
fP[1] - cB * px + sB * py;
2009 g[
i][2] =
fP[2] + ss[
i] * pz;
2010 g[
i][3] = +c * px + sss * py;
2011 g[
i][4] = -sss * px + c * py;
2021 sB = (1. - bs * kOvSqr6) * (1. + bs * kOvSqr6) * ss1[
i];
2025 g1[
i][0] = p.
fP[0] + sB * px1 + cB * py1;
2026 g1[
i][1] = p.
fP[1] - cB * px1 + sB * py1;
2027 g1[
i][2] = p.
fP[2] + ss1[
i] * pz1;
2028 g1[
i][3] = +c * px1 + sss * py1;
2029 g1[
i][4] = -sss * px1 + c * py1;
2035 for (
Int_t j = 0; j < 2; j++) {
2036 for (
Int_t j1 = 0; j1 < 2; j1++) {
2040 Double_t d = xx * xx + yy * yy + zz * zz;
2052 Double_t x = g[
i][0], y = g[
i][1], z = g[
i][2], ppx = g[
i][3], ppy = g[
i][4];
2053 Double_t x1 = g1[i1][0], y1 = g1[i1][1], z1 = g1[i1][2], ppx1 = g1[i1][3], ppy1 = g1[i1][4];
2057 Double_t a = ppx * ppx1 + ppy * ppy1 + pz * pz1;
2058 Double_t b = dx * ppx1 + dy * ppy1 + dz * pz1;
2059 Double_t c = dx * ppx + dy * ppy + dz * pz;
2060 Double_t pp2 = ppx * ppx + ppy * ppy + pz * pz;
2061 Double_t pp21 = ppx1 * ppx1 + ppy1 * ppy1 + pz1 * pz1;
2064 DS += (a * b - pp21 * c) / det;
2065 DS1 += (a * c - pp2 * b) / det;
2081 const Double_t kCLight = 0.000299792458;
2085 Double_t s = 0, ds = 0, s1 = 0, ds1 = 0;
2094 Double_t p21 = (px1 * px1 + py1 * py1);
2102 Double_t a = (px * py1 - py * px1);
2103 Double_t b = (px * px1 + py * py1);
2105 Double_t ldx = bq * bq1 * dx - bq1 * py + bq * py1;
2106 Double_t ldy = bq * bq1 * dy + bq1 * px - bq * px1;
2107 Double_t l2 = ldx * ldx + ldy * ldy;
2109 Double_t cS = bq1 * p2 + bq * bq1 * (dy * px - dx * py) - bq * b;
2110 Double_t cS1 = bq * p21 - bq * bq1 * (dy * px1 - dx * py1) - bq1 * b;
2112 Double_t ca = bq * bq * bq1 * d2 + 2 * (cS + bq * bq * (py1 * dx - px1 * dy));
2113 Double_t ca1 = bq * bq1 * bq1 * d2 + 2 * (cS1 - bq1 * bq1 * (py * dx - px * dy));
2115 Double_t sa = 4 * l2 * p2 - ca * ca;
2116 Double_t sa1 = 4 * l2 * p21 - ca1 * ca1;
2124 s =
TMath::ATan2(bq * (bq1 * (dx * px + dy * py) + a), cS) / bq;
2127 s = ((dx * px + dy * py) + (py * px1 - px * py1) / bq1) / p2;
2128 ds = s * s - (d2 - 2 * (px1 * dy - py1 * dx) / bq1) / p2;
2135 s1 =
TMath::ATan2(-bq1 * (bq * (dx * px1 + dy * py1) + a), cS1) / bq1;
2138 s1 = (-(dx * px1 + dy * py1) + (py * px1 - px * py1) / bq) / p21;
2139 ds1 = s1 * s1 - (d2 + 2 * (px * dy - py * dx) / bq) / p21;
2145 Double_t ss[2], ss1[2], g[2][5], g1[2][5];
2161 sB = (1. - bs * kOvSqr6) * (1. + bs * kOvSqr6) * ss[
i];
2164 g[
i][0] =
fP[0] + sB * px + cB * py;
2165 g[
i][1] = -
fP[2] - cB * px + sB * py;
2166 g[
i][2] =
fP[1] + ss[
i] * pz;
2167 g[
i][3] = +c * px + sss * py;
2168 g[
i][4] = -sss * px + c * py;
2178 sB = (1. - bs * kOvSqr6) * (1. + bs * kOvSqr6) * ss1[
i];
2182 g1[
i][0] = p.
fP[0] + sB * px1 + cB * py1;
2183 g1[
i][1] = -p.
fP[2] - cB * px1 + sB * py1;
2184 g1[
i][2] = p.
fP[1] + ss1[
i] * pz1;
2185 g1[
i][3] = +c * px1 + sss * py1;
2186 g1[
i][4] = -sss * px1 + c * py1;
2192 for (
Int_t j = 0; j < 2; j++) {
2193 for (
Int_t j1 = 0; j1 < 2; j1++) {
2197 Double_t d = xx * xx + yy * yy + zz * zz;
2216 Double_t ssx = 0, ssy = 0, ssz = 0, ssyy = 0, ssyz = 0, ssyyy = 0;
2217 Double_t dssx = 0, dssy = 0, dssz = 0, dssyy = 0, dssyz = 0, dssyyy = 0;
2218 Double_t ddssx = 0, ddssy = 0, ddssz = 0, ddssyy = 0, ddssyz = 0, ddssyyy = 0;
2219 Double_t Kssx = 0, Kssy = 0, Kssz = 0, Kssyy = 0, Kssyz = 0, Kssyyy = 0;
2221 const Double_t kCLight = 0.000299792458;
2235 p2[0] = p.
fP[0] + p.
fP[3] * dS;
2236 p2[1] = p.
fP[1] + p.
fP[4] * dS;
2237 p2[2] = p.
fP[2] + p.
fP[5] * dS;
2239 p1[0] = 0.5 * (p0[0] + p2[0]);
2240 p1[1] = 0.5 * (p0[1] + p2[1]);
2241 p1[2] = 0.5 * (p0[2] + p2[2]);
2249 Double_t ssy1 = (7 * fld[0][1] + 6 * fld[1][1] - fld[2][1]) * c * dS * dS / 96.;
2250 Double_t ssy2 = (fld[0][1] + 2 * fld[1][1]) * c * dS * dS / 6.;
2252 p1[0] -= ssy1 * p.
fP[5];
2253 p1[2] += ssy1 * p.
fP[3];
2254 p2[0] -= ssy2 * p.
fP[5];
2255 p2[2] += ssy2 * p.
fP[3];
2262 Kssx = c * (fld[0][0] + 2 * fld[1][0]) / 6.;
2263 Kssy = c * (fld[0][1] + 2 * fld[1][1]) / 6.;
2264 Kssz = c * (fld[0][2] + 2 * fld[1][2]) / 6.;
2267 Double_t cc2[3][3] = {{38, 8, -4}, {148, 208, -20}, {3, 36, 3}};
2268 for (
Int_t n = 0; n < 3; n++)
2270 Kssyz += cc2[n][
m] * fld[n][1] * fld[
m][2];
2272 Kssyz *= c * c / 2520.;
2274 Kssyy = (fld[0][1] * (38 * fld[0][1] + 156 * fld[1][1] - fld[2][1]) + fld[1][1] * (208 * fld[1][1] + 16 * fld[2][1])
2275 + fld[2][1] * (3 * fld[2][1]))
2278 * (fld[0][1] * (85 * fld[0][1] + 526 * fld[1][1] - 7 * fld[2][1])
2279 + fld[1][1] * (1376 * fld[1][1] + 84 * fld[2][1]) + fld[2][1] * (19 * fld[2][1]))
2280 + fld[1][1] * (fld[1][1] * (1376 * fld[1][1] + 256 * fld[2][1]) + fld[2][1] * (62 * fld[2][1]))
2281 + fld[2][1] * fld[2][1] * (3 * fld[2][1]))
2282 * c * c * c / 90720.;
2284 ssx = Kssx * dS * dS;
2285 ssy = Kssy * dS * dS;
2286 ssz = Kssz * dS * dS;
2287 ssyz = Kssyz * dS * dS * dS;
2288 ssyy = Kssyy * dS * dS * dS;
2289 ssyyy = Kssyyy * dS * dS * dS * dS;
2291 dssx = 2. * Kssx * dS;
2292 dssy = 2. * Kssy * dS;
2293 dssz = 2. * Kssz * dS;
2294 dssyz = 3. * Kssyz * dS * dS;
2295 dssyy = 3. * Kssyy * dS * dS;
2296 dssyyy = 4. * Kssyyy * dS * dS * dS;
2301 ddssyz = 2. * 3. * Kssyz * dS;
2302 ddssyy = 2. * 3. * Kssyy * dS;
2303 ddssyyy = 3. * 4. * Kssyyy * dS * dS;
2306 for (
Int_t iJ = 0; iJ < 3; iJ++)
2307 for (
Int_t jJ = 0; jJ < 3; jJ++)
2310 mJ[0][0] = dS - ssyy;
2312 mJ[0][2] = ssyyy - ssy;
2315 mJ[1][2] = ssx + ssyz;
2316 mJ[2][0] = ssy - ssyyy;
2318 mJ[2][2] = dS - ssyy;
2320 x[0] = p.
fP[0] + mJ[0][0] * p.
fP[3] + mJ[0][1] * p.
fP[4] + mJ[0][2] * p.
fP[5];
2321 x[1] = p.
fP[1] + mJ[1][0] * p.
fP[3] + mJ[1][1] * p.
fP[4] + mJ[1][2] * p.
fP[5];
2322 x[2] = p.
fP[2] + mJ[2][0] * p.
fP[3] + mJ[2][1] * p.
fP[4] + mJ[2][2] * p.
fP[5];
2324 mJ[0][0] = 1 - dssyy;
2326 mJ[0][2] = dssyyy - dssy;
2329 mJ[1][2] = dssx + dssyz;
2330 mJ[2][0] = dssy - dssyyy;
2332 mJ[2][2] = 1 - dssyy;
2334 dx[0] = p.
fP[0] + mJ[0][0] * p.
fP[3] + mJ[0][1] * p.
fP[4] + mJ[0][2] * p.
fP[5];
2335 dx[1] = p.
fP[1] + mJ[1][0] * p.
fP[3] + mJ[1][1] * p.
fP[4] + mJ[1][2] * p.
fP[5];
2336 dx[2] = p.
fP[2] + mJ[2][0] * p.
fP[3] + mJ[2][1] * p.
fP[4] + mJ[2][2] * p.
fP[5];
2340 mJ[0][2] = ddssyyy - ddssy;
2343 mJ[1][2] = ddssx + ddssyz;
2344 mJ[2][0] = ddssy - ddssyyy;
2348 ddx[0] = p.
fP[0] + mJ[0][0] * p.
fP[3] + mJ[0][1] * p.
fP[4] + mJ[0][2] * p.
fP[5];
2349 ddx[1] = p.
fP[1] + mJ[1][0] * p.
fP[3] + mJ[1][1] * p.
fP[4] + mJ[1][2] * p.
fP[5];
2350 ddx[2] = p.
fP[2] + mJ[2][0] * p.
fP[3] + mJ[2][1] * p.
fP[4] + mJ[2][2] * p.
fP[5];
2479 const Double_t kCLight = 0.000299792458;
2487 Double_t sx = 0, sy = 0, sz = 0, syy = 0, syz = 0, syyy = 0, ssx = 0, ssy = 0, ssz = 0, ssyy = 0, ssyz = 0,
2501 p2[0] =
fP[0] + px * dS;
2502 p2[1] =
fP[1] + py * dS;
2503 p2[2] =
fP[2] + pz * dS;
2505 p1[0] = 0.5 * (p0[0] + p2[0]);
2506 p1[1] = 0.5 * (p0[1] + p2[1]);
2507 p1[2] = 0.5 * (p0[2] + p2[2]);
2515 Double_t ssy1 = (7 * fld[0][1] + 6 * fld[1][1] - fld[2][1]) * c * dS * dS / 96.;
2516 Double_t ssy2 = (fld[0][1] + 2 * fld[1][1]) * c * dS * dS / 6.;
2528 sx = c * (fld[0][0] + 4 * fld[1][0] + fld[2][0]) * dS / 6.;
2529 sy = c * (fld[0][1] + 4 * fld[1][1] + fld[2][1]) * dS / 6.;
2530 sz = c * (fld[0][2] + 4 * fld[1][2] + fld[2][2]) * dS / 6.;
2532 ssx = c * (fld[0][0] + 2 * fld[1][0]) * dS * dS / 6.;
2533 ssy = c * (fld[0][1] + 2 * fld[1][1]) * dS * dS / 6.;
2534 ssz = c * (fld[0][2] + 2 * fld[1][2]) * dS * dS / 6.;
2536 Double_t c2[3][3] = {{5, -4, -1}, {44, 80, -4}, {11, 44, 5}};
2537 Double_t cc2[3][3] = {{38, 8, -4}, {148, 208, -20}, {3, 36, 3}};
2538 for (
Int_t n = 0; n < 3; n++)
2540 syz += c2[n][
m] * fld[n][1] * fld[
m][2];
2541 ssyz += cc2[n][
m] * fld[n][1] * fld[
m][2];
2544 syz *= c * c * dS * dS / 360.;
2545 ssyz *= c * c * dS * dS * dS / 2520.;
2547 syy = c * (fld[0][1] + 4 * fld[1][1] + fld[2][1]) * dS;
2548 syyy = syy * syy * syy / 1296;
2549 syy = syy * syy / 72;
2551 ssyy = (fld[0][1] * (38 * fld[0][1] + 156 * fld[1][1] - fld[2][1])
2552 + fld[1][1] * (208 * fld[1][1] + 16 * fld[2][1]) + fld[2][1] * (3 * fld[2][1]))
2553 * dS * dS * dS * c * c / 2520.;
2555 * (fld[0][1] * (85 * fld[0][1] + 526 * fld[1][1] - 7 * fld[2][1])
2556 + fld[1][1] * (1376 * fld[1][1] + 84 * fld[2][1]) + fld[2][1] * (19 * fld[2][1]))
2557 + fld[1][1] * (fld[1][1] * (1376 * fld[1][1] + 256 * fld[2][1]) + fld[2][1] * (62 * fld[2][1]))
2558 + fld[2][1] * fld[2][1] * (3 * fld[2][1]))
2559 * dS * dS * dS * dS * c * c * c / 90720.;
2564 for (
Int_t j = 0; j < 8; j++)
2570 mJ[0][3] = dS - ssyy;
2572 mJ[0][5] = ssyyy - ssy;
2578 mJ[1][5] = ssx + ssyz;
2582 mJ[2][3] = ssy - ssyyy;
2584 mJ[2][5] = dS - ssyy;
2591 mJ[3][5] = syyy - sy;
2597 mJ[4][5] = sx + syz;
2601 mJ[5][3] = sy - syyy;
2604 mJ[6][6] = mJ[7][7] = 1;
2606 P[0] =
fP[0] + mJ[0][3] * px + mJ[0][4] * py + mJ[0][5] * pz;
2607 P[1] =
fP[1] + mJ[1][3] * px + mJ[1][4] * py + mJ[1][5] * pz;
2608 P[2] =
fP[2] + mJ[2][3] * px + mJ[2][4] * py + mJ[2][5] * pz;
2609 P[3] = mJ[3][3] * px + mJ[3][4] * py + mJ[3][5] * pz;
2610 P[4] = mJ[4][3] * px + mJ[4][4] * py + mJ[4][5] * pz;
2611 P[5] = mJ[5][3] * px + mJ[5][4] * py + mJ[5][5] * pz;
2622 const Double_t kCLight = 0.000299792458;
2623 b = b *
fQ * kCLight;
2632 sB = (1. - bs * kOvSqr6) * (1. + bs * kOvSqr6) * t;
2640 p[0] =
fP[0] + sB * px + cB * py;
2641 p[1] =
fP[1] - cB * px + sB * py;
2642 p[2] =
fP[2] + t * pz;
2643 p[3] = c * px + s * py;
2644 p[4] = -s * px + c * py;
2680 Double_t cBC13 = cB *
fC[13], mJC13 = c7 - cB *
fC[9] + sB *
fC[13], mJC14 =
fC[11] - cBC13 + sB *
fC[14],
2681 mJC23 = c8 + t * c18, mJC24 =
fC[12] + t *
fC[19], mJC33 = c *
fC[9] + s *
fC[13],
2682 mJC34 = c *
fC[13] + s *
fC[14], mJC43 = -s *
fC[9] + c *
fC[13], mJC44 = -s *
fC[13] + c *
fC[14];
2684 e[0] =
fC[0] + 2 * (sB * c6 + cB *
fC[10]) + (sB *
fC[9] + 2 * cBC13) * sB + cB * cB *
fC[14];
2685 e[1] =
fC[1] - cB * c6 + sB *
fC[10] + mJC13 * sB + mJC14 * cB;
2686 e[2] =
fC[2] - cB * c7 + sB *
fC[11] - mJC13 * cB + mJC14 * sB;
2687 e[3] =
fC[3] + t *
fC[15] + mJC23 * sB + mJC24 * cB;
2688 e[4] =
fC[4] + t *
fC[16] - mJC23 * cB + mJC24 * sB;
2690 e[15] =
fC[15] + c18 * sB +
fC[19] * cB;
2691 e[16] =
fC[16] - c18 * cB +
fC[19] * sB;
2692 e[17] = c17 +
fC[20] * t;
2693 e[18] = c18 * c +
fC[19] * s;
2694 e[19] = -c18 * s +
fC[19] * c;
2696 e[5] =
fC[5] + (c17 + e[17]) * t;
2698 e[6] = c * c6 + s *
fC[10] + mJC33 * sB + mJC34 * cB;
2699 e[7] = c * c7 + s *
fC[11] - mJC33 * cB + mJC34 * sB;
2700 e[8] = c * c8 + s *
fC[12] + e[18] * t;
2701 e[9] = mJC33 * c + mJC34 * s;
2702 e[10] = -s * c6 + c *
fC[10] + mJC43 * sB + mJC44 * cB;
2704 e[11] = -s * c7 + c *
fC[11] - mJC43 * cB + mJC44 * sB;
2705 e[12] = -s * c8 + c *
fC[12] + e[19] * t;
2706 e[13] = mJC43 * c + mJC44 * s;
2707 e[14] = -mJC43 * s + mJC44 * c;
2709 e[21] =
fC[21] +
fC[25] * cB + c24 * sB;
2710 e[22] =
fC[22] - c24 * cB +
fC[25] * sB;
2711 e[23] =
fC[23] +
fC[26] * t;
2712 e[24] = c * c24 + s *
fC[25];
2713 e[25] = c *
fC[25] - c24 * s;
2716 e[28] =
fC[28] +
fC[32] * cB + c31 * sB;
2717 e[29] =
fC[29] - c31 * cB +
fC[32] * sB;
2718 e[30] =
fC[30] +
fC[33] * t;
2719 e[31] = c * c31 + s *
fC[32];
2720 e[32] = c *
fC[32] - s * c31;
2775 Double_t d[3] = {
v[0] - mP[0],
v[1] - mP[1],
v[2] - mP[2]};
2779 *
TMath::Sqrt((d[0] * d[0] + d[1] * d[1] + d[2] * d[2])
2780 / (mP[3] * mP[3] + mP[4] * mP[4] + mP[5] * mP[5]));
2782 Double_t h[3] = {mP[3] * sigmaS, mP[4] * sigmaS, mP[5] * sigmaS};
2784 Double_t mSi[6] = {mC[0] + h[0] * h[0], mC[1] + h[1] * h[0], mC[2] + h[1] * h[1],
2785 mC[3] + h[2] * h[0], mC[4] + h[2] * h[1], mC[5] + h[2] * h[2]};
2798 mS[0] = mSi[2] * mSi[5] - mSi[4] * mSi[4];
2799 mS[1] = mSi[3] * mSi[4] - mSi[1] * mSi[5];
2800 mS[2] = mSi[0] * mSi[5] - mSi[3] * mSi[3];
2801 mS[3] = mSi[1] * mSi[4] - mSi[2] * mSi[3];
2802 mS[4] = mSi[1] * mSi[3] - mSi[0] * mSi[4];
2803 mS[5] = mSi[0] * mSi[2] - mSi[1] * mSi[1];
2805 Double_t s = (mSi[0] * mS[0] + mSi[1] * mS[1] + mSi[3] * mS[3]);
2806 s = (s > 1.E-20) ? 1. / s : 0;
2809 * ((mS[0] * d[0] + mS[1] * d[1] + mS[3] * d[2]) * d[0]
2810 + (mS[1] * d[0] + mS[2] * d[1] + mS[4] * d[2]) * d[1]
2811 + (mS[3] * d[0] + mS[4] * d[1] + mS[5] * d[2]) * d[2]))
3035 fP[0] = .5 * (
fP[0] +
m[0]);
3036 fP[1] = .5 * (
fP[1] +
m[1]);
3037 fP[2] = .5 * (
fP[2] +
m[2]);
3044 double daughterP[2][8], daughterC[2][36];
3045 double vtxMom[2][3];
3049 for (
int iter = 0; iter < nIter; iter++) {
3069 for (
int id = 0;
id < 2;
id++) {
3071 double* p = daughterP[id];
3072 double* mC = daughterC[id];
3081 mB[0][0] = mC[6] * mAi[0] + mC[7] * mAi[1] + mC[8] * mAi[3];
3082 mB[0][1] = mC[6] * mAi[1] + mC[7] * mAi[2] + mC[8] * mAi[4];
3083 mB[0][2] = mC[6] * mAi[3] + mC[7] * mAi[4] + mC[8] * mAi[5];
3085 mB[1][0] = mC[10] * mAi[0] + mC[11] * mAi[1] + mC[12] * mAi[3];
3086 mB[1][1] = mC[10] * mAi[1] + mC[11] * mAi[2] + mC[12] * mAi[4];
3087 mB[1][2] = mC[10] * mAi[3] + mC[11] * mAi[4] + mC[12] * mAi[5];
3089 mB[2][0] = mC[15] * mAi[0] + mC[16] * mAi[1] + mC[17] * mAi[3];
3090 mB[2][1] = mC[15] * mAi[1] + mC[16] * mAi[2] + mC[17] * mAi[4];
3091 mB[2][2] = mC[15] * mAi[3] + mC[16] * mAi[4] + mC[17] * mAi[5];
3093 Double_t z[3] = {v0[0] - p[0], v0[1] - p[1], v0[2] - p[2]};
3095 vtxMom[id][0] = p[3] + mB[0][0] * z[0] + mB[0][1] * z[1] + mB[0][2] * z[2];
3096 vtxMom[id][1] = p[4] + mB[1][0] * z[0] + mB[1][1] * z[1] + mB[1][2] * z[2];
3097 vtxMom[id][2] = p[5] + mB[2][0] * z[0] + mB[2][1] * z[1] + mB[2][2] * z[2];
3107 double mpx0 = vtxMom[0][0] + vtxMom[1][0];
3108 double mpy0 = vtxMom[0][1] + vtxMom[1][1];
3109 double mpt0 =
TMath::Sqrt(mpx0 * mpx0 + mpy0 * mpy0);
3112 double ca0 = mpx0 / mpt0;
3113 double sa0 = mpy0 / mpt0;
3114 double r[3] = {v0[0], v0[1], v0[2]};
3115 double mC[3][3] = {{1000., 0, 0}, {0, 1000., 0}, {0, 0, 1000.}};
3118 for (
int id = 0;
id < 2;
id++) {
3119 const Double_t kCLight = 0.000299792458;
3125 Double_t mG[3][6], mB[3], mH[3][3];
3137 mG[0][3] = -sa0 * px0 / pt0;
3138 mG[0][4] = 1 - sa0 * py0 / pt0;
3143 mB[0] = py0 - sa0 * pt0 - mG[0][3] * px0 - mG[0][4] * py0;
3150 mG[1][3] = -1 + ca0 * px0 / pt0;
3151 mG[1][4] = +ca0 * py0 / pt0;
3156 mB[1] = -px0 + ca0 * pt0 - mG[1][3] * px0 - mG[1][4] * py0;
3160 mG[2][0] = -pz0 * ca0;
3161 mG[2][1] = -pz0 * sa0;
3162 mG[2][2] = px0 * ca0 + py0 * sa0;
3167 mH[2][0] = mG[2][0];
3168 mH[2][1] = mG[2][1];
3169 mH[2][2] = mG[2][2];
3180 for (
int i = 0;
i < 3;
i++) {
3182 for (
int k = 0; k < 6; k++)
3183 m[
i] += mG[
i][k] * daughterP[
id][k];
3185 for (
int i = 0;
i < 3;
i++) {
3186 for (
int j = 0; j < 6; j++) {
3188 for (
int k = 0; k < 6; k++)
3189 mGV[
i][j] += mG[
i][k] * daughterC[
id][
IJ(k, j)];
3192 for (
int i = 0, k = 0;
i < 3;
i++) {
3193 for (
int j = 0; j <=
i; j++, k++) {
3195 for (
int l = 0; l < 6; l++)
3196 mV[k] += mGV[
i][l] * mG[j][l];
3205 for (
int i = 0;
i < 3;
i++) {
3207 for (
int k = 0; k < 3; k++)
3208 mHr[
i] += mH[
i][k] * r[k];
3211 for (
int i = 0;
i < 3;
i++) {
3212 for (
int j = 0; j < 3; j++) {
3214 for (
int k = 0; k < 3; k++)
3215 mCHt[
i][j] += mC[
i][k] * mH[j][k];
3219 for (
int i = 0, k = 0;
i < 3;
i++) {
3220 for (
int j = 0; j <=
i; j++, k++) {
3222 for (
int l = 0; l < 3; l++)
3223 mHCHt[k] += mH[
i][l] * mCHt[l][j];
3227 Double_t mS[6] = {mHCHt[0] + mV[0], mHCHt[1] + mV[1], mHCHt[2] + mV[2],
3228 mHCHt[3] + mV[3], mHCHt[4] + mV[4], mHCHt[5] + mV[5]};
3234 Double_t zeta[3] = {
m[0] - mHr[0],
m[1] - mHr[1],
m[2] - mHr[2]};
3241 k[
i][0] = mCHt[
i][0] * mS[0] + mCHt[
i][1] * mS[1] + mCHt[
i][2] * mS[3];
3242 k[
i][1] = mCHt[
i][0] * mS[1] + mCHt[
i][1] * mS[2] + mCHt[
i][2] * mS[4];
3243 k[
i][2] = mCHt[
i][0] * mS[3] + mCHt[
i][1] * mS[4] + mCHt[
i][2] * mS[5];
3249 r[
i] = r[
i] + k[
i][0] * zeta[0] + k[
i][1] * zeta[1] + k[
i][2] * zeta[2];
3254 for (
Int_t j = 0; j <=
i; ++j) {
3255 mC[
i][j] = mC[
i][j] - (k[
i][0] * mCHt[j][0] + k[
i][1] * mCHt[j][1] + k[
i][2] * mCHt[j][2]);
3256 mC[j][
i] = mC[
i][j];
3262 chi2 += ((mS[0] * zeta[0] + mS[1] * zeta[1] + mS[3] * zeta[2]) * zeta[0]
3263 + (mS[1] * zeta[0] + mS[2] * zeta[1] + mS[4] * zeta[2]) * zeta[1]
3264 + (mS[3] * zeta[0] + mS[4] * zeta[1] + mS[5] * zeta[2]) * zeta[2]);
3271 for (
int i = 0;
i < 3;
i++)
3273 for (
int i = 0, k = 0;
i < 3;
i++) {
3274 for (
int j = 0; j <=
i; j++, k++) {
3293 for (
int id = 0;
id < 2;
id++) {
3295 double* p = daughterP[id];
3296 double* mC = daughterC[id];
3306 mB[0][0] = mC[6] * mAi[0] + mC[7] * mAi[1] + mC[8] * mAi[3];
3307 mB[0][1] = mC[6] * mAi[1] + mC[7] * mAi[2] + mC[8] * mAi[4];
3308 mB[0][2] = mC[6] * mAi[3] + mC[7] * mAi[4] + mC[8] * mAi[5];
3310 mB[1][0] = mC[10] * mAi[0] + mC[11] * mAi[1] + mC[12] * mAi[3];
3311 mB[1][1] = mC[10] * mAi[1] + mC[11] * mAi[2] + mC[12] * mAi[4];
3312 mB[1][2] = mC[10] * mAi[3] + mC[11] * mAi[4] + mC[12] * mAi[5];
3314 mB[2][0] = mC[15] * mAi[0] + mC[16] * mAi[1] + mC[17] * mAi[3];
3315 mB[2][1] = mC[15] * mAi[1] + mC[16] * mAi[2] + mC[17] * mAi[4];
3316 mB[2][2] = mC[15] * mAi[3] + mC[16] * mAi[4] + mC[17] * mAi[5];
3318 mB[3][0] = mC[21] * mAi[0] + mC[22] * mAi[1] + mC[23] * mAi[3];
3319 mB[3][1] = mC[21] * mAi[1] + mC[22] * mAi[2] + mC[23] * mAi[4];
3320 mB[3][2] = mC[21] * mAi[3] + mC[22] * mAi[4] + mC[23] * mAi[5];
3322 Double_t z[3] = {
m[0] - p[0],
m[1] - p[1],
m[2] - p[2]};
3340 fP[3] += p[3] + mB[0][0] * z[0] + mB[0][1] * z[1] + mB[0][2] * z[2];
3341 fP[4] += p[4] + mB[1][0] * z[0] + mB[1][1] * z[1] + mB[1][2] * z[2];
3342 fP[5] += p[5] + mB[2][0] * z[0] + mB[2][1] * z[1] + mB[2][2] * z[2];
3343 fP[6] += p[6] + mB[3][0] * z[0] + mB[3][1] * z[1] + mB[3][2] * z[2];
3347 d0 = mB[0][0] * mV[0] + mB[0][1] * mV[1] + mB[0][2] * mV[3] - mC[6];
3348 d1 = mB[0][0] * mV[1] + mB[0][1] * mV[2] + mB[0][2] * mV[4] - mC[7];
3349 d2 = mB[0][0] * mV[3] + mB[0][1] * mV[4] + mB[0][2] * mV[5] - mC[8];
3354 fC[9] += mC[9] + d0 * mB[0][0] + d1 * mB[0][1] + d2 * mB[0][2];
3356 d0 = mB[1][0] * mV[0] + mB[1][1] * mV[1] + mB[1][2] * mV[3] - mC[10];
3357 d1 = mB[1][0] * mV[1] + mB[1][1] * mV[2] + mB[1][2] * mV[4] - mC[11];
3358 d2 = mB[1][0] * mV[3] + mB[1][1] * mV[4] + mB[1][2] * mV[5] - mC[12];
3363 fC[13] += mC[13] + d0 * mB[0][0] + d1 * mB[0][1] + d2 * mB[0][2];
3364 fC[14] += mC[14] + d0 * mB[1][0] + d1 * mB[1][1] + d2 * mB[1][2];
3366 d0 = mB[2][0] * mV[0] + mB[2][1] * mV[1] + mB[2][2] * mV[3] - mC[15];
3367 d1 = mB[2][0] * mV[1] + mB[2][1] * mV[2] + mB[2][2] * mV[4] - mC[16];
3368 d2 = mB[2][0] * mV[3] + mB[2][1] * mV[4] + mB[2][2] * mV[5] - mC[17];
3373 fC[18] += mC[18] + d0 * mB[0][0] + d1 * mB[0][1] + d2 * mB[0][2];
3374 fC[19] += mC[19] + d0 * mB[1][0] + d1 * mB[1][1] + d2 * mB[1][2];
3375 fC[20] += mC[20] + d0 * mB[2][0] + d1 * mB[2][1] + d2 * mB[2][2];
3377 d0 = mB[3][0] * mV[0] + mB[3][1] * mV[1] + mB[3][2] * mV[3] - mC[21];
3378 d1 = mB[3][0] * mV[1] + mB[3][1] * mV[2] + mB[3][2] * mV[4] - mC[22];
3379 d2 = mB[3][0] * mV[3] + mB[3][1] * mV[4] + mB[3][2] * mV[5] - mC[23];
3384 fC[24] += mC[24] + d0 * mB[0][0] + d1 * mB[0][1] + d2 * mB[0][2];
3385 fC[25] += mC[25] + d0 * mB[1][0] + d1 * mB[1][1] + d2 * mB[1][2];
3386 fC[26] += mC[26] + d0 * mB[2][0] + d1 * mB[2][1] + d2 * mB[2][2];
3387 fC[27] += mC[27] + d0 * mB[3][0] + d1 * mB[3][1] + d2 * mB[3][2];
void GetMeasurement(const Double_t XYZ[], Double_t m[], Double_t V[]) const
static void MultQSQt(const Double_t Q[], const Double_t S[], Double_t SOut[])
void GetDStoParticleBz(Double_t Bz, const KFParticleBase &p, Double_t &dS, Double_t &dS1) const
static Double_t GetSCorrection(const Double_t Part[], const Double_t XYZ[])
void TransportCBM(Double_t dS, Double_t P[], Double_t C[]) const
void GetDSIter(const KFParticleBase &p, Double_t const &dS, Double_t x[3], Double_t dx[3], Double_t ddx[3]) const
virtual void GetDStoParticle(const KFParticleBase &p, Double_t &DS, Double_t &DSp) const =0
void GetDStoParticleCBM(const KFParticleBase &p, Double_t &dS, Double_t &dS1) const
void TransportLine(Double_t S, Double_t P[], Double_t C[]) const
virtual void Transport(Double_t dS, Double_t P[], Double_t C[]) const =0
void GetDStoParticleLine(const KFParticleBase &p, Double_t &dS, Double_t &dS1) const
virtual void GetFieldValue(const Double_t xyz[], Double_t B[]) const =0
void TransportBz(Double_t Bz, Double_t dS, Double_t P[], Double_t C[]) const
void Construct(const KFParticleBase *vDaughters[], Int_t nDaughters, const KFParticleBase *ProdVtx=0, Double_t Mass=-1, Bool_t IsConstrained=0)
static void GetArmenterosPodolanski(KFParticleBase &positive, KFParticleBase &negative, Double_t QtAlfa[2])
void ConstructGammaBz(const KFParticleBase &daughter1, const KFParticleBase &daughter2, double Bz)
void GetDStoParticleBy(Double_t B, const KFParticleBase &p, Double_t &dS, Double_t &dS1) const
virtual Double_t GetDStoPoint(const Double_t xyz[]) const =0