- h[0] = m[3]*sigmaS;
- h[1] = m[4]*sigmaS;
- h[2] = m[5]*sigmaS;
- h[3] = ( h[1]*b[2]-h[2]*b[1] )*Daughter.GetQ();
- h[4] = ( h[2]*b[0]-h[0]*b[2] )*Daughter.GetQ();
- h[5] = ( h[0]*b[1]-h[1]*b[0] )*Daughter.GetQ();
-
- //* Fit of daughter momentum (Px,Py,Pz) to fVtxGuess vertex
- {
- Double_t zeta[3] = { fVtxGuess[0]-m[0], fVtxGuess[1]-m[1], fVtxGuess[2]-m[2] };
-
- Double_t mVv[6] =
- { mCd[ 0] + h[0]*h[0],
- mCd[ 1] + h[1]*h[0], mCd[ 2] + h[1]*h[1],
- mCd[ 3] + h[2]*h[0], mCd[ 4] + h[2]*h[1], mCd[ 5] + h[2]*h[2] };
-
- Double_t mVvp[9]=
- { mCd[ 6] + h[0]*h[3], mCd[ 7] + h[1]*h[3], mCd[ 8] + h[2]*h[3],
- mCd[10] + h[0]*h[4], mCd[11] + h[1]*h[4], mCd[12] + h[2]*h[4],
- mCd[15] + h[0]*h[5], mCd[16] + h[1]*h[5], mCd[17] + h[2]*h[5] };
-
- Double_t mS[6] =
- { mVv[2]*mVv[5] - mVv[4]*mVv[4],
- mVv[3]*mVv[4] - mVv[1]*mVv[5], mVv[0]*mVv[5] - mVv[3]*mVv[3],
- mVv[1]*mVv[4] - mVv[2]*mVv[3], mVv[1]*mVv[3] - mVv[0]*mVv[4],
- mVv[0]*mVv[2] - mVv[1]*mVv[1] };
-
- Double_t s = ( mVv[0]*mS[0] + mVv[1]*mS[1] + mVv[3]*mS[3] );
- s = ( s > 1.E-20 ) ?1./s :0;
-
- mS[0]*=s; mS[1]*=s; mS[2]*=s; mS[3]*=s; mS[4]*=s; mS[5]*=s;
-
- Double_t mSz[3] = { (mS[0]*zeta[0]+mS[1]*zeta[1]+mS[3]*zeta[2]),
- (mS[1]*zeta[0]+mS[2]*zeta[1]+mS[4]*zeta[2]),
- (mS[3]*zeta[0]+mS[4]*zeta[1]+mS[5]*zeta[2]) };
-
- Double_t px = m[3] + mVvp[0]*mSz[0] + mVvp[1]*mSz[1] + mVvp[2]*mSz[2];
- Double_t py = m[4] + mVvp[3]*mSz[0] + mVvp[4]*mSz[1] + mVvp[5]*mSz[2];
- Double_t pz = m[5] + mVvp[6]*mSz[0] + mVvp[7]*mSz[1] + mVvp[8]*mSz[2];
-
- h[0] = px*sigmaS;
- h[1] = py*sigmaS;
- h[2] = pz*sigmaS;
- h[3] = ( h[1]*b[2]-h[2]*b[1] )*Daughter.GetQ();
- h[4] = ( h[2]*b[0]-h[0]*b[2] )*Daughter.GetQ();
- h[5] = ( h[0]*b[1]-h[1]*b[0] )*Daughter.GetQ();
- }
-
- Double_t mV[28];
-
- mV[ 0] = mCd[ 0] + h[0]*h[0];
- mV[ 1] = mCd[ 1] + h[1]*h[0];
- mV[ 2] = mCd[ 2] + h[1]*h[1];
- mV[ 3] = mCd[ 3] + h[2]*h[0];
- mV[ 4] = mCd[ 4] + h[2]*h[1];
- mV[ 5] = mCd[ 5] + h[2]*h[2];
-
- mV[ 6] = mCd[ 6] + h[3]*h[0];
- mV[ 7] = mCd[ 7] + h[3]*h[1];
- mV[ 8] = mCd[ 8] + h[3]*h[2];
- mV[ 9] = mCd[ 9] + h[3]*h[3];
-
- mV[10] = mCd[10] + h[4]*h[0];
- mV[11] = mCd[11] + h[4]*h[1];
- mV[12] = mCd[12] + h[4]*h[2];
- mV[13] = mCd[13] + h[4]*h[3];
- mV[14] = mCd[14] + h[4]*h[4];
-
- mV[15] = mCd[15] + h[5]*h[0];
- mV[16] = mCd[16] + h[5]*h[1];
- mV[17] = mCd[17] + h[5]*h[2];
- mV[18] = mCd[18] + h[5]*h[3];
- mV[19] = mCd[19] + h[5]*h[4];
- mV[20] = mCd[20] + h[5]*h[5];
-
- mV[21] = mCd[21];
- mV[22] = mCd[22];
- mV[23] = mCd[23];
- mV[24] = mCd[24];
- mV[25] = mCd[25];
- mV[26] = mCd[26];
- mV[27] = mCd[27];
-
- //*
-
- if( fNDF<-1 ){ // first daughter -> just copy
- fNDF = -1;
- fQ = Daughter.GetQ();
- for( Int_t i=0; i<7; i++) fP[i] = m[i];
- for( Int_t i=0; i<28; i++) fC[i] = mV[i];
- fSFromDecay = 0;
- return;