]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITStrackV2.cxx
Bayesian PID: new parametrization and code update (E. Biolcati - F.Prino)
[u/mrichter/AliRoot.git] / ITS / AliITStrackV2.cxx
index 09d590df68c2e027ebadb0be172d581526b2c5d5..f62e7c63a9aa8b3b062357fc71e6d010b77a1b94 100644 (file)
@@ -37,6 +37,7 @@ ClassImp(AliITStrackV2)
 
 //____________________________________________________________________________
 AliITStrackV2::AliITStrackV2() : AliKalmanTrack(),
+  fCheckInvariant(kTRUE),
   fdEdx(0),
   fESDtrack(0)
 {
@@ -48,6 +49,7 @@ AliITStrackV2::AliITStrackV2() : AliKalmanTrack(),
 //____________________________________________________________________________
 AliITStrackV2::AliITStrackV2(AliESDtrack& t,Bool_t c) throw (const Char_t *) :
   AliKalmanTrack(),
+  fCheckInvariant(kTRUE),
   fdEdx(t.GetITSsignal()),
   fESDtrack(&t)
 {
@@ -105,6 +107,7 @@ void AliITStrackV2::UpdateESDtrack(ULong_t flags) const {
 //____________________________________________________________________________
 AliITStrackV2::AliITStrackV2(const AliITStrackV2& t) : 
   AliKalmanTrack(t),
+  fCheckInvariant(t.fCheckInvariant),
   fdEdx(t.fdEdx),
   fESDtrack(t.fESDtrack) 
 {
@@ -180,8 +183,10 @@ Bool_t AliITStrackV2::PropagateTo(Double_t xk, Double_t d, Double_t x0) {
 
   Double_t oldX=GetX(), oldY=GetY(), oldZ=GetZ();
   
-  Double_t bz=GetBz();
-  if (!AliExternalTrackParam::PropagateTo(xk,bz)) return kFALSE;
+  //Double_t bz=GetBz();
+  //if (!AliExternalTrackParam::PropagateTo(xk,bz)) return kFALSE;
+  Double_t b[3]; GetBxByBz(b);
+  if (!AliExternalTrackParam::PropagateToBxByBz(xk,b)) return kFALSE;
   Double_t xOverX0,xTimesRho; 
   xOverX0 = d; xTimesRho = d*x0;
   if (!CorrectForMeanMaterial(xOverX0,xTimesRho,kTRUE)) return kFALSE;
@@ -207,7 +212,11 @@ Bool_t AliITStrackV2::PropagateToTGeo(Double_t xToGo, Int_t nstep, Double_t &xOv
   Double_t sign = (startx<xToGo) ? -1.:1.;
   Double_t step = (xToGo-startx)/TMath::Abs(nstep);
 
-  Double_t start[3], end[3], mparam[7], bz = GetBz();
+  Double_t start[3], end[3], mparam[7];
+  //Double_t bz = GetBz();
+  Double_t b[3]; GetBxByBz(b);
+  Double_t bz = b[2];
+
   Double_t x = startx;
   
   for (Int_t i=0; i<nstep; i++) {
@@ -215,7 +224,8 @@ Bool_t AliITStrackV2::PropagateToTGeo(Double_t xToGo, Int_t nstep, Double_t &xOv
     GetXYZ(start);   //starting global position
     x += step;
     if (!GetXYZAt(x, bz, end)) return kFALSE;
-    if (!AliExternalTrackParam::PropagateTo(x, bz)) return kFALSE;
+    //if (!AliExternalTrackParam::PropagateTo(x, bz)) return kFALSE;
+    if (!AliExternalTrackParam::PropagateToBxByBz(x, b)) return kFALSE;
     AliTracker::MeanMaterialBudget(start, end, mparam);
     xTimesRho = sign*mparam[4]*mparam[0];
     xOverX0   = mparam[1];
@@ -274,6 +284,8 @@ Bool_t AliITStrackV2::Invariant() const {
   //------------------------------------------------------------------
   // This function is for debugging purpose only
   //------------------------------------------------------------------
+  if(!fCheckInvariant) return kTRUE;
+
   Int_t n=GetNumberOfClusters();
 
   // take into account the misalignment error
@@ -328,8 +340,10 @@ Bool_t AliITStrackV2::Propagate(Double_t alp,Double_t xk) {
   //------------------------------------------------------------------
   //This function propagates a track
   //------------------------------------------------------------------
-  Double_t bz=GetBz();
-  if (!AliExternalTrackParam::Propagate(alp,xk,bz)) return kFALSE;
+  //Double_t bz=GetBz();
+  //if (!AliExternalTrackParam::Propagate(alp,xk,bz)) return kFALSE;
+  Double_t b[3]; GetBxByBz(b);
+  if (!AliExternalTrackParam::PropagateBxByBz(alp,xk,b)) return kFALSE;
 
   if (!Invariant()) {
     Int_t n=GetNumberOfClusters();
@@ -380,12 +394,38 @@ Bool_t AliITStrackV2::Improve(Double_t x0,Double_t xyz[3],Double_t ers[3]) {
   //------------------------------------------------------------------
   //This function improves angular track parameters
   //------------------------------------------------------------------
+  //Store the initail track parameters
+
+  return kTRUE; //PH temporary switched off
+
+  Double_t x = GetX();
+  Double_t alpha = GetAlpha();
+  Double_t par[] = {GetY(),GetZ(),GetSnp(),GetTgl(),GetSigned1Pt()};
+  Double_t cov[] = {
+    GetSigmaY2(),
+    GetSigmaZY(),
+    GetSigmaZ2(),
+    GetSigmaSnpY(),
+    GetSigmaSnpZ(),
+    GetSigmaSnp2(),
+    GetSigmaTglY(),
+    GetSigmaTglZ(),
+    GetSigmaTglSnp(),
+    GetSigmaTgl2(),
+    GetSigma1PtY(),
+    GetSigma1PtZ(),
+    GetSigma1PtSnp(),
+    GetSigma1PtTgl(),
+    GetSigma1Pt2()
+  }; 
+
+
   Double_t cs=TMath::Cos(GetAlpha()), sn=TMath::Sin(GetAlpha());
 //Double_t xv = xyz[0]*cs + xyz[1]*sn; // vertex
   Double_t yv =-xyz[0]*sn + xyz[1]*cs; // in the
   Double_t zv = xyz[2];                // local frame
 
-  Double_t dy = Par(0) - yv, dz = Par(1) - zv;
+  Double_t dy = par[0] - yv, dz = par[1] - zv;
   Double_t r2=GetX()*GetX() + dy*dy;
   Double_t p2=(1.+ GetTgl()*GetTgl())/(GetSigned1Pt()*GetSigned1Pt());
   Double_t beta2=p2/(p2 + GetMass()*GetMass());
@@ -398,29 +438,34 @@ Bool_t AliITStrackV2::Improve(Double_t x0,Double_t xyz[3],Double_t ers[3]) {
     Double_t dummy = 4/r2 - GetC()*GetC();
     if (dummy < 0) return kFALSE;
     Double_t parp = 0.5*(GetC()*GetX() + dy*TMath::Sqrt(dummy));
-    Double_t sigma2p = theta2*(1.- GetSnp()*GetSnp())*(1. + GetTgl()*GetTgl());
-    sigma2p += Cov(0)/r2*(1.- dy*dy/r2)*(1.- dy*dy/r2);
+    Double_t sigma2p = theta2*(1.-GetSnp())*(1.+GetSnp())*(1. + GetTgl()*GetTgl());
+    Double_t ovSqr2 = 1./TMath::Sqrt(r2);
+    Double_t tfact = ovSqr2*(1.-dy*ovSqr2)*(1.+dy*ovSqr2);
+    sigma2p += cov[0]*tfact*tfact;
     sigma2p += ers[1]*ers[1]/r2;
-    sigma2p += 0.25*Cov(14)*cnv*cnv*GetX()*GetX();
-    Double_t eps2p=sigma2p/(Cov(5) + sigma2p);
-    Par(0) += Cov(3)/(Cov(5) + sigma2p)*(parp - GetSnp());
-    Par(2)  = eps2p*GetSnp() + (1 - eps2p)*parp;
-    Cov(5) *= eps2p;
-    Cov(3) *= eps2p;
+    sigma2p += 0.25*cov[14]*cnv*cnv*GetX()*GetX();
+    Double_t eps2p=sigma2p/(cov[5] + sigma2p);
+    par[0] += cov[3]/(cov[5] + sigma2p)*(parp - GetSnp());
+    par[2]  = eps2p*GetSnp() + (1 - eps2p)*parp;
+    cov[5] *= eps2p;
+    cov[3] *= eps2p;
   }
   {
     Double_t parl=0.5*GetC()*dz/TMath::ASin(0.5*GetC()*TMath::Sqrt(r2));
     Double_t sigma2l=theta2;
-    sigma2l += Cov(2)/r2 + Cov(0)*dy*dy*dz*dz/(r2*r2*r2);
+    sigma2l += cov[2]/r2 + cov[0]*dy*dy*dz*dz/(r2*r2*r2);
     sigma2l += ers[2]*ers[2]/r2;
-    Double_t eps2l = sigma2l/(Cov(9) + sigma2l);
-    Par(1) += Cov(7 )/(Cov(9) + sigma2l)*(parl - Par(3));
-    Par(4) += Cov(13)/(Cov(9) + sigma2l)*(parl - Par(3));
-    Par(3)  = eps2l*Par(3) + (1-eps2l)*parl;
-    Cov(9) *= eps2l; 
-    Cov(13)*= eps2l; 
-    Cov(7) *= eps2l; 
+    Double_t eps2l = sigma2l/(cov[9] + sigma2l);
+    par[1] += cov[7 ]/(cov[9] + sigma2l)*(parl - par[3]);
+    par[4] += cov[13]/(cov[9] + sigma2l)*(parl - par[3]);
+    par[3]  = eps2l*par[3] + (1-eps2l)*parl;
+    cov[9] *= eps2l; 
+    cov[13]*= eps2l; 
+    cov[7] *= eps2l; 
   }
+
+  Set(x,alpha,par,cov);
+
   if (!Invariant()) return kFALSE;
 
   return kTRUE;