23static const fvec Zero = 0;
24static const fvec One = 1;
25static const fvec small = 1.e-20;
27KFParticleBaseSIMD::KFParticleBaseSIMD() :fQ(0), fNDF(-3), fChi2(0), fSFromDecay(0), fAtProductionVertex(0), fIsVtxGuess(0), fIsVtxErrGuess(0), fIsLinearized(0), fConstructMethod(2), SumDaughterMass(0), fMassHypo(-1), fId(-1), fDaughterIds(), fPDG(0)
49 for( Int_t
i=0;
i<6 ;
i++ )
fP[
i] = Param[
i];
50 for( Int_t
i=0;
i<21;
i++ )
fC[
i] = Cov[
i];
62 fvec energyInv = 1./energy;
68 fC[21] = h0*
fC[ 6] + h1*
fC[10] + h2*
fC[15];
69 fC[22] = h0*
fC[ 7] + h1*
fC[11] + h2*
fC[16];
70 fC[23] = h0*
fC[ 8] + h1*
fC[12] + h2*
fC[17];
71 fC[24] = h0*
fC[ 9] + h1*
fC[13] + h2*
fC[18];
72 fC[25] = h0*
fC[13] + h1*
fC[14] + h2*
fC[19];
73 fC[26] = h0*
fC[18] + h1*
fC[19] + h2*
fC[20];
74 fC[27] = ( h0*h0*
fC[ 9] + h1*h1*
fC[14] + h2*h2*
fC[20]
75 + 2*(h0*h1*
fC[13] + h0*h2*
fC[18] + h1*h2*
fC[19] ) );
76 for( Int_t
i=28;
i<36;
i++ )
fC[
i] = 0;
87 for( Int_t
i=0;
i<8;
i++)
fP[
i] = 0;
88 for(Int_t
i=0;
i<36;++
i)
fC[
i]=0.;
89 fC[0] =
fC[2] =
fC[5] = 100.;
139 error = (x2*
fC[9]+y2*
fC[14]+z2*
fC[20] + 2*(x*y*
fC[13]+x*z*
fC[18]+y*z*
fC[19]) );
140 const fvec LocalSmall = 1.e-4;
142 error = (mask & error);
160 error = (px2*
fC[9] + py2*
fC[14] + 2*px*py*
fC[13] );
161 const fvec LocalSmall = 1.e-8;
163 error = (mask & error);
166 error += ((!mask) &
fvec(1.e10));
177 const fvec BIG = 1.e10;
178 const fvec LocalSmall = 1.e-8;
183 fvec pt2 = px*px + py*py;
184 fvec p2 = pt2 + pz*pz;
190 c =
fvec(b > LocalSmall) & (a/b);
198 error = (h3*h3*
fC[9] + h4*h4*
fC[14] + pt4*
fC[20] + 2*( h3*(h4*
fC[13] +
fC[18]*pt2) + pt2*h4*
fC[19] ) );
201 error =
if3( mask, (
sqrt(error/p2pt4)), BIG);
218 fvec pt2 = px2 + py2;
220 error = (py2*
fC[9] + px2*
fC[14] -
fvec(2.f)*px*py*
fC[13] );
239 error = (x2*
fC[0] + y2*
fC[2] -
fvec(2.f)*x*y*
fC[1] );
253 const fvec BIG = 1.e20;
254 const fvec LocalSmall = 1.e-10;
277 mask =
fvec(mask &
fvec(
fvec(Zero <= s) & (LocalSmall <
m)));
290 const fvec BIG = 1.e20;
302 error = p2*
fC[35] + t*t/p2*(x2*
fC[9]+y2*
fC[14]+z2*
fC[20]
303 +
fvec(2.f)*(x*y*
fC[13]+x*z*
fC[18]+y*z*
fC[19]) )
316 const fvec BIG = 1.e20;
327 error = pt2*
fC[35] + t*t/pt2*(x2*
fC[9]+y2*
fC[14] + 2*x*y*
fC[13] )
340 const fvec BIG = 1.e20;
347 error =
m*
m*
fC[35] + 2*
fP[7]*cTM +
fP[7]*
fP[7]*dm*dm;
349 error =
if3( mask,
sqrt(error), BIG);
366 fvec d[3] = { XYZ[0]-Part[0], XYZ[1]-Part[1], XYZ[2]-Part[2] };
367 fvec p2 = Part[3]*Part[3]+Part[4]*Part[4]+Part[5]*Part[5];
383 const fvec kCLight = 0.000299792458;
384 b[0]*=kCLight*
GetQ(); b[1]*=kCLight*
GetQ(); b[2]*=kCLight*
GetQ();
390 for(
int iM=0; iM<8; iM++)
392 for(
int iV=0; iV<8; iV++)
403 h[3] = ( h[1]*b[2]-h[2]*b[1] );
404 h[4] = ( h[2]*b[0]-h[0]*b[2] );
405 h[5] = ( h[0]*b[1]-h[1]*b[0] );
441 if( Daughter.
fC[35][0]>0 ){
444 for( Int_t
i=0;
i<8;
i++ )
fP[
i] = Daughter.
fP[
i];
445 for( Int_t
i=0;
i<36;
i++ )
fC[
i] = Daughter.
fC[
i];
494 for( Int_t iter=0; iter<maxIter; iter++ ){
500 if( Daughter.
fC[35][0]>0 ){
503 for( Int_t
i=0;
i<8;
i++ )
m[
i] = Daughter.
fP[
i];
504 for( Int_t
i=0;
i<36;
i++ ) mV[
i] = Daughter.
fC[
i];
508 fvec mS[6]= { ffC[0]+mV[0],
509 ffC[1]+mV[1], ffC[2]+mV[2],
510 ffC[3]+mV[3], ffC[4]+mV[4], ffC[5]+mV[5] };
515 fvec zeta[3] = {
m[0]-ffP[0],
m[1]-ffP[1],
m[2]-ffP[2] };
520 fvec mCHt0[7], mCHt1[7], mCHt2[7];
522 mCHt0[0]=ffC[ 0] ; mCHt1[0]=ffC[ 1] ; mCHt2[0]=ffC[ 3] ;
523 mCHt0[1]=ffC[ 1] ; mCHt1[1]=ffC[ 2] ; mCHt2[1]=ffC[ 4] ;
524 mCHt0[2]=ffC[ 3] ; mCHt1[2]=ffC[ 4] ; mCHt2[2]=ffC[ 5] ;
525 mCHt0[3]=ffC[ 6]-mV[ 6]; mCHt1[3]=ffC[ 7]-mV[ 7]; mCHt2[3]=ffC[ 8]-mV[ 8];
526 mCHt0[4]=ffC[10]-mV[10]; mCHt1[4]=ffC[11]-mV[11]; mCHt2[4]=ffC[12]-mV[12];
527 mCHt0[5]=ffC[15]-mV[15]; mCHt1[5]=ffC[16]-mV[16]; mCHt2[5]=ffC[17]-mV[17];
528 mCHt0[6]=ffC[21]-mV[21]; mCHt1[6]=ffC[22]-mV[22]; mCHt2[6]=ffC[23]-mV[23];
532 fvec k0[7], k1[7], k2[7];
534 for(Int_t
i=0;
i<7;++
i){
535 k0[
i] = mCHt0[
i]*mS[0] + mCHt1[
i]*mS[1] + mCHt2[
i]*mS[3];
536 k1[
i] = mCHt0[
i]*mS[1] + mCHt1[
i]*mS[2] + mCHt2[
i]*mS[4];
537 k2[
i] = mCHt0[
i]*mS[3] + mCHt1[
i]*mS[4] + mCHt2[
i]*mS[5];
542 if( iter<maxIter-1 ){
543 for(Int_t
i=0;
i<3; ++
i)
571 for(Int_t
i=0;
i<7;++
i)
572 fP[
i] = ffP[
i] + (k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2]);
576 for(Int_t
i=0, k=0;
i<7;++
i){
577 for(Int_t j=0;j<=
i;++j,++k){
578 fC[k] = ffC[k] - (k0[
i]*mCHt0[j] + k1[
i]*mCHt1[j] + k2[
i]*mCHt2[j] );
583 if( iter == (maxIter-1) ) {
587 fChi2 += (mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2])*zeta[0]
588 + (mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2])*zeta[1]
589 + (mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2])*zeta[2];
625 for( Int_t iter=0; iter<maxIter; iter++ ){
631 if( Daughter.
fC[35][0]>0 ){
634 for( Int_t
i=0;
i<8;
i++ )
m[
i] = Daughter.
fP[
i];
635 for( Int_t
i=0;
i<36;
i++ ) mV[
i] = Daughter.
fC[
i];
638 fvec massMf2 =
m[6]*
m[6] - (
m[3]*
m[3] +
m[4]*
m[4] +
m[5]*
m[5]);
643 fvec mS[6]= { ffC[0]+mV[0],
644 ffC[1]+mV[1], ffC[2]+mV[2],
645 ffC[3]+mV[3], ffC[4]+mV[4], ffC[5]+mV[5] };
650 fvec zeta[3] = {
m[0]-ffP[0],
m[1]-ffP[1],
m[2]-ffP[2] };
654 fvec mCHt0[6], mCHt1[6], mCHt2[6];
656 mCHt0[0]=ffC[ 0] ; mCHt1[0]=ffC[ 1] ; mCHt2[0]=ffC[ 3] ;
657 mCHt0[1]=ffC[ 1] ; mCHt1[1]=ffC[ 2] ; mCHt2[1]=ffC[ 4] ;
658 mCHt0[2]=ffC[ 3] ; mCHt1[2]=ffC[ 4] ; mCHt2[2]=ffC[ 5] ;
659 mCHt0[3]=ffC[ 6]-mV[ 6]; mCHt1[3]=ffC[ 7]-mV[ 7]; mCHt2[3]=ffC[ 8]-mV[ 8];
660 mCHt0[4]=ffC[10]-mV[10]; mCHt1[4]=ffC[11]-mV[11]; mCHt2[4]=ffC[12]-mV[12];
661 mCHt0[5]=ffC[15]-mV[15]; mCHt1[5]=ffC[16]-mV[16]; mCHt2[5]=ffC[17]-mV[17];
665 fvec k0[6], k1[6], k2[6];
667 for(Int_t
i=0;
i<6;++
i){
668 k0[
i] = mCHt0[
i]*mS[0] + mCHt1[
i]*mS[1] + mCHt2[
i]*mS[3];
669 k1[
i] = mCHt0[
i]*mS[1] + mCHt1[
i]*mS[2] + mCHt2[
i]*mS[4];
670 k2[
i] = mCHt0[
i]*mS[3] + mCHt1[
i]*mS[4] + mCHt2[
i]*mS[5];
675 if( iter<maxIter-1 ){
676 for(Int_t
i=0;
i<3; ++
i)
683 fvec mVHt0[6], mVHt1[6], mVHt2[6];
685 mVHt0[0]= mV[ 0] ; mVHt1[0]= mV[ 1] ; mVHt2[0]= mV[ 3] ;
686 mVHt0[1]= mV[ 1] ; mVHt1[1]= mV[ 2] ; mVHt2[1]= mV[ 4] ;
687 mVHt0[2]= mV[ 3] ; mVHt1[2]= mV[ 4] ; mVHt2[2]= mV[ 5] ;
688 mVHt0[3]= mV[ 6] ; mVHt1[3]= mV[ 7] ; mVHt2[3]= mV[ 8] ;
689 mVHt0[4]= mV[10] ; mVHt1[4]= mV[11] ; mVHt2[4]= mV[12] ;
690 mVHt0[5]= mV[15] ; mVHt1[5]= mV[16] ; mVHt2[5]= mV[17] ;
694 fvec km0[6], km1[6], km2[6];
696 for(Int_t
i=0;
i<6;++
i){
697 km0[
i] = mVHt0[
i]*mS[0] + mVHt1[
i]*mS[1] + mVHt2[
i]*mS[3];
698 km1[
i] = mVHt0[
i]*mS[1] + mVHt1[
i]*mS[2] + mVHt2[
i]*mS[4];
699 km2[
i] = mVHt0[
i]*mS[3] + mVHt1[
i]*mS[4] + mVHt2[
i]*mS[5];
702 fvec mf[7] = {
m[0],
m[1],
m[2],
m[3],
m[4],
m[5],
m[6] };
704 for(Int_t
i=0;
i<6;++
i)
705 mf[
i] = mf[
i] - km0[
i]*zeta[0] - km1[
i]*zeta[1] - km2[
i]*zeta[2];
707 fvec energyMf =
sqrt( massMf2 + (mf[3]*mf[3] + mf[4]*mf[4] + mf[5]*mf[5]) );
710 for(Int_t iC=0; iC<28; iC++)
715 hmf[3] =
if3(
fvec(
fabs(energyMf) < small), Zero, hmf[3]/energyMf);
716 hmf[4] =
if3(
fvec(
fabs(energyMf) < small), Zero, hmf[4]/energyMf);
717 hmf[5] =
if3(
fvec(
fabs(energyMf) < small), Zero, hmf[5]/energyMf);
720 for(Int_t
i=0, k=0;
i<6;++
i){
721 for(Int_t j=0;j<=
i;++j,++k){
722 mVf[k] = mVf[k] - (km0[
i]*mVHt0[j] + km1[
i]*mVHt1[j] + km2[
i]*mVHt2[j] );
725 fvec mVf24 = mVf[24], mVf25 = mVf[25], mVf26 = mVf[26];
726 mVf[21] = mVf[6 ]*hmf[3] + mVf[10]*hmf[4] + mVf[15]*hmf[5] + mVf[21]*hmf[6];
727 mVf[22] = mVf[7 ]*hmf[3] + mVf[11]*hmf[4] + mVf[16]*hmf[5] + mVf[22]*hmf[6];
728 mVf[23] = mVf[8 ]*hmf[3] + mVf[12]*hmf[4] + mVf[17]*hmf[5] + mVf[23]*hmf[6];
729 mVf[24] = mVf[9 ]*hmf[3] + mVf[13]*hmf[4] + mVf[18]*hmf[5] + mVf[24]*hmf[6];
730 mVf[25] = mVf[13]*hmf[3] + mVf[14]*hmf[4] + mVf[19]*hmf[5] + mVf[25]*hmf[6];
731 mVf[26] = mVf[18]*hmf[3] + mVf[19]*hmf[4] + mVf[20]*hmf[5] + mVf[26]*hmf[6];
732 mVf[27] = mVf[24]*hmf[3] + mVf[25]*hmf[4] + mVf[26]*hmf[5] + (mVf24*hmf[3] + mVf25*hmf[4] + mVf26*hmf[5] + mVf[27]*hmf[6])*hmf[6];
739 fvec mCCHt0[6], mCCHt1[6], mCCHt2[6];
741 mCCHt0[0]=ffC[ 0]; mCCHt1[0]=ffC[ 1]; mCCHt2[0]=ffC[ 3];
742 mCCHt0[1]=ffC[ 1]; mCCHt1[1]=ffC[ 2]; mCCHt2[1]=ffC[ 4];
743 mCCHt0[2]=ffC[ 3]; mCCHt1[2]=ffC[ 4]; mCCHt2[2]=ffC[ 5];
744 mCCHt0[3]=ffC[ 6]; mCCHt1[3]=ffC[ 7]; mCCHt2[3]=ffC[ 8];
745 mCCHt0[4]=ffC[10]; mCCHt1[4]=ffC[11]; mCCHt2[4]=ffC[12];
746 mCCHt0[5]=ffC[15]; mCCHt1[5]=ffC[16]; mCCHt2[5]=ffC[17];
750 fvec krf0[6], krf1[6], krf2[6];
752 for(Int_t
i=0;
i<6;++
i){
753 krf0[
i] = mCCHt0[
i]*mS[0] + mCCHt1[
i]*mS[1] + mCCHt2[
i]*mS[3];
754 krf1[
i] = mCCHt0[
i]*mS[1] + mCCHt1[
i]*mS[2] + mCCHt2[
i]*mS[4];
755 krf2[
i] = mCCHt0[
i]*mS[3] + mCCHt1[
i]*mS[4] + mCCHt2[
i]*mS[5];
757 fvec rf[7] = { ffP[0], ffP[1], ffP[2], ffP[3], ffP[4], ffP[5], ffP[6] };
759 for(Int_t
i=0;
i<6;++
i)
760 rf[
i] = rf[
i] + krf0[
i]*zeta[0] + krf1[
i]*zeta[1] + krf2[
i]*zeta[2];
762 fvec energyRf =
sqrt( massRf2 + (rf[3]*rf[3] + rf[4]*rf[4] + rf[5]*rf[5]) );
765 for(Int_t iC=0; iC<28; iC++)
769 hrf[3] =
if3(
fvec(
fabs(energyRf) < small), Zero, rf[3]/energyRf);
770 hrf[4] =
if3(
fvec(
fabs(energyRf) < small), Zero, rf[4]/energyRf);
771 hrf[5] =
if3(
fvec(
fabs(energyRf) < small), Zero, rf[5]/energyRf);
775 for(Int_t
i=0, k=0;
i<6;++
i){
776 for(Int_t j=0;j<=
i;++j,++k){
777 mCf[k] = mCf[k] - (krf0[
i]*mCCHt0[j] + krf1[
i]*mCCHt1[j] + krf2[
i]*mCCHt2[j] );
780 fvec mCf24 = mCf[24], mCf25 = mCf[25], mCf26 = mCf[26];
781 mCf[21] = mCf[6 ]*hrf[3] + mCf[10]*hrf[4] + mCf[15]*hrf[5] + mCf[21]*hrf[6];
782 mCf[22] = mCf[7 ]*hrf[3] + mCf[11]*hrf[4] + mCf[16]*hrf[5] + mCf[22]*hrf[6];
783 mCf[23] = mCf[8 ]*hrf[3] + mCf[12]*hrf[4] + mCf[17]*hrf[5] + mCf[23]*hrf[6];
784 mCf[24] = mCf[9 ]*hrf[3] + mCf[13]*hrf[4] + mCf[18]*hrf[5] + mCf[24]*hrf[6];
785 mCf[25] = mCf[13]*hrf[3] + mCf[14]*hrf[4] + mCf[19]*hrf[5] + mCf[25]*hrf[6];
786 mCf[26] = mCf[18]*hrf[3] + mCf[19]*hrf[4] + mCf[20]*hrf[5] + mCf[26]*hrf[6];
787 mCf[27] = mCf[24]*hrf[3] + mCf[25]*hrf[4] + mCf[26]*hrf[5] + (mCf24*hrf[3] + mCf25*hrf[4] + mCf26*hrf[5] + mCf[27]*hrf[6])*hrf[6];
789 for(Int_t iC=21; iC<28; iC++)
795 fP[6] = energyRf + energyMf;
804 for(
int i=0;
i<3;
i++)
806 for(
int j=0; j<3; j++)
808 mDvp[
i][j] = km0[
i+3]*mCCHt0[j] + km1[
i+3]*mCCHt1[j] + km2[
i+3]*mCCHt2[j];
809 mDpv[
i][j] = km0[
i]*mCCHt0[j+3] + km1[
i]*mCCHt1[j+3] + km2[
i]*mCCHt2[j+3];
810 mDpp[
i][j] = km0[
i+3]*mCCHt0[j+3] + km1[
i+3]*mCCHt1[j+3] + km2[
i+3]*mCCHt2[j+3];
814 mDe[0] = hmf[3]*mDvp[0][0] + hmf[4]*mDvp[1][0] + hmf[5]*mDvp[2][0];
815 mDe[1] = hmf[3]*mDvp[0][1] + hmf[4]*mDvp[1][1] + hmf[5]*mDvp[2][1];
816 mDe[2] = hmf[3]*mDvp[0][2] + hmf[4]*mDvp[1][2] + hmf[5]*mDvp[2][2];
817 mDe[3] = hmf[3]*mDpp[0][0] + hmf[4]*mDpp[1][0] + hmf[5]*mDpp[2][0];
818 mDe[4] = hmf[3]*mDpp[0][1] + hmf[4]*mDpp[1][1] + hmf[5]*mDpp[2][1];
819 mDe[5] = hmf[3]*mDpp[0][2] + hmf[4]*mDpp[1][2] + hmf[5]*mDpp[2][2];
820 mDe[6] = 2*(mDe[3]*hrf[3] + mDe[4]*hrf[4] + mDe[5]*hrf[5]);
851 for(Int_t
i=0;
i<6;++
i)
852 fP[
i] = ffP[
i] + k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2];
856 for(Int_t
i=0, k=0;
i<6;++
i){
857 for(Int_t j=0;j<=
i;++j,++k){
858 fC[k] = ffC[k] - (k0[
i]*mCHt0[j] + k1[
i]*mCHt1[j] + k2[
i]*mCHt2[j] );
862 for(
int i=21;
i<28;
i++)
fC[
i] = ffC[
i];
866 if( iter == (maxIter-1) ) {
870 fChi2 += (mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2])*zeta[0]
871 + (mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2])*zeta[1]
872 + (mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2])*zeta[2];
907 for( Int_t iter=0; iter<maxIter; iter++ ){
912 if( Daughter.
fC[35][0]>0 ){
915 for( Int_t
i=0;
i<8;
i++ )
m[
i] = Daughter.
fP[
i];
916 for( Int_t
i=0;
i<36;
i++ ) mV[
i] = Daughter.
fC[
i];
920 fvec mS[6]= { ffC[0]+mV[0],
921 ffC[1]+mV[1], ffC[2]+mV[2],
922 ffC[3]+mV[3], ffC[4]+mV[4], ffC[5]+mV[5] };
927 fvec zeta[3] = {
m[0]-ffP[0],
m[1]-ffP[1],
m[2]-ffP[2] };
932 fvec mCHt0[7], mCHt1[7], mCHt2[7];
934 mCHt0[0]=ffC[ 0] ; mCHt1[0]=ffC[ 1] ; mCHt2[0]=ffC[ 3] ;
935 mCHt0[1]=ffC[ 1] ; mCHt1[1]=ffC[ 2] ; mCHt2[1]=ffC[ 4] ;
936 mCHt0[2]=ffC[ 3] ; mCHt1[2]=ffC[ 4] ; mCHt2[2]=ffC[ 5] ;
937 mCHt0[3]=ffC[ 6] ; mCHt1[3]=ffC[ 7] ; mCHt2[3]=ffC[ 8] ;
938 mCHt0[4]=ffC[10] ; mCHt1[4]=ffC[11] ; mCHt2[4]=ffC[12] ;
939 mCHt0[5]=ffC[15] ; mCHt1[5]=ffC[16] ; mCHt2[5]=ffC[17] ;
940 mCHt0[6]=ffC[21] ; mCHt1[6]=ffC[22] ; mCHt2[6]=ffC[23] ;
944 fvec k0[7], k1[7], k2[7];
946 for(Int_t
i=0;
i<7;++
i){
947 k0[
i] = mCHt0[
i]*mS[0] + mCHt1[
i]*mS[1] + mCHt2[
i]*mS[3];
948 k1[
i] = mCHt0[
i]*mS[1] + mCHt1[
i]*mS[2] + mCHt2[
i]*mS[4];
949 k2[
i] = mCHt0[
i]*mS[3] + mCHt1[
i]*mS[4] + mCHt2[
i]*mS[5];
954 if( iter<maxIter-1 ){
955 for(Int_t
i=0;
i<3; ++
i)
964 fvec mVHt0[7], mVHt1[7], mVHt2[7];
966 mVHt0[0]=mV[ 0] ; mVHt1[0]=mV[ 1] ; mVHt2[0]=mV[ 3] ;
967 mVHt0[1]=mV[ 1] ; mVHt1[1]=mV[ 2] ; mVHt2[1]=mV[ 4] ;
968 mVHt0[2]=mV[ 3] ; mVHt1[2]=mV[ 4] ; mVHt2[2]=mV[ 5] ;
969 mVHt0[3]=mV[ 6] ; mVHt1[3]=mV[ 7] ; mVHt2[3]=mV[ 8] ;
970 mVHt0[4]=mV[10] ; mVHt1[4]=mV[11] ; mVHt2[4]=mV[12] ;
971 mVHt0[5]=mV[15] ; mVHt1[5]=mV[16] ; mVHt2[5]=mV[17] ;
972 mVHt0[6]=mV[21] ; mVHt1[6]=mV[22] ; mVHt2[6]=mV[23] ;
976 fvec km0[7], km1[7], km2[7];
978 for(Int_t
i=0;
i<7;++
i){
979 km0[
i] = mVHt0[
i]*mS[0] + mVHt1[
i]*mS[1] + mVHt2[
i]*mS[3];
980 km1[
i] = mVHt0[
i]*mS[1] + mVHt1[
i]*mS[2] + mVHt2[
i]*mS[4];
981 km2[
i] = mVHt0[
i]*mS[3] + mVHt1[
i]*mS[4] + mVHt2[
i]*mS[5];
984 for(Int_t
i=0;
i<7;++
i)
985 ffP[
i] = ffP[
i] + k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2];
987 for(Int_t
i=0;
i<7;++
i)
988 m[
i] =
m[
i] - km0[
i]*zeta[0] - km1[
i]*zeta[1] - km2[
i]*zeta[2];
990 for(Int_t
i=0, k=0;
i<7;++
i){
991 for(Int_t j=0;j<=
i;++j,++k){
992 ffC[k] = ffC[k] - (k0[
i]*mCHt0[j] + k1[
i]*mCHt1[j] + k2[
i]*mCHt2[j] );
996 for(Int_t
i=0, k=0;
i<7;++
i){
997 for(Int_t j=0;j<=
i;++j,++k){
998 mV[k] = mV[k] - (km0[
i]*mVHt0[j] + km1[
i]*mVHt1[j] + km2[
i]*mVHt2[j] );
1004 for(Int_t
i=0;
i<7;++
i){
1005 for(Int_t j=0;j<7;++j){
1006 mDf[
i][j] = (km0[
i]*mCHt0[j] + km1[
i]*mCHt1[j] + km2[
i]*mCHt2[j] );
1010 fvec mJ1[7][7], mJ2[7][7];
1011 for(Int_t iPar1=0; iPar1<7; iPar1++)
1013 for(Int_t iPar2=0; iPar2<7; iPar2++)
1015 mJ1[iPar1][iPar2] = 0;
1016 mJ2[iPar1][iPar2] = 0;
1020 fvec mMassParticle = ffP[6]*ffP[6] - (ffP[3]*ffP[3] + ffP[4]*ffP[4] + ffP[5]*ffP[5]);
1021 fvec mMassDaughter =
m[6]*
m[6] - (
m[3]*
m[3] +
m[4]*
m[4] +
m[5]*
m[5]);
1022 mMassParticle =
if3(
fvec( mMassParticle > Zero ),
sqrt(mMassParticle) , Zero);
1023 mMassDaughter =
if3(
fvec( mMassDaughter > Zero ),
sqrt(mMassDaughter) , Zero);
1037 for(Int_t
i=0;
i<7;
i++) {
1038 for(Int_t j=0; j<7; j++) {
1040 for(Int_t k=0; k<7; k++) {
1041 mDJ[
i][j] += mDf[
i][k]*mJ1[j][k];
1046 for(Int_t
i=0;
i<7; ++
i){
1047 for(Int_t j=0; j<7; ++j){
1049 for(Int_t l=0; l<7; l++){
1050 mDf[
i][j] += mJ2[
i][l]*mDJ[l][j];
1073 ffC[6 ] += mDf[3][0]; ffC[7 ] += mDf[3][1]; ffC[8 ] += mDf[3][2];
1074 ffC[10] += mDf[4][0]; ffC[11] += mDf[4][1]; ffC[12] += mDf[4][2];
1075 ffC[15] += mDf[5][0]; ffC[16] += mDf[5][1]; ffC[17] += mDf[5][2];
1076 ffC[21] += mDf[6][0]; ffC[22] += mDf[6][1]; ffC[23] += mDf[6][2];
1078 ffC[9 ] += mDf[3][3] + mDf[3][3];
1079 ffC[13] += mDf[4][3] + mDf[3][4]; ffC[14] += mDf[4][4] + mDf[4][4];
1080 ffC[18] += mDf[5][3] + mDf[3][5]; ffC[19] += mDf[5][4] + mDf[4][5]; ffC[20] += mDf[5][5] + mDf[5][5];
1081 ffC[24] += mDf[6][3] + mDf[3][6]; ffC[25] += mDf[6][4] + mDf[4][6]; ffC[26] += mDf[6][5] + mDf[5][6]; ffC[27] += mDf[6][6] + mDf[6][6];
1085 for(Int_t
i=0;
i<7;++
i)
1090 for(Int_t
i=0, k=0;
i<7;++
i){
1091 for(Int_t j=0;j<=
i;++j,++k){
1097 if( iter == (maxIter-1) ) {
1101 fChi2 += (mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2])*zeta[0]
1102 + (mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2])*zeta[1]
1103 + (mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2])*zeta[2];
1114 Bool_t noS = (
fC[35][0]<=0 );
1123 fC[28] =
fC[29] =
fC[30] =
fC[31] =
fC[32] =
fC[33] =
fC[34] = 0;
1136 mB[0][0] =
fC[ 6]*mAi[0] +
fC[ 7]*mAi[1] +
fC[ 8]*mAi[3];
1137 mB[0][1] =
fC[ 6]*mAi[1] +
fC[ 7]*mAi[2] +
fC[ 8]*mAi[4];
1138 mB[0][2] =
fC[ 6]*mAi[3] +
fC[ 7]*mAi[4] +
fC[ 8]*mAi[5];
1140 mB[1][0] =
fC[10]*mAi[0] +
fC[11]*mAi[1] +
fC[12]*mAi[3];
1141 mB[1][1] =
fC[10]*mAi[1] +
fC[11]*mAi[2] +
fC[12]*mAi[4];
1142 mB[1][2] =
fC[10]*mAi[3] +
fC[11]*mAi[4] +
fC[12]*mAi[5];
1144 mB[2][0] =
fC[15]*mAi[0] +
fC[16]*mAi[1] +
fC[17]*mAi[3];
1145 mB[2][1] =
fC[15]*mAi[1] +
fC[16]*mAi[2] +
fC[17]*mAi[4];
1146 mB[2][2] =
fC[15]*mAi[3] +
fC[16]*mAi[4] +
fC[17]*mAi[5];
1148 mB[3][0] =
fC[21]*mAi[0] +
fC[22]*mAi[1] +
fC[23]*mAi[3];
1149 mB[3][1] =
fC[21]*mAi[1] +
fC[22]*mAi[2] +
fC[23]*mAi[4];
1150 mB[3][2] =
fC[21]*mAi[3] +
fC[22]*mAi[4] +
fC[23]*mAi[5];
1152 mB[4][0] =
fC[28]*mAi[0] +
fC[29]*mAi[1] +
fC[30]*mAi[3];
1153 mB[4][1] =
fC[28]*mAi[1] +
fC[29]*mAi[2] +
fC[30]*mAi[4];
1154 mB[4][2] =
fC[28]*mAi[3] +
fC[29]*mAi[4] +
fC[30]*mAi[5];
1159 fvec mAVi[6] = {
fC[0]-mV[0],
fC[1]-mV[1],
fC[2]-mV[2],
1160 fC[3]-mV[3],
fC[4]-mV[4],
fC[5]-mV[5] };
1165 fvec dChi2 = ( +(mAVi[0]*z[0] + mAVi[1]*z[1] + mAVi[3]*z[2])*z[0]
1166 +(mAVi[1]*z[0] + mAVi[2]*z[1] + mAVi[4]*z[2])*z[1]
1167 +(mAVi[3]*z[0] + mAVi[4]*z[1] + mAVi[5]*z[2])*z[2] );
1180 fP[3]+= mB[0][0]*z[0] + mB[0][1]*z[1] + mB[0][2]*z[2];
1181 fP[4]+= mB[1][0]*z[0] + mB[1][1]*z[1] + mB[1][2]*z[2];
1182 fP[5]+= mB[2][0]*z[0] + mB[2][1]*z[1] + mB[2][2]*z[2];
1183 fP[6]+= mB[3][0]*z[0] + mB[3][1]*z[1] + mB[3][2]*z[2];
1184 fP[7]+= mB[4][0]*z[0] + mB[4][1]*z[1] + mB[4][2]*z[2];
1195 d0= mB[0][0]*mV[0] + mB[0][1]*mV[1] + mB[0][2]*mV[3] -
fC[ 6];
1196 d1= mB[0][0]*mV[1] + mB[0][1]*mV[2] + mB[0][2]*mV[4] -
fC[ 7];
1197 d2= mB[0][0]*mV[3] + mB[0][1]*mV[4] + mB[0][2]*mV[5] -
fC[ 8];
1202 fC[ 9]+= d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
1204 d0= mB[1][0]*mV[0] + mB[1][1]*mV[1] + mB[1][2]*mV[3] -
fC[10];
1205 d1= mB[1][0]*mV[1] + mB[1][1]*mV[2] + mB[1][2]*mV[4] -
fC[11];
1206 d2= mB[1][0]*mV[3] + mB[1][1]*mV[4] + mB[1][2]*mV[5] -
fC[12];
1211 fC[13]+= d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
1212 fC[14]+= d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
1214 d0= mB[2][0]*mV[0] + mB[2][1]*mV[1] + mB[2][2]*mV[3] -
fC[15];
1215 d1= mB[2][0]*mV[1] + mB[2][1]*mV[2] + mB[2][2]*mV[4] -
fC[16];
1216 d2= mB[2][0]*mV[3] + mB[2][1]*mV[4] + mB[2][2]*mV[5] -
fC[17];
1221 fC[18]+= d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
1222 fC[19]+= d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
1223 fC[20]+= d0*mB[2][0] + d1*mB[2][1] + d2*mB[2][2];
1225 d0= mB[3][0]*mV[0] + mB[3][1]*mV[1] + mB[3][2]*mV[3] -
fC[21];
1226 d1= mB[3][0]*mV[1] + mB[3][1]*mV[2] + mB[3][2]*mV[4] -
fC[22];
1227 d2= mB[3][0]*mV[3] + mB[3][1]*mV[4] + mB[3][2]*mV[5] -
fC[23];
1232 fC[24]+= d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
1233 fC[25]+= d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
1234 fC[26]+= d0*mB[2][0] + d1*mB[2][1] + d2*mB[2][2];
1235 fC[27]+= d0*mB[3][0] + d1*mB[3][1] + d2*mB[3][2];
1237 d0= mB[4][0]*mV[0] + mB[4][1]*mV[1] + mB[4][2]*mV[3] -
fC[28];
1238 d1= mB[4][0]*mV[1] + mB[4][1]*mV[2] + mB[4][2]*mV[4] -
fC[29];
1239 d2= mB[4][0]*mV[3] + mB[4][1]*mV[4] + mB[4][2]*mV[5] -
fC[30];
1244 fC[31]+= d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
1245 fC[32]+= d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
1246 fC[33]+= d0*mB[2][0] + d1*mB[2][1] + d2*mB[2][2];
1247 fC[34]+= d0*mB[3][0] + d1*mB[3][1] + d2*mB[3][2];
1248 fC[35]+= d0*mB[4][0] + d1*mB[4][1] + d2*mB[4][2];
1265 const fvec energy2 = mP[6]*mP[6], p2 = mP[3]*mP[3]+mP[4]*mP[4]+mP[5]*mP[5], mass2 = mass*mass;
1267 const fvec a = energy2 - p2 + 2.*mass2;
1268 const fvec b = -2.*(energy2 + p2);
1269 const fvec c = energy2 - p2 - mass2;
1273 fvec d = 4.*energy2*p2 - mass2*(energy2-p2-2.*mass2);
1275 lambda =
if3( qMask, ((energy2 + p2 -
sqrt(
d))/a), lambda );
1277 lambda =
if3(
fvec(mP[6]<Zero),
fvec(-1000000.f), lambda );
1280 for(iIter=0; iIter<100; iIter++)
1282 fvec lambda2 = lambda*lambda;
1283 fvec lambda4 = lambda2*lambda2;
1287 fvec f = -mass2 * lambda4 + a*lambda2 + b*lambda + c;
1288 fvec df = -4.*mass2 * lambda2*lambda + 2.*a*lambda + b;
1293 const fvec lpi = 1./(1. + lambda);
1294 const fvec lmi = 1./(1. - lambda);
1295 const fvec lp2i = lpi*lpi;
1296 const fvec lm2i = lmi*lmi;
1298 fvec lambda2 = lambda*lambda;
1300 fvec dfl = -4.*mass2 * lambda2*lambda + 2.*a*lambda + b;
1302 dfx[0] = -2.*(1. + lambda)*(1. + lambda)*mP[3];
1303 dfx[1] = -2.*(1. + lambda)*(1. + lambda)*mP[4];
1304 dfx[2] = -2.*(1. + lambda)*(1. + lambda)*mP[5];
1305 dfx[3] = 2.*(1. - lambda)*(1. - lambda)*mP[6];
1306 fvec dlx[4] = {1,1,1,1};
1308 for(
int i=0;
i<4;
i++)
1311 fvec dxx[4] = {mP[3]*lm2i, mP[4]*lm2i, mP[5]*lm2i, -mP[6]*lp2i};
1313 for(Int_t
i=0;
i<7;
i++)
1314 for(Int_t j=0; j<7; j++)
1320 for(Int_t
i=3;
i<7;
i++)
1321 for(Int_t j=3; j<7; j++)
1322 mJ[
i][j] = dlx[j-3]*dxx[
i-3];
1324 for(Int_t
i=3;
i<6;
i++)
1330 for(Int_t
i=0;
i<7;
i++) {
1331 for(Int_t j=0; j<7; j++) {
1333 for(Int_t k=0; k<7; k++) {
1334 mCJ[
i][j] += mC[
IJ(
i,k)]*mJ[j][k];
1339 for(Int_t
i=0;
i<7; ++
i){
1340 for(Int_t j=0; j<=
i; ++j){
1341 mC[
IJ(
i,j)] =
if3(mask, Zero, mC[
IJ(
i,j)]);
1342 for(Int_t l=0; l<7; l++){
1343 mC[
IJ(
i,j)] +=
if3(mask, mJ[
i][l]*mCJ[l][j], Zero);
1348 mP[3] *=
if3(mask, lmi, One);
1349 mP[4] *=
if3(mask, lmi, One);
1350 mP[5] *=
if3(mask, lmi, One);
1351 mP[6] *=
if3(mask, lpi, One);
1371 fvec m2 = Mass*Mass;
1372 fvec s2 = m2*SigmaMass*SigmaMass;
1378 mH[0] = mH[1] = mH[2] = 0.;
1385 fvec zeta = e0*e0 - e0*
fP[6];
1386 zeta = m2 - (
fP[6]*
fP[6]-p2);
1388 fvec mCHt[8], s2_est=0;
1389 for( Int_t
i=0;
i<8; ++
i ){
1391 for (Int_t j=0;j<8;++j) mCHt[
i] +=
Cij(
i,j)*mH[j];
1392 s2_est += mH[
i]*mCHt[
i];
1399 fvec w2 = 1./( s2 + s2_est );
1400 fChi2 += zeta*zeta*w2;
1402 for( Int_t
i=0, ii=0;
i<8; ++
i ){
1403 fvec ki = mCHt[
i]*w2;
1405 for(Int_t j=0;j<=
i;++j)
fC[ii++] -= ki*mCHt[j];
1417 h[0] = h[1] = h[2] = h[3] = h[4] = h[5] = h[6] = 0;
1421 for(Int_t
i=0;
i<8;++
i) zeta -= h[
i]*(
fP[
i]-
fP[
i]);
1427 fChi2 += zeta*zeta*s;
1429 for( Int_t
i=0, ii=0;
i<7; ++
i ){
1432 for(Int_t j=0;j<=
i;++j)
fC[ii++] -= ki*
fC[28+j];
1441 Bool_t isAtVtxGuess )
1499 fvec constraintC[6];
1501 if( IsConstrained ){
1502 for(Int_t
i=0;
i<6;++
i) constraintC[
i]=
fC[
i];
1505 for(Int_t
i=0;
i<6;++
i) constraintC[
i]=0.;
1514 for( Int_t iter=0; iter<maxIter; iter++ ){
1531 for(Int_t
i=0;
i<6; ++
i)
fC[
i]=constraintC[
i];
1532 for(Int_t
i=6;
i<36;++
i)
fC[
i]=0.;
1535 fNDF = IsConstrained ?0 :-3;
1539 for( Int_t itr =0; itr<nDaughters; itr++ ){
1542 if( iter<maxIter-1){
1561 const fvec kCLight =
fQ*0.000299792458;
1562 fld[0]*=kCLight; fld[1]*=kCLight; fld[2]*=kCLight;
1570 if( ToProduction ){ h[0]=-h[0]; h[1]=-h[1]; h[2]=-h[2]; }
1571 h[3] = h[1]*fld[2]-h[2]*fld[1];
1572 h[4] = h[2]*fld[0]-h[0]*fld[2];
1573 h[5] = h[0]*fld[1]-h[1]*fld[0];
1577 c =
fC[28]+h[0]*
fC[35];
1578 fC[ 0]+= h[0]*(c+
fC[28]);
1581 fC[ 1]+= h[1]*
fC[28] + h[0]*
fC[29];
1582 c =
fC[29]+h[1]*
fC[35];
1583 fC[ 2]+= h[1]*(c+
fC[29]);
1586 fC[ 3]+= h[2]*
fC[28] + h[0]*
fC[30];
1587 fC[ 4]+= h[2]*
fC[29] + h[1]*
fC[30];
1588 c =
fC[30]+h[2]*
fC[35];
1589 fC[ 5]+= h[2]*(c+
fC[30]);
1592 fC[ 6]+= h[3]*
fC[28] + h[0]*
fC[31];
1593 fC[ 7]+= h[3]*
fC[29] + h[1]*
fC[31];
1594 fC[ 8]+= h[3]*
fC[30] + h[2]*
fC[31];
1595 c =
fC[31]+h[3]*
fC[35];
1596 fC[ 9]+= h[3]*(c+
fC[31]);
1599 fC[10]+= h[4]*
fC[28] + h[0]*
fC[32];
1600 fC[11]+= h[4]*
fC[29] + h[1]*
fC[32];
1601 fC[12]+= h[4]*
fC[30] + h[2]*
fC[32];
1602 fC[13]+= h[4]*
fC[31] + h[3]*
fC[32];
1603 c =
fC[32]+h[4]*
fC[35];
1604 fC[14]+= h[4]*(c+
fC[32]);
1607 fC[15]+= h[5]*
fC[28] + h[0]*
fC[33];
1608 fC[16]+= h[5]*
fC[29] + h[1]*
fC[33];
1609 fC[17]+= h[5]*
fC[30] + h[2]*
fC[33];
1610 fC[18]+= h[5]*
fC[31] + h[3]*
fC[33];
1611 fC[19]+= h[5]*
fC[32] + h[4]*
fC[33];
1612 c =
fC[33]+h[5]*
fC[35];
1613 fC[20]+= h[5]*(c+
fC[33]);
1616 fC[21]+= h[0]*
fC[34];
1617 fC[22]+= h[1]*
fC[34];
1618 fC[23]+= h[2]*
fC[34];
1619 fC[24]+= h[3]*
fC[34];
1620 fC[25]+= h[4]*
fC[34];
1621 fC[26]+= h[5]*
fC[34];
1658 Vertex.
fC[3]+
fC[3], Vertex.
fC[4]+
fC[4], Vertex.
fC[5]+
fC[5]};
1665 l =
sqrt( dx*dx + dy*dy + dz*dz );
1666 dl = c[0]*dx*dx + c[2]*dy*dy + c[5]*dz*dz + 2*(c[1]*dx*dy + c[3]*dx*dz + c[4]*dy*dz);
1670 if(isParticleFromVertex)
1672 *isParticleFromVertex =
fvec(ok &
fvec( l<
fvec(3*dl) ));
1682 *isParticleFromVertex =
fvec( (*isParticleFromVertex) |
fvec(!(*isParticleFromVertex) &
fvec(
cos<Zero) ) );
1692 const fvec kCLight = 0.000299792458;
1696 fvec dx = xyz[0] -
fP[0];
1697 fvec dy = xyz[1] -
fP[1];
1701 const fvec LocalSmall = 1.e-8;
1703 dS =
if3(mask, a/pt2, (
atan2( bq*a, pt2 + bq*(dy*
fP[3] -dx*
fP[4]) )/bq));
1711 fvec ss[2], g[2][5];
1715 for( Int_t
i=0;
i<2;
i++){
1717 fvec c = TMath::Cos(bs), s = TMath::Sin(bs);
1719 if( TMath::Abs(bq)>1.e-8){
1723 const fvec kOvSqr6 = 1./TMath::Sqrt(6.);
1724 sB = (1.-bs*kOvSqr6)*(1.+bs*kOvSqr6)*ss[
i];
1727 g[
i][0] =
fP[0] + sB*px + cB*py;
1728 g[
i][1] =
fP[1] - cB*px + sB*py;
1729 g[
i][2] =
fP[2] + ss[
i]*pz;
1730 g[
i][3] = + c*px + s*py;
1731 g[
i][4] = - s*px + c*py;
1737 for( Int_t j=0; j<2; j++){
1738 fvec xx = g[j][0]-xyz[0];
1739 fvec yy = g[j][1]-xyz[1];
1740 fvec zz = g[j][2]-xyz[2];
1741 fvec d = xx*xx + yy*yy + zz*zz;
1750 fvec x= g[
i][0], y= g[
i][1], z= g[
i][2], ppx= g[
i][3], ppy= g[
i][4];
1751 fvec ddx = x-xyz[0];
1752 fvec ddy = y-xyz[1];
1753 fvec ddz = z-xyz[2];
1754 fvec c = ddx*ppx + ddy*ppy + ddz*pz ;
1755 fvec pp2 = ppx*ppx + ppy*ppy + pz*pz;
1756 if( TMath::Abs(pp2)>1.e-8 ){
1770 const fvec kCLight = 0.000299792458;
1774 fvec dx = xyz[0] -
fP[0];
1775 fvec dy = -xyz[2] +
fP[2];
1779 const fvec LocalSmall = 1.e-8;
1781 dS =
if3(mask, a/pt2, (
atan2( bq*a, pt2 + bq*(dy*
fP[3] +dx*
fP[5]) )/bq));
1797 const fvec kCLight = 0.000299792458;
1800 fvec bq1 = B*p.
fQ*kCLight;
1801 fvec s=Zero, ds=Zero, s1=Zero, ds1=Zero;
1803 const fvec LocalSmall = 1.e-8;
1808 const fvec two = 2.;
1809 const fvec four = 2.;
1812 fvec d2 = (dx*dx+dy*dy);
1814 fvec p2 = (px *px + py *py);
1815 fvec p21 = (px1*px1 + py1*py1);
1817 fvec a = (px*py1 - py*px1);
1818 fvec b = (px*px1 + py*py1);
1820 fvec ldx = bq*bq1*dx - bq1*py + bq*py1 ;
1821 fvec ldy = bq*bq1*dy + bq1*px - bq*px1 ;
1822 fvec l2 = ldx*ldx + ldy*ldy;
1824 fvec cS = bq1*p2 + bq*bq1*(dy* px - dx* py) - bq*b;
1825 fvec cS1= bq*p21 - bq*bq1*(dy*px1 - dx*py1) - bq1*b;
1827 fvec ca = bq*bq*bq1*d2 + two*( cS + bq*bq*(py1*dx-px1*dy)) ;
1828 fvec ca1 = bq*bq1*bq1*d2 + two*( cS1 - bq1*bq1*(py*dx-px*dy)) ;
1830 fvec sa = 4*l2*p2 - ca*ca;
1831 fvec sa1 = 4*l2*p21 - ca1*ca1;
1835 const fvec sa1Neg =
fvec(sa1<Zero);
1836 sa1= (!sa1Neg) & sa1;
1839 s =
if3( bq_big, (
atan2( bq*( bq1*(dx*px +dy*py) + a ) , cS )/bq), (( (dx*px + dy*py) + (py*px1-px*py1)/bq1)/p2) );
1840 ds =
if3( bq_big, (
atan2(
sqrt(sa),ca)/bq) , (s*s - (d2-two*(px1*dy-py1*dx)/bq1)/p2) );
1842 ds = (
fvec((!dsNeg) & (!bq_big)) &
sqrt(ds) ) + (bq_big & ds);
1844 s1 =
if3( bq1_big, (
atan2( -bq1*( bq*(dx*px1+dy*py1) + a), cS1 )/bq1), ((-(dx*px1 + dy*py1) + (py*px1-px*py1)/bq)/p21) );
1845 ds1 =
if3( bq1_big, (
atan2(
sqrt(sa1),ca1)/bq1) , (s1*s1 - (d2+two*(px*dy-py*dx)/bq)/p21) );
1847 ds1 = (
fvec((!ds1Neg) & (!bq1_big)) &
sqrt(ds1) ) + (bq1_big & ds1);
1850 fvec ss[2], ss1[2], g[2][5],g1[2][5];
1857 for( Int_t
i=0;
i<2;
i++){
1863 sB =
if3( bq_big, (sss/bq), ((One-bs*kOvSqr6)*(One+bs*kOvSqr6)*ss[
i]));
1864 cB =
if3( bq_big, ((One-c)/bq), (.5*sB*bs));
1866 g[
i][0] =
fP[0] + sB*px + cB*py;
1867 g[
i][1] =
fP[1] - cB*px + sB*py;
1868 g[
i][2] =
fP[2] + ss[
i]*pz;
1869 g[
i][3] = + c*px + sss*py;
1870 g[
i][4] = - sss*px + c*py;
1873 c =
cos(bs); sss =
sin(bs);
1875 sB =
if3( bq1_big, (sss/bq1), ((One-bs*kOvSqr6)*(One+bs*kOvSqr6)*ss1[
i]));
1876 cB =
if3( bq1_big, ((One-c)/bq1), (.5*sB*bs));
1878 g1[
i][0] = p.
fP[0] + sB*px1 + cB*py1;
1879 g1[
i][1] = p.
fP[1] - cB*px1 + sB*py1;
1880 g1[
i][2] = p.
fP[2] + ss[
i]*pz1;
1881 g1[
i][3] = + c*px1 + sss*py1;
1882 g1[
i][4] = - sss*px1 + c*py1;
1889 for( Int_t j=0; j<2; j++){
1890 for( Int_t j1=0; j1<2; j1++){
1891 fvec xx = g[j][0]-g1[j1][0];
1892 fvec yy = g[j][1]-g1[j1][1];
1893 fvec zz = g[j][2]-g1[j1][2];
1894 fvec d = xx*xx + yy*yy + zz*zz;
1897 DS = (mask & ss[j]) + ((!mask) & DS);
1898 DS1 = (mask & ss1[j]) + ((!mask) & DS1);
1899 dMin = (mask &
d) + ((!mask) & dMin);
1904 fvec x= g[
i][0], y= g[
i][1], z= g[
i][2], ppx= g[
i][3], ppy= g[
i][4];
1905 fvec x1=g1[i1][0], y1= g1[i1][1], z1= g1[i1][2], ppx1= g1[i1][3], ppy1= g1[i1][4];
1909 fvec a = ppx*ppx1 + ppy*ppy1 + pz*pz1;
1910 fvec b = dx*ppx1 + dy*ppy1 + dz*pz1;
1911 fvec c = dx*ppx + dy*ppy + dz*pz ;
1912 fvec pp2 = ppx*ppx + ppy*ppy + pz*pz;
1913 fvec pp21= ppx1*ppx1 + ppy1*ppy1 + pz1*pz1;
1914 fvec det = pp2*pp21 - a*a;
1915 if(
fabs(det)>1.e-8 ){
1916 DS+=(a*b-pp21*c)/det;
1917 DS1+=(a*c-pp2*b)/det;
1935 const fvec kCLight = 0.000299792458;
1938 fvec bq1 = B*p.
fQ*kCLight;
1939 fvec s=Zero, ds=Zero, s1=Zero, ds1=Zero;
1941 const fvec LocalSmall = 1.e-8;
1946 const fvec two = 2.;
1947 const fvec four = 2.;
1950 fvec d2 = (dx*dx+dy*dy);
1952 fvec p2 = (px *px + py *py);
1953 fvec p21 = (px1*px1 + py1*py1);
1955 fvec a = (px*py1 - py*px1);
1956 fvec b = (px*px1 + py*py1);
1958 fvec ldx = bq*bq1*dx - bq1*py + bq*py1 ;
1959 fvec ldy = bq*bq1*dy + bq1*px - bq*px1 ;
1960 fvec l2 = ldx*ldx + ldy*ldy;
1962 fvec cS = bq1*p2 + bq*bq1*(dy* px - dx* py) - bq*b;
1963 fvec cS1= bq*p21 - bq*bq1*(dy*px1 - dx*py1) - bq1*b;
1965 fvec ca = bq*bq*bq1*d2 + two*( cS + bq*bq*(py1*dx-px1*dy)) ;
1966 fvec ca1 = bq*bq1*bq1*d2 + two*( cS1 - bq1*bq1*(py*dx-px*dy)) ;
1968 fvec sa = 4*l2*p2 - ca*ca;
1969 fvec sa1 = 4*l2*p21 - ca1*ca1;
1973 const fvec sa1Neg =
fvec(sa1<Zero);
1974 sa1= (!sa1Neg) & sa1;
1976 s =
if3( bq_big, (
atan2( bq*( bq1*(dx*px +dy*py) + a ) , cS )/bq), (( (dx*px + dy*py) + (py*px1-px*py1)/bq1)/p2) );
1977 ds =
if3( bq_big, (
atan2(
sqrt(sa),ca)/bq) , (s*s - (d2-two*(px1*dy-py1*dx)/bq1)/p2) );
1979 ds = (
fvec((!dsNeg) & (!bq_big)) &
sqrt(ds) ) + (bq_big & ds);
1981 s1 =
if3( bq1_big, (
atan2( -bq1*( bq*(dx*px1+dy*py1) + a), cS1 )/bq1), ((-(dx*px1 + dy*py1) + (py*px1-px*py1)/bq)/p21) );
1982 ds1 =
if3( bq1_big, (
atan2(
sqrt(sa1),ca1)/bq1) , (s1*s1 - (d2+two*(px*dy-py*dx)/bq)/p21) );
1984 ds1 = (
fvec((!ds1Neg) & (!bq1_big)) &
sqrt(ds1) ) + (bq1_big & ds1);
1987 fvec ss[2], ss1[2], g[2][5],g1[2][5];
1994 for( Int_t
i=0;
i<2;
i++){
2000 sB =
if3( bq_big, (sss/bq), ((One-bs*kOvSqr6)*(One+bs*kOvSqr6)*ss[
i]));
2001 cB =
if3( bq_big, ((One-c)/bq), (.5*sB*bs));
2003 g[
i][0] =
fP[0] + sB*px + cB*py;
2004 g[
i][1] = -
fP[2] - cB*px + sB*py;
2005 g[
i][2] =
fP[1] + ss[
i]*pz;
2006 g[
i][3] = + c*px + sss*py;
2007 g[
i][4] = - sss*px + c*py;
2010 c =
cos(bs); sss =
sin(bs);
2012 sB =
if3( bq1_big, (sss/bq1), ((One-bs*kOvSqr6)*(One+bs*kOvSqr6)*ss1[
i]));
2013 cB =
if3( bq1_big, ((One-c)/bq1), (.5*sB*bs));
2015 g1[
i][0] = p.
fP[0] + sB*px1 + cB*py1;
2016 g1[
i][1] = -p.
fP[2] - cB*px1 + sB*py1;
2017 g1[
i][2] = p.
fP[1] + ss[
i]*pz1;
2018 g1[
i][3] = + c*px1 + sss*py1;
2019 g1[
i][4] = - sss*px1 + c*py1;
2026 for( Int_t j=0; j<2; j++){
2027 for( Int_t j1=0; j1<2; j1++){
2028 fvec xx = g[j][0]-g1[j1][0];
2029 fvec yy = g[j][1]-g1[j1][1];
2030 fvec zz = g[j][2]-g1[j1][2];
2031 fvec d = xx*xx + yy*yy + zz*zz;
2034 DS = (mask & ss[j]) + ((!mask) & DS);
2035 DS1 = (mask & ss1[j]) + ((!mask) & DS1);
2036 dMin = (mask &
d) + ((!mask) & dMin);
2046 fvec p2 = r[3]*r[3] + r[4]*r[4] + r[5]*r[5];
2047 fvec dS =
if3(
fabs(p2) >
fvec(1.E-4), (( r[3]*(xyz[0]-r[0]) + r[4]*(xyz[1]-r[1]) + r[5]*(xyz[2]-r[2]) )/p2), Zero);
2060 dS =
if3(
fabs(dS)>1.E3, Zero, dS);
2074 fvec detp = p1p2*p1p2 - p12*p22;
2076 dS = (drp2*p1p2 - drp1*p22) /detp;
2077 dS1 = (drp2*p12 - drp1*p1p2)/detp;
2097 fvec dty = mTy[0]-mTy[1];
2099 r0[2] =
if3(
fabs(dty) > small, (mTy[0]*mZ[0]-mTy[1]*mZ[1] + mY[1] -mY[0])/dty, 0. );
2100 r0[1] = mY[0] + mTy[0]*(r0[2]-mZ[0]);
2127 const fvec kCLight = 0.000299792458;
2138 fvec sx=0, sy=0, sz=0, syy=0, syz=0, syyy=0, ssx=0, ssy=0, ssz=0, ssyy=0, ssyz=0, ssyyy=0;
2143 fvec p0[3], p1[3], p2[3];
2151 p2[0] =
fP[0] + px*dS;
2152 p2[1] =
fP[1] + py*dS;
2153 p2[2] =
fP[2] + pz*dS;
2155 p1[0] = 0.5*(p0[0]+p2[0]);
2156 p1[1] = 0.5*(p0[1]+p2[1]);
2157 p1[2] = 0.5*(p0[2]+p2[2]);
2165 fvec ssy1 = ( 7*fld[0][1] + 6*fld[1][1]-fld[2][1] )*c*dS*dS/96.;
2166 fvec ssy2 = ( fld[0][1] + 2*fld[1][1] )*c*dS*dS/6.;
2178 for(
int iF1=0; iF1<3; iF1++)
2179 for(
int iF2=0; iF2<3; iF2++)
2180 fld[iF1][iF2] =
if3( (
fabs(fld[iF1][iF2]) >
fvec(100.)), Zero, fld[iF1][iF2] );
2182 sx = c*( fld[0][0] + 4*fld[1][0] + fld[2][0] )*dS/6.;
2183 sy = c*( fld[0][1] + 4*fld[1][1] + fld[2][1] )*dS/6.;
2184 sz = c*( fld[0][2] + 4*fld[1][2] + fld[2][2] )*dS/6.;
2186 ssx = c*( fld[0][0] + 2*fld[1][0])*dS*dS/6.;
2187 ssy = c*( fld[0][1] + 2*fld[1][1])*dS*dS/6.;
2188 ssz = c*( fld[0][2] + 2*fld[1][2])*dS*dS/6.;
2190 fvec c2[3][3] = { { 5, -4, -1},{ 44, 80, -4},{ 11, 44, 5} };
2191 fvec cc2[3][3] = { { 38, 8, -4},{ 148, 208, -20},{ 3, 36, 3} };
2192 for(Int_t n=0; n<3; n++)
2193 for(Int_t
m=0;
m<3;
m++)
2195 syz += c2[n][
m]*fld[n][1]*fld[
m][2];
2196 ssyz += cc2[n][
m]*fld[n][1]*fld[
m][2];
2199 syz *= c*c*dS*dS/360.;
2200 ssyz *= c*c*dS*dS*dS/2520.;
2202 syy = c*( fld[0][1] + 4*fld[1][1] + fld[2][1] )*dS;
2203 syyy = syy*syy*syy / 1296;
2206 ssyy = ( fld[0][1]*( 38*fld[0][1] + 156*fld[1][1] - fld[2][1] )+
2207 fld[1][1]*( 208*fld[1][1] +16*fld[2][1] )+
2208 fld[2][1]*( 3*fld[2][1] )
2209 )*dS*dS*dS*c*c/2520.;
2212 fld[0][1]*( fld[0][1]*( 85*fld[0][1] + 526*fld[1][1] - 7*fld[2][1] )+
2213 fld[1][1]*( 1376*fld[1][1] +84*fld[2][1] )+
2214 fld[2][1]*( 19*fld[2][1] ) )+
2215 fld[1][1]*( fld[1][1]*( 1376*fld[1][1] +256*fld[2][1] )+
2216 fld[2][1]*( 62*fld[2][1] ) )+
2217 fld[2][1]*fld[2][1] *( 3*fld[2][1] )
2218 )*dS*dS*dS*dS*c*c*c/90720.;
2224 mJ[0]=dS-ssyy; mJ[1]=ssx; mJ[2]=ssyyy-ssy;
2225 mJ[3]=-ssz; mJ[4]=dS; mJ[5]=ssx+ssyz;
2227 mJ[6]=1-syy; mJ[7]=sx; mJ[8]=syyy-sy;
2228 mJ[9]=-sz; mJ[10]=sx+syz;
2232 P[0] =
fP[0] + mJ[0]*px + mJ[1]*py + mJ[2]*pz;
2233 P[1] =
fP[1] + mJ[3]*px + mJ[4]*py + mJ[5]*pz;
2234 P[2] =
fP[2] - mJ[2]*px - mJ[1]*py + mJ[0]*pz;
2235 P[3] = mJ[6]*px + mJ[7]*py + mJ[8]*pz;
2236 P[4] = mJ[9]*px + py + mJ[10]*pz;
2237 P[5] = -mJ[8]*px - mJ[7]*py + mJ[6]*pz;
2243 for(
int iC=0; iC<36; iC++)
2276 const fvec A00 =
S[0 ]+
S[6 ]*J[0]+
S[10]*J[1]+
S[15]*J[2];
2277 const fvec A10 =
S[1 ]+
S[7 ]*J[0]+
S[11]*J[1]+
S[16]*J[2];
2278 const fvec A20 =
S[3 ]+
S[8 ]*J[0]+
S[12]*J[1]+
S[17]*J[2];
2279 const fvec A30 =
S[6 ]+
S[9 ]*J[0]+
S[13]*J[1]+
S[18]*J[2];
2280 const fvec A40 =
S[10]+
S[13]*J[0]+
S[14]*J[1]+
S[19]*J[2];
2281 const fvec A50 =
S[15]+
S[18]*J[0]+
S[19]*J[1]+
S[20]*J[2];
2282 const fvec A60 =
S[21]+
S[24]*J[0]+
S[25]*J[1]+
S[26]*J[2];
2283 const fvec A70 =
S[28]+
S[31]*J[0]+
S[32]*J[1]+
S[33]*J[2];
2285 S[0 ] = A00+J[0]*A30+J[1]*A40+J[2]*A50;
2286 S[1 ] = A10+J[3]*A30+J[4]*A40+J[5]*A50;
2287 S[3 ] = A20-J[2]*A30-J[1]*A40+J[0]*A50;
2288 S[6 ] = J[6]*A30+J[7]*A40+J[8]*A50;
2289 S[10] = J[9]*A30+ A40+J[10]*A50;
2290 S[15] = -J[8]*A30-J[7]*A40+J[6]*A50;
2295 const fvec A11 =
S[2 ]+
S[7 ]*J[3]+
S[11]*J[4]+
S[16]*J[5];
2296 const fvec A21 =
S[4 ]+
S[8 ]*J[3]+
S[12]*J[4]+
S[17]*J[5];
2297 const fvec A31 =
S[7 ]+
S[9 ]*J[3]+
S[13]*J[4]+
S[18]*J[5];
2298 const fvec A41 =
S[11]+
S[13]*J[3]+
S[14]*J[4]+
S[19]*J[5];
2299 const fvec A51 =
S[16]+
S[18]*J[3]+
S[19]*J[4]+
S[20]*J[5];
2300 const fvec A61 =
S[22]+
S[24]*J[3]+
S[25]*J[4]+
S[26]*J[5];
2301 const fvec A71 =
S[29]+
S[31]*J[3]+
S[32]*J[4]+
S[33]*J[5];
2303 S[2 ] = A11+J[3]*A31+J[4]*A41+J[5]*A51;
2304 S[4 ] = A21-J[2]*A31-J[1]*A41+J[0]*A51;
2305 S[7 ] = J[6]*A31+J[7]*A41+J[8]*A51;
2306 S[11] = J[9]*A31+ A41+J[10]*A51;
2307 S[16] = -J[8]*A31-J[7]*A41+J[6]*A51;
2313 const fvec A22 =
S[5 ]-
S[8 ]*J[2]-
S[12]*J[1]+
S[17]*J[0];
2314 const fvec A32 =
S[8 ]-
S[9 ]*J[2]-
S[13]*J[1]+
S[18]*J[0];
2315 const fvec A42 =
S[12]-
S[13]*J[2]-
S[14]*J[1]+
S[19]*J[0];
2316 const fvec A52 =
S[17]-
S[18]*J[2]-
S[19]*J[1]+
S[20]*J[0];
2317 const fvec A62 =
S[23]-
S[24]*J[2]-
S[25]*J[1]+
S[26]*J[0];
2318 const fvec A72 =
S[30]-
S[31]*J[2]-
S[32]*J[1]+
S[33]*J[0];
2320 S[5 ] = A22-J[2]*A32-J[1]*A42+J[0]*A52;
2321 S[8 ] = J[6]*A32+J[7]*A42+J[8]*A52;
2322 S[12] = J[9]*A32+ A42+J[10]*A52;
2323 S[17] = -J[8]*A32-J[7]*A42+J[6]*A52;
2330 const fvec A33 =
S[9] *J[6]+
S[13]*J[7]+
S[18]*J[8];
2331 const fvec A43 =
S[13]*J[6]+
S[14]*J[7]+
S[19]*J[8];
2332 const fvec A53 =
S[18]*J[6]+
S[19]*J[7]+
S[20]*J[8];
2333 const fvec A63 =
S[24]*J[6]+
S[25]*J[7]+
S[26]*J[8];
2334 const fvec A73 =
S[31]*J[6]+
S[32]*J[7]+
S[33]*J[8];
2339 const fvec A34 =
S[9] *J[9]+
S[13]+
S[18]*J[10];
2340 const fvec A44 =
S[13]*J[9]+
S[14]+
S[19]*J[10];
2341 const fvec A54 =
S[18]*J[9]+
S[19]+
S[20]*J[10];
2342 const fvec A64 =
S[24]*J[9]+
S[25]+
S[26]*J[10];
2343 const fvec A74 =
S[31]*J[9]+
S[32]+
S[33]*J[10];
2348 const fvec A35 = -
S[9] *J[8]-
S[13]*J[7]+
S[18]*J[6];
2349 const fvec A45 = -
S[13]*J[8]-
S[14]*J[7]+
S[19]*J[6];
2350 const fvec A55 = -
S[18]*J[8]-
S[19]*J[7]+
S[20]*J[6];
2351 const fvec A65 = -
S[24]*J[8]-
S[25]*J[7]+
S[26]*J[6];
2352 const fvec A75 = -
S[31]*J[8]-
S[32]*J[7]+
S[33]*J[6];
2355 S[9 ] = J[6]*A33+J[7]*A43+J[8]*A53;
2356 S[13] = J[9]*A33+ A43+J[10]*A53;
2357 S[18] = -J[8]*A33-J[7]*A43+J[6]*A53;
2361 S[14] = J[9]*A34+ A44+J[10]*A54;
2362 S[19] = -J[8]*A34-J[7]*A44+J[6]*A54;
2366 S[20] = -J[8]*A35-J[7]*A45+J[6]*A55;
2380 const fvec kCLight = 0.000299792458;
2387 const fvec LocalSmall = 1.e-10;
2389 sB =
if3(
fvec(LocalSmall <
fabs(bs)), (s/b), ((One-bs*kOvSqr6)*(One+bs*kOvSqr6)*t) );
2390 cB =
if3(
fvec(LocalSmall <
fabs(bs)), ((One-c)/b), (.5*sB*bs) );
2396 p[0] =
fP[0] + sB*px + cB*py;
2397 p[1] =
fP[1] - cB*px + sB*py;
2398 p[2] =
fP[2] + t*pz;
2400 p[4] = -s*px + c*py;
2435 c6=
fC[6], c7=
fC[7], c8=
fC[8], c17=
fC[17], c18=
fC[18],
2436 c24 =
fC[24], c31 =
fC[31];
2440 mJC13 = c7 - cB*
fC[9] + sB*
fC[13],
2441 mJC14 =
fC[11] - cBC13 + sB*
fC[14],
2443 mJC24 =
fC[12] + t*
fC[19],
2444 mJC33 = c*
fC[9] + s*
fC[13],
2445 mJC34 = c*
fC[13] + s*
fC[14],
2446 mJC43 = -s*
fC[9] + c*
fC[13],
2447 mJC44 = -s*
fC[13] + c*
fC[14];
2450 e[0]=
fC[0] + 2*(sB*c6 + cB*
fC[10]) + (sB*
fC[9] + 2*cBC13)*sB + cB*cB*
fC[14];
2451 e[1]=
fC[1] - cB*c6 + sB*
fC[10] + mJC13*sB + mJC14*cB;
2452 e[2]=
fC[2] - cB*c7 + sB*
fC[11] - mJC13*cB + mJC14*sB;
2453 e[3]=
fC[3] + t*
fC[15] + mJC23*sB + mJC24*cB;
2454 e[4]=
fC[4] + t*
fC[16] - mJC23*cB + mJC24*sB;
2456 e[15]=
fC[15] + c18*sB +
fC[19]*cB;
2457 e[16]=
fC[16] - c18*cB +
fC[19]*sB;
2458 e[17]= c17 +
fC[20]*t;
2459 e[18]= c18*c +
fC[19]*s;
2460 e[19]= -c18*s +
fC[19]*c;
2462 e[5]=
fC[5] + (c17 + e[17] )*t;
2464 e[6]= c*c6 + s*
fC[10] + mJC33*sB + mJC34*cB;
2465 e[7]= c*c7 + s*
fC[11] - mJC33*cB + mJC34*sB;
2466 e[8]= c*c8 + s*
fC[12] + e[18]*t;
2467 e[9]= mJC33*c + mJC34*s;
2468 e[10]= -s*c6 + c*
fC[10] + mJC43*sB + mJC44*cB;
2471 e[11]= -s*c7 + c*
fC[11] - mJC43*cB + mJC44*sB;
2472 e[12]= -s*c8 + c*
fC[12] + e[19]*t;
2473 e[13]= mJC43*c + mJC44*s;
2474 e[14]= -mJC43*s + mJC44*c;
2476 e[21]=
fC[21] +
fC[25]*cB + c24*sB;
2477 e[22]=
fC[22] - c24*cB +
fC[25]*sB;
2478 e[23]=
fC[23] +
fC[26]*t;
2479 e[24]= c*c24 + s*
fC[25];
2480 e[25]= c*
fC[25] - c24*s;
2483 e[28]=
fC[28] +
fC[32]*cB + c31*sB;
2484 e[29]=
fC[29] - c31*cB +
fC[32]*sB;
2485 e[30]=
fC[30] +
fC[33]*t;
2486 e[31]= c*c31 + s*
fC[32];
2487 e[32]= c*
fC[32] - s*c31;
2507 fvec d[3]={ vtx[0]-mP[0], vtx[1]-mP[1], vtx[2]-mP[2]};
2508 return sqrt(
d[0]*
d[0]+
d[1]*
d[1]+
d[2]*
d[2] );
2518 fvec mP[8], mC[36], mP1[8], mC1[36];
2521 fvec dx = mP[0]-mP1[0];
2522 fvec dy = mP[1]-mP1[1];
2523 fvec dz = mP[2]-mP1[2];
2524 return sqrt(dx*dx+dy*dy+dz*dz);
2545 fvec d[3]={
v[0]-mP[0],
v[1]-mP[1],
v[2]-mP[2]};
2548 (mP[3]*mP[3]+mP[4]*mP[4]+mP[5]*mP[5]) );
2551 fvec h[3] = { mP[3]*sigmaS, mP[4]*sigmaS, mP[5]*sigmaS };
2555 mC[1] +h[1]*h[0], mC[2] +h[1]*h[1],
2556 mC[3] +h[2]*h[0], mC[4] +h[2]*h[1], mC[5] +h[2]*h[2] };
2569 mS[0] = mSi[2]*mSi[5] - mSi[4]*mSi[4];
2570 mS[1] = mSi[3]*mSi[4] - mSi[1]*mSi[5];
2571 mS[2] = mSi[0]*mSi[5] - mSi[3]*mSi[3];
2572 mS[3] = mSi[1]*mSi[4] - mSi[2]*mSi[3];
2573 mS[4] = mSi[1]*mSi[3] - mSi[0]*mSi[4];
2574 mS[5] = mSi[0]*mSi[2] - mSi[1]*mSi[1];
2576 fvec s = ( mSi[0]*mS[0] + mSi[1]*mS[1] + mSi[3]*mS[3] );
2579 return sqrt(
fabs(s*( ( mS[0]*
d[0] + mS[1]*
d[1] + mS[3]*
d[2])*
d[0]
2580 +(mS[1]*
d[0] + mS[2]*
d[1] + mS[4]*
d[2])*
d[1]
2581 +(mS[3]*
d[0] + mS[4]*
d[1] + mS[5]*
d[2])*
d[2] ))/2);
2592 fvec mP1[8], mC1[36];
2595 fvec d[3]={
fP[0]-mP1[0],
fP[1]-mP1[1],
fP[2]-mP1[2]};
2598 (mP1[3]*mP1[3]+mP1[4]*mP1[4]+mP1[5]*mP1[5]) );
2600 fvec h[3] = { mP1[3]*sigmaS, mP1[4]*sigmaS, mP1[5]*sigmaS };
2640 fvec mSi[6] = { mV[0]-Vtx.
fC[0],
2641 mV[1]-Vtx.
fC[1], mV[2]-Vtx.
fC[2],
2642 mV[3]-Vtx.
fC[3], mV[4]-Vtx.
fC[4], mV[5]-Vtx.
fC[5] };
2644 mS[0] = mSi[2]*mSi[5] - mSi[4]*mSi[4];
2645 mS[1] = mSi[3]*mSi[4] - mSi[1]*mSi[5];
2646 mS[2] = mSi[0]*mSi[5] - mSi[3]*mSi[3];
2647 mS[3] = mSi[1]*mSi[4] - mSi[2]*mSi[3];
2648 mS[4] = mSi[1]*mSi[3] - mSi[0]*mSi[4];
2649 mS[5] = mSi[0]*mSi[2] - mSi[1]*mSi[1];
2651 fvec s = ( mSi[0]*mS[0] + mSi[1]*mS[1] + mSi[3]*mS[3] );
2663 fvec zeta[3] = {
m[0]-Vtx.
fP[0],
m[1]-Vtx.
fP[1],
m[2]-Vtx.
fP[2] };
2667 fvec mCHt0[3], mCHt1[3], mCHt2[3];
2669 mCHt0[0]=Vtx.
fC[ 0] ; mCHt1[0]=Vtx.
fC[ 1] ; mCHt2[0]=Vtx.
fC[ 3] ;
2670 mCHt0[1]=Vtx.
fC[ 1] ; mCHt1[1]=Vtx.
fC[ 2] ; mCHt2[1]=Vtx.
fC[ 4] ;
2671 mCHt0[2]=Vtx.
fC[ 3] ; mCHt1[2]=Vtx.
fC[ 4] ; mCHt2[2]=Vtx.
fC[ 5] ;
2675 fvec k0[3], k1[3], k2[3];
2677 for(Int_t
i=0;
i<3;++
i){
2678 k0[
i] = mCHt0[
i]*mS[0] + mCHt1[
i]*mS[1] + mCHt2[
i]*mS[3];
2679 k1[
i] = mCHt0[
i]*mS[1] + mCHt1[
i]*mS[2] + mCHt2[
i]*mS[4];
2680 k2[
i] = mCHt0[
i]*mS[3] + mCHt1[
i]*mS[4] + mCHt2[
i]*mS[5];
2685 fvec dChi2 = -(mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2])*zeta[0]
2686 - (mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2])*zeta[1]
2687 - (mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2])*zeta[2];
2692 for(Int_t
i=0;
i<3;++
i)
2693 Vtx.
fP[
i] -= (mask & (k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2]) );
2696 for(Int_t
i=0, k=0;
i<3;++
i){
2697 for(Int_t j=0;j<=
i;++j,++k)
2698 Vtx.
fC[k] += (mask & (k0[
i]*mCHt0[j] + k1[
i]*mCHt1[j] + k2[
i]*mCHt2[j]));
2704 Vtx.
fChi2 += (mask & dChi2);
2720 fvec mS[6]= { mV[0] - Vtx.
fC[0],
2721 mV[1] - Vtx.
fC[1], mV[2] - Vtx.
fC[2],
2722 mV[3] - Vtx.
fC[3], mV[4] - Vtx.
fC[4], mV[5] - Vtx.
fC[5] };
2727 fvec zeta[3] = {
m[0]-Vtx.
fP[0],
m[1]-Vtx.
fP[1],
m[2]-Vtx.
fP[2] };
2731 fvec mCHt0[7], mCHt1[7], mCHt2[7];
2733 mCHt0[0]=mV[ 0] ; mCHt1[0]=mV[ 1] ; mCHt2[0]=mV[ 3] ;
2734 mCHt0[1]=mV[ 1] ; mCHt1[1]=mV[ 2] ; mCHt2[1]=mV[ 4] ;
2735 mCHt0[2]=mV[ 3] ; mCHt1[2]=mV[ 4] ; mCHt2[2]=mV[ 5] ;
2736 mCHt0[3]=Vtx.
fC[ 6]-mV[ 6]; mCHt1[3]=Vtx.
fC[ 7]-mV[ 7]; mCHt2[3]=Vtx.
fC[ 8]-mV[ 8];
2737 mCHt0[4]=Vtx.
fC[10]-mV[10]; mCHt1[4]=Vtx.
fC[11]-mV[11]; mCHt2[4]=Vtx.
fC[12]-mV[12];
2738 mCHt0[5]=Vtx.
fC[15]-mV[15]; mCHt1[5]=Vtx.
fC[16]-mV[16]; mCHt2[5]=Vtx.
fC[17]-mV[17];
2739 mCHt0[6]=Vtx.
fC[21]-mV[21]; mCHt1[6]=Vtx.
fC[22]-mV[22]; mCHt2[6]=Vtx.
fC[23]-mV[23];
2743 fvec k0[7], k1[7], k2[7];
2745 for(Int_t
i=0;
i<7;++
i){
2746 k0[
i] = mCHt0[
i]*mS[0] + mCHt1[
i]*mS[1] + mCHt2[
i]*mS[3];
2747 k1[
i] = mCHt0[
i]*mS[1] + mCHt1[
i]*mS[2] + mCHt2[
i]*mS[4];
2748 k2[
i] = mCHt0[
i]*mS[3] + mCHt1[
i]*mS[4] + mCHt2[
i]*mS[5];
2753 Vtx.
fP[ 3] -=
m[ 3];
2754 Vtx.
fP[ 4] -=
m[ 4];
2755 Vtx.
fP[ 5] -=
m[ 5];
2756 Vtx.
fP[ 6] -=
m[ 6];
2758 Vtx.
fC[ 9] -= mV[ 9];
2759 Vtx.
fC[13] -= mV[13];
2760 Vtx.
fC[14] -= mV[14];
2761 Vtx.
fC[18] -= mV[18];
2762 Vtx.
fC[19] -= mV[19];
2763 Vtx.
fC[20] -= mV[20];
2764 Vtx.
fC[24] -= mV[24];
2765 Vtx.
fC[25] -= mV[25];
2766 Vtx.
fC[26] -= mV[26];
2767 Vtx.
fC[27] -= mV[27];
2771 for(Int_t
i=0;
i<3;++
i)
2772 Vtx.
fP[
i] =
m[
i] - (k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2]);
2773 for(Int_t
i=3;
i<7;++
i)
2774 Vtx.
fP[
i] = Vtx.
fP[
i] - (k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2]);
2778 fvec ffC[28] = { -mV[ 0],
2780 -mV[ 3], -mV[ 4], -mV[ 5],
2781 mV[ 6], mV[ 7], mV[ 8], Vtx.
fC[ 9],
2782 mV[10], mV[11], mV[12], Vtx.
fC[13], Vtx.
fC[14],
2783 mV[15], mV[16], mV[17], Vtx.
fC[18], Vtx.
fC[19], Vtx.
fC[20],
2784 mV[21], mV[22], mV[23], Vtx.
fC[24], Vtx.
fC[25], Vtx.
fC[26], Vtx.
fC[27] };
2786 for(Int_t
i=0, k=0;
i<7;++
i){
2787 for(Int_t j=0;j<=
i;++j,++k){
2788 Vtx.
fC[k] = ffC[k] + (k0[
i]*mCHt0[j] + k1[
i]*mCHt1[j] + k2[
i]*mCHt2[j] );
2796 Vtx.
fChi2 -= ((mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2])*zeta[0]
2797 +(mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2])*zeta[1]
2798 +(mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2])*zeta[2]);
2806 P[0] =
fP[0] + dS*
fP[3];
2807 P[1] =
fP[1] + dS*
fP[4];
2808 P[2] =
fP[2] + dS*
fP[5];
2822 C[ 0] =
fC[ 0] + dS*(
fC[ 6] + c6 );
2823 C[ 2] =
fC[ 2] + dS*(
fC[11] + c11 );
2824 C[ 5] =
fC[ 5] + dS*(
fC[17] + c17 );
2826 C[ 7] =
fC[ 7] + sc13;
2827 C[ 8] =
fC[ 8] + sc18;
2830 C[12] =
fC[12] + sc19;
2832 C[ 1] =
fC[ 1] + dS*(
fC[10] + C[ 7] );
2833 C[ 3] =
fC[ 3] + dS*(
fC[15] + C[ 8] );
2834 C[ 4] =
fC[ 4] + dS*(
fC[16] + C[12] );
2837 C[10] =
fC[10] + sc13;
2842 C[15] =
fC[15] + sc18;
2843 C[16] =
fC[16] + sc19;
2849 C[21] =
fC[21] + dS*
fC[24];
2850 C[22] =
fC[22] + dS*
fC[25];
2851 C[23] =
fC[23] + dS*
fC[26];
2857 C[28] =
fC[28] + dS*
fC[31];
2858 C[29] =
fC[29] + dS*
fC[32];
2859 C[30] =
fC[30] + dS*
fC[33];
2887 fP[0] = .5*(
fP[0] +
m[0] );
2888 fP[1] = .5*(
fP[1] +
m[1] );
2889 fP[2] = .5*(
fP[2] +
m[2] );
2896 fvec daughterP[2][8], daughterC[2][36];
2901 for(
int iter=0; iter<nIter; iter++){
2922 for(
int id=0;
id<2;
id++ ){
2924 fvec *p = daughterP[id];
2925 fvec *mC = daughterC[id];
2934 mB[0][0] = mC[ 6]*mAi[0] + mC[ 7]*mAi[1] + mC[ 8]*mAi[3];
2935 mB[0][1] = mC[ 6]*mAi[1] + mC[ 7]*mAi[2] + mC[ 8]*mAi[4];
2936 mB[0][2] = mC[ 6]*mAi[3] + mC[ 7]*mAi[4] + mC[ 8]*mAi[5];
2938 mB[1][0] = mC[10]*mAi[0] + mC[11]*mAi[1] + mC[12]*mAi[3];
2939 mB[1][1] = mC[10]*mAi[1] + mC[11]*mAi[2] + mC[12]*mAi[4];
2940 mB[1][2] = mC[10]*mAi[3] + mC[11]*mAi[4] + mC[12]*mAi[5];
2942 mB[2][0] = mC[15]*mAi[0] + mC[16]*mAi[1] + mC[17]*mAi[3];
2943 mB[2][1] = mC[15]*mAi[1] + mC[16]*mAi[2] + mC[17]*mAi[4];
2944 mB[2][2] = mC[15]*mAi[3] + mC[16]*mAi[4] + mC[17]*mAi[5];
2946 fvec z[3] = { v0[0]-p[0], v0[1]-p[1], v0[2]-p[2] };
2948 vtxMom[id][0] = p[3] + mB[0][0]*z[0] + mB[0][1]*z[1] + mB[0][2]*z[2];
2949 vtxMom[id][1] = p[4] + mB[1][0]*z[0] + mB[1][1]*z[1] + mB[1][2]*z[2];
2950 vtxMom[id][2] = p[5] + mB[2][0]*z[0] + mB[2][1]*z[1] + mB[2][2]*z[2];
2962 fvec mpx0 = vtxMom[0][0]+vtxMom[1][0];
2963 fvec mpy0 = vtxMom[0][1]+vtxMom[1][1];
2964 fvec mpt0 =
sqrt(mpx0*mpx0 + mpy0*mpy0);
2967 fvec ca0 = mpx0/mpt0;
2968 fvec sa0 = mpy0/mpt0;
2969 fvec r[3] = { v0[0], v0[1], v0[2] };
2970 fvec mC[3][3] = {{1000., 0 , 0 },
2975 for(
int id=0;
id<2;
id++ ){
2976 const fvec kCLight = 0.000299792458;
2977 fvec q = Bz*daughters[id]->
GetQ()*kCLight;
2978 fvec px0 = vtxMom[id][0];
2979 fvec py0 = vtxMom[id][1];
2980 fvec pz0 = vtxMom[id][2];
2982 fvec mG[3][6], mB[3], mH[3][3];
2994 mG[0][3] = -sa0*px0/pt0;
2995 mG[0][4] = 1 -sa0*py0/pt0;
3000 mB[0] = py0 - sa0*pt0 - mG[0][3]*px0 - mG[0][4]*py0 ;
3007 mG[1][3] = -1 + ca0*px0/pt0;
3008 mG[1][4] = + ca0*py0/pt0;
3013 mB[1] = -px0 + ca0*pt0 - mG[1][3]*px0 - mG[1][4]*py0 ;
3017 mG[2][0] = -pz0*ca0;
3018 mG[2][1] = -pz0*sa0;
3019 mG[2][2] = px0*ca0 + py0*sa0;
3024 mH[2][0] = mG[2][0];
3025 mH[2][1] = mG[2][1];
3026 mH[2][2] = mG[2][2];
3037 for(
int i=0;
i<3;
i++ ){
3039 for(
int k=0; k<6; k++ )
m[
i]+=mG[
i][k]*daughterP[
id][k];
3041 for(
int i=0;
i<3;
i++ ){
3042 for(
int j=0; j<6; j++ ){
3044 for(
int k=0; k<6; k++ ) mGV[
i][j]+=mG[
i][k]*daughterC[
id][
IJ(k,j) ];
3047 for(
int i=0, k=0;
i<3;
i++ ){
3048 for(
int j=0; j<=
i; j++,k++ ){
3050 for(
int l=0; l<6; l++ ) mV[k]+=mGV[
i][l]*mG[j][l];
3060 for(
int i=0;
i<3;
i++ ){
3062 for(
int k=0; k<3; k++ ) mHr[
i]+= mH[
i][k]*r[k];
3065 for(
int i=0;
i<3;
i++ ){
3066 for(
int j=0; j<3; j++){
3068 for(
int k=0; k<3; k++ ) mCHt[
i][j]+= mC[
i][k]*mH[j][k];
3072 for(
int i=0, k=0;
i<3;
i++ ){
3073 for(
int j=0; j<=
i; j++, k++ ){
3075 for(
int l=0; l<3; l++ ) mHCHt[k]+= mH[
i][l]*mCHt[l][j];
3079 fvec mS[6] = { mHCHt[0]+mV[0],
3080 mHCHt[1]+mV[1], mHCHt[2]+mV[2],
3081 mHCHt[3]+mV[3], mHCHt[4]+mV[4], mHCHt[5]+mV[5] };
3088 fvec zeta[3] = {
m[0]-mHr[0],
m[1]-mHr[1],
m[2]-mHr[2] };
3094 for(Int_t
i=0;
i<3;++
i){
3095 k[
i][0] = mCHt[
i][0]*mS[0] + mCHt[
i][1]*mS[1] + mCHt[
i][2]*mS[3];
3096 k[
i][1] = mCHt[
i][0]*mS[1] + mCHt[
i][1]*mS[2] + mCHt[
i][2]*mS[4];
3097 k[
i][2] = mCHt[
i][0]*mS[3] + mCHt[
i][1]*mS[4] + mCHt[
i][2]*mS[5];
3102 for(Int_t
i=0;
i<3;++
i)
3103 r[
i] = r[
i] + k[
i][0]*zeta[0] + k[
i][1]*zeta[1] + k[
i][2]*zeta[2];
3107 for(Int_t
i=0;
i<3;++
i){
3108 for(Int_t j=0;j<=
i;++j){
3109 mC[
i][j] = mC[
i][j] - (k[
i][0]*mCHt[j][0] + k[
i][1]*mCHt[j][1] + k[
i][2]*mCHt[j][2]);
3110 mC[j][
i] = mC[
i][j];
3116 chi2 += ( ( mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2] )*zeta[0]
3117 +(mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2] )*zeta[1]
3118 +(mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2] )*zeta[2] );
3125 for(
int i=0;
i<3;
i++ )
fP[
i] = r[
i];
3126 for(
int i=0,k=0;
i<3;
i++ ){
3127 for(
int j=0; j<=
i; j++,k++ ){
3140 for(Int_t
i=3;
i<8;++
i)
fP[
i]=0.;
3141 for(Int_t
i=6;
i<35;++
i)
fC[
i]=0.;
3144 for(
int id=0;
id<2;
id++ ){
3146 fvec *p = daughterP[id];
3147 fvec *mC = daughterC[id];
3157 mB[0][0] = mC[ 6]*mAi[0] + mC[ 7]*mAi[1] + mC[ 8]*mAi[3];
3158 mB[0][1] = mC[ 6]*mAi[1] + mC[ 7]*mAi[2] + mC[ 8]*mAi[4];
3159 mB[0][2] = mC[ 6]*mAi[3] + mC[ 7]*mAi[4] + mC[ 8]*mAi[5];
3161 mB[1][0] = mC[10]*mAi[0] + mC[11]*mAi[1] + mC[12]*mAi[3];
3162 mB[1][1] = mC[10]*mAi[1] + mC[11]*mAi[2] + mC[12]*mAi[4];
3163 mB[1][2] = mC[10]*mAi[3] + mC[11]*mAi[4] + mC[12]*mAi[5];
3165 mB[2][0] = mC[15]*mAi[0] + mC[16]*mAi[1] + mC[17]*mAi[3];
3166 mB[2][1] = mC[15]*mAi[1] + mC[16]*mAi[2] + mC[17]*mAi[4];
3167 mB[2][2] = mC[15]*mAi[3] + mC[16]*mAi[4] + mC[17]*mAi[5];
3169 mB[3][0] = mC[21]*mAi[0] + mC[22]*mAi[1] + mC[23]*mAi[3];
3170 mB[3][1] = mC[21]*mAi[1] + mC[22]*mAi[2] + mC[23]*mAi[4];
3171 mB[3][2] = mC[21]*mAi[3] + mC[22]*mAi[4] + mC[23]*mAi[5];
3174 fvec z[3] = {
m[0]-p[0],
m[1]-p[1],
m[2]-p[2] };
3192 fP[3]+= p[3] + mB[0][0]*z[0] + mB[0][1]*z[1] + mB[0][2]*z[2];
3193 fP[4]+= p[4] + mB[1][0]*z[0] + mB[1][1]*z[1] + mB[1][2]*z[2];
3194 fP[5]+= p[5] + mB[2][0]*z[0] + mB[2][1]*z[1] + mB[2][2]*z[2];
3195 fP[6]+= p[6] + mB[3][0]*z[0] + mB[3][1]*z[1] + mB[3][2]*z[2];
3199 d0= mB[0][0]*mV[0] + mB[0][1]*mV[1] + mB[0][2]*mV[3] - mC[ 6];
3200 d1= mB[0][0]*mV[1] + mB[0][1]*mV[2] + mB[0][2]*mV[4] - mC[ 7];
3201 d2= mB[0][0]*mV[3] + mB[0][1]*mV[4] + mB[0][2]*mV[5] - mC[ 8];
3206 fC[9]+= mC[ 9] + d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
3208 d0= mB[1][0]*mV[0] + mB[1][1]*mV[1] + mB[1][2]*mV[3] - mC[10];
3209 d1= mB[1][0]*mV[1] + mB[1][1]*mV[2] + mB[1][2]*mV[4] - mC[11];
3210 d2= mB[1][0]*mV[3] + mB[1][1]*mV[4] + mB[1][2]*mV[5] - mC[12];
3215 fC[13]+= mC[13]+ d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
3216 fC[14]+= mC[14]+ d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
3218 d0= mB[2][0]*mV[0] + mB[2][1]*mV[1] + mB[2][2]*mV[3] - mC[15];
3219 d1= mB[2][0]*mV[1] + mB[2][1]*mV[2] + mB[2][2]*mV[4] - mC[16];
3220 d2= mB[2][0]*mV[3] + mB[2][1]*mV[4] + mB[2][2]*mV[5] - mC[17];
3225 fC[18]+= mC[18]+ d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
3226 fC[19]+= mC[19]+ d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
3227 fC[20]+= mC[20]+ d0*mB[2][0] + d1*mB[2][1] + d2*mB[2][2];
3229 d0= mB[3][0]*mV[0] + mB[3][1]*mV[1] + mB[3][2]*mV[3] - mC[21];
3230 d1= mB[3][0]*mV[1] + mB[3][1]*mV[2] + mB[3][2]*mV[4] - mC[22];
3231 d2= mB[3][0]*mV[3] + mB[3][1]*mV[4] + mB[3][2]*mV[5] - mC[23];
3236 fC[24]+= mC[24] + d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
3237 fC[25]+= mC[25] + d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
3238 fC[26]+= mC[26] + d0*mB[2][0] + d1*mB[2][1] + d2*mB[2][2];
3239 fC[27]+= mC[27] + d0*mB[3][0] + d1*mB[3][1] + d2*mB[3][2];
3258 fvec alpha = 0., qt = 0.;
3262 fvec sp =
sqrt(spx*spx + spy*spy + spz*spz);
3264 fvec pn, pp, pln, plp;
3268 pln = (negative.
GetPx()*spx+negative.
GetPy()*spy+negative.
GetPz()*spz)/sp;
3269 plp = (positive.
GetPx()*spx+positive.
GetPy()*spy+positive.
GetPz()*spz)/sp;
3272 fvec ptm = (1.-((pln/pn)*(pln/pn)));
3273 qt=
if3(
fvec(ptm >= Zero) , pn*
sqrt(ptm) , Zero );
3274 alpha = (plp-pln)/(plp+pln);
3276 QtAlfa[0] =
fvec(qt & mask);
3277 QtAlfa[1] =
fvec(alpha & mask);
3296 for( Int_t
i=0;
i<8;
i++ ){
3297 for( Int_t j=0; j<8; j++){
3301 for(
int i=0;
i<8;
i++ ){
3304 mA[0][0] = c; mA[0][1] = s;
3305 mA[1][0] = -s; mA[1][1] = c;
3306 mA[3][3] = c; mA[3][4] = s;
3307 mA[4][3] = -s; mA[4][4] = c;
3312 for( Int_t
i=0;
i<8;
i++ ){
3314 for( Int_t k=0; k<8; k++){
3315 mAp[
i]+=mA[
i][k] *
fP[k];
3319 for( Int_t
i=0;
i<8;
i++){
3323 for( Int_t
i=0;
i<8;
i++ ){
3324 for( Int_t j=0; j<8; j++ ){
3326 for( Int_t k=0; k<8; k++ ){
3332 for( Int_t
i=0;
i<8;
i++ ){
3333 for( Int_t j=0; j<=
i; j++ ){
3335 for( Int_t k=0; k<8; k++){
3336 xx+= mAC[
i][k]*mA[j][k];
3342 X() =
GetX() + Vtx[0];
3343 Y() =
GetY() + Vtx[1];
3344 Z() =
GetZ() + Vtx[2];
3352 fvec a0 = A[0], a1 = A[1], a2 = A[2], a3 = A[3];
3354 Ai[0] = a2*A[5] - A[4]*A[4];
3355 Ai[1] = a3*A[4] - a1*A[5];
3356 Ai[3] = a1*A[4] - a2*a3;
3357 fvec det = (a0*Ai[0] + a1*Ai[1] + a3*Ai[3]);
3359 fvec idet = 1. / det;
3367 Ai[2] = ( a0*A[5] - a3*a3 )*det;
3368 Ai[4] = ( a1*a3 - a0*A[4] )*det;
3369 Ai[5] = ( a0*a2 - a1*a1 )*det;
3375 fvec d[3], uud, u[3][3];
3376 for(
int i=0;
i<3;
i++)
3379 for(
int j=0; j<3; j++)
3383 for(
int i=0;
i<3 ;
i++)
3386 for(
int j=0; j<
i; j++)
3387 uud += u[j][
i]*u[j][
i]*
d[j];
3388 uud = a[
i*(
i+3)/2] - uud;
3390 fvec smallval = 1.e-12f;
3392 uud = ((!initialised) & uud) + (smallval & initialised);
3397 for(
int j=
i+1; j<3; j++)
3400 for(
int k=0; k<
i; k++)
3401 uud += u[k][
i]*u[k][j]*
d[k];
3402 uud = a[j*(j+1)/2+
i] - uud;
3403 u[
i][j] =
d[
i]/u[
i][
i]*uud;
3409 for(
int i=0;
i<3;
i++)
3412 u[
i][
i] = One/u[
i][
i];
3414 for(
int i=0;
i<2;
i++)
3416 u[
i][
i+1] = - u[
i][
i+1]*u[
i][
i]*u[
i+1][
i+1];
3418 for(
int i=0;
i<1;
i++)
3420 u[
i][
i+2] = u[
i][
i+1]*u1[
i+1]*u[
i+1][
i+2]-u[
i][
i+2]*u[
i][
i]*u[
i+2][
i+2];
3423 for(
int i=0;
i<3;
i++)
3424 a[
i+3] = u[
i][2]*u[2][2]*
d[2];
3425 for(
int i=0;
i<2;
i++)
3426 a[
i+1] = u[
i][1]*u[1][1]*
d[1] + u[
i][2]*u[1][2]*
d[2];
3427 a[0] = u[0][0]*u[0][0]*
d[0] + u[0][1]*u[0][1]*
d[1] + u[0][2]*u[0][2]*
d[2];
3437 for( Int_t
i=0, ij=0;
i<kN;
i++ ){
3438 for( Int_t j=0; j<kN; j++, ++ij ){
3440 for( Int_t k=0; k<kN; ++k ) mA[ij]+=
S[( k<=
i ) ?
i*(
i+1)/2+k :k*(k+1)/2+
i] *
Q[ j*kN+k];
3444 for( Int_t
i=0;
i<kN;
i++ ){
3445 for( Int_t j=0; j<=
i; j++ ){
3446 Int_t ij = ( j<=
i ) ?
i*(
i+1)/2+j :j*(j+1)/2+
i;
3448 for( Int_t k=0; k<kN; k++ ) SOut[ij] +=
Q[
i*kN+k ] * mA[ k*kN+j ];
const Float_t d
Z-ccordinate of the first GEM-station.
friend F32vec4 sin(const F32vec4 &a)
friend F32vec4 sqrt(const F32vec4 &a)
friend F32vec4 fabs(const F32vec4 &a)
friend F32vec4 cos(const F32vec4 &a)
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
friend F32vec4 log(const F32vec4 &a)
void GetDStoParticleBz(fvec Bz, const KFParticleBaseSIMD &p, fvec &dS, fvec &dS1) const
static void InvertCholetsky3(fvec a[6])
void TransportToProductionVertex()
static fvec InvertSym3(const fvec A[], fvec Ainv[])
void AddDaughterWithEnergyFitMC(const KFParticleBaseSIMD &Daughter, Bool_t isAtVtxGuess)
virtual void GetFieldValue(const fvec xyz[], fvec B[]) const =0
void TransportToDecayVertex()
void SubtractFromParticle(KFParticleBaseSIMD &Vtx) const
fvec & Covariance(Int_t i)
void ConstructGammaBz(const KFParticleBaseSIMD &daughter1, const KFParticleBaseSIMD &daughter2, fvec Bz)
void TransportLine(fvec S, fvec P[], fvec C[]) const
fvec GetDeviationFromParticle(const KFParticleBaseSIMD &p) const
void GetDistanceToVertexLine(const KFParticleBaseSIMD &Vertex, fvec &l, fvec &dl, fvec *isParticleFromVertex=0) const
static Int_t IJ(Int_t i, Int_t j)
void GetMeasurement(const fvec XYZ[], fvec m[], fvec V[], Bool_t isAtVtxGuess=0) const
fvec GetDistanceFromParticle(const KFParticleBaseSIMD &p) const
void SetNDaughters(int n)
void operator+=(const KFParticleBaseSIMD &Daughter)
fvec GetDStoPointBy(fvec By, const fvec xyz[]) const
fvec GetMomentum(fvec &P, fvec &SigmaP) const
void Convert(bool ToProduction)
void SetMassConstraint(fvec Mass, fvec SigmaMass=0)
fvec GetR(fvec &R, fvec &SigmaR) const
void AddDaughter(const KFParticleBaseSIMD &Daughter, Bool_t isAtVtxGuess=0)
void AddDaughterWithEnergyFit(const KFParticleBaseSIMD &Daughter, Bool_t isAtVtxGuess)
virtual fvec GetDStoPoint(const fvec xyz[]) const =0
Bool_t fAtProductionVertex
fvec GetSCorrection(const fvec Part[], const fvec XYZ[]) const
fvec GetDistanceFromVertex(const fvec vtx[]) const
void TransportCBM(fvec dS, fvec P[], fvec C[]) const
fvec GetDecayLength(fvec &L, fvec &SigmaL) const
void GetDStoParticleLine(const KFParticleBaseSIMD &p, fvec &dS, fvec &dS1) const
fvec GetDecayLengthXY(fvec &L, fvec &SigmaL) const
void RotateXY(fvec angle, fvec Vtx[3])
void SetVtxGuess(fvec x, fvec y, fvec z)
static void multQSQt1(const fvec J[11], fvec S[])
void SetNonlinearMassConstraint(fvec Mass)
virtual void GetDStoParticle(const KFParticleBaseSIMD &p, fvec &DS, fvec &DSp) const =0
fvec GetCovariance(Int_t i) const
fvec GetDeviationFromVertex(const fvec v[], const fvec Cv[]=0) const
virtual void Transport(fvec dS, fvec P[], fvec C[]) const =0
fvec GetLifeTime(fvec &T, fvec &SigmaT) const
void GetDStoParticleCBM(const KFParticleBaseSIMD &p, fvec &dS, fvec &dS1) const
fvec GetDStoPointCBM(const fvec xyz[]) const
fvec GetDStoPointBz(fvec Bz, const fvec xyz[]) const
void SetVtxErrGuess(fvec &x, fvec &y, fvec &z)
void GetDStoParticleBy(fvec B, const KFParticleBaseSIMD &p, fvec &dS, fvec &dS1) const
void SetProductionVertex(const KFParticleBaseSIMD &Vtx)
void Construct(const KFParticleBaseSIMD *vDaughters[], Int_t nDaughters, const KFParticleBaseSIMD *ProdVtx=0, Float_t Mass=-1, Bool_t IsConstrained=0, Bool_t isAtVtxGuess=0)
void AddDaughterWithEnergyCalc(const KFParticleBaseSIMD &Daughter, Bool_t isAtVtxGuess)
fvec GetPt(fvec &Pt, fvec &SigmaPt) const
void SubtractFromVertex(KFParticleBaseSIMD &Vtx) const
void TransportBz(fvec Bz, fvec dS, fvec P[], fvec C[]) const
fvec GetPhi(fvec &Phi, fvec &SigmaPhi) const
void TransportToDS(fvec dS)
fvec & Cij(Int_t i, Int_t j)
fvec GetEta(fvec &Eta, fvec &SigmaEta) const
fvec GetMass(fvec &M, fvec &SigmaM) const
static void MultQSQt(const fvec Q[], const fvec S[], fvec SOut[])
static void GetArmenterosPodolanski(KFParticleBaseSIMD &positive, KFParticleBaseSIMD &negative, fvec QtAlfa[2])
void AddDaughterId(fvec id)