27 KFParticleBaseSIMD::KFParticleBaseSIMD() :fQ(0), fNDF(-3), fChi2(0), fSFromDecay(0), fAtProductionVertex(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];
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-4;
163 error = (mask &
error);
165 error += ((!mask) &
fvec(1.e10));
176 const fvec BIG = 1.e10;
177 const fvec LocalSmall = 1.e-8;
182 fvec pt2 = px*px + py*py;
189 c =
fvec(b > LocalSmall) & (a/
b);
197 error = (h3*h3*
fC[9] + h4*h4*
fC[14] + pt4*
fC[20] + 2*( h3*(h4*
fC[13] +
fC[18]*pt2) + pt2*h4*
fC[19] ) );
200 error =
if3( mask, (
sqrt(error/p2pt4)), BIG);
217 fvec pt2 = px2 + py2;
219 error = (py2*
fC[9] + px2*
fC[14] -
fvec(2.
f)*px*py*
fC[13] );
238 error = (x2*
fC[0] + y2*
fC[2] -
fvec(2.
f)*x*y*
fC[1] );
252 const fvec BIG = 1.e20;
253 const fvec LocalSmall = 1.e-10;
276 mask =
fvec(mask &
fvec(
fvec(Zero <= s) & (LocalSmall < m)));
277 error =
if3(mask,
sqrt(s)/m, BIG);
289 const fvec BIG = 1.e20;
301 error = p2*
fC[35] + t*t/p2*(x2*
fC[9]+y2*
fC[14]+z2*
fC[20]
315 const fvec BIG = 1.e20;
326 error = pt2*
fC[35] + t*t/pt2*(x2*
fC[9]+y2*
fC[14] + 2*x*y*
fC[13] )
339 const fvec BIG = 1.e20;
346 error = m*m*
fC[35] + 2*
fP[7]*cTM +
fP[7]*
fP[7]*dm*dm;
348 error =
if3( mask,
sqrt(error), BIG);
365 fvec d[3] = { XYZ[0]-Part[0], XYZ[1]-Part[1], XYZ[2]-Part[2] };
366 fvec p2 = Part[3]*Part[3]+Part[4]*Part[4]+Part[5]*Part[5];
382 const fvec kCLight = 0.000299792458;
383 b[0]*=kCLight*
GetQ(); b[1]*=kCLight*
GetQ(); b[2]*=kCLight*
GetQ();
389 for(
int iM=0; iM<8; iM++)
391 for(
int iV=0; iV<8; iV++)
402 h[3] = ( h[1]*b[2]-h[2]*b[1] );
403 h[4] = ( h[2]*b[0]-h[0]*b[2] );
404 h[5] = ( h[0]*b[1]-h[1]*b[0] );
440 if( Daughter.
fC[35][0]>0 ){
443 for( Int_t
i=0;
i<8;
i++ )
fP[
i] = Daughter.
fP[
i];
444 for( Int_t
i=0;
i<36;
i++ )
fC[
i] = Daughter.
fC[
i];
493 for( Int_t iter=0; iter<maxIter; iter++ ){
499 if( Daughter.
fC[35][0]>0 ){
502 for( Int_t
i=0;
i<8;
i++ ) m[
i] = Daughter.
fP[
i];
503 for( Int_t
i=0;
i<36;
i++ ) mV[
i] = Daughter.
fC[
i];
507 fvec mS[6]= { ffC[0]+mV[0],
508 ffC[1]+mV[1], ffC[2]+mV[2],
509 ffC[3]+mV[3], ffC[4]+mV[4], ffC[5]+mV[5] };
514 fvec zeta[3] = { m[0]-ffP[0], m[1]-ffP[1], m[2]-ffP[2] };
519 fvec mCHt0[7], mCHt1[7], mCHt2[7];
521 mCHt0[0]=ffC[ 0] ; mCHt1[0]=ffC[ 1] ; mCHt2[0]=ffC[ 3] ;
522 mCHt0[1]=ffC[ 1] ; mCHt1[1]=ffC[ 2] ; mCHt2[1]=ffC[ 4] ;
523 mCHt0[2]=ffC[ 3] ; mCHt1[2]=ffC[ 4] ; mCHt2[2]=ffC[ 5] ;
524 mCHt0[3]=ffC[ 6]-mV[ 6]; mCHt1[3]=ffC[ 7]-mV[ 7]; mCHt2[3]=ffC[ 8]-mV[ 8];
525 mCHt0[4]=ffC[10]-mV[10]; mCHt1[4]=ffC[11]-mV[11]; mCHt2[4]=ffC[12]-mV[12];
526 mCHt0[5]=ffC[15]-mV[15]; mCHt1[5]=ffC[16]-mV[16]; mCHt2[5]=ffC[17]-mV[17];
527 mCHt0[6]=ffC[21]-mV[21]; mCHt1[6]=ffC[22]-mV[22]; mCHt2[6]=ffC[23]-mV[23];
531 fvec k0[7], k1[7], k2[7];
533 for(Int_t
i=0;
i<7;++
i){
534 k0[
i] = mCHt0[
i]*mS[0] + mCHt1[
i]*mS[1] + mCHt2[
i]*mS[3];
535 k1[
i] = mCHt0[
i]*mS[1] + mCHt1[
i]*mS[2] + mCHt2[
i]*mS[4];
536 k2[
i] = mCHt0[
i]*mS[3] + mCHt1[
i]*mS[4] + mCHt2[
i]*mS[5];
541 if( iter<maxIter-1 ){
542 for(Int_t
i=0;
i<3; ++
i)
570 for(Int_t
i=0;
i<7;++
i)
571 fP[
i] = ffP[
i] + (k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2]);
575 for(Int_t
i=0, k=0;
i<7;++
i){
576 for(Int_t j=0;j<=
i;++j,++k){
577 fC[k] = ffC[k] - (k0[
i]*mCHt0[j] + k1[
i]*mCHt1[j] + k2[
i]*mCHt2[j] );
582 if( iter == (maxIter-1) ) {
586 fChi2 += (mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2])*zeta[0]
587 + (mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2])*zeta[1]
588 + (mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2])*zeta[2];
624 for( Int_t iter=0; iter<maxIter; iter++ ){
630 if( Daughter.
fC[35][0]>0 ){
633 for( Int_t
i=0;
i<8;
i++ ) m[
i] = Daughter.
fP[
i];
634 for( Int_t
i=0;
i<36;
i++ ) mV[
i] = Daughter.
fC[
i];
637 fvec massMf2 = m[6]*m[6] - (m[3]*m[3] + m[4]*m[4] + m[5]*m[5]);
642 fvec mS[6]= { ffC[0]+mV[0],
643 ffC[1]+mV[1], ffC[2]+mV[2],
644 ffC[3]+mV[3], ffC[4]+mV[4], ffC[5]+mV[5] };
649 fvec zeta[3] = { m[0]-ffP[0], m[1]-ffP[1], m[2]-ffP[2] };
653 fvec mCHt0[6], mCHt1[6], mCHt2[6];
655 mCHt0[0]=ffC[ 0] ; mCHt1[0]=ffC[ 1] ; mCHt2[0]=ffC[ 3] ;
656 mCHt0[1]=ffC[ 1] ; mCHt1[1]=ffC[ 2] ; mCHt2[1]=ffC[ 4] ;
657 mCHt0[2]=ffC[ 3] ; mCHt1[2]=ffC[ 4] ; mCHt2[2]=ffC[ 5] ;
658 mCHt0[3]=ffC[ 6]-mV[ 6]; mCHt1[3]=ffC[ 7]-mV[ 7]; mCHt2[3]=ffC[ 8]-mV[ 8];
659 mCHt0[4]=ffC[10]-mV[10]; mCHt1[4]=ffC[11]-mV[11]; mCHt2[4]=ffC[12]-mV[12];
660 mCHt0[5]=ffC[15]-mV[15]; mCHt1[5]=ffC[16]-mV[16]; mCHt2[5]=ffC[17]-mV[17];
664 fvec k0[6], k1[6], k2[6];
666 for(Int_t
i=0;
i<6;++
i){
667 k0[
i] = mCHt0[
i]*mS[0] + mCHt1[
i]*mS[1] + mCHt2[
i]*mS[3];
668 k1[
i] = mCHt0[
i]*mS[1] + mCHt1[
i]*mS[2] + mCHt2[
i]*mS[4];
669 k2[
i] = mCHt0[
i]*mS[3] + mCHt1[
i]*mS[4] + mCHt2[
i]*mS[5];
674 if( iter<maxIter-1 ){
675 for(Int_t
i=0;
i<3; ++
i)
682 fvec mVHt0[6], mVHt1[6], mVHt2[6];
684 mVHt0[0]= mV[ 0] ; mVHt1[0]= mV[ 1] ; mVHt2[0]= mV[ 3] ;
685 mVHt0[1]= mV[ 1] ; mVHt1[1]= mV[ 2] ; mVHt2[1]= mV[ 4] ;
686 mVHt0[2]= mV[ 3] ; mVHt1[2]= mV[ 4] ; mVHt2[2]= mV[ 5] ;
687 mVHt0[3]= mV[ 6] ; mVHt1[3]= mV[ 7] ; mVHt2[3]= mV[ 8] ;
688 mVHt0[4]= mV[10] ; mVHt1[4]= mV[11] ; mVHt2[4]= mV[12] ;
689 mVHt0[5]= mV[15] ; mVHt1[5]= mV[16] ; mVHt2[5]= mV[17] ;
693 fvec km0[6], km1[6], km2[6];
695 for(Int_t
i=0;
i<6;++
i){
696 km0[
i] = mVHt0[
i]*mS[0] + mVHt1[
i]*mS[1] + mVHt2[
i]*mS[3];
697 km1[
i] = mVHt0[
i]*mS[1] + mVHt1[
i]*mS[2] + mVHt2[
i]*mS[4];
698 km2[
i] = mVHt0[
i]*mS[3] + mVHt1[
i]*mS[4] + mVHt2[
i]*mS[5];
701 fvec mf[7] = { m[0], m[1], m[2], m[3], m[4], m[5], m[6] };
703 for(Int_t
i=0;
i<6;++
i)
704 mf[
i] = mf[
i] - km0[
i]*zeta[0] - km1[
i]*zeta[1] - km2[
i]*zeta[2];
706 fvec energyMf =
sqrt( massMf2 + (mf[3]*mf[3] + mf[4]*mf[4] + mf[5]*mf[5]) );
709 for(Int_t iC=0; iC<28; iC++)
714 hmf[3] =
if3(
fvec(
fabs(energyMf) < small), Zero, hmf[3]/energyMf);
715 hmf[4] =
if3(
fvec(
fabs(energyMf) < small), Zero, hmf[4]/energyMf);
716 hmf[5] =
if3(
fvec(
fabs(energyMf) < small), Zero, hmf[5]/energyMf);
719 for(Int_t
i=0, k=0;
i<6;++
i){
720 for(Int_t j=0;j<=
i;++j,++k){
721 mVf[k] = mVf[k] - (km0[
i]*mVHt0[j] + km1[
i]*mVHt1[j] + km2[
i]*mVHt2[j] );
724 fvec mVf24 = mVf[24], mVf25 = mVf[25], mVf26 = mVf[26];
725 mVf[21] = mVf[6 ]*hmf[3] + mVf[10]*hmf[4] + mVf[15]*hmf[5] + mVf[21]*hmf[6];
726 mVf[22] = mVf[7 ]*hmf[3] + mVf[11]*hmf[4] + mVf[16]*hmf[5] + mVf[22]*hmf[6];
727 mVf[23] = mVf[8 ]*hmf[3] + mVf[12]*hmf[4] + mVf[17]*hmf[5] + mVf[23]*hmf[6];
728 mVf[24] = mVf[9 ]*hmf[3] + mVf[13]*hmf[4] + mVf[18]*hmf[5] + mVf[24]*hmf[6];
729 mVf[25] = mVf[13]*hmf[3] + mVf[14]*hmf[4] + mVf[19]*hmf[5] + mVf[25]*hmf[6];
730 mVf[26] = mVf[18]*hmf[3] + mVf[19]*hmf[4] + mVf[20]*hmf[5] + mVf[26]*hmf[6];
731 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];
738 fvec mCCHt0[6], mCCHt1[6], mCCHt2[6];
740 mCCHt0[0]=ffC[ 0]; mCCHt1[0]=ffC[ 1]; mCCHt2[0]=ffC[ 3];
741 mCCHt0[1]=ffC[ 1]; mCCHt1[1]=ffC[ 2]; mCCHt2[1]=ffC[ 4];
742 mCCHt0[2]=ffC[ 3]; mCCHt1[2]=ffC[ 4]; mCCHt2[2]=ffC[ 5];
743 mCCHt0[3]=ffC[ 6]; mCCHt1[3]=ffC[ 7]; mCCHt2[3]=ffC[ 8];
744 mCCHt0[4]=ffC[10]; mCCHt1[4]=ffC[11]; mCCHt2[4]=ffC[12];
745 mCCHt0[5]=ffC[15]; mCCHt1[5]=ffC[16]; mCCHt2[5]=ffC[17];
749 fvec krf0[6], krf1[6], krf2[6];
751 for(Int_t
i=0;
i<6;++
i){
752 krf0[
i] = mCCHt0[
i]*mS[0] + mCCHt1[
i]*mS[1] + mCCHt2[
i]*mS[3];
753 krf1[
i] = mCCHt0[
i]*mS[1] + mCCHt1[
i]*mS[2] + mCCHt2[
i]*mS[4];
754 krf2[
i] = mCCHt0[
i]*mS[3] + mCCHt1[
i]*mS[4] + mCCHt2[
i]*mS[5];
756 fvec rf[7] = { ffP[0], ffP[1], ffP[2], ffP[3], ffP[4], ffP[5], ffP[6] };
758 for(Int_t
i=0;
i<6;++
i)
759 rf[
i] = rf[
i] + krf0[
i]*zeta[0] + krf1[
i]*zeta[1] + krf2[
i]*zeta[2];
761 fvec energyRf =
sqrt( massRf2 + (rf[3]*rf[3] + rf[4]*rf[4] + rf[5]*rf[5]) );
764 for(Int_t iC=0; iC<28; iC++)
768 hrf[3] =
if3(
fvec(
fabs(energyRf) < small), Zero, rf[3]/energyRf);
769 hrf[4] =
if3(
fvec(
fabs(energyRf) < small), Zero, rf[4]/energyRf);
770 hrf[5] =
if3(
fvec(
fabs(energyRf) < small), Zero, rf[5]/energyRf);
774 for(Int_t
i=0, k=0;
i<6;++
i){
775 for(Int_t j=0;j<=
i;++j,++k){
776 mCf[k] = mCf[k] - (krf0[
i]*mCCHt0[j] + krf1[
i]*mCCHt1[j] + krf2[
i]*mCCHt2[j] );
779 fvec mCf24 = mCf[24], mCf25 = mCf[25], mCf26 = mCf[26];
780 mCf[21] = mCf[6 ]*hrf[3] + mCf[10]*hrf[4] + mCf[15]*hrf[5] + mCf[21]*hrf[6];
781 mCf[22] = mCf[7 ]*hrf[3] + mCf[11]*hrf[4] + mCf[16]*hrf[5] + mCf[22]*hrf[6];
782 mCf[23] = mCf[8 ]*hrf[3] + mCf[12]*hrf[4] + mCf[17]*hrf[5] + mCf[23]*hrf[6];
783 mCf[24] = mCf[9 ]*hrf[3] + mCf[13]*hrf[4] + mCf[18]*hrf[5] + mCf[24]*hrf[6];
784 mCf[25] = mCf[13]*hrf[3] + mCf[14]*hrf[4] + mCf[19]*hrf[5] + mCf[25]*hrf[6];
785 mCf[26] = mCf[18]*hrf[3] + mCf[19]*hrf[4] + mCf[20]*hrf[5] + mCf[26]*hrf[6];
786 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];
788 for(Int_t iC=21; iC<28; iC++)
794 fP[6] = energyRf + energyMf;
803 for(
int i=0;
i<3;
i++)
805 for(
int j=0; j<3; j++)
807 mDvp[
i][j] = km0[
i+3]*mCCHt0[j] + km1[
i+3]*mCCHt1[j] + km2[
i+3]*mCCHt2[j];
808 mDpv[
i][j] = km0[
i]*mCCHt0[j+3] + km1[
i]*mCCHt1[j+3] + km2[
i]*mCCHt2[j+3];
809 mDpp[
i][j] = km0[
i+3]*mCCHt0[j+3] + km1[
i+3]*mCCHt1[j+3] + km2[
i+3]*mCCHt2[j+3];
813 mDe[0] = hmf[3]*mDvp[0][0] + hmf[4]*mDvp[1][0] + hmf[5]*mDvp[2][0];
814 mDe[1] = hmf[3]*mDvp[0][1] + hmf[4]*mDvp[1][1] + hmf[5]*mDvp[2][1];
815 mDe[2] = hmf[3]*mDvp[0][2] + hmf[4]*mDvp[1][2] + hmf[5]*mDvp[2][2];
816 mDe[3] = hmf[3]*mDpp[0][0] + hmf[4]*mDpp[1][0] + hmf[5]*mDpp[2][0];
817 mDe[4] = hmf[3]*mDpp[0][1] + hmf[4]*mDpp[1][1] + hmf[5]*mDpp[2][1];
818 mDe[5] = hmf[3]*mDpp[0][2] + hmf[4]*mDpp[1][2] + hmf[5]*mDpp[2][2];
819 mDe[6] = 2*(mDe[3]*hrf[3] + mDe[4]*hrf[4] + mDe[5]*hrf[5]);
850 for(Int_t
i=0;
i<6;++
i)
851 fP[
i] = ffP[
i] + k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2];
855 for(Int_t
i=0, k=0;
i<6;++
i){
856 for(Int_t j=0;j<=
i;++j,++k){
857 fC[k] = ffC[k] - (k0[
i]*mCHt0[j] + k1[
i]*mCHt1[j] + k2[
i]*mCHt2[j] );
861 for(
int i=21;
i<28;
i++)
fC[
i] = ffC[
i];
865 if( iter == (maxIter-1) ) {
869 fChi2 += (mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2])*zeta[0]
870 + (mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2])*zeta[1]
871 + (mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2])*zeta[2];
906 for( Int_t iter=0; iter<maxIter; iter++ ){
911 if( Daughter.
fC[35][0]>0 ){
914 for( Int_t
i=0;
i<8;
i++ ) m[
i] = Daughter.
fP[
i];
915 for( Int_t
i=0;
i<36;
i++ ) mV[
i] = Daughter.
fC[
i];
919 fvec mS[6]= { ffC[0]+mV[0],
920 ffC[1]+mV[1], ffC[2]+mV[2],
921 ffC[3]+mV[3], ffC[4]+mV[4], ffC[5]+mV[5] };
926 fvec zeta[3] = { m[0]-ffP[0], m[1]-ffP[1], m[2]-ffP[2] };
931 fvec mCHt0[7], mCHt1[7], mCHt2[7];
933 mCHt0[0]=ffC[ 0] ; mCHt1[0]=ffC[ 1] ; mCHt2[0]=ffC[ 3] ;
934 mCHt0[1]=ffC[ 1] ; mCHt1[1]=ffC[ 2] ; mCHt2[1]=ffC[ 4] ;
935 mCHt0[2]=ffC[ 3] ; mCHt1[2]=ffC[ 4] ; mCHt2[2]=ffC[ 5] ;
936 mCHt0[3]=ffC[ 6] ; mCHt1[3]=ffC[ 7] ; mCHt2[3]=ffC[ 8] ;
937 mCHt0[4]=ffC[10] ; mCHt1[4]=ffC[11] ; mCHt2[4]=ffC[12] ;
938 mCHt0[5]=ffC[15] ; mCHt1[5]=ffC[16] ; mCHt2[5]=ffC[17] ;
939 mCHt0[6]=ffC[21] ; mCHt1[6]=ffC[22] ; mCHt2[6]=ffC[23] ;
943 fvec k0[7], k1[7], k2[7];
945 for(Int_t
i=0;
i<7;++
i){
946 k0[
i] = mCHt0[
i]*mS[0] + mCHt1[
i]*mS[1] + mCHt2[
i]*mS[3];
947 k1[
i] = mCHt0[
i]*mS[1] + mCHt1[
i]*mS[2] + mCHt2[
i]*mS[4];
948 k2[
i] = mCHt0[
i]*mS[3] + mCHt1[
i]*mS[4] + mCHt2[
i]*mS[5];
953 if( iter<maxIter-1 ){
954 for(Int_t
i=0;
i<3; ++
i)
963 fvec mVHt0[7], mVHt1[7], mVHt2[7];
965 mVHt0[0]=mV[ 0] ; mVHt1[0]=mV[ 1] ; mVHt2[0]=mV[ 3] ;
966 mVHt0[1]=mV[ 1] ; mVHt1[1]=mV[ 2] ; mVHt2[1]=mV[ 4] ;
967 mVHt0[2]=mV[ 3] ; mVHt1[2]=mV[ 4] ; mVHt2[2]=mV[ 5] ;
968 mVHt0[3]=mV[ 6] ; mVHt1[3]=mV[ 7] ; mVHt2[3]=mV[ 8] ;
969 mVHt0[4]=mV[10] ; mVHt1[4]=mV[11] ; mVHt2[4]=mV[12] ;
970 mVHt0[5]=mV[15] ; mVHt1[5]=mV[16] ; mVHt2[5]=mV[17] ;
971 mVHt0[6]=mV[21] ; mVHt1[6]=mV[22] ; mVHt2[6]=mV[23] ;
975 fvec km0[7], km1[7], km2[7];
977 for(Int_t
i=0;
i<7;++
i){
978 km0[
i] = mVHt0[
i]*mS[0] + mVHt1[
i]*mS[1] + mVHt2[
i]*mS[3];
979 km1[
i] = mVHt0[
i]*mS[1] + mVHt1[
i]*mS[2] + mVHt2[
i]*mS[4];
980 km2[
i] = mVHt0[
i]*mS[3] + mVHt1[
i]*mS[4] + mVHt2[
i]*mS[5];
983 for(Int_t
i=0;
i<7;++
i)
984 ffP[
i] = ffP[
i] + k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2];
986 for(Int_t
i=0;
i<7;++
i)
987 m[
i] = m[
i] - km0[
i]*zeta[0] - km1[
i]*zeta[1] - km2[
i]*zeta[2];
989 for(Int_t
i=0, k=0;
i<7;++
i){
990 for(Int_t j=0;j<=
i;++j,++k){
991 ffC[k] = ffC[k] - (k0[
i]*mCHt0[j] + k1[
i]*mCHt1[j] + k2[
i]*mCHt2[j] );
995 for(Int_t
i=0, k=0;
i<7;++
i){
996 for(Int_t j=0;j<=
i;++j,++k){
997 mV[k] = mV[k] - (km0[
i]*mVHt0[j] + km1[
i]*mVHt1[j] + km2[
i]*mVHt2[j] );
1003 for(Int_t
i=0;
i<7;++
i){
1004 for(Int_t j=0;j<7;++j){
1005 mDf[
i][j] = (km0[
i]*mCHt0[j] + km1[
i]*mCHt1[j] + km2[
i]*mCHt2[j] );
1009 fvec mJ1[7][7], mJ2[7][7];
1010 for(Int_t iPar1=0; iPar1<7; iPar1++)
1012 for(Int_t iPar2=0; iPar2<7; iPar2++)
1014 mJ1[iPar1][iPar2] = 0;
1015 mJ2[iPar1][iPar2] = 0;
1019 fvec mMassParticle = ffP[6]*ffP[6] - (ffP[3]*ffP[3] + ffP[4]*ffP[4] + ffP[5]*ffP[5]);
1020 fvec mMassDaughter = m[6]*m[6] - (m[3]*m[3] + m[4]*m[4] + m[5]*m[5]);
1021 mMassParticle =
if3(
fvec( mMassParticle > Zero ),
sqrt(mMassParticle) , Zero);
1022 mMassDaughter =
if3(
fvec( mMassDaughter > Zero ),
sqrt(mMassDaughter) , Zero);
1036 for(Int_t
i=0;
i<7;
i++) {
1037 for(Int_t j=0; j<7; j++) {
1039 for(Int_t k=0; k<7; k++) {
1040 mDJ[
i][j] += mDf[
i][k]*mJ1[j][k];
1045 for(Int_t
i=0;
i<7; ++
i){
1046 for(Int_t j=0; j<7; ++j){
1048 for(Int_t l=0; l<7; l++){
1049 mDf[
i][j] += mJ2[
i][l]*mDJ[l][j];
1072 ffC[6 ] += mDf[3][0]; ffC[7 ] += mDf[3][1]; ffC[8 ] += mDf[3][2];
1073 ffC[10] += mDf[4][0]; ffC[11] += mDf[4][1]; ffC[12] += mDf[4][2];
1074 ffC[15] += mDf[5][0]; ffC[16] += mDf[5][1]; ffC[17] += mDf[5][2];
1075 ffC[21] += mDf[6][0]; ffC[22] += mDf[6][1]; ffC[23] += mDf[6][2];
1077 ffC[9 ] += mDf[3][3] + mDf[3][3];
1078 ffC[13] += mDf[4][3] + mDf[3][4]; ffC[14] += mDf[4][4] + mDf[4][4];
1079 ffC[18] += mDf[5][3] + mDf[3][5]; ffC[19] += mDf[5][4] + mDf[4][5]; ffC[20] += mDf[5][5] + mDf[5][5];
1080 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];
1084 for(Int_t
i=0;
i<7;++
i)
1089 for(Int_t
i=0, k=0;
i<7;++
i){
1090 for(Int_t j=0;j<=
i;++j,++k){
1096 if( iter == (maxIter-1) ) {
1100 fChi2 += (mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2])*zeta[0]
1101 + (mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2])*zeta[1]
1102 + (mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2])*zeta[2];
1122 fC[28] =
fC[29] =
fC[30] =
fC[31] =
fC[32] =
fC[33] =
fC[34] = 0;
1128 fvec mAi[6] = {
fC[0],
fC[1], fC[2], fC[3], fC[4], fC[5]};
1135 mB[0][0] =
fC[ 6]*mAi[0] +
fC[ 7]*mAi[1] +
fC[ 8]*mAi[3];
1136 mB[0][1] =
fC[ 6]*mAi[1] +
fC[ 7]*mAi[2] +
fC[ 8]*mAi[4];
1137 mB[0][2] =
fC[ 6]*mAi[3] +
fC[ 7]*mAi[4] +
fC[ 8]*mAi[5];
1139 mB[1][0] =
fC[10]*mAi[0] +
fC[11]*mAi[1] +
fC[12]*mAi[3];
1140 mB[1][1] =
fC[10]*mAi[1] +
fC[11]*mAi[2] +
fC[12]*mAi[4];
1141 mB[1][2] =
fC[10]*mAi[3] +
fC[11]*mAi[4] +
fC[12]*mAi[5];
1143 mB[2][0] =
fC[15]*mAi[0] +
fC[16]*mAi[1] +
fC[17]*mAi[3];
1144 mB[2][1] =
fC[15]*mAi[1] +
fC[16]*mAi[2] +
fC[17]*mAi[4];
1145 mB[2][2] =
fC[15]*mAi[3] +
fC[16]*mAi[4] +
fC[17]*mAi[5];
1147 mB[3][0] =
fC[21]*mAi[0] +
fC[22]*mAi[1] +
fC[23]*mAi[3];
1148 mB[3][1] =
fC[21]*mAi[1] +
fC[22]*mAi[2] +
fC[23]*mAi[4];
1149 mB[3][2] =
fC[21]*mAi[3] +
fC[22]*mAi[4] +
fC[23]*mAi[5];
1151 mB[4][0] =
fC[28]*mAi[0] +
fC[29]*mAi[1] +
fC[30]*mAi[3];
1152 mB[4][1] =
fC[28]*mAi[1] +
fC[29]*mAi[2] +
fC[30]*mAi[4];
1153 mB[4][2] =
fC[28]*mAi[3] +
fC[29]*mAi[4] +
fC[30]*mAi[5];
1155 fvec z[3] = { m[0]-
fP[0], m[1]-fP[1], m[2]-fP[2] };
1158 fvec mAVi[6] = {
fC[0]-mV[0],
fC[1]-mV[1],
fC[2]-mV[2],
1159 fC[3]-mV[3],
fC[4]-mV[4],
fC[5]-mV[5] };
1164 fvec dChi2 = ( +(mAVi[0]*z[0] + mAVi[1]*z[1] + mAVi[3]*z[2])*z[0]
1165 +(mAVi[1]*z[0] + mAVi[2]*z[1] + mAVi[4]*z[2])*z[1]
1166 +(mAVi[3]*z[0] + mAVi[4]*z[1] + mAVi[5]*z[2])*z[2] );
1179 fP[3]+= mB[0][0]*z[0] + mB[0][1]*z[1] + mB[0][2]*z[2];
1180 fP[4]+= mB[1][0]*z[0] + mB[1][1]*z[1] + mB[1][2]*z[2];
1181 fP[5]+= mB[2][0]*z[0] + mB[2][1]*z[1] + mB[2][2]*z[2];
1182 fP[6]+= mB[3][0]*z[0] + mB[3][1]*z[1] + mB[3][2]*z[2];
1183 fP[7]+= mB[4][0]*z[0] + mB[4][1]*z[1] + mB[4][2]*z[2];
1194 d0= mB[0][0]*mV[0] + mB[0][1]*mV[1] + mB[0][2]*mV[3] -
fC[ 6];
1195 d1= mB[0][0]*mV[1] + mB[0][1]*mV[2] + mB[0][2]*mV[4] - fC[ 7];
1196 d2= mB[0][0]*mV[3] + mB[0][1]*mV[4] + mB[0][2]*mV[5] - fC[ 8];
1201 fC[ 9]+= d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
1203 d0= mB[1][0]*mV[0] + mB[1][1]*mV[1] + mB[1][2]*mV[3] - fC[10];
1204 d1= mB[1][0]*mV[1] + mB[1][1]*mV[2] + mB[1][2]*mV[4] - fC[11];
1205 d2= mB[1][0]*mV[3] + mB[1][1]*mV[4] + mB[1][2]*mV[5] - fC[12];
1210 fC[13]+= d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
1211 fC[14]+= d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
1213 d0= mB[2][0]*mV[0] + mB[2][1]*mV[1] + mB[2][2]*mV[3] - fC[15];
1214 d1= mB[2][0]*mV[1] + mB[2][1]*mV[2] + mB[2][2]*mV[4] - fC[16];
1215 d2= mB[2][0]*mV[3] + mB[2][1]*mV[4] + mB[2][2]*mV[5] - fC[17];
1220 fC[18]+= d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
1221 fC[19]+= d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
1222 fC[20]+= d0*mB[2][0] + d1*mB[2][1] + d2*mB[2][2];
1224 d0= mB[3][0]*mV[0] + mB[3][1]*mV[1] + mB[3][2]*mV[3] - fC[21];
1225 d1= mB[3][0]*mV[1] + mB[3][1]*mV[2] + mB[3][2]*mV[4] - fC[22];
1226 d2= mB[3][0]*mV[3] + mB[3][1]*mV[4] + mB[3][2]*mV[5] - fC[23];
1231 fC[24]+= d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
1232 fC[25]+= d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
1233 fC[26]+= d0*mB[2][0] + d1*mB[2][1] + d2*mB[2][2];
1234 fC[27]+= d0*mB[3][0] + d1*mB[3][1] + d2*mB[3][2];
1236 d0= mB[4][0]*mV[0] + mB[4][1]*mV[1] + mB[4][2]*mV[3] - fC[28];
1237 d1= mB[4][0]*mV[1] + mB[4][1]*mV[2] + mB[4][2]*mV[4] - fC[29];
1238 d2= mB[4][0]*mV[3] + mB[4][1]*mV[4] + mB[4][2]*mV[5] - fC[30];
1243 fC[31]+= d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
1244 fC[32]+= d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
1245 fC[33]+= d0*mB[2][0] + d1*mB[2][1] + d2*mB[2][2];
1246 fC[34]+= d0*mB[3][0] + d1*mB[3][1] + d2*mB[3][2];
1247 fC[35]+= d0*mB[4][0] + d1*mB[4][1] + d2*mB[4][2];
1251 fC[28] = fC[29] = fC[30] = fC[31] = fC[32] = fC[33] = fC[34] = fC[35] = 0;
1264 const fvec energy2 = mP[6]*mP[6],
p2 = mP[3]*mP[3]+mP[4]*mP[4]+mP[5]*mP[5], mass2 = mass*mass;
1266 const fvec a = energy2 - p2 + 2.*mass2;
1267 const fvec b = -2.*(energy2 +
p2);
1268 const fvec c = energy2 - p2 - mass2;
1272 fvec d = 4.*energy2*p2 - mass2*(energy2-p2-2.*mass2);
1274 lambda =
if3( qMask, ((energy2 + p2 -
sqrt(d))/a), lambda );
1276 lambda =
if3(
fvec(mP[6]<Zero),
fvec(-1000000.
f), lambda );
1279 for(iIter=0; iIter<100; iIter++)
1282 fvec lambda4 = lambda2*lambda2;
1286 fvec f = -mass2 * lambda4 + a*lambda2 + b*lambda +
c;
1287 fvec df = -4.*mass2 * lambda2*lambda + 2.*a*lambda +
b;
1294 const fvec lp2i = lpi*lpi;
1295 const fvec lm2i = lmi*lmi;
1299 fvec dfl = -4.*mass2 * lambda2*lambda + 2.*a*lambda +
b;
1301 dfx[0] = -2.*(1. +
lambda)*(1. + lambda)*mP[3];
1302 dfx[1] = -2.*(1. +
lambda)*(1. + lambda)*mP[4];
1303 dfx[2] = -2.*(1. +
lambda)*(1. + lambda)*mP[5];
1304 dfx[3] = 2.*(1. -
lambda)*(1. - lambda)*mP[6];
1305 fvec dlx[4] = {1,1,1,1};
1307 for(
int i=0;
i<4;
i++)
1310 fvec dxx[4] = {mP[3]*lm2i, mP[4]*lm2i, mP[5]*lm2i, -mP[6]*lp2i};
1312 for(Int_t i=0; i<7; i++)
1313 for(Int_t j=0; j<7; j++)
1319 for(Int_t i=3; i<7; i++)
1320 for(Int_t j=3; j<7; j++)
1321 mJ[i][j] = dlx[j-3]*dxx[i-3];
1323 for(Int_t i=3; i<6; i++)
1329 for(Int_t i=0; i<7; i++) {
1330 for(Int_t j=0; j<7; j++) {
1332 for(Int_t k=0; k<7; k++) {
1333 mCJ[
i][j] += mC[
IJ(i,k)]*mJ[j][k];
1338 for(Int_t i=0; i<7; ++
i){
1339 for(Int_t j=0; j<=
i; ++j){
1340 mC[
IJ(i,j)] =
if3(mask, Zero, mC[
IJ(i,j)]);
1341 for(Int_t l=0; l<7; l++){
1342 mC[
IJ(i,j)] +=
if3(mask, mJ[i][l]*mCJ[l][j], Zero);
1347 mP[3] *=
if3(mask, lmi, One);
1348 mP[4] *=
if3(mask, lmi, One);
1349 mP[5] *=
if3(mask, lmi, One);
1350 mP[6] *=
if3(mask, lpi, One);
1371 fvec s2 = m2*SigmaMass*SigmaMass;
1377 mH[0] = mH[1] = mH[2] = 0.;
1384 fvec zeta = e0*e0 - e0*fP[6];
1385 zeta = m2 - (fP[6]*fP[6]-
p2);
1387 fvec mCHt[8], s2_est=0;
1388 for( Int_t
i=0;
i<8; ++
i ){
1390 for (Int_t j=0;j<8;++j) mCHt[
i] +=
Cij(
i,j)*mH[j];
1391 s2_est += mH[
i]*mCHt[
i];
1398 fvec w2 = 1./( s2 + s2_est );
1399 fChi2 += zeta*zeta*w2;
1401 for( Int_t
i=0, ii=0;
i<8; ++
i ){
1402 fvec ki = mCHt[
i]*w2;
1404 for(Int_t j=0;j<=
i;++j)
fC[ii++] -= ki*mCHt[j];
1416 h[0] = h[1] = h[2] = h[3] = h[4] = h[5] = h[6] = 0;
1420 for(Int_t
i=0;
i<8;++
i) zeta -= h[
i]*(
fP[
i]-
fP[
i]);
1428 for( Int_t i=0, ii=0; i<7; ++
i ){
1431 for(Int_t j=0;j<=
i;++j)
fC[ii++] -= ki*
fC[28+j];
1478 fvec constraintC[6];
1480 if( IsConstrained ){
1481 for(Int_t
i=0;
i<6;++
i) constraintC[
i]=
fC[
i];
1484 for(Int_t
i=0;
i<6;++
i) constraintC[
i]=0.;
1488 constraintC[2] = fVtxErrGuess[1]*fVtxErrGuess[1];
1489 constraintC[5] = fVtxErrGuess[2]*fVtxErrGuess[2];
1493 for( Int_t iter=0; iter<maxIter; iter++ ){
1510 for(Int_t
i=0;
i<6; ++
i)
fC[
i]=constraintC[
i];
1511 for(Int_t
i=6;
i<36;++
i)
fC[
i]=0.;
1514 fNDF = IsConstrained ?0 :-3;
1518 for( Int_t itr =0; itr<nDaughters; itr++ ){
1521 if( iter<maxIter-1){
1540 const fvec kCLight =
fQ*0.000299792458;
1541 fld[0]*=kCLight; fld[1]*=kCLight; fld[2]*=kCLight;
1549 if( ToProduction ){ h[0]=-h[0]; h[1]=-h[1]; h[2]=-h[2]; }
1550 h[3] = h[1]*fld[2]-h[2]*fld[1];
1551 h[4] = h[2]*fld[0]-h[0]*fld[2];
1552 h[5] = h[0]*fld[1]-h[1]*fld[0];
1556 c =
fC[28]+h[0]*
fC[35];
1557 fC[ 0]+= h[0]*(c+fC[28]);
1560 fC[ 1]+= h[1]*fC[28] + h[0]*fC[29];
1561 c = fC[29]+h[1]*fC[35];
1562 fC[ 2]+= h[1]*(c+fC[29]);
1565 fC[ 3]+= h[2]*fC[28] + h[0]*fC[30];
1566 fC[ 4]+= h[2]*fC[29] + h[1]*fC[30];
1567 c = fC[30]+h[2]*fC[35];
1568 fC[ 5]+= h[2]*(c+fC[30]);
1571 fC[ 6]+= h[3]*fC[28] + h[0]*fC[31];
1572 fC[ 7]+= h[3]*fC[29] + h[1]*fC[31];
1573 fC[ 8]+= h[3]*fC[30] + h[2]*fC[31];
1574 c = fC[31]+h[3]*fC[35];
1575 fC[ 9]+= h[3]*(c+fC[31]);
1578 fC[10]+= h[4]*fC[28] + h[0]*fC[32];
1579 fC[11]+= h[4]*fC[29] + h[1]*fC[32];
1580 fC[12]+= h[4]*fC[30] + h[2]*fC[32];
1581 fC[13]+= h[4]*fC[31] + h[3]*fC[32];
1582 c = fC[32]+h[4]*fC[35];
1583 fC[14]+= h[4]*(c+fC[32]);
1586 fC[15]+= h[5]*fC[28] + h[0]*fC[33];
1587 fC[16]+= h[5]*fC[29] + h[1]*fC[33];
1588 fC[17]+= h[5]*fC[30] + h[2]*fC[33];
1589 fC[18]+= h[5]*fC[31] + h[3]*fC[33];
1590 fC[19]+= h[5]*fC[32] + h[4]*fC[33];
1591 c = fC[33]+h[5]*fC[35];
1592 fC[20]+= h[5]*(c+fC[33]);
1595 fC[21]+= h[0]*fC[34];
1596 fC[22]+= h[1]*fC[34];
1597 fC[23]+= h[2]*fC[34];
1598 fC[24]+= h[3]*fC[34];
1599 fC[25]+= h[4]*fC[34];
1600 fC[26]+= h[5]*fC[34];
1637 Vertex.
fC[3]+
fC[3], Vertex.
fC[4]+
fC[4], Vertex.
fC[5]+
fC[5]};
1643 l =
sqrt( dx*dx + dy*dy + dz*dz );
1644 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);
1648 if(isParticleFromVertex)
1650 *isParticleFromVertex =
fvec(ok &
fvec( l<
fvec(3*dl) ));
1660 *isParticleFromVertex =
fvec( (*isParticleFromVertex) |
fvec(!(*isParticleFromVertex) &
fvec(cos<Zero) ) );
1670 const fvec kCLight = 0.000299792458;
1674 fvec dx = xyz[0] - fP[0];
1675 fvec dy = xyz[1] - fP[1];
1676 fvec a = dx*fP[3]+dy*fP[4];
1679 const fvec LocalSmall = 1.e-8;
1681 dS =
if3(mask, a/pt2, (
atan2( bq*a, pt2 + bq*(dy*fP[3] -dx*fP[4]) )/bq));
1689 fvec ss[2],
g[2][5];
1693 for( Int_t
i=0;
i<2;
i++){
1702 sB = (1.-bs*kOvSqr6)*(1.+bs*kOvSqr6)*ss[
i];
1705 g[
i][0] = fP[0] + sB*px + cB*py;
1706 g[
i][1] = fP[1] - cB*px + sB*py;
1707 g[
i][2] = fP[2] + ss[
i]*
pz;
1708 g[
i][3] = + c*px +
s*py;
1709 g[
i][4] = -
s*px + c*py;
1715 for( Int_t j=0; j<2; j++){
1716 fvec xx = g[j][0]-xyz[0];
1717 fvec yy = g[j][1]-xyz[1];
1718 fvec zz = g[j][2]-xyz[2];
1719 fvec d = xx*xx + yy*yy + zz*zz;
1728 fvec x= g[
i][0],
y= g[
i][1],
z= g[
i][2], ppx= g[
i][3], ppy= g[
i][4];
1729 fvec ddx = x-xyz[0];
1730 fvec ddy = y-xyz[1];
1731 fvec ddz = z-xyz[2];
1732 fvec c = ddx*ppx + ddy*ppy + ddz*
pz ;
1733 fvec pp2 = ppx*ppx + ppy*ppy + pz*
pz;
1748 const fvec kCLight = 0.000299792458;
1752 fvec dx = xyz[0] - fP[0];
1753 fvec dy = -xyz[2] + fP[2];
1754 fvec a = dx*fP[3]-dy*fP[5];
1757 const fvec LocalSmall = 1.e-8;
1759 dS =
if3(mask, a/pt2, (
atan2( bq*a, pt2 + bq*(dy*fP[3] +dx*fP[5]) )/bq));
1775 const fvec kCLight = 0.000299792458;
1778 fvec bq1 = B*p.
fQ*kCLight;
1781 const fvec LocalSmall = 1.e-8;
1786 const fvec two = 2.;
1787 const fvec four = 2.;
1792 fvec p2 = (px *px + py *py);
1793 fvec p21 = (px1*px1 + py1*py1);
1795 fvec a = (px*py1 - py*px1);
1796 fvec b = (px*px1 + py*py1);
1798 fvec ldx = bq*bq1*dx - bq1*py + bq*py1 ;
1799 fvec ldy = bq*bq1*dy + bq1*px - bq*px1 ;
1800 fvec l2 = ldx*ldx + ldy*ldy;
1802 fvec cS = bq1*p2 + bq*bq1*(dy* px - dx* py) - bq*b;
1803 fvec cS1= bq*p21 - bq*bq1*(dy*px1 - dx*py1) - bq1*b;
1805 fvec ca = bq*bq*bq1*d2 + two*( cS + bq*bq*(py1*dx-px1*
dy)) ;
1806 fvec ca1 = bq*bq1*bq1*d2 + two*( cS1 - bq1*bq1*(py*dx-px*
dy)) ;
1808 fvec sa = 4*l2*p2 - ca*ca;
1809 fvec sa1 = 4*l2*p21 - ca1*ca1;
1813 const fvec sa1Neg =
fvec(sa1<Zero);
1814 sa1= (!sa1Neg) & sa1;
1817 s =
if3( bq_big, (
atan2( bq*( bq1*(dx*px +dy*py) + a ) , cS )/bq), (( (dx*px + dy*py) + (py*px1-px*py1)/bq1)/p2) );
1818 ds =
if3( bq_big, (
atan2(
sqrt(sa),ca)/bq) , (s*s - (d2-two*(px1*dy-py1*dx)/bq1)/p2) );
1820 ds = (
fvec((!dsNeg) & (!bq_big)) &
sqrt(ds) ) + (bq_big & ds);
1822 s1 =
if3( bq1_big, (
atan2( -bq1*( bq*(dx*px1+dy*py1) + a), cS1 )/bq1), ((-(dx*px1 + dy*py1) + (py*px1-px*py1)/bq)/p21) );
1823 ds1 =
if3( bq1_big, (
atan2(
sqrt(sa1),ca1)/bq1) , (s1*s1 - (d2+two*(px*dy-py*dx)/bq)/p21) );
1825 ds1 = (
fvec((!ds1Neg) & (!bq1_big)) &
sqrt(ds1) ) + (bq1_big & ds1);
1828 fvec ss[2], ss1[2],
g[2][5],
g1[2][5];
1835 for( Int_t
i=0;
i<2;
i++){
1841 sB =
if3( bq_big, (sss/bq), ((One-bs*kOvSqr6)*(One+bs*kOvSqr6)*ss[
i]));
1842 cB =
if3( bq_big, ((One-c)/bq), (.5*sB*bs));
1844 g[
i][0] =
fP[0] + sB*px + cB*py;
1845 g[
i][1] =
fP[1] - cB*px + sB*py;
1846 g[
i][2] =
fP[2] + ss[
i]*
pz;
1847 g[
i][3] = + c*px + sss*py;
1848 g[
i][4] = - sss*px + c*py;
1851 c =
cos(bs); sss =
sin(bs);
1853 sB =
if3( bq1_big, (sss/bq1), ((One-bs*kOvSqr6)*(One+bs*kOvSqr6)*ss1[i]));
1854 cB =
if3( bq1_big, ((One-c)/bq1), (.5*sB*bs));
1856 g1[
i][0] = p.
fP[0] + sB*px1 + cB*py1;
1857 g1[
i][1] = p.
fP[1] - cB*px1 + sB*py1;
1858 g1[
i][2] = p.
fP[2] + ss[
i]*pz1;
1859 g1[
i][3] = + c*px1 + sss*py1;
1860 g1[
i][4] = - sss*px1 + c*py1;
1867 for( Int_t j=0; j<2; j++){
1868 for( Int_t j1=0; j1<2; j1++){
1869 fvec xx = g[j][0]-g1[j1][0];
1870 fvec yy = g[j][1]-g1[j1][1];
1871 fvec zz = g[j][2]-g1[j1][2];
1872 fvec d = xx*xx + yy*yy + zz*zz;
1875 DS = (mask & ss[j]) + ((!mask) & DS);
1876 DS1 = (mask & ss1[j]) + ((!mask) & DS1);
1877 dMin = (mask &
d) + ((!mask) & dMin);
1882 fvec x= g[
i][0],
y= g[
i][1],
z= g[
i][2], ppx= g[
i][3], ppy= g[
i][4];
1883 fvec x1=g1[i1][0], y1= g1[i1][1], z1= g1[i1][2], ppx1= g1[i1][3], ppy1= g1[i1][4];
1887 fvec a = ppx*ppx1 + ppy*ppy1 + pz*pz1;
1888 fvec b = dx*ppx1 + dy*ppy1 + dz*pz1;
1889 fvec c = dx*ppx + dy*ppy + dz*
pz ;
1890 fvec pp2 = ppx*ppx + ppy*ppy + pz*
pz;
1891 fvec pp21= ppx1*ppx1 + ppy1*ppy1 + pz1*pz1;
1892 fvec det = pp2*pp21 - a*
a;
1893 if(
fabs(det)>1.e-8 ){
1894 DS+=(a*b-pp21*
c)/det;
1895 DS1+=(a*c-pp2*
b)/det;
1913 const fvec kCLight = 0.000299792458;
1916 fvec bq1 = B*p.
fQ*kCLight;
1919 const fvec LocalSmall = 1.e-8;
1924 const fvec two = 2.;
1925 const fvec four = 2.;
1930 fvec p2 = (px *px + py *py);
1931 fvec p21 = (px1*px1 + py1*py1);
1933 fvec a = (px*py1 - py*px1);
1934 fvec b = (px*px1 + py*py1);
1936 fvec ldx = bq*bq1*dx - bq1*py + bq*py1 ;
1937 fvec ldy = bq*bq1*dy + bq1*px - bq*px1 ;
1938 fvec l2 = ldx*ldx + ldy*ldy;
1940 fvec cS = bq1*p2 + bq*bq1*(dy* px - dx* py) - bq*b;
1941 fvec cS1= bq*p21 - bq*bq1*(dy*px1 - dx*py1) - bq1*b;
1943 fvec ca = bq*bq*bq1*d2 + two*( cS + bq*bq*(py1*dx-px1*
dy)) ;
1944 fvec ca1 = bq*bq1*bq1*d2 + two*( cS1 - bq1*bq1*(py*dx-px*
dy)) ;
1946 fvec sa = 4*l2*p2 - ca*ca;
1947 fvec sa1 = 4*l2*p21 - ca1*ca1;
1951 const fvec sa1Neg =
fvec(sa1<Zero);
1952 sa1= (!sa1Neg) & sa1;
1954 s =
if3( bq_big, (
atan2( bq*( bq1*(dx*px +dy*py) + a ) , cS )/bq), (( (dx*px + dy*py) + (py*px1-px*py1)/bq1)/p2) );
1955 ds =
if3( bq_big, (
atan2(
sqrt(sa),ca)/bq) , (s*s - (d2-two*(px1*dy-py1*dx)/bq1)/p2) );
1957 ds = (
fvec((!dsNeg) & (!bq_big)) &
sqrt(ds) ) + (bq_big & ds);
1959 s1 =
if3( bq1_big, (
atan2( -bq1*( bq*(dx*px1+dy*py1) + a), cS1 )/bq1), ((-(dx*px1 + dy*py1) + (py*px1-px*py1)/bq)/p21) );
1960 ds1 =
if3( bq1_big, (
atan2(
sqrt(sa1),ca1)/bq1) , (s1*s1 - (d2+two*(px*dy-py*dx)/bq)/p21) );
1962 ds1 = (
fvec((!ds1Neg) & (!bq1_big)) &
sqrt(ds1) ) + (bq1_big & ds1);
1965 fvec ss[2], ss1[2],
g[2][5],
g1[2][5];
1972 for( Int_t
i=0;
i<2;
i++){
1978 sB =
if3( bq_big, (sss/bq), ((One-bs*kOvSqr6)*(One+bs*kOvSqr6)*ss[
i]));
1979 cB =
if3( bq_big, ((One-c)/bq), (.5*sB*bs));
1981 g[
i][0] =
fP[0] + sB*px + cB*py;
1982 g[
i][1] = -
fP[2] - cB*px + sB*py;
1983 g[
i][2] =
fP[1] + ss[
i]*
pz;
1984 g[
i][3] = + c*px + sss*py;
1985 g[
i][4] = - sss*px + c*py;
1988 c =
cos(bs); sss =
sin(bs);
1990 sB =
if3( bq1_big, (sss/bq1), ((One-bs*kOvSqr6)*(One+bs*kOvSqr6)*ss1[i]));
1991 cB =
if3( bq1_big, ((One-c)/bq1), (.5*sB*bs));
1993 g1[
i][0] = p.
fP[0] + sB*px1 + cB*py1;
1994 g1[
i][1] = -p.
fP[2] - cB*px1 + sB*py1;
1995 g1[
i][2] = p.
fP[1] + ss[
i]*pz1;
1996 g1[
i][3] = + c*px1 + sss*py1;
1997 g1[
i][4] = - sss*px1 + c*py1;
2004 for( Int_t j=0; j<2; j++){
2005 for( Int_t j1=0; j1<2; j1++){
2006 fvec xx = g[j][0]-g1[j1][0];
2007 fvec yy = g[j][1]-g1[j1][1];
2008 fvec zz = g[j][2]-g1[j1][2];
2009 fvec d = xx*xx + yy*yy + zz*zz;
2012 DS = (mask & ss[j]) + ((!mask) & DS);
2013 DS1 = (mask & ss1[j]) + ((!mask) & DS1);
2014 dMin = (mask &
d) + ((!mask) & dMin);
2024 fvec p2 = r[3]*r[3] + r[4]*r[4] + r[5]*r[5];
2025 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);
2038 dS =
if3(
fabs(dS)>1.E3, Zero, dS);
2047 fvec p1p2 = fP[3]*p.
fP[3] + fP[4]*p.
fP[4] + fP[5]*p.
fP[5];
2049 fvec drp1 = fP[3]*(p.
fP[0]-fP[0]) + fP[4]*(p.
fP[1]-fP[1]) + fP[5]*(p.
fP[2]-fP[2]);
2050 fvec drp2 = p.
fP[3]*(p.
fP[0]-fP[0]) + p.
fP[4]*(p.
fP[1]-fP[1]) + p.
fP[5]*(p.
fP[2]-fP[2]);
2052 fvec detp = p1p2*p1p2 - p12*p22;
2054 dS = (drp2*p1p2 - drp1*p22) /detp;
2055 dS1 = (drp2*p12 - drp1*p1p2)/detp;
2075 fvec dty = mTy[0]-mTy[1];
2077 r0[2] =
if3(
fabs(dty) > small, (mTy[0]*mZ[0]-mTy[1]*mZ[1] + mY[1] -mY[0])/dty, 0. );
2078 r0[1] = mY[0] + mTy[0]*(r0[2]-mZ[0]);
2105 const fvec kCLight = 0.000299792458;
2116 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;
2129 p2[0] =
fP[0] + px*dS;
2130 p2[1] =
fP[1] + py*dS;
2131 p2[2] =
fP[2] + pz*dS;
2133 p1[0] = 0.5*(p0[0]+p2[0]);
2134 p1[1] = 0.5*(p0[1]+p2[1]);
2135 p1[2] = 0.5*(p0[2]+p2[2]);
2143 fvec ssy1 = ( 7*fld[0][1] + 6*fld[1][1]-fld[2][1] )*c*dS*dS/96.;
2144 fvec ssy2 = ( fld[0][1] + 2*fld[1][1] )*c*dS*dS/6.;
2156 for(
int iF1=0; iF1<3; iF1++)
2157 for(
int iF2=0; iF2<3; iF2++)
2158 fld[iF1][iF2] =
if3( (
fabs(fld[iF1][iF2]) >
fvec(100.)), Zero, fld[iF1][iF2] );
2160 sx = c*( fld[0][0] + 4*fld[1][0] + fld[2][0] )*dS/6.;
2161 sy = c*( fld[0][1] + 4*fld[1][1] + fld[2][1] )*dS/6.;
2162 sz = c*( fld[0][2] + 4*fld[1][2] + fld[2][2] )*dS/6.;
2164 ssx = c*( fld[0][0] + 2*fld[1][0])*dS*dS/6.;
2165 ssy = c*( fld[0][1] + 2*fld[1][1])*dS*dS/6.;
2166 ssz = c*( fld[0][2] + 2*fld[1][2])*dS*dS/6.;
2168 fvec c2[3][3] = { { 5, -4, -1},{ 44, 80, -4},{ 11, 44, 5} };
2169 fvec cc2[3][3] = { { 38, 8, -4},{ 148, 208, -20},{ 3, 36, 3} };
2170 for(Int_t
n=0;
n<3;
n++)
2171 for(Int_t
m=0;
m<3;
m++)
2173 syz += c2[
n][
m]*fld[
n][1]*fld[
m][2];
2174 ssyz += cc2[
n][
m]*fld[
n][1]*fld[
m][2];
2177 syz *= c*c*dS*dS/360.;
2178 ssyz *= c*c*dS*dS*dS/2520.;
2180 syy = c*( fld[0][1] + 4*fld[1][1] + fld[2][1] )*dS;
2181 syyy = syy*syy*syy / 1296;
2184 ssyy = ( fld[0][1]*( 38*fld[0][1] + 156*fld[1][1] - fld[2][1] )+
2185 fld[1][1]*( 208*fld[1][1] +16*fld[2][1] )+
2186 fld[2][1]*( 3*fld[2][1] )
2187 )*dS*dS*dS*c*c/2520.;
2190 fld[0][1]*( fld[0][1]*( 85*fld[0][1] + 526*fld[1][1] - 7*fld[2][1] )+
2191 fld[1][1]*( 1376*fld[1][1] +84*fld[2][1] )+
2192 fld[2][1]*( 19*fld[2][1] ) )+
2193 fld[1][1]*( fld[1][1]*( 1376*fld[1][1] +256*fld[2][1] )+
2194 fld[2][1]*( 62*fld[2][1] ) )+
2195 fld[2][1]*fld[2][1] *( 3*fld[2][1] )
2196 )*dS*dS*dS*dS*c*c*c/90720.;
2202 mJ[0]=dS-ssyy; mJ[1]=ssx; mJ[2]=ssyyy-ssy;
2203 mJ[3]=-ssz; mJ[4]=dS; mJ[5]=ssx+ssyz;
2205 mJ[6]=1-syy; mJ[7]=sx; mJ[8]=syyy-sy;
2206 mJ[9]=-sz; mJ[10]=sx+syz;
2210 P[0] =
fP[0] + mJ[0]*px + mJ[1]*py + mJ[2]*
pz;
2211 P[1] =
fP[1] + mJ[3]*px + mJ[4]*py + mJ[5]*
pz;
2212 P[2] =
fP[2] - mJ[2]*px - mJ[1]*py + mJ[0]*
pz;
2213 P[3] = mJ[6]*px + mJ[7]*py + mJ[8]*
pz;
2214 P[4] = mJ[9]*px + py + mJ[10]*
pz;
2215 P[5] = -mJ[8]*px - mJ[7]*py + mJ[6]*
pz;
2221 for(
int iC=0; iC<36; iC++)
2254 const fvec A00 = S[0 ]+S[6 ]*J[0]+S[10]*J[1]+S[15]*J[2];
2255 const fvec A10 = S[1 ]+S[7 ]*J[0]+S[11]*J[1]+S[16]*J[2];
2256 const fvec A20 = S[3 ]+S[8 ]*J[0]+S[12]*J[1]+S[17]*J[2];
2257 const fvec A30 = S[6 ]+S[9 ]*J[0]+S[13]*J[1]+S[18]*J[2];
2258 const fvec A40 = S[10]+S[13]*J[0]+S[14]*J[1]+S[19]*J[2];
2259 const fvec A50 = S[15]+S[18]*J[0]+S[19]*J[1]+S[20]*J[2];
2260 const fvec A60 = S[21]+S[24]*J[0]+S[25]*J[1]+S[26]*J[2];
2261 const fvec A70 = S[28]+S[31]*J[0]+S[32]*J[1]+S[33]*J[2];
2263 S[0 ] = A00+J[0]*A30+J[1]*A40+J[2]*A50;
2264 S[1 ] = A10+J[3]*A30+J[4]*A40+J[5]*A50;
2265 S[3 ] = A20-J[2]*A30-J[1]*A40+J[0]*A50;
2266 S[6 ] = J[6]*A30+J[7]*A40+J[8]*A50;
2267 S[10] = J[9]*A30+ A40+J[10]*A50;
2268 S[15] = -J[8]*A30-J[7]*A40+J[6]*A50;
2273 const fvec A11 = S[2 ]+S[7 ]*J[3]+S[11]*J[4]+S[16]*J[5];
2274 const fvec A21 = S[4 ]+S[8 ]*J[3]+S[12]*J[4]+S[17]*J[5];
2275 const fvec A31 = S[7 ]+S[9 ]*J[3]+S[13]*J[4]+S[18]*J[5];
2276 const fvec A41 = S[11]+S[13]*J[3]+S[14]*J[4]+S[19]*J[5];
2277 const fvec A51 = S[16]+S[18]*J[3]+S[19]*J[4]+S[20]*J[5];
2278 const fvec A61 = S[22]+S[24]*J[3]+S[25]*J[4]+S[26]*J[5];
2279 const fvec A71 = S[29]+S[31]*J[3]+S[32]*J[4]+S[33]*J[5];
2281 S[2 ] = A11+J[3]*A31+J[4]*A41+J[5]*A51;
2282 S[4 ] = A21-J[2]*A31-J[1]*A41+J[0]*A51;
2283 S[7 ] = J[6]*A31+J[7]*A41+J[8]*A51;
2284 S[11] = J[9]*A31+ A41+J[10]*A51;
2285 S[16] = -J[8]*A31-J[7]*A41+J[6]*A51;
2291 const fvec A22 = S[5 ]-S[8 ]*J[2]-S[12]*J[1]+S[17]*J[0];
2292 const fvec A32 = S[8 ]-S[9 ]*J[2]-S[13]*J[1]+S[18]*J[0];
2293 const fvec A42 = S[12]-S[13]*J[2]-S[14]*J[1]+S[19]*J[0];
2294 const fvec A52 = S[17]-S[18]*J[2]-S[19]*J[1]+S[20]*J[0];
2295 const fvec A62 = S[23]-S[24]*J[2]-S[25]*J[1]+S[26]*J[0];
2296 const fvec A72 = S[30]-S[31]*J[2]-S[32]*J[1]+S[33]*J[0];
2298 S[5 ] = A22-J[2]*A32-J[1]*A42+J[0]*A52;
2299 S[8 ] = J[6]*A32+J[7]*A42+J[8]*A52;
2300 S[12] = J[9]*A32+ A42+J[10]*A52;
2301 S[17] = -J[8]*A32-J[7]*A42+J[6]*A52;
2308 const fvec A33 = S[9] *J[6]+S[13]*J[7]+S[18]*J[8];
2309 const fvec A43 = S[13]*J[6]+S[14]*J[7]+S[19]*J[8];
2310 const fvec A53 = S[18]*J[6]+S[19]*J[7]+S[20]*J[8];
2311 const fvec A63 = S[24]*J[6]+S[25]*J[7]+S[26]*J[8];
2312 const fvec A73 = S[31]*J[6]+S[32]*J[7]+S[33]*J[8];
2317 const fvec A34 = S[9] *J[9]+S[13]+S[18]*J[10];
2318 const fvec A44 = S[13]*J[9]+S[14]+S[19]*J[10];
2319 const fvec A54 = S[18]*J[9]+S[19]+S[20]*J[10];
2320 const fvec A64 = S[24]*J[9]+S[25]+S[26]*J[10];
2321 const fvec A74 = S[31]*J[9]+S[32]+S[33]*J[10];
2326 const fvec A35 = -S[9] *J[8]-S[13]*J[7]+S[18]*J[6];
2327 const fvec A45 = -S[13]*J[8]-S[14]*J[7]+S[19]*J[6];
2328 const fvec A55 = -S[18]*J[8]-S[19]*J[7]+S[20]*J[6];
2329 const fvec A65 = -S[24]*J[8]-S[25]*J[7]+S[26]*J[6];
2330 const fvec A75 = -S[31]*J[8]-S[32]*J[7]+S[33]*J[6];
2333 S[9 ] = J[6]*A33+J[7]*A43+J[8]*A53;
2334 S[13] = J[9]*A33+ A43+J[10]*A53;
2335 S[18] = -J[8]*A33-J[7]*A43+J[6]*A53;
2339 S[14] = J[9]*A34+ A44+J[10]*A54;
2340 S[19] = -J[8]*A34-J[7]*A44+J[6]*A54;
2344 S[20] = -J[8]*A35-J[7]*A45+J[6]*A55;
2358 const fvec kCLight = 0.000299792458;
2365 const fvec LocalSmall = 1.e-10;
2367 sB =
if3(
fvec(LocalSmall <
fabs(bs)), (s/b), ((One-bs*kOvSqr6)*(One+bs*kOvSqr6)*t) );
2368 cB =
if3(
fvec(LocalSmall <
fabs(bs)), ((One-
c)/b), (.5*sB*bs) );
2374 p[0] =
fP[0] + sB*px + cB*py;
2375 p[1] =
fP[1] - cB*px + sB*py;
2376 p[2] =
fP[2] + t*
pz;
2378 p[4] = -s*px +
c*py;
2414 c24 =
fC[24], c31 =
fC[31];
2418 mJC13 = c7 - cB*fC[9] + sB*fC[13],
2419 mJC14 = fC[11] - cBC13 + sB*fC[14],
2421 mJC24 = fC[12] + t*fC[19],
2422 mJC33 =
c*fC[9] + s*fC[13],
2423 mJC34 =
c*fC[13] + s*fC[14],
2424 mJC43 = -s*fC[9] +
c*fC[13],
2425 mJC44 = -s*fC[13] +
c*fC[14];
2428 e[0]= fC[0] + 2*(sB*c6 + cB*fC[10]) + (sB*fC[9] + 2*cBC13)*sB + cB*cB*fC[14];
2429 e[1]= fC[1] - cB*c6 + sB*fC[10] + mJC13*sB + mJC14*cB;
2430 e[2]= fC[2] - cB*c7 + sB*fC[11] - mJC13*cB + mJC14*sB;
2431 e[3]= fC[3] + t*fC[15] + mJC23*sB + mJC24*cB;
2432 e[4]= fC[4] + t*fC[16] - mJC23*cB + mJC24*sB;
2434 e[15]= fC[15] + c18*sB + fC[19]*cB;
2435 e[16]= fC[16] - c18*cB + fC[19]*sB;
2436 e[17]= c17 + fC[20]*
t;
2437 e[18]= c18*
c + fC[19]*
s;
2438 e[19]= -c18*s + fC[19]*
c;
2440 e[5]= fC[5] + (c17 + e[17] )*t;
2442 e[6]= c*c6 + s*fC[10] + mJC33*sB + mJC34*cB;
2443 e[7]= c*c7 + s*fC[11] - mJC33*cB + mJC34*sB;
2444 e[8]= c*c8 + s*fC[12] + e[18]*
t;
2445 e[9]= mJC33*c + mJC34*
s;
2446 e[10]= -s*c6 + c*fC[10] + mJC43*sB + mJC44*cB;
2449 e[11]= -s*c7 + c*fC[11] - mJC43*cB + mJC44*sB;
2450 e[12]= -s*c8 + c*fC[12] + e[19]*
t;
2451 e[13]= mJC43*c + mJC44*
s;
2452 e[14]= -mJC43*s + mJC44*
c;
2454 e[21]= fC[21] + fC[25]*cB + c24*sB;
2455 e[22]= fC[22] - c24*cB + fC[25]*sB;
2456 e[23]= fC[23] + fC[26]*
t;
2457 e[24]= c*c24 + s*fC[25];
2458 e[25]= c*fC[25] - c24*
s;
2461 e[28]= fC[28] + fC[32]*cB + c31*sB;
2462 e[29]= fC[29] - c31*cB + fC[32]*sB;
2463 e[30]= fC[30] + fC[33]*
t;
2464 e[31]= c*c31 + s*fC[32];
2465 e[32]= c*fC[32] - s*c31;
2485 fvec d[3]={ vtx[0]-mP[0], vtx[1]-mP[1], vtx[2]-mP[2]};
2486 return sqrt( d[0]*d[0]+d[1]*d[1]+d[2]*d[2] );
2496 fvec mP[8], mC[36], mP1[8], mC1[36];
2502 return sqrt(dx*dx+dy*dy+dz*dz);
2523 for(
int i=0;
i<8;
i++)
2526 for(
int i=0;
i<36;
i++)
2529 fvec d[3]={ v[0]-mP[0], v[1]-mP[1], v[2]-mP[2]};
2531 fvec sigmaS = .1+10.*
sqrt( (d[0]*d[0]+d[1]*d[1]+d[2]*d[2])/
2532 (mP[3]*mP[3]+mP[4]*mP[4]+mP[5]*mP[5]) );
2535 fvec h[3] = { mP[3]*sigmaS*0, mP[4]*sigmaS*0, mP[5]*sigmaS*0 };
2539 mC[1] +h[1]*h[0], mC[2] +h[1]*h[1],
2540 mC[3] +h[2]*h[0], mC[4] +h[2]*h[1], mC[5] +h[2]*h[2] };
2568 return sqrt( ( ( mSi[0]*d[0] + mSi[1]*d[1] + mSi[3]*d[2])*d[0]
2569 +(mSi[1]*d[0] + mSi[2]*d[1] + mSi[4]*d[2])*d[1]
2570 +(mSi[3]*d[0] + mSi[4]*d[1] + mSi[5]*d[2])*d[2] ));
2581 fvec mP1[8], mC1[36];
2584 fvec d[3]={
fP[0]-mP1[0],
fP[1]-mP1[1],
fP[2]-mP1[2]};
2586 fvec sigmaS = .1+10.*
sqrt( (d[0]*d[0]+d[1]*d[1]+d[2]*d[2])/
2587 (mP1[3]*mP1[3]+mP1[4]*mP1[4]+mP1[5]*mP1[5]) );
2589 fvec h[3] = { mP1[3]*sigmaS, mP1[4]*sigmaS, mP1[5]*sigmaS };
2629 fvec mSi[6] = { mV[0]-Vtx.
fC[0],
2630 mV[1]-Vtx.
fC[1], mV[2]-Vtx.
fC[2],
2631 mV[3]-Vtx.
fC[3], mV[4]-Vtx.
fC[4], mV[5]-Vtx.
fC[5] };
2633 mS[0] = mSi[2]*mSi[5] - mSi[4]*mSi[4];
2634 mS[1] = mSi[3]*mSi[4] - mSi[1]*mSi[5];
2635 mS[2] = mSi[0]*mSi[5] - mSi[3]*mSi[3];
2636 mS[3] = mSi[1]*mSi[4] - mSi[2]*mSi[3];
2637 mS[4] = mSi[1]*mSi[3] - mSi[0]*mSi[4];
2638 mS[5] = mSi[0]*mSi[2] - mSi[1]*mSi[1];
2640 fvec s = ( mSi[0]*mS[0] + mSi[1]*mS[1] + mSi[3]*mS[3] );
2652 fvec zeta[3] = { m[0]-Vtx.
fP[0], m[1]-Vtx.
fP[1], m[2]-Vtx.
fP[2] };
2656 fvec mCHt0[3], mCHt1[3], mCHt2[3];
2658 mCHt0[0]=Vtx.
fC[ 0] ; mCHt1[0]=Vtx.
fC[ 1] ; mCHt2[0]=Vtx.
fC[ 3] ;
2659 mCHt0[1]=Vtx.
fC[ 1] ; mCHt1[1]=Vtx.
fC[ 2] ; mCHt2[1]=Vtx.
fC[ 4] ;
2660 mCHt0[2]=Vtx.
fC[ 3] ; mCHt1[2]=Vtx.
fC[ 4] ; mCHt2[2]=Vtx.
fC[ 5] ;
2664 fvec k0[3], k1[3], k2[3];
2666 for(Int_t
i=0;
i<3;++
i){
2667 k0[
i] = mCHt0[
i]*mS[0] + mCHt1[
i]*mS[1] + mCHt2[
i]*mS[3];
2668 k1[
i] = mCHt0[
i]*mS[1] + mCHt1[
i]*mS[2] + mCHt2[
i]*mS[4];
2669 k2[
i] = mCHt0[
i]*mS[3] + mCHt1[
i]*mS[4] + mCHt2[
i]*mS[5];
2674 fvec dChi2 = -(mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2])*zeta[0]
2675 - (mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2])*zeta[1]
2676 - (mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2])*zeta[2];
2681 for(Int_t
i=0;
i<3;++
i)
2682 Vtx.
fP[
i] -= (mask & (k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2]) );
2685 for(Int_t
i=0, k=0;
i<3;++
i){
2686 for(Int_t j=0;j<=
i;++j,++k)
2687 Vtx.
fC[k] += (mask & (k0[
i]*mCHt0[j] + k1[
i]*mCHt1[j] + k2[
i]*mCHt2[j]));
2693 Vtx.
fChi2 += (mask & dChi2);
2709 fvec mS[6]= { mV[0] - Vtx.
fC[0],
2710 mV[1] - Vtx.
fC[1], mV[2] - Vtx.
fC[2],
2711 mV[3] - Vtx.
fC[3], mV[4] - Vtx.
fC[4], mV[5] - Vtx.
fC[5] };
2716 fvec zeta[3] = { m[0]-Vtx.
fP[0], m[1]-Vtx.
fP[1], m[2]-Vtx.
fP[2] };
2720 fvec mCHt0[7], mCHt1[7], mCHt2[7];
2722 mCHt0[0]=mV[ 0] ; mCHt1[0]=mV[ 1] ; mCHt2[0]=mV[ 3] ;
2723 mCHt0[1]=mV[ 1] ; mCHt1[1]=mV[ 2] ; mCHt2[1]=mV[ 4] ;
2724 mCHt0[2]=mV[ 3] ; mCHt1[2]=mV[ 4] ; mCHt2[2]=mV[ 5] ;
2725 mCHt0[3]=Vtx.
fC[ 6]-mV[ 6]; mCHt1[3]=Vtx.
fC[ 7]-mV[ 7]; mCHt2[3]=Vtx.
fC[ 8]-mV[ 8];
2726 mCHt0[4]=Vtx.
fC[10]-mV[10]; mCHt1[4]=Vtx.
fC[11]-mV[11]; mCHt2[4]=Vtx.
fC[12]-mV[12];
2727 mCHt0[5]=Vtx.
fC[15]-mV[15]; mCHt1[5]=Vtx.
fC[16]-mV[16]; mCHt2[5]=Vtx.
fC[17]-mV[17];
2728 mCHt0[6]=Vtx.
fC[21]-mV[21]; mCHt1[6]=Vtx.
fC[22]-mV[22]; mCHt2[6]=Vtx.
fC[23]-mV[23];
2732 fvec k0[7], k1[7], k2[7];
2734 for(Int_t
i=0;
i<7;++
i){
2735 k0[
i] = mCHt0[
i]*mS[0] + mCHt1[
i]*mS[1] + mCHt2[
i]*mS[3];
2736 k1[
i] = mCHt0[
i]*mS[1] + mCHt1[
i]*mS[2] + mCHt2[
i]*mS[4];
2737 k2[
i] = mCHt0[
i]*mS[3] + mCHt1[
i]*mS[4] + mCHt2[
i]*mS[5];
2742 Vtx.
fP[ 3] -= m[ 3];
2743 Vtx.
fP[ 4] -= m[ 4];
2744 Vtx.
fP[ 5] -= m[ 5];
2745 Vtx.
fP[ 6] -= m[ 6];
2747 Vtx.
fC[ 9] -= mV[ 9];
2748 Vtx.
fC[13] -= mV[13];
2749 Vtx.
fC[14] -= mV[14];
2750 Vtx.
fC[18] -= mV[18];
2751 Vtx.
fC[19] -= mV[19];
2752 Vtx.
fC[20] -= mV[20];
2753 Vtx.
fC[24] -= mV[24];
2754 Vtx.
fC[25] -= mV[25];
2755 Vtx.
fC[26] -= mV[26];
2756 Vtx.
fC[27] -= mV[27];
2760 for(Int_t
i=0;
i<3;++
i)
2761 Vtx.
fP[
i] = m[
i] - (k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2]);
2762 for(Int_t
i=3;
i<7;++
i)
2763 Vtx.
fP[
i] = Vtx.
fP[
i] - (k0[
i]*zeta[0] + k1[
i]*zeta[1] + k2[
i]*zeta[2]);
2767 fvec ffC[28] = { -mV[ 0],
2769 -mV[ 3], -mV[ 4], -mV[ 5],
2770 mV[ 6], mV[ 7], mV[ 8], Vtx.
fC[ 9],
2771 mV[10], mV[11], mV[12], Vtx.
fC[13], Vtx.
fC[14],
2772 mV[15], mV[16], mV[17], Vtx.
fC[18], Vtx.
fC[19], Vtx.
fC[20],
2773 mV[21], mV[22], mV[23], Vtx.
fC[24], Vtx.
fC[25], Vtx.
fC[26], Vtx.
fC[27] };
2775 for(Int_t
i=0, k=0;
i<7;++
i){
2776 for(Int_t j=0;j<=
i;++j,++k){
2777 Vtx.
fC[k] = ffC[k] + (k0[
i]*mCHt0[j] + k1[
i]*mCHt1[j] + k2[
i]*mCHt2[j] );
2785 Vtx.
fChi2 -= ((mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2])*zeta[0]
2786 +(mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2])*zeta[1]
2787 +(mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2])*zeta[2]);
2795 P[0] =
fP[0] + dS*
fP[3];
2796 P[1] = fP[1] + dS*fP[4];
2797 P[2] = fP[2] + dS*fP[5];
2805 fvec c11 = fC[11] + dS*fC[14];
2806 fvec c17 = fC[17] + dS*fC[20];
2807 fvec sc13 = dS*fC[13];
2808 fvec sc18 = dS*fC[18];
2809 fvec sc19 = dS*fC[19];
2811 C[ 0] = fC[ 0] + dS*( fC[ 6] +
c6 );
2812 C[ 2] = fC[ 2] + dS*( fC[11] +
c11 );
2813 C[ 5] = fC[ 5] + dS*( fC[17] + c17 );
2815 C[ 7] = fC[ 7] + sc13;
2816 C[ 8] = fC[ 8] + sc18;
2819 C[12] = fC[12] + sc19;
2821 C[ 1] = fC[ 1] + dS*( fC[10] + C[ 7] );
2822 C[ 3] = fC[ 3] + dS*( fC[15] + C[ 8] );
2823 C[ 4] = fC[ 4] + dS*( fC[16] + C[12] );
2826 C[10] = fC[10] + sc13;
2831 C[15] = fC[15] + sc18;
2832 C[16] = fC[16] + sc19;
2838 C[21] = fC[21] + dS*fC[24];
2839 C[22] = fC[22] + dS*fC[25];
2840 C[23] = fC[23] + dS*fC[26];
2846 C[28] = fC[28] + dS*fC[31];
2847 C[29] = fC[29] + dS*fC[32];
2848 C[30] = fC[30] + dS*fC[33];
2876 fP[0] = .5*(
fP[0] + m[0] );
2877 fP[1] = .5*(
fP[1] + m[1] );
2878 fP[2] = .5*(
fP[2] + m[2] );
2885 fvec daughterP[2][8], daughterC[2][36];
2890 for(
int iter=0; iter<nIter; iter++){
2911 for(
int id=0;
id<2;
id++ ){
2913 fvec *
p = daughterP[id];
2914 fvec *mC = daughterC[id];
2923 mB[0][0] = mC[ 6]*mAi[0] + mC[ 7]*mAi[1] + mC[ 8]*mAi[3];
2924 mB[0][1] = mC[ 6]*mAi[1] + mC[ 7]*mAi[2] + mC[ 8]*mAi[4];
2925 mB[0][2] = mC[ 6]*mAi[3] + mC[ 7]*mAi[4] + mC[ 8]*mAi[5];
2927 mB[1][0] = mC[10]*mAi[0] + mC[11]*mAi[1] + mC[12]*mAi[3];
2928 mB[1][1] = mC[10]*mAi[1] + mC[11]*mAi[2] + mC[12]*mAi[4];
2929 mB[1][2] = mC[10]*mAi[3] + mC[11]*mAi[4] + mC[12]*mAi[5];
2931 mB[2][0] = mC[15]*mAi[0] + mC[16]*mAi[1] + mC[17]*mAi[3];
2932 mB[2][1] = mC[15]*mAi[1] + mC[16]*mAi[2] + mC[17]*mAi[4];
2933 mB[2][2] = mC[15]*mAi[3] + mC[16]*mAi[4] + mC[17]*mAi[5];
2935 fvec z[3] = { v0[0]-p[0], v0[1]-p[1], v0[2]-p[2] };
2937 vtxMom[id][0] = p[3] + mB[0][0]*z[0] + mB[0][1]*z[1] + mB[0][2]*z[2];
2938 vtxMom[id][1] = p[4] + mB[1][0]*z[0] + mB[1][1]*z[1] + mB[1][2]*z[2];
2939 vtxMom[id][2] = p[5] + mB[2][0]*z[0] + mB[2][1]*z[1] + mB[2][2]*z[2];
2951 fvec mpx0 = vtxMom[0][0]+vtxMom[1][0];
2952 fvec mpy0 = vtxMom[0][1]+vtxMom[1][1];
2953 fvec mpt0 =
sqrt(mpx0*mpx0 + mpy0*mpy0);
2956 fvec ca0 = mpx0/mpt0;
2957 fvec sa0 = mpy0/mpt0;
2958 fvec r[3] = { v0[0], v0[1], v0[2] };
2959 fvec mC[3][3] = {{1000., 0 , 0 },
2964 for(
int id=0;
id<2;
id++ ){
2965 const fvec kCLight = 0.000299792458;
2966 fvec q = Bz*daughters[id]->
GetQ()*kCLight;
2967 fvec px0 = vtxMom[id][0];
2968 fvec py0 = vtxMom[id][1];
2969 fvec pz0 = vtxMom[id][2];
2971 fvec mG[3][6], mB[3], mH[3][3];
2983 mG[0][3] = -sa0*px0/pt0;
2984 mG[0][4] = 1 -sa0*py0/pt0;
2989 mB[0] = py0 - sa0*pt0 - mG[0][3]*px0 - mG[0][4]*py0 ;
2996 mG[1][3] = -1 + ca0*px0/pt0;
2997 mG[1][4] = + ca0*py0/pt0;
3002 mB[1] = -px0 + ca0*pt0 - mG[1][3]*px0 - mG[1][4]*py0 ;
3006 mG[2][0] = -pz0*ca0;
3007 mG[2][1] = -pz0*sa0;
3008 mG[2][2] = px0*ca0 + py0*sa0;
3013 mH[2][0] = mG[2][0];
3014 mH[2][1] = mG[2][1];
3015 mH[2][2] = mG[2][2];
3026 for(
int i=0;
i<3;
i++ ){
3028 for(
int k=0; k<6; k++ ) m[
i]+=mG[
i][k]*daughterP[
id][k];
3030 for(
int i=0;
i<3;
i++ ){
3031 for(
int j=0; j<6; j++ ){
3033 for(
int k=0; k<6; k++ ) mGV[
i][j]+=mG[
i][k]*daughterC[
id][
IJ(k,j) ];
3036 for(
int i=0, k=0;
i<3;
i++ ){
3037 for(
int j=0; j<=
i; j++,k++ ){
3039 for(
int l=0; l<6; l++ ) mV[k]+=mGV[
i][l]*mG[j][l];
3049 for(
int i=0;
i<3;
i++ ){
3051 for(
int k=0; k<3; k++ ) mHr[
i]+= mH[
i][k]*r[k];
3054 for(
int i=0;
i<3;
i++ ){
3055 for(
int j=0; j<3; j++){
3057 for(
int k=0; k<3; k++ ) mCHt[
i][j]+= mC[
i][k]*mH[j][k];
3061 for(
int i=0, k=0;
i<3;
i++ ){
3062 for(
int j=0; j<=
i; j++, k++ ){
3064 for(
int l=0; l<3; l++ ) mHCHt[k]+= mH[
i][l]*mCHt[l][j];
3068 fvec mS[6] = { mHCHt[0]+mV[0],
3069 mHCHt[1]+mV[1], mHCHt[2]+mV[2],
3070 mHCHt[3]+mV[3], mHCHt[4]+mV[4], mHCHt[5]+mV[5] };
3077 fvec zeta[3] = { m[0]-mHr[0], m[1]-mHr[1], m[2]-mHr[2] };
3083 for(Int_t
i=0;
i<3;++
i){
3084 k[
i][0] = mCHt[
i][0]*mS[0] + mCHt[
i][1]*mS[1] + mCHt[
i][2]*mS[3];
3085 k[
i][1] = mCHt[
i][0]*mS[1] + mCHt[
i][1]*mS[2] + mCHt[
i][2]*mS[4];
3086 k[
i][2] = mCHt[
i][0]*mS[3] + mCHt[
i][1]*mS[4] + mCHt[
i][2]*mS[5];
3091 for(Int_t
i=0;
i<3;++
i)
3092 r[
i] = r[
i] + k[
i][0]*zeta[0] + k[
i][1]*zeta[1] + k[
i][2]*zeta[2];
3096 for(Int_t
i=0;
i<3;++
i){
3097 for(Int_t j=0;j<=
i;++j){
3098 mC[
i][j] = mC[
i][j] - (k[
i][0]*mCHt[j][0] + k[
i][1]*mCHt[j][1] + k[
i][2]*mCHt[j][2]);
3099 mC[j][
i] = mC[
i][j];
3105 chi2 += ( ( mS[0]*zeta[0] + mS[1]*zeta[1] + mS[3]*zeta[2] )*zeta[0]
3106 +(mS[1]*zeta[0] + mS[2]*zeta[1] + mS[4]*zeta[2] )*zeta[1]
3107 +(mS[3]*zeta[0] + mS[4]*zeta[1] + mS[5]*zeta[2] )*zeta[2] );
3114 for(
int i=0;
i<3;
i++ )
fP[
i] = r[
i];
3115 for(
int i=0,k=0;
i<3;
i++ ){
3116 for(
int j=0; j<=
i; j++,k++ ){
3129 for(Int_t
i=3;
i<8;++
i)
fP[
i]=0.;
3130 for(Int_t
i=6;
i<35;++
i)
fC[
i]=0.;
3133 for(
int id=0;
id<2;
id++ ){
3135 fvec *
p = daughterP[id];
3136 fvec *mC = daughterC[id];
3146 mB[0][0] = mC[ 6]*mAi[0] + mC[ 7]*mAi[1] + mC[ 8]*mAi[3];
3147 mB[0][1] = mC[ 6]*mAi[1] + mC[ 7]*mAi[2] + mC[ 8]*mAi[4];
3148 mB[0][2] = mC[ 6]*mAi[3] + mC[ 7]*mAi[4] + mC[ 8]*mAi[5];
3150 mB[1][0] = mC[10]*mAi[0] + mC[11]*mAi[1] + mC[12]*mAi[3];
3151 mB[1][1] = mC[10]*mAi[1] + mC[11]*mAi[2] + mC[12]*mAi[4];
3152 mB[1][2] = mC[10]*mAi[3] + mC[11]*mAi[4] + mC[12]*mAi[5];
3154 mB[2][0] = mC[15]*mAi[0] + mC[16]*mAi[1] + mC[17]*mAi[3];
3155 mB[2][1] = mC[15]*mAi[1] + mC[16]*mAi[2] + mC[17]*mAi[4];
3156 mB[2][2] = mC[15]*mAi[3] + mC[16]*mAi[4] + mC[17]*mAi[5];
3158 mB[3][0] = mC[21]*mAi[0] + mC[22]*mAi[1] + mC[23]*mAi[3];
3159 mB[3][1] = mC[21]*mAi[1] + mC[22]*mAi[2] + mC[23]*mAi[4];
3160 mB[3][2] = mC[21]*mAi[3] + mC[22]*mAi[4] + mC[23]*mAi[5];
3163 fvec z[3] = { m[0]-p[0], m[1]-p[1], m[2]-p[2] };
3181 fP[3]+= p[3] + mB[0][0]*z[0] + mB[0][1]*z[1] + mB[0][2]*z[2];
3182 fP[4]+= p[4] + mB[1][0]*z[0] + mB[1][1]*z[1] + mB[1][2]*z[2];
3183 fP[5]+= p[5] + mB[2][0]*z[0] + mB[2][1]*z[1] + mB[2][2]*z[2];
3184 fP[6]+= p[6] + mB[3][0]*z[0] + mB[3][1]*z[1] + mB[3][2]*z[2];
3188 d0= mB[0][0]*mV[0] + mB[0][1]*mV[1] + mB[0][2]*mV[3] - mC[ 6];
3189 d1= mB[0][0]*mV[1] + mB[0][1]*mV[2] + mB[0][2]*mV[4] - mC[ 7];
3190 d2= mB[0][0]*mV[3] + mB[0][1]*mV[4] + mB[0][2]*mV[5] - mC[ 8];
3195 fC[9]+= mC[ 9] + d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
3197 d0= mB[1][0]*mV[0] + mB[1][1]*mV[1] + mB[1][2]*mV[3] - mC[10];
3198 d1= mB[1][0]*mV[1] + mB[1][1]*mV[2] + mB[1][2]*mV[4] - mC[11];
3199 d2= mB[1][0]*mV[3] + mB[1][1]*mV[4] + mB[1][2]*mV[5] - mC[12];
3204 fC[13]+= mC[13]+ d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
3205 fC[14]+= mC[14]+ d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
3207 d0= mB[2][0]*mV[0] + mB[2][1]*mV[1] + mB[2][2]*mV[3] - mC[15];
3208 d1= mB[2][0]*mV[1] + mB[2][1]*mV[2] + mB[2][2]*mV[4] - mC[16];
3209 d2= mB[2][0]*mV[3] + mB[2][1]*mV[4] + mB[2][2]*mV[5] - mC[17];
3214 fC[18]+= mC[18]+ d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
3215 fC[19]+= mC[19]+ d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
3216 fC[20]+= mC[20]+ d0*mB[2][0] + d1*mB[2][1] + d2*mB[2][2];
3218 d0= mB[3][0]*mV[0] + mB[3][1]*mV[1] + mB[3][2]*mV[3] - mC[21];
3219 d1= mB[3][0]*mV[1] + mB[3][1]*mV[2] + mB[3][2]*mV[4] - mC[22];
3220 d2= mB[3][0]*mV[3] + mB[3][1]*mV[4] + mB[3][2]*mV[5] - mC[23];
3225 fC[24]+= mC[24] + d0*mB[0][0] + d1*mB[0][1] + d2*mB[0][2];
3226 fC[25]+= mC[25] + d0*mB[1][0] + d1*mB[1][1] + d2*mB[1][2];
3227 fC[26]+= mC[26] + d0*mB[2][0] + d1*mB[2][1] + d2*mB[2][2];
3228 fC[27]+= mC[27] + d0*mB[3][0] + d1*mB[3][1] + d2*mB[3][2];
3251 fvec sp =
sqrt(spx*spx + spy*spy + spz*spz);
3253 fvec pn, pp, pln, plp;
3257 pln = (negative.
GetPx()*spx+negative.
GetPy()*spy+negative.
GetPz()*spz)/sp;
3258 plp = (positive.
GetPx()*spx+positive.
GetPy()*spy+positive.
GetPz()*spz)/sp;
3261 fvec ptm = (1.-((pln/pn)*(pln/pn)));
3262 qt=
if3(
fvec(ptm >= Zero) , pn*
sqrt(ptm) , Zero );
3263 alpha = (plp-pln)/(plp+pln);
3265 QtAlfa[0] =
fvec(qt & mask);
3266 QtAlfa[1] =
fvec(alpha & mask);
3285 for( Int_t
i=0;
i<8;
i++ ){
3286 for( Int_t j=0; j<8; j++){
3290 for(
int i=0;
i<8;
i++ ){
3293 mA[0][0] =
c; mA[0][1] =
s;
3294 mA[1][0] = -
s; mA[1][1] =
c;
3295 mA[3][3] =
c; mA[3][4] =
s;
3296 mA[4][3] = -
s; mA[4][4] =
c;
3301 for( Int_t
i=0;
i<8;
i++ ){
3303 for( Int_t k=0; k<8; k++){
3304 mAp[
i]+=mA[
i][k] *
fP[k];
3308 for( Int_t
i=0;
i<8;
i++){
3312 for( Int_t
i=0;
i<8;
i++ ){
3313 for( Int_t j=0; j<8; j++ ){
3315 for( Int_t k=0; k<8; k++ ){
3321 for( Int_t
i=0;
i<8;
i++ ){
3322 for( Int_t j=0; j<=
i; j++ ){
3324 for( Int_t k=0; k<8; k++){
3325 xx+= mAC[
i][k]*mA[j][k];
3331 X() =
GetX() + Vtx[0];
3332 Y() =
GetY() + Vtx[1];
3333 Z() =
GetZ() + Vtx[2];
3341 fvec a0 = A[0], a1 = A[1], a2 = A[2], a3 = A[3];
3343 Ai[0] = a2*A[5] - A[4]*A[4];
3344 Ai[1] = a3*A[4] - a1*A[5];
3345 Ai[3] = a1*A[4] - a2*a3;
3346 fvec det = (a0*Ai[0] + a1*Ai[1] + a3*Ai[3]);
3348 fvec idet = 1. / det;
3356 Ai[2] = ( a0*A[5] - a3*a3 )*det;
3357 Ai[4] = ( a1*a3 - a0*A[4] )*det;
3358 Ai[5] = ( a0*a2 - a1*a1 )*det;
3369 fvec d[3], uud, u[3][3];
3370 for(
int i=0;
i<3;
i++)
3373 for(
int j=0; j<3; j++)
3377 for(
int i=0;
i<3 ;
i++)
3380 for(
int j=0; j<
i; j++)
3381 uud += u[j][i]*u[j][i]*d[j];
3382 uud = a[i*(i+3)/2] - uud;
3384 fvec smallval = 1.e-12
f;
3386 uud = ((!initialised) & uud) + (smallval & initialised);
3388 d[
i] = uud/
fabs(uud);
3391 for(
int j=i+1; j<3; j++)
3394 for(
int k=0; k<
i; k++)
3395 uud += u[k][i]*u[k][j]*d[k];
3396 uud = a[j*(j+1)/2+i] - uud;
3397 u[
i][j] = d[
i]/u[
i][
i]*uud;
3403 for(
int i=0;
i<3;
i++)
3406 u[
i][
i] = One/u[
i][
i];
3408 for(
int i=0;
i<2;
i++)
3410 u[
i][
i+1] = - u[
i][
i+1]*u[
i][
i]*u[
i+1][
i+1];
3412 for(
int i=0;
i<1;
i++)
3414 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];
3417 for(
int i=0;
i<3;
i++)
3418 a[
i+3] = u[
i][2]*u[2][2]*d[2];
3419 for(
int i=0;
i<2;
i++)
3420 a[
i+1] = u[
i][1]*u[1][1]*d[1] + u[
i][2]*u[1][2]*d[2];
3421 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];
3461 for( Int_t
i=0, ij=0;
i<kN;
i++ ){
3462 for( Int_t j=0; j<kN; j++, ++ij ){
3464 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];
3468 for( Int_t
i=0;
i<kN;
i++ ){
3469 for( Int_t j=0; j<=
i; j++ ){
3470 Int_t ij = ( j<=
i ) ?
i*(
i+1)/2+j :j*(j+1)/2+
i;
3472 for( Int_t k=0; k<kN; k++ ) SOut[ij] += Q[
i*kN+k ] * mA[ k*kN+j ];
void GetDStoParticleBy(fvec B, const KFParticleBaseSIMD &p, fvec &dS, fvec &dS1) const
void AddDaughterWithEnergyFit(const KFParticleBaseSIMD &Daughter, Bool_t isAtVtxGuess)
void TransportToDecayVertex()
friend F32vec4 cos(const F32vec4 &a)
fvec GetEta(fvec &Eta, fvec &SigmaEta) const
fvec GetDStoPointCBM(const fvec xyz[]) const
fvec GetDeviationFromParticle(const KFParticleBaseSIMD &p) const
void SetNDaughters(int n)
fvec GetDecayLength(fvec &L, fvec &SigmaL) const
virtual void GetDStoParticle(const KFParticleBaseSIMD &p, fvec &DS, fvec &DSp) const =0
fvec GetMomentum(fvec &P, fvec &SigmaP) const
Double_t lambda(Double_t x, Double_t y, Double_t z)
fvec GetDeviationFromVertex(const fvec v[], const fvec Cv[]=0) const
friend F32vec4 sqrt(const F32vec4 &a)
virtual void Transport(fvec dS, fvec P[], fvec C[]) const =0
static T Sqrt(const T &x)
void SetVtxErrGuess(fvec &x, fvec &y, fvec &z)
friend F32vec4 sin(const F32vec4 &a)
void GetDStoParticleLine(const KFParticleBaseSIMD &p, fvec &dS, fvec &dS1) const
void GetDistanceToVertexLine(const KFParticleBaseSIMD &Vertex, fvec &l, fvec &dl, fvec *isParticleFromVertex=0) const
void TransportToProductionVertex()
friend F32vec4 log(const F32vec4 &a)
void ConstructGammaBz(const KFParticleBaseSIMD &daughter1, const KFParticleBaseSIMD &daughter2, fvec Bz)
void AddDaughterId(fvec id)
fvec GetLifeTime(fvec &T, fvec &SigmaT) const
void operator+=(const KFParticleBaseSIMD &Daughter)
void GetDStoParticleCBM(const KFParticleBaseSIMD &p, fvec &dS, fvec &dS1) const
void TransportLine(fvec S, fvec P[], fvec C[]) const
fvec GetR(fvec &R, fvec &SigmaR) const
fvec GetSCorrection(const fvec Part[], const fvec XYZ[]) const
void GetMeasurement(const fvec XYZ[], fvec m[], fvec V[], Bool_t isAtVtxGuess=0) const
fvec & Cij(Int_t i, Int_t j)
virtual void GetFieldValue(const fvec xyz[], fvec B[]) const =0
void RotateXY(fvec angle, fvec Vtx[3])
static void error(int no)
fvec GetCovariance(Int_t i) const
fvec GetDStoPointBy(fvec By, const fvec xyz[]) const
void AddDaughterWithEnergyCalc(const KFParticleBaseSIMD &Daughter, Bool_t isAtVtxGuess)
TString pt(TString pts, TString exts="px py pz")
void TransportCBM(fvec dS, fvec P[], fvec C[]) const
void Convert(bool ToProduction)
TString m2(TString pts, TString exts="e px py pz")
fvec & Covariance(Int_t i)
static void multQSQt1(const fvec J[11], fvec S[])
static fvec InvertSym3(const fvec A[], fvec Ainv[])
static void MultQSQt(const fvec Q[], const fvec S[], fvec SOut[])
static void GetArmenterosPodolanski(KFParticleBaseSIMD &positive, KFParticleBaseSIMD &negative, fvec QtAlfa[2])
fvec GetDistanceFromParticle(const KFParticleBaseSIMD &p) const
void GetDStoParticleBz(fvec Bz, const KFParticleBaseSIMD &p, fvec &dS, fvec &dS1) const
void AddDaughterWithEnergyFitMC(const KFParticleBaseSIMD &Daughter, Bool_t isAtVtxGuess)
friend F32vec4 fabs(const F32vec4 &a)
void TransportToDS(fvec dS)
fvec GetDistanceFromVertex(const fvec vtx[]) const
fvec GetPt(fvec &Pt, fvec &SigmaPt) const
static void InvertCholetsky3(fvec a[6])
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
void SubtractFromParticle(KFParticleBaseSIMD &Vtx) const
void AddDaughter(const KFParticleBaseSIMD &Daughter, Bool_t isAtVtxGuess=0)
fvec GetDStoPointBz(fvec Bz, const fvec xyz[]) const
Bool_t fAtProductionVertex
virtual fvec GetDStoPoint(const fvec xyz[]) const =0
fvec GetMass(fvec &M, fvec &SigmaM) const
fvec GetPhi(fvec &Phi, fvec &SigmaPhi) const
static Int_t IJ(Int_t i, Int_t j)
void SetProductionVertex(const KFParticleBaseSIMD &Vtx)
void SetNonlinearMassConstraint(fvec Mass)
void SetVtxGuess(fvec x, fvec y, fvec z)
void TransportBz(fvec Bz, fvec dS, fvec P[], fvec C[]) const
void SubtractFromVertex(KFParticleBaseSIMD &Vtx) const
fvec GetDecayLengthXY(fvec &L, fvec &SigmaL) const
void SetMassConstraint(fvec Mass, fvec SigmaMass=0)
void Construct(const KFParticleBaseSIMD *vDaughters[], Int_t nDaughters, const KFParticleBaseSIMD *ProdVtx=0, Float_t Mass=-1, Bool_t IsConstrained=0, Bool_t isAtVtxGuess=0)