]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCtracker.cxx
Formatting changes.
[u/mrichter/AliRoot.git] / TPC / AliTPCtracker.cxx
index beba0adfa2575bf89f867278cd6f40a7df89baf8..b8d0e23d3bd98eb1f3789bd678e8855df766e9bb 100644 (file)
 #include "AliTPCParam.h"
 #include "AliClusters.h"
 
-extern Double_t SigmaY2(Double_t, Double_t, Double_t);
-extern Double_t SigmaZ2(Double_t, Double_t);
-
 ClassImp(AliTPCtracker)
 
+//_____________________________________________________________________________
+AliTPCtracker::AliTPCtracker(): 
+  AliTracker(), 
+  fkNIS(0), 
+  fInnerSec(0),         
+  fkNOS(0),
+  fOuterSec(0),
+  fN(0),
+  fSectors(0),
+  fParam(0),
+  fSeeds(0)
+{
+  //
+  // The default TPC tracker constructor
+  //
+}
+
 //_____________________________________________________________________________
 AliTPCtracker::AliTPCtracker(const AliTPCParam *par): 
-AliTracker(), fkNIS(par->GetNInnerSector()/2), fkNOS(par->GetNOuterSector()/2)
+  AliTracker(), 
+  fkNIS(par->GetNInnerSector()/2), 
+  fInnerSec(new AliTPCSector[fkNIS]),         
+  fkNOS(par->GetNOuterSector()/2),
+  fOuterSec(new AliTPCSector[fkNOS]),
+  fN(0),
+  fSectors(0),
+  fParam((AliTPCParam*) par),
+  fSeeds(0)
 {
   //---------------------------------------------------------------------
   // The main TPC tracker constructor
   //---------------------------------------------------------------------
-  fInnerSec=new AliTPCSector[fkNIS];         
-  fOuterSec=new AliTPCSector[fkNOS];
 
   Int_t i;
   for (i=0; i<fkNIS; i++) fInnerSec[i].Setup(par,0);
   for (i=0; i<fkNOS; i++) fOuterSec[i].Setup(par,1);
 
-  fParam = (AliTPCParam*) par;
-  fSeeds=0;
-
-  // [SR 17.03.2003]
-  
-  fBarrelFile = 0;
-  fBarrelTree = 0;
-  fBarrelArray = 0;
-  fBarrelTrack = 0;
-  
 }
 
 //_____________________________________________________________________________
@@ -74,99 +84,8 @@ AliTPCtracker::~AliTPCtracker() {
     fSeeds->Delete(); 
     delete fSeeds;
   }
-
-  // [SR, 01.04.2003]
-  if (fBarrelFile) {
-    fBarrelFile->Close();
-    delete fBarrelFile;
-  }
-}
-
-//_____________________________________________________________________________
-void AliTPCtracker::SetBarrelTree(const char *mode) {
-  //
-  // Creates a tree for BarrelTracks
-  // mode = "back" or "refit"
-  //
-  // [SR, 01.04.2003]
-  //
-  
-  if (!IsStoringBarrel()) return;
-  
-  TDirectory *sav = gDirectory;
-  if (!fBarrelFile) fBarrelFile = new TFile("AliBarrelTracks.root", "UPDATE");
-
-  char buff[40];
-  sprintf(buff, "BarrelTPC_%d_%s", GetEventNumber(), mode);
-
-  fBarrelFile->cd();
-  fBarrelTree = new TTree(buff, "Barrel TPC tracks");
-  
-  if (!fBarrelArray) fBarrelArray = new TClonesArray("AliBarrelTrack", 4);
-  for(Int_t i=0; i<4; i++) new((*fBarrelArray)[i]) AliBarrelTrack();
-  
-  fBarrelTree->Branch("tracks", &fBarrelArray);
-  
-  sav->cd();
-}
-//_____________________________________________________________________________
-
-void AliTPCtracker::StoreBarrelTrack(AliTPCtrack *ps, Int_t refPlane, Int_t isIn) {
-  //
-  // Stores Track at a given reference plane
-  // 
-  // refPlane: 1-4
-  // isIn: 1 - backward, 2 - refit
-  //
-  
-  if (!IsStoringBarrel()) return;
-  if (refPlane < 0 || refPlane > 4) return;
-  if (isIn > 2) return;
-
-  static Int_t nClusters;
-  static Int_t nWrong;
-  static Double_t chi2;
-  static Int_t index;
-
-  Int_t newClusters, newWrong;
-  Double_t newChi2;
-
-  if ( (refPlane == 1 && isIn == kTrackBack) || 
-       (refPlane == 4 && isIn == kTrackRefit) ) {
-    
-    fBarrelArray->Clear();
-    nClusters = nWrong = 0;
-    chi2 = 0.0;
-    index = 0;
-  }
-
-  // propagate
-  Double_t refX = 0;
-  if (refPlane == 1) refX = fParam->GetInnerRadiusLow();
-  if (refPlane == 2) refX = fParam->GetInnerRadiusUp();
-  if (refPlane == 3) refX = fParam->GetOuterRadiusLow();
-  if (refPlane == 4) refX = fParam->GetOuterRadiusUp();
-
-  ps->PropagateTo(refX);
-
-  fBarrelTrack = (AliBarrelTrack*)(*fBarrelArray)[index++];
-  ps->GetBarrelTrack(fBarrelTrack);
-  
-  newClusters = ps->GetNumberOfClusters() - nClusters; 
-  newWrong = ps->GetNWrong() - nWrong;
-  newChi2 = ps->GetChi2() - chi2;
-
-  nClusters =  ps->GetNumberOfClusters();
-  nWrong = ps->GetNWrong();
-  chi2 = ps->GetChi2();
-
-  fBarrelTrack->SetNClusters(newClusters, newChi2);
-  fBarrelTrack->SetNWrongClusters(newWrong);
-  fBarrelTrack->SetRefPlane(refPlane, isIn);
 }
 
-
 //_____________________________________________________________________________
 Double_t f1(Double_t x1,Double_t y1,
                    Double_t x2,Double_t y2,
@@ -312,9 +231,9 @@ Int_t AliTPCtracker::FollowProlongation(AliTPCseed& t, Int_t rf) {
     UInt_t index=0;
     Double_t maxchi2=kMaxCHI2;
     const AliTPCRow &krow=fSectors[s][nr];
-    Double_t pt=t.GetConvConst()/(100/0.299792458/0.2)/t.Get1Pt();
-    Double_t sy2=SigmaY2(t.GetX(),t.GetTgl(),pt);
-    Double_t sz2=SigmaZ2(t.GetX(),t.GetTgl());
+    Double_t pt=1./t.Get1Pt();
+    Double_t sy2=AliTPCcluster::SigmaY2(t.GetX(),t.GetTgl(),pt);
+    Double_t sz2=AliTPCcluster::SigmaZ2(t.GetX(),t.GetTgl());
     Double_t road=4.*sqrt(t.GetSigmaY2() + sy2), y=t.GetY(), z=t.GetZ();
 
     if (road>kMaxROAD) {
@@ -422,7 +341,7 @@ Int_t AliTPCtracker::FollowBackProlongation
   Int_t s=Int_t(alpha/fSectors->GetAlpha())%fN;
 
   Int_t idx=-1, sec=-1, row=-1;
-  Int_t nc=seed.GetNumber();
+  Int_t nc=track.GetNumberOfClusters();
 
   if (nc--) {
      idx=track.GetClusterIndex(nc);
@@ -434,7 +353,8 @@ Int_t AliTPCtracker::FollowBackProlongation
   Int_t nr=fSectors->GetNRows();
   for (Int_t i=0; i<nr; i++) {
     Double_t x=fSectors->GetX(i), ymax=fSectors->GetMaxY(i);
-    Double_t y=seed.GetYat(x);
+    Double_t y;
+    if (!seed.GetYAt(x,GetBz(),y)) return 0;
  
     if (y > ymax) {
        s = (s+1) % fN;
@@ -449,9 +369,9 @@ Int_t AliTPCtracker::FollowBackProlongation
     AliTPCcluster *cl=0;
     Int_t index=0;
     Double_t maxchi2=kMaxCHI2;
-    Double_t pt=seed.GetConvConst()/(100/0.299792458/0.2)/seed.Get1Pt();
-    Double_t sy2=SigmaY2(seed.GetX(),seed.GetTgl(),pt);
-    Double_t sz2=SigmaZ2(seed.GetX(),seed.GetTgl());
+    Double_t pt=1./seed.Get1Pt();
+    Double_t sy2=AliTPCcluster::SigmaY2(seed.GetX(),seed.GetTgl(),pt);
+    Double_t sz2=AliTPCcluster::SigmaZ2(seed.GetX(),seed.GetTgl());
     Double_t road=4.*sqrt(seed.GetSigmaY2() + sy2), z=seed.GetZ();
     if (road>kMaxROAD) {
       Warning("FollowBackProlongation","Too broad road !"); 
@@ -503,8 +423,6 @@ Int_t AliTPCtracker::FollowBackProlongation
 
   }
 
-  seed.SetNumber(nc);
-
   return 1;
 }
 
@@ -597,8 +515,8 @@ void AliTPCtracker::MakeSeeds(Int_t i1, Int_t i2) {
         c[13]=f30*sy1*f40+f32*sy2*f42;
         c[14]=f40*sy1*f40+f42*sy2*f42+f43*sy3*f43;
 
-        UInt_t index=kr1.GetIndex(is);
-       AliTPCseed *track=new AliTPCseed(index, x, c, x1, ns*alpha+shift);
+        Int_t index=kr1.GetIndex(is);
+       AliTPCseed *track=new AliTPCseed(x1, ns*alpha+shift, x, c, index);
         Float_t l=fSectors->GetPadPitchWidth();
         track->SetSampledEdx(kr1[is]->GetQ()/l,0);
 
@@ -637,7 +555,8 @@ Int_t AliTPCtracker::ReadSeeds(const TFile *inp) {
   Int_t n=(Int_t)seedTree->GetEntries();
   for (Int_t i=0; i<n; i++) {
      seedTree->GetEvent(i);
-     fSeeds->AddLast(new AliTPCseed(*seed,seed->GetAlpha()));
+     seed->ResetClusters();
+     fSeeds->AddLast(new AliTPCseed(*seed));
   }
   
   delete seed;
@@ -730,11 +649,16 @@ Int_t AliTPCtracker::RefitInward(AliESD* event) {
     AliESDtrack* track = event->GetTrack(i);
     ULong_t status = track->GetStatus();
 
+    if ( (status & AliESDtrack::kTPCrefit) != 0 ) continue;    
     if ( (status & AliESDtrack::kTPCout ) == 0 ) continue;
-    if ( (status & AliESDtrack::kTPCrefit) != 0 ) continue;
-    
+
+    if ( (status & AliESDtrack::kTRDout ) != 0 ) 
+      if ( (status & AliESDtrack::kTRDrefit ) == 0 ) continue;
+
     AliTPCtrack* tpcTrack = new AliTPCtrack(*track);
-    AliTPCseed* seed = new AliTPCseed(*tpcTrack, tpcTrack->GetAlpha());
+    AliTPCseed* seed=new AliTPCseed(*tpcTrack); seed->ResetClusters(); 
+
+    if ( (status & AliESDtrack::kTRDrefit) == 0 ) seed->ResetCovariance(10.);
 
     fSectors = fOuterSec;
 
@@ -779,17 +703,13 @@ Int_t AliTPCtracker::PropagateBack(AliESD *event) {
 
     if ( (status & AliESDtrack::kTPCin ) == 0 ) continue;
     if ( (status & AliESDtrack::kTPCout) != 0 ) continue;
+    if ( (status & AliESDtrack::kITSin) != 0 )
+       if ( (status & AliESDtrack::kITSout) == 0 ) continue;
 
     const AliTPCtrack t(*esd);
-    AliTPCseed s(t,t.GetAlpha());
-
-    if ( (status & AliESDtrack::kITSout) == 0 ) s.ResetCovariance();
+    AliTPCseed s(t); s.ResetClusters();
 
-    s.ResetNWrong();
-    s.ResetNRotation();
-    
-    Int_t nc=t.GetNumberOfClusters();
-    s.SetNumber(nc); //set number of the cluster to start with
+    if ( (status & AliESDtrack::kITSout) == 0 ) s.ResetCovariance(10.);
 
     //inner sectors
     fSectors=fInnerSec; fN=fkNIS;
@@ -809,7 +729,7 @@ Int_t AliTPCtracker::PropagateBack(AliESD *event) {
     //outer sectors
     fSectors=fOuterSec; fN=fkNOS;
 
-    nc=s.GetNumberOfClusters();
+    Int_t nc=s.GetNumberOfClusters();
 
     alpha=s.GetAlpha() - fSectors->GetAlphaShift();
     if (alpha > 2.*TMath::Pi()) alpha -= 2.*TMath::Pi();
@@ -1025,23 +945,7 @@ void AliTPCtracker::AliTPCseed::CookdEdx(Double_t low, Double_t up) {
   dedx /= (nu-nl+1);
   SetdEdx(dedx);
 
-  //Very rough PID
-  Double_t p=TMath::Sqrt((1.+ GetTgl()*GetTgl())/(Get1Pt()*Get1Pt()));
-
-  Double_t log1=TMath::Log(p+0.45), log2=TMath::Log(p+0.12);
-  if (p<0.6) {
-    if (dedx < 34 + 30/(p+0.45)/(p+0.45) + 24*log1) {SetMass(0.13957); return;}
-    if (dedx < 34 + 30/(p+0.12)/(p+0.12) + 24*log2) {SetMass(0.49368); return;}
-    SetMass(0.93827); return;
-  }
-
-  if (p<1.2) {
-    if (dedx < 34 + 30/(p+0.12)/(p+0.12) + 24*log2) {SetMass(0.13957); return;}
-    SetMass(0.93827); return;
-  }
-
-  SetMass(0.13957); return;
-
+  return;
 }