]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCtracker.cxx
Constant extrapolation for gain calibration
[u/mrichter/AliRoot.git] / TPC / AliTPCtracker.cxx
index 83b2813fd152872a8820e381fe3ff4af07110310..b4ff375aa0677f98039fd251649cde5a2393abf4 100644 (file)
@@ -25,7 +25,8 @@
 #include <TFile.h>
 #include <TTree.h>
 
-#include "AliESD.h"
+#include "AliESDEvent.h"
+#include "AliESDtrack.h"
 
 #include "AliTPCtracker.h"
 #include "AliTPCcluster.h"
 
 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;
-  
 }
 
 //_____________________________________________________________________________
@@ -71,99 +85,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,
@@ -226,8 +149,7 @@ Int_t AliTPCtracker::LoadClusters(TTree *cTree) {
   }
 
   AliClusters carray, *addr=&carray;
-  carray.SetClass("AliTPCcluster");
-  carray.SetArray(0);
+  addr = new AliClusters("AliTPCcluster");
   branch->SetAddress(&addr);
 
   Int_t nentr=(Int_t)cTree->GetEntries();
@@ -309,7 +231,7 @@ 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 pt=t.GetSignedPt();
     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();
@@ -419,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);
@@ -431,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;
@@ -446,7 +369,7 @@ 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 pt=seed.GetSignedPt();
     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();
@@ -477,8 +400,8 @@ Int_t AliTPCtracker::FollowBackProlongation
        const AliTPCRow &krow=fSectors[s][i];
        if (accepted>27)
        if (krow) {
-          for (Int_t i=krow.Find(y-road); i<krow; i++) {
-           AliTPCcluster *c=(AliTPCcluster*)(krow[i]);
+          for (Int_t icl=krow.Find(y-road); icl<krow; icl++) {
+           AliTPCcluster *c=(AliTPCcluster*)(krow[icl]);
            if (c->GetY() > y+road) break;
            if (c->IsUsed()) continue;
         if ((c->GetZ()-z)*(c->GetZ()-z)>16.*(seed.GetSigmaZ2()+sz2)) continue;
@@ -486,7 +409,7 @@ Int_t AliTPCtracker::FollowBackProlongation
            if (chi2 > maxchi2) continue;
            maxchi2=chi2;
            cl=c;
-            index=krow.GetIndex(i);
+            index=krow.GetIndex(icl);
           }
        }
     }
@@ -500,8 +423,6 @@ Int_t AliTPCtracker::FollowBackProlongation
 
   }
 
-  seed.SetNumber(nc);
-
   return 1;
 }
 
@@ -594,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);
 
@@ -634,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;
@@ -647,7 +569,7 @@ Int_t AliTPCtracker::ReadSeeds(const TFile *inp) {
 }
 
 //_____________________________________________________________________________
-Int_t AliTPCtracker::Clusters2Tracks(AliESD *event) {
+Int_t AliTPCtracker::Clusters2Tracks(AliESDEvent *event) {
   //-----------------------------------------------------------------
   // This is a track finder.
   // The clusters must be already loaded ! 
@@ -713,7 +635,7 @@ Int_t AliTPCtracker::Clusters2Tracks(AliESD *event) {
 }
 
 //_____________________________________________________________________________
-Int_t AliTPCtracker::RefitInward(AliESD* event) {
+Int_t AliTPCtracker::RefitInward(AliESDEvent* event) {
   //
   // The function propagates tracks throught TPC inward
   // using already associated clusters.
@@ -734,9 +656,9 @@ Int_t AliTPCtracker::RefitInward(AliESD* event) {
       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();
+    if ( (status & AliESDtrack::kTRDrefit) == 0 ) seed->ResetCovariance(10.);
 
     fSectors = fOuterSec;
 
@@ -766,7 +688,7 @@ Int_t AliTPCtracker::RefitInward(AliESD* event) {
   return 0;
 }
 
-Int_t AliTPCtracker::PropagateBack(AliESD *event) {
+Int_t AliTPCtracker::PropagateBack(AliESDEvent *event) {
   //-----------------------------------------------------------------
   // This function propagates tracks back through the TPC.
   // The clusters must be already loaded !
@@ -785,15 +707,9 @@ Int_t AliTPCtracker::PropagateBack(AliESD *event) {
        if ( (status & AliESDtrack::kITSout) == 0 ) continue;
 
     const AliTPCtrack t(*esd);
-    AliTPCseed s(t,t.GetAlpha());
+    AliTPCseed s(t); s.ResetClusters();
 
-    if ( (status & AliESDtrack::kITSout) == 0 ) s.ResetCovariance();
-
-    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;
@@ -813,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();