- bouchet's home page
- Posts
- 2016
- 2015
- December (1)
- November (3)
- October (2)
- September (2)
- August (2)
- June (2)
- April (5)
- March (2)
- February (3)
- January (2)
- 2014
- December (2)
- November (2)
- October (3)
- September (2)
- August (3)
- July (1)
- June (3)
- May (6)
- April (6)
- March (1)
- February (2)
- January (1)
- 2013
- December (2)
- November (3)
- October (3)
- September (4)
- August (1)
- July (1)
- May (4)
- April (6)
- March (4)
- February (3)
- 2012
- 2011
- December (2)
- November (2)
- October (4)
- September (1)
- August (2)
- July (6)
- June (2)
- May (3)
- April (3)
- March (2)
- 2010
- 2009
- December (2)
- November (1)
- October (3)
- September (1)
- August (1)
- July (1)
- June (2)
- April (1)
- March (2)
- February (2)
- January (1)
- 2008
- My blog
- Post new blog entry
- All blogs
track/dca/helix
meaning of different track utilities used in MuKpi/KFParticle:
- $STAR/StRoot/StDcaGeometry.cxx
void StDcaGeometry::GetXYZ(Double_t xyzp[6], Double_t CovXyzp[21]) const { static const Float_t one = 1; Double_t sinP = TMath::Sin(mPsi); Double_t cosP = TMath::Cos(mPsi); Double_t pT = pt(); xyzp[0] = - mImp*sinP; // x xyzp[1] = mImp*cosP; // y xyzp[2] = mZ; // z xyzp[3] = pT*cosP; // px xyzp[4] = pT*sinP; // py xyzp[5] = pT*mTan; // pz Double_t dpTdPti = -pT*pT*TMath::Sign(one,mPti); Double_t f[30] = { //mImp,mZ, mPsi, mPti, mTan -sinP, 0, -mImp*cosP, 0, 0 ,cosP, 0, -mImp*sinP, 0, 0 , 0, 1, 0, 0, 0 , 0, 0, -pT*sinP, dpTdPti*cosP, 0 , 0, 0, pT*cosP, dpTdPti*sinP, 0 , 0, 0, 0, dpTdPti*mTan, pT }; TRMatrix F(6,5,f); TRSymMatrix C(5,errMatrix()); TRSymMatrix Cov(F,TRArray::kAxSxAT,C); TCL::ucopy(Cov.GetArray(),CovXyzp,21); }
- $STAR/StRoot/StarRoot/THelixTrack.cxx : DCA and error from THelixTrack
double THelixTrack::Dca(const double point[3] ,double &dcaXY,double &dcaZ,double dcaEmx[3],int kind) const /// Full 3d dca evaluation /// point[3] - x,y,z of vertex /// dcaXY - dca in xy plane /// dcaZ - dca in Z direction /// dcaEmx[3] - err(dcaXY*dcaXY),err(dcaXY*dcaZ),err(dcaZ*dcaZ) /// kind - 3=3d dca,2=2d dca /// return distance to dca point { double dif[3]; double s = 0; assert(kind==2 || kind==3); if (kind==3) s = Path(point); else s = Path(point[0],point[1]); THelixTrack th(*this); th.Move(s); const double *x=th.Pos(); const double *d=th.Dir(); for (int i=0;i<3;i++) {dif[i]=x[i]-point[i];} double nor = th.GetCos(); double T[3][3]={{-d[1]/nor, d[0]/nor, 0} ,{ 0, 0, 1} ,{ d[0]/nor, d[1]/nor, 0}}; dcaXY = T[0][0]*dif[0]+T[0][1]*dif[1]; dcaZ = dif[2]; THEmx_t *emx =th.Emx(); dcaEmx[0] = emx->mHH; dcaEmx[1] = 0; // cos(Lambda) **4 to account that we are in the nearest point dcaEmx[2] = emx->mZZ*pow(th.GetCos(),4); return s; }
- $STAR/StRoot/StEvent/StDcaGeometry.h : signification of the track parameters
/// signed impact parameter; Signed in such a way that: /// x = -impact*sin(Psi) /// y = impact*cos(Psi) Float_t mImp; /// Z-coordinate of this track (reference plane) Float_t mZ; /// Psi angle of the track Float_t mPsi; /// signed invert pt [sign = sign(-qB)] Float_t mPti; /// tangent of the track momentum dip angle Float_t mTan; /// signed curvature Float_t mCurv; /// pars errors Float_t mImpImp; Float_t mZImp, mZZ; Float_t mPsiImp, mPsiZ, mPsiPsi; Float_t mPtiImp, mPtiZ, mPtiPsi, mPtiPti; Float_t mTanImp, mTanZ, mTanPsi, mTanPti, mTanTan;
- Comparison of DCA distribution.
They were 3 methods to get the DCA :
- by recalculation (method 1):
TVector3 dirG;
dirG = globP.Unit();
Double_t cosl = dirG.Perp();
Double_t cosp = dirG.x()/cosl;
Double_t sinp = dirG.y()/cosl;
DCA[0][0] = sinp * dcaG.x() - cosp * dcaG.y(); // switched sign
DCA[1][0] = dcaG.z()/(cosl*cosl);
2. with the cov matrix of StDcaGeometry w/o moving the helix to the vertex (method 2):
CovGlobTrack_mTanPti[lgc],CovGlobTrack_mTanTan[lgc]};
dcaGeometryC.set(parsKC, errsKC);
THelixTrack thelixKC = dcaGeometryC.thelix();
Double_t ermx[3];
thelixKC.Dca(vtx,parsKC[0],parsKC[1],ermx,2);
DCA[0][1] = parsKC[0];
DCA[1][1] = parsKC[1];
3. by calling double THelixTrack::Dca(const double point[3] at the vertex point (method 3):
dcaGeometry.set(pars, errs);
Double_t vtx[3] = {PrimVertexX[l], PrimVertexY[l], PrimVertexZ[l]};
THelixTrack thelix = dcaGeometry.thelix();
StThreeVectorF Origin = dcaGeometry.origin();
thelix.Move(thelix.Path(vtx));
Double_t dcaEmx[3];
Double_t dcaH[2];
Double_t sigmaXY[2];
Double_t sigmaZ[2];
// dcaXY2 and dcaZ2 : via THelixTrack after moving the helix to the vertex
DCA[0][2] = dcaGeometry.impact();
DCA[1][2] = dcaGeometry.z();
thelix.Dca(vtx,DCA[0][2],DCA[1][2],dcaEmx,2);
The plots :
- DCAXY
2. DCAZ
The plots are done requiring SSD=1 and SVT>1 ; We see that method 2 and 3 are agree but method 1 gives an opposite sing.
It may be due to the sign of sinp and cosp.
In the current MuKpi macro, method 2 is the one which is used.