21 #ifdef HomogeneousField
26 #ifdef NonhomogeneousField
27 #include "CbmKFTrack.h"
30 #ifdef HomogeneousField
59 for(
int i=0;
i<21;
i++ ) C[
i] = Cov[
i];
67 #ifdef NonhomogeneousField
70 CbmKFTrack Tr( *Track );
83 double c2 = 1./(1. + a*a + b*
b);
85 if(qHypo) pq *= *qHypo;
90 double H[3] = { -px*
c2, -py*
c2, -pz*pq };
101 double cxpz = H[0]*V[ 3] + H[1]*V[ 6] + H[2]*V[10];
102 double cypz = H[0]*V[ 4] + H[1]*V[ 7] + H[2]*V[11];
103 double capz = H[0]*V[ 5] + H[1]*V[ 8] + H[2]*V[12];
104 double cbpz = H[0]*V[ 8] + H[1]*V[ 9] + H[2]*V[13];
106 double cpzpz = H[0]*H[0]*V[5] +H[1]*H[1]*V[9] + H[2]*H[2]*V[14]
107 + 2*( H[0]*H[1]*V[8] +H[0]*H[2]*V[12] +H[1]*H[2]*V[13]);
117 C[ 6] = V[3]*pz + a*cxpz;
118 C[ 7] = V[4]*pz + a*cypz;
120 C[ 9] = V[5]*pz*pz + 2*a*pz*capz + a*a*cpzpz;
121 C[10] = V[6]*pz+b*cxpz;
122 C[11] = V[7]*pz+b*cypz;
124 C[13] = V[8]*pz*pz + a*pz*cbpz + b*pz*capz + a*b*cpzpz;
125 C[14] = V[9]*pz*pz + 2*b*pz*cbpz + b*b*cpzpz;
129 C[18] = capz*pz + a*cpzpz;
130 C[19] = cbpz*pz + b*cpzpz;
133 Double_t Charge = (qp>0.) ?1 :( (qp<0) ?-1 :0);
134 if(qHypo) Charge *= *qHypo;
162 #ifdef HomogeneousField
208 Alpha =
atan2(sinA,cosA);
210 P[0]= p.
GetY()*cosA - p.
GetX()*sinA;
260 err+= h0*(h0*Cv[0] + h1*Cv[1] ) + h1*(h0*Cv[1] + h1*Cv[2] );
281 #ifdef HomogeneousField
305 #ifdef HomogeneousField
325 return sqrt(dx*dx+dy*dy);
340 (mP1[3]*mP1[3]+mP1[4]*mP1[4] ) );
342 Double_t h[2] = { mP1[3]*sigmaS, mP1[4]*sigmaS };
359 if( problem || err<1.e-20 )
return 1.e4;
372 #ifdef HomogeneousField
392 Double_t n =
sqrt( mP[3]*mP[3] + mP[4]*mP[4] + mP[5]*mP[5] );
393 Double_t n1=
sqrt( mP1[3]*mP1[3] + mP1[4]*mP1[4] + mP1[5]*mP1[5] );
396 if( n>1.e-8 ) a = ( mP[3]*mP1[3] + mP[4]*mP1[4] + mP[5]*mP1[5] )/n;
398 else a = (a>=0) ?0 :3.14;
415 if( n>1.e-8 ) a = ( mP[3]*mP1[3] + mP[4]*mP1[4] )/n;
417 else a = (a>=0) ?0 :3.14;
436 if( n>1.e-8 ) a = ( nr*n1r +mP[5]*mP1[5])/n;
438 else a = (a>=0) ?0 :3.14;
498 const Double_t mipt2derivative = mipt2*(1-2*
Px()*
Px()*ipt2);
533 return ( dx*
Px() + dy*
Py() )*mipt2;
Double_t GetPseudoProperDecayTime(const KFParticle &primVertex, const Double_t &mass, Double_t *timeErr2=0) const
friend F32vec4 acos(const F32vec4 &a)
static void GetExternalTrackParam(const KFParticleBase &p, Double_t &X, Double_t &Alpha, Double_t P[5])
friend F32vec4 sqrt(const F32vec4 &a)
Double_t val[nBoxes][nFEBox]
void ConstructGamma(const KFParticle &daughter1, const KFParticle &daughter2)
int GetNContributors() const
Double_t GetDeviationFromVertexXY(const Double_t v[], const Double_t Cv[]=0) const
Double_t GetDStoPoint(const Double_t xyz[]) const
Double_t GetAngle(const KFParticle &p) const
Double_t GetCovariance(int i) const
TString pt(TString pts, TString exts="px py pz")
Double_t GetAngleRZ(const KFParticle &p) const
Double_t GetDistanceFromParticleXY(const KFParticle &p) const
void GetXYZ(float *position) const
static KFParticleDatabase * Instance()
void GetDStoParticle(const KFParticle &p, Double_t &DS, Double_t &DSp) const
Bool_t GetDistanceFromVertexXY(const Double_t vtx[], Double_t &val, Double_t &err) const
friend F32vec4 fabs(const F32vec4 &a)
void Transport(Double_t dS, Double_t P[], Double_t C[]) const
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
bool GetCovarianceXYZPxPyPz(float cv[21]) const
const Double_t & X() const
Double_t GetDeviationFromParticleXY(const KFParticle &p) const
const Double_t & Py() const
void PxPyPz(float *position) const
Bool_t fAtProductionVertex
void GetCovarianceMatrix(float *covmatrix) const
void XvYvZv(float *position) const
void Create(const Double_t Param[], const Double_t Cov[], Int_t Charge, Double_t mass)
Double_t GetAngleXY(const KFParticle &p) const
void GetDStoParticleXY(const KFParticleBase &p, Double_t &DS, Double_t &DSp) const
const Double_t & Y() const
const Double_t & Px() const