]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDtracker.cxx
Adding includes now needed by ROOT
[u/mrichter/AliRoot.git] / TRD / AliTRDtracker.cxx
index f6d2e5a6c9b49b314b964948465f2a2e274b8d18..c20732ca51d6e63862e5bdd754e8c315e79c7301 100644 (file)
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
+
 #include <Riostream.h>
-#include <TFile.h>
 #include <TBranch.h>
-#include <TTree.h>  
-#include <TObjArray.h> 
-#include <TTreeStream.h>
+#include <TFile.h>
 #include <TGraph.h>
+#include <TH1D.h>
+#include <TH2D.h>
 #include <TLinearFitter.h>
+#include <TObjArray.h> 
+#include <TROOT.h>
+#include <TTree.h>  
+#include <TTreeStream.h>
 
 #include "AliESD.h"
 #include "AliAlignObj.h"
 #include "AliTRDtracker.h"
 #include "AliTRDReconstructor.h"
 #include "AliTRDCalibra.h"
+ClassImp(AliTRDtracker)
 
-ClassImp(AliTRDtracker) 
-
-  const  Float_t  AliTRDtracker::fgkMinClustersInTrack =  0.5;  
-  const  Float_t  AliTRDtracker::fgkLabelFraction      =  0.8;  
-  const  Double_t AliTRDtracker::fgkMaxChi2            = 12.0; 
-  const  Double_t AliTRDtracker::fgkMaxSnp             =  0.95; // Corresponds to tan = 3
-  const  Double_t AliTRDtracker::fgkMaxStep            =  2.0;  // Maximal step size in propagation 
+const  Float_t  AliTRDtracker::fgkMinClustersInTrack =  0.5;  
+const  Float_t  AliTRDtracker::fgkLabelFraction      =  0.8;  // ??
+const  Double_t AliTRDtracker::fgkMaxChi2            = 12.0; 
+const  Double_t AliTRDtracker::fgkMaxSnp             =  0.95; // Corresponds to tan = 3
+const  Double_t AliTRDtracker::fgkMaxStep            =  2.0;  // Maximal step size in propagation 
 
 //_____________________________________________________________________________
 AliTRDtracker::AliTRDtracker()
   :AliTracker()
+  ,fHBackfit(0x0)
+  ,fHClSearch(0x0)
+  ,fHRefit(0x0)
+  ,fHX(0x0)
+  ,fHNCl(0x0)
+  ,fHNClTrack(0x0)
+  ,fHMinYPos(0x0)
+  ,fHMinYNeg(0x0)
+  ,fHMinZ(0x0)
+  ,fHMinD(0x0)
+  ,fHDeltaX(0x0)
+  ,fHXCl(0x0)
   ,fGeom(0)
   ,fNclusters(0)
   ,fClusters(0)
@@ -88,11 +103,25 @@ AliTRDtracker::AliTRDtracker()
     }
   }
 
+  InitLogHists();
+
 } 
 
 //_____________________________________________________________________________
 AliTRDtracker::AliTRDtracker(const AliTRDtracker &t)
   :AliTracker(t)
+  ,fHBackfit(0x0)
+  ,fHClSearch(0x0)
+  ,fHRefit(0x0)
+  ,fHX(0x0)
+  ,fHNCl(0x0)
+  ,fHNClTrack(0x0)
+  ,fHMinYPos(0x0)
+  ,fHMinYNeg(0x0)
+  ,fHMinZ(0x0)
+  ,fHMinD(0x0)
+  ,fHDeltaX(0x0)
+  ,fHXCl(0x0)
   ,fGeom(0)
   ,fNclusters(0)
   ,fClusters(0)
@@ -108,11 +137,24 @@ AliTRDtracker::AliTRDtracker(const AliTRDtracker &t)
   //
   // Copy constructor
   //
+
 }
 
 //_____________________________________________________________________________
 AliTRDtracker::AliTRDtracker(const TFile *geomfile)
   :AliTracker()
+  ,fHBackfit(0x0)
+  ,fHClSearch(0x0)
+  ,fHRefit(0x0)
+  ,fHX(0x0)
+  ,fHNCl(0x0)
+  ,fHNClTrack(0x0)
+  ,fHMinYPos(0x0)
+  ,fHMinYNeg(0x0)
+  ,fHMinZ(0x0)
+  ,fHMinD(0x0)
+  ,fHDeltaX(0x0)
+  ,fHXCl(0x0)
   ,fGeom(0)
   ,fNclusters(0)
   ,fClusters(new TObjArray(2000))
@@ -168,6 +210,8 @@ AliTRDtracker::AliTRDtracker(const TFile *geomfile)
   fDebugStreamer    = new TTreeSRedirector("TRDdebug.root");
 
   savedir->cd();
+  
+  InitLogHists();
 
 }   
 
@@ -318,7 +362,7 @@ Bool_t  AliTRDtracker::Transform(AliTRDcluster *cluster)
   // ExB correction
   //
   Double_t vdrift = AliTRDcalibDB::Instance()->GetVdrift(cluster->GetDetector(),0,0);
-  Double_t exB    = AliTRDcalibDB::Instance()->GetOmegaTau(vdrift);
+  Double_t exB    = AliTRDcalibDB::Instance()->GetOmegaTau(vdrift,-AliTracker::GetBz()*0.1);
 
   AliTRDCommonParam *commonParam = AliTRDCommonParam::Instance();  
   AliTRDpadPlane    *padPlane    = commonParam->GetPadPlane(plane,chamber);
@@ -396,7 +440,7 @@ Bool_t  AliTRDtracker::Transform(AliTRDcluster *cluster)
 //   // ExB correction
 //   //
 //   Double_t vdrift = AliTRDcalibDB::Instance()->GetVdrift(cluster->GetDetector(),0,0);
-//   Double_t exB =   AliTRDcalibDB::Instance()->GetOmegaTau(vdrift);
+//   Double_t exB =   AliTRDcalibDB::Instance()->GetOmegaTau(vdrift,-AliTracker::GetBz()*0.1);
 //   //
 
 //   AliTRDCommonParam* commonParam = AliTRDCommonParam::Instance();  
@@ -612,7 +656,7 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
   // by the TPC tracker.   
   //  
 
-  Int_t   found    = 0;  
+  Int_t   found    = 0;     // number of tracks found
   Float_t foundMin = 20.0;
   Int_t   n        = event->GetNumberOfTracks();
 
@@ -624,6 +668,7 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
     Double_t covariance[15];
     seed->GetExternalCovariance(covariance);
     quality[i] = covariance[0]+covariance[2];      
+    //quality[i] = covariance[0];
   }
   TMath::Sort(n,quality,index,kFALSE);
 
@@ -631,12 +676,16 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
 
     //AliESDtrack *seed = event->GetTrack(i);
     AliESDtrack *seed = event->GetTrack(index[i]);
+    fHBackfit->Fill(0);
 
     ULong_t status = seed->GetStatus();
     if ((status & AliESDtrack::kTPCout) == 0) {
+      fHBackfit->Fill(1);
       continue;
     }
+
     if ((status & AliESDtrack::kTRDout) != 0) {
+      fHBackfit->Fill(2);
       continue;
     }
 
@@ -646,15 +695,40 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
     seed->UpdateTrackParams(track,AliESDtrack::kTRDbackup); // Make backup
     fNseeds++;
     Float_t p4  = track->GetC();
-
     Int_t expectedClr = FollowBackProlongation(*track);
+    
+    fHBackfit->Fill(3);
+    fHX->Fill(track->GetX());
+
+
+    // store the last measurement
+    /*
+    fHNClTrack->Fill(track->GetNumberOfClusters());
+    if (track->GetNumberOfClusters() >= foundMin) {
+
+      fHBackfit->Fill(4);
+      track->CookdEdx(); 
+      CookdEdxTimBin(*track);
+      CookLabel(track,1 - fgkLabelFraction);
+      if (track->GetBackupTrack()) {
+       //fHBackfit->Fill(5);
+       UseClusters(track->GetBackupTrack());
+       seed->UpdateTrackParams(track->GetBackupTrack(),AliESDtrack::kTRDbackup);
+      }
+    }
+    */
+
+    /**/
+    // inter-tracks competition ???
     if ((TMath::Abs(track->GetC() - p4) / TMath::Abs(p4) < 0.2) || 
         (TMath::Abs(track->GetPt())                      > 0.8)) {
-
+      
+      fHBackfit->Fill(4);
+      
       // 
       // Make backup for back propagation 
       //
-
+      
       Int_t foundClr = track->GetNumberOfClusters();
       if (foundClr >= foundMin) {
        track->CookdEdx(); 
@@ -666,7 +740,7 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
 
         // Sign only gold tracks
        if (track->GetChi2() / track->GetNumberOfClusters() < 4) {   
-         if ((seed->GetKinkIndex(0)      ==   0) &&
+         if ((seed->GetKinkIndex(0)      ==   0) &&
               (TMath::Abs(track->GetPt()) <  1.5)) {
             UseClusters(track);
          }
@@ -678,8 +752,10 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
          //seed->UpdateTrackParams(track, AliESDtrack::kTRDbackup);
          if (track->GetBackupTrack()) {
             seed->UpdateTrackParams(track->GetBackupTrack(),AliESDtrack::kTRDbackup);
+           
          }
          isGold = kTRUE;
+         //fHBackfit->Fill()
        }
 
         // Almost gold track
@@ -695,23 +771,24 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
 
        if ((!isGold) && 
             (track->GetBackupTrack())) {
-         if ((track->GetBackupTrack()->GetNumberOfClusters()                                          > foundMin) &&
-             ((track->GetBackupTrack()->GetChi2()/(track->GetBackupTrack()->GetNumberOfClusters()+1)) <        7)) {     
+         if ((track->GetBackupTrack()->GetNumberOfClusters() > foundMin) &&
+             ((track->GetBackupTrack()->GetChi2()/(track->GetBackupTrack()->GetNumberOfClusters()+1)) < 7)) {    
            seed->UpdateTrackParams(track->GetBackupTrack(),AliESDtrack::kTRDbackup);
            isGold = kTRUE;
          }
        }
 
-       if ((track->StatusForTOF()                          >   0) &&
-            (track->fNCross                                ==   0) && 
-            (Float_t(track->fN)/Float_t(track->fNExpected)  > 0.4)) {
+       if ((track->StatusForTOF() > 0) &&
+            (track->GetNCross() == 0) && 
+            (Float_t(track->GetNumberOfClusters()) / Float_t(track->GetNExpected())  > 0.4)) {
          //seed->UpdateTrackParams(track->GetBackupTrack(), AliESDtrack::kTRDbackup);
        }
 
       }
-
     }
+    /**/
 
+    /**/
     // Debug part of tracking
     TTreeSRedirector &cstream = *fDebugStreamer;
     Int_t eventNr = event->GetEventNumber();
@@ -733,44 +810,62 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
                << "\n";
       }
     }
+    /**/
 
     // Propagation to the TOF (I.Belikov)    
     if (track->GetStop() == kFALSE) {
-      
+      fHBackfit->Fill(5);
+
       Double_t xtof  = 371.0;
+      Double_t xTOF0 = 370.0;
+    
       Double_t c2    = track->GetSnp() + track->GetC() * (xtof - track->GetX());
       if (TMath::Abs(c2) >= 0.99) {
+       
+       fHBackfit->Fill(6);
        delete track;
        continue;
       }
-      Double_t xTOF0 = 370.0;          
+      
       PropagateToX(*track,xTOF0,fgkMaxStep);
 
       // Energy losses taken to the account - check one more time
       c2 = track->GetSnp() + track->GetC() * (xtof - track->GetX());
       if (TMath::Abs(c2) >= 0.99) {
+       
+       fHBackfit->Fill(7);
        delete track;
        continue;
       }
+      
+      //if (!PropagateToX(*track,xTOF0,fgkMaxStep)) {
+      //       fHBackfit->Fill(7);
+      //delete track;
+      //       continue;
+      //} 
 
       Double_t ymax = xtof * TMath::Tan(0.5 * AliTRDgeometry::GetAlpha());
       Double_t y; 
       track->GetYAt(xtof,GetBz(),y);
-      if      (y >  ymax) {
+      if (y >  ymax) {
        if (!track->Rotate( AliTRDgeometry::GetAlpha())) {
+         fHBackfit->Fill(8);
          delete track;
          continue;
        }
       } 
       else if (y < -ymax) {
        if (!track->Rotate(-AliTRDgeometry::GetAlpha())) {
+         fHBackfit->Fill(9);
          delete track;
          continue;
        }
       }
-      
+         
       if (track->PropagateTo(xtof)) {
        seed->UpdateTrackParams(track,AliESDtrack::kTRDout);
+       fHBackfit->Fill(10);
+
         for (Int_t i = 0; i < AliESDtrack::kNPlane; i++) {
           for (Int_t j = 0; j < AliESDtrack::kNSlice; j++) {
             seed->SetTRDsignals(track->GetPIDsignals(i,j),i,j);
@@ -779,16 +874,22 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
         }
        //seed->SetTRDtrack(new AliTRDtrack(*track));
        if (track->GetNumberOfClusters() > foundMin) {
+         fHBackfit->Fill(11);
           found++;
        }
       }
 
     }
     else {
-
+      
+      fHBackfit->Fill(12);
+      
       if ((track->GetNumberOfClusters() >              15) &&
           (track->GetNumberOfClusters() > 0.5*expectedClr)) {
+       
        seed->UpdateTrackParams(track,AliESDtrack::kTRDout);
+       fHBackfit->Fill(13);
+
        //seed->SetStatus(AliESDtrack::kTRDStop);    
         for (Int_t i = 0; i < AliESDtrack::kNPlane; i++) {
           for (Int_t j = 0; j <AliESDtrack::kNSlice; j++) {
@@ -803,10 +904,10 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
     }
 
     seed->SetTRDQuality(track->StatusForTOF());    
-    seed->SetTRDBudget(track->fBudget[0]);    
+    seed->SetTRDBudget(track->GetBudget(0));    
   
+    fHBackfit->Fill(14);
     delete track;
-
   }
 
   AliInfo(Form("Number of seeds: %d",fNseeds));
@@ -823,8 +924,9 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
   delete [] index;
   delete [] quality;
   
+  SaveLogHists();
+  
   return 0;
-
 }
 
 //_____________________________________________________________________________
@@ -850,19 +952,26 @@ Int_t AliTRDtracker::RefitInward(AliESD *event)
 
     AliESDtrack *seed = event->GetTrack(i);
     new (&seed2) AliTRDtrack(*seed);
+    fHRefit->Fill(0);
+
     if (seed2.GetX() < 270.0) {
       seed->UpdateTrackParams(&seed2,AliESDtrack::kTRDbackup); // Backup TPC track - only update
+      fHRefit->Fill(1);
       continue;
     }
 
     ULong_t status = seed->GetStatus();
     if ((status & AliESDtrack::kTRDout) == 0) {
+      fHRefit->Fill(2);
       continue;
     }
     if ((status & AliESDtrack::kTRDin)  != 0) {
+      fHRefit->Fill(3);
       continue;
     }
+    
     nseed++; 
+    fHRefit->Fill(4);
 
     seed2.ResetCovariance(50.0); 
 
@@ -896,7 +1005,10 @@ Int_t AliTRDtracker::RefitInward(AliESD *event)
 
     Double_t xTPC = 250.0;
     if (PropagateToX(t,xTPC,fgkMaxStep)) {
+
       seed->UpdateTrackParams(pt,AliESDtrack::kTRDrefit);
+      fHRefit->Fill(5);
+
       for (Int_t i = 0; i < AliESDtrack::kNPlane; i++) {
         for (Int_t j = 0; j < AliESDtrack::kNSlice; j++) {
           seed->SetTRDsignals(pt->GetPIDsignals(i,j),i,j);
@@ -906,6 +1018,7 @@ Int_t AliTRDtracker::RefitInward(AliESD *event)
     }
     else {
       // If not prolongation to TPC - propagate without update
+      fHRefit->Fill(5);
       AliTRDtrack *seed2 = new AliTRDtrack(*seed);
       seed2->ResetCovariance(5.0); 
       AliTRDtrack *pt2   = new AliTRDtrack(*seed2,seed2->GetAlpha());
@@ -914,6 +1027,8 @@ Int_t AliTRDtracker::RefitInward(AliESD *event)
         pt2->CookdEdx( ); 
         CookdEdxTimBin(*pt2);
        seed->UpdateTrackParams(pt2,AliESDtrack::kTRDrefit);
+       fHRefit->Fill(6);
+
         for (Int_t i = 0; i < AliESDtrack::kNPlane; i++) {
           for (Int_t j = 0; j < AliESDtrack::kNSlice; j++) {
             seed->SetTRDsignals(pt2->GetPIDsignals(i,j),i,j);
@@ -931,8 +1046,8 @@ Int_t AliTRDtracker::RefitInward(AliESD *event)
   AliInfo(Form("Number of loaded seeds: %d",nseed));
   AliInfo(Form("Number of found tracks from loaded seeds: %d",found));
 
+  SaveLogHists();
   return 0;
-
 }
 
 //_____________________________________________________________________________
@@ -1005,12 +1120,12 @@ Int_t AliTRDtracker::FollowProlongation(AliTRDtrack &t)
 
       Int_t ilayer = GetGlobalTimeBin(0,iplane,itime);
       expectedNumberOfClusters++;       
-      t.fNExpected++;
+      t.SetNExpected(t.GetNExpected() + 1);
       if (t.GetX() > 345.0) {
-        t.fNExpectedLast++;
+        t.SetNExpectedLast(t.GetNExpectedLast() + 1);
       }
       AliTRDpropagationLayer &timeBin = *(fTrSec[sector]->GetLayer(ilayer));
-      AliTRDcluster          *cl      = 0;
+      AliTRDcluster *cl = 0;
       UInt_t   index   = 0;
       Double_t maxChi2 = fgkMaxChi2;
       x = timeBin.GetX();
@@ -1047,8 +1162,8 @@ Int_t AliTRDtracker::FollowProlongation(AliTRDtrack &t)
          Int_t    det      = cl->GetDetector();    
          Int_t    plane    = fGeom->GetPlane(det);
          if (t.GetX() > 345.0) {
-           t.fNLast++;
-           t.fChi2Last += maxChi2;
+           t.SetNLast(t.GetNLast() + 1);
+           t.SetChi2Last(t.GetChi2Last() + maxChi2);
          }
 
          Double_t xcluster = cl->GetX();
@@ -1059,9 +1174,10 @@ Int_t AliTRDtracker::FollowProlongation(AliTRDtrack &t)
          }
          maxChi2 = t.GetPredictedChi2(cl,h01);
           
-         if (!t.UpdateMI(cl,maxChi2,index,h01,plane)) {
-           // ????
-         }
+         if (maxChi2<1e+10)
+           if (!t.UpdateMI(cl,maxChi2,index,h01,plane)) {
+             // ????
+           }
 
        }                       
 
@@ -1085,6 +1201,9 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
   // Returns the number of clusters expected to be found in sensitive layers
   // Use GEO manager for material Description
   //
+  // return number of assigned clusters ? 
+  //
+
 
   Int_t    sector;
   Int_t    clusters[1000];
@@ -1099,8 +1218,8 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
   if (!calibra) {
     AliInfo("Could not get Calibra instance\n");
   }
-  if (calibra->GetMItracking()) {
-    calibra->Resettrack();
+  if (calibra->GetMITracking()) {
+    calibra->ResetTrack();
   }
 
   for (Int_t i = 0; i < 1000; i++) {
@@ -1109,10 +1228,14 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
 
   for (Int_t iplane = 0; iplane < AliESDtrack::kNPlane; iplane++) {
 
+    int hb = iplane * 10;
+    fHClSearch->Fill(hb);
+
     Int_t    row0     = GetGlobalTimeBin(0,iplane,GetTimeBinsPerPlane()-1);
     Int_t    rowlast  = GetGlobalTimeBin(0,iplane,0);
     Double_t currentx = fTrSec[0]->GetLayer(row0)->GetX();
     if (currentx < t.GetX()) {
+      fHClSearch->Fill(hb+1);
       continue;
     }
 
@@ -1121,13 +1244,16 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
     //
     if (currentx > (fgkMaxStep + t.GetX())) {
       if (!PropagateToX(t,currentx-fgkMaxStep,fgkMaxStep)) {
+       fHClSearch->Fill(hb+2);
         break;
       }
     }
     if (!AdjustSector(&t)) {
+      fHClSearch->Fill(hb+3);
       break;
     }
     if (TMath::Abs(t.GetSnp()) > fgkMaxSnp) {
+      fHClSearch->Fill(hb+4);
       break;
     }
 
@@ -1145,6 +1271,7 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
     // End global position
     x = fTrSec[0]->GetLayer(rowlast)->GetX();
     if (!t.GetProlongation(x,y,z)) {
+      fHClSearch->Fill(hb+5);
       break;
     }
     xyz1[0] =  x * TMath::Cos(t.GetAlpha()) - y * TMath::Sin(t.GetAlpha()); 
@@ -1159,7 +1286,10 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
     //
     sector = t.GetSector();
     Float_t ncl = FindClusters(sector,row0,rowlast,&t,clusters,tracklet);
+    fHNCl->Fill(tracklet.GetN());
+
     if (tracklet.GetN() < GetTimeBinsPerPlane()/3) {
+      fHClSearch->Fill(hb+6);
       continue;
     }
 
@@ -1170,12 +1300,12 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
 
       Int_t ilayer = GetGlobalTimeBin(0, iplane,itime);
       expectedNumberOfClusters++;       
-      t.fNExpected++;
+      t.SetNExpected(t.GetNExpected() + 1);
       if (t.GetX() > 345.0) {
-        t.fNExpectedLast++;
+        t.SetNExpectedLast(t.GetNExpectedLast() + 1);
       }
       AliTRDpropagationLayer &timeBin = *(fTrSec[sector]->GetLayer(ilayer));
-      AliTRDcluster          *cl      = 0;
+      AliTRDcluster *cl = 0;
       UInt_t   index   = 0;
       Double_t maxChi2 = fgkMaxChi2;
       x = timeBin.GetX();
@@ -1198,27 +1328,28 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
          Int_t    det      = cl->GetDetector();    
          Int_t    plane    = fGeom->GetPlane(det);
          if (t.GetX() > 345.0) {
-           t.fNLast++;
-           t.fChi2Last += maxChi2;
+           t.SetNLast(t.GetNLast() + 1);
+           t.SetChi2Last(t.GetChi2Last() + maxChi2);
          }
          Double_t xcluster = cl->GetX();
          t.PropagateTo(xcluster,radLength,rho);
          maxChi2 = t.GetPredictedChi2(cl,h01);
 
-         if (!t.UpdateMI(cl,maxChi2,index,h01,plane)) {
-           if (!t.Update(cl,maxChi2,index,h01)) {
-             // ????
-           }
-          }  
+         if (maxChi2<1e+10)
+           if (!t.UpdateMI(cl,maxChi2,index,h01,plane)) {
+             if (!t.Update(cl,maxChi2,index,h01)) {
+               // ????
+             }
+           }  
 
-          if (calibra->GetMItracking()) {
+          if (calibra->GetMITracking()) {
             calibra->UpdateHistograms(cl,&t);
           }
 
          // Reset material budget if 2 consecutive gold
          if (plane > 0) { 
-           if (t.fTracklets[plane].GetN() + t.fTracklets[plane-1].GetN() > 20) {
-             t.fBudget[2] = 0;
+           if ((t.GetTracklets(plane).GetN() + t.GetTracklets(plane-1).GetN()) > 20) {
+             t.SetBudget(2,0.0);
            }
          }
 
@@ -1229,21 +1360,21 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
     }
 
     ratio0 = ncl / Float_t(fTimeBinsPerPlane);
-    Float_t ratio1 = Float_t(t.fN+1) / Float_t(t.fNExpected+1.0);      
-    if ((tracklet.GetChi2()     <  18.0) && 
-        (ratio0                 >   0.8) && 
-        (ratio1                 >   0.6) && 
-        (ratio0+ratio1          >   1.5) && 
-        (t.GetNCross()          ==    0) && 
-        (TMath::Abs(t.GetSnp()) <  0.85) &&
-        (t.fN                   >    20)){
+    Float_t ratio1 = Float_t(t.GetNumberOfClusters()+1) / Float_t(t.GetNExpected()+1); 
+    if ((tracklet.GetChi2()      <  18.0) && 
+        (ratio0                  >   0.8) && 
+        (ratio1                  >   0.6) && 
+        (ratio0+ratio1           >   1.5) && 
+        (t.GetNCross()           ==    0) && 
+        (TMath::Abs(t.GetSnp())  <  0.85) &&
+        (t.GetNumberOfClusters() >    20)){
+      //if (ratio0 > 0.8) {
       t.MakeBackupTrack(); // Make backup of the track until is gold
     }
     
   }
 
   return expectedNumberOfClusters;  
-
 }         
 
 //_____________________________________________________________________________
@@ -1328,7 +1459,8 @@ Int_t AliTRDtracker::LoadClusters(TTree *cTree)
     Int_t plane          = fGeom->GetPlane(detector);
     Int_t trackingSector = CookSectorIndex(sector);
 
-    if (c->GetLabel(0) > 0) {
+    //if (c->GetLabel(0) > 0) {
+    if (c->GetQ() > 10) {
       Int_t chamber = fGeom->GetChamber(detector);
       fHoles[chamber][trackingSector] = kFALSE;
     }
@@ -1342,9 +1474,11 @@ Int_t AliTRDtracker::LoadClusters(TTree *cTree)
     index = ncl;
 
     // Apply pos correction
-    Transform(c);    
-    fTrSec[trackingSector]->GetLayer(layer)->InsertCluster(c,index);
+    Transform(c);  
+    fHXCl->Fill(c->GetX());
 
+    fTrSec[trackingSector]->GetLayer(layer)->SetX(c->GetX());
+    fTrSec[trackingSector]->GetLayer(layer)->InsertCluster(c,index);
   }
 
   return 0;
@@ -1606,14 +1740,14 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
             chi2R = 0.0;
 
            for (Int_t iLayer = 0; iLayer < 4; iLayer++) {
-             cseed[sLayer+iLayer].fZref[0] = rieman.GetZat(xcl[sLayer+iLayer]);
-             chi2Z += (cseed[sLayer+iLayer].fZref[0]- zcl[sLayer+iLayer])
-                    * (cseed[sLayer+iLayer].fZref[0]- zcl[sLayer+iLayer]);
-             cseed[sLayer+iLayer].fZref[1] = rieman.GetDZat(xcl[sLayer+iLayer]);             
-             cseed[sLayer+iLayer].fYref[0] = rieman.GetYat(xcl[sLayer+iLayer]);
-             chi2R += (cseed[sLayer+iLayer].fYref[0]- ycl[sLayer+iLayer])
-                    * (cseed[sLayer+iLayer].fYref[0]- ycl[sLayer+iLayer]);
-             cseed[sLayer+iLayer].fYref[1] = rieman.GetDYat(xcl[sLayer+iLayer]);
+             cseed[sLayer+iLayer].SetZref(0,rieman.GetZat(xcl[sLayer+iLayer]));
+             chi2Z += (cseed[sLayer+iLayer].GetZref(0)- zcl[sLayer+iLayer])
+                    * (cseed[sLayer+iLayer].GetZref(0)- zcl[sLayer+iLayer]);
+             cseed[sLayer+iLayer].SetZref(1,rieman.GetDZat(xcl[sLayer+iLayer]));             
+             cseed[sLayer+iLayer].SetYref(0,rieman.GetYat(xcl[sLayer+iLayer]));
+             chi2R += (cseed[sLayer+iLayer].GetYref(0)- ycl[sLayer+iLayer])
+                    * (cseed[sLayer+iLayer].GetYref(0)- ycl[sLayer+iLayer]);
+             cseed[sLayer+iLayer].SetYref(1,rieman.GetDYat(xcl[sLayer+iLayer]));
            }
            if (TMath::Sqrt(chi2R) > 1.0/iter) {
               continue;
@@ -1625,12 +1759,12 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
            Float_t minmax[2] = { -100.0,  100.0 };
            for (Int_t iLayer = 0; iLayer < 4; iLayer++) {
              Float_t max = zcl[sLayer+iLayer]+padlength[sLayer+iLayer] * 0.5
-                          + 1.0 - cseed[sLayer+iLayer].fZref[0];
+                          + 1.0 - cseed[sLayer+iLayer].GetZref(0);
              if (max < minmax[1]) {
                 minmax[1] = max; 
              }
              Float_t min = zcl[sLayer+iLayer]-padlength[sLayer+iLayer] * 0.5
-                          - 1.0 - cseed[sLayer+iLayer].fZref[0];
+                          - 1.0 - cseed[sLayer+iLayer].GetZref(0);
              if (min > minmax[0]) {
                 minmax[0] = min; 
              }
@@ -1689,9 +1823,9 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
 
            for (Int_t jLayer = 0; jLayer < 4; jLayer++) {
 
-             cseed[sLayer+jLayer].fTilt      = hL[sLayer+jLayer];
-             cseed[sLayer+jLayer].fPadLength = padlength[sLayer+jLayer];
-             cseed[sLayer+jLayer].fX0        = xcl[sLayer+jLayer];
+             cseed[sLayer+jLayer].SetTilt(hL[sLayer+jLayer]);
+             cseed[sLayer+jLayer].SetPadLength(padlength[sLayer+jLayer]);
+             cseed[sLayer+jLayer].SetX0(xcl[sLayer+jLayer]);
 
              for (Int_t iter = 0; iter < 2; iter++) {
 
@@ -1715,7 +1849,7 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
 
                  if (iter > 0) {
                    // Try 2 pad-rows in second iteration
-                   zexp = tseed.fZref[0] + tseed.fZref[1]*dxlayer;
+                   zexp = tseed.GetZref(0) + tseed.GetZref(1) * dxlayer;
                    if (zexp > cl[sLayer+jLayer]->GetZ()) {
                       zexp = cl[sLayer+jLayer]->GetZ() + padlength[sLayer+jLayer]*0.5;
                    }
@@ -1724,28 +1858,28 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
                    }
                  }
 
-                 Double_t yexp  = tseed.fYref[0] + tseed.fYref[1]*dxlayer;
+                 Double_t yexp  = tseed.GetYref(0) + tseed.GetYref(1) * dxlayer;
                  Int_t    index = layer.FindNearestCluster(yexp,zexp,kRoad1y,roadz);
                  if (index <= 0) {
                     continue; 
                  }
                  AliTRDcluster *cl = (AliTRDcluster *) GetCluster(index);            
 
-                 tseed.fIndexes[iTime]  = index;
-                 tseed.fClusters[iTime] = cl;         // Register cluster
-                 tseed.fX[iTime]        = dxlayer;    // Register cluster
-                 tseed.fY[iTime]        = cl->GetY(); // Register cluster
-                 tseed.fZ[iTime]        = cl->GetZ(); // Register cluster
+                 tseed.SetIndexes(iTime,index);
+                 tseed.SetClusters(iTime,cl);  // Register cluster
+                 tseed.SetX(iTime,dxlayer);    // Register cluster
+                 tseed.SetY(iTime,cl->GetY()); // Register cluster
+                 tseed.SetZ(iTime,cl->GetZ()); // Register cluster
 
                }
 
                tseed.Update();
 
                // Count the number of clusters and distortions into quality
-               Float_t dangle   = tseed.fYfit[1] - tseed.fYref[1];
-               Float_t tquality = (18.0 - tseed.fN2) / 2.0 + TMath::Abs(dangle) / 0.1
-                                 + TMath::Abs(tseed.fYfit[0] - tseed.fYref[0])   / 0.2
-                                 + 2.0 * TMath::Abs(tseed.fMeanz-tseed.fZref[0]) / padlength[jLayer];
+               Float_t dangle   = tseed.GetYfit(1) - tseed.GetYref(1);
+               Float_t tquality = (18.0 - tseed.GetN2()) / 2.0 + TMath::Abs(dangle) / 0.1
+                                 + TMath::Abs(tseed.GetYfit(0) - tseed.GetYref(0))   / 0.2
+                                 + 2.0 * TMath::Abs(tseed.GetMeanz() - tseed.GetZref(0)) / padlength[jLayer];
                if ((iter == 0) && tseed.IsOK()) {
                  cseed[sLayer+jLayer] = tseed;
                  quality              = tquality;
@@ -1766,7 +1900,7 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
 
              cseed[sLayer+jLayer].CookLabels();
              cseed[sLayer+jLayer].UpdateUsed();
-             nusedCl += cseed[sLayer+jLayer].fNUsed;
+             nusedCl += cseed[sLayer+jLayer].GetNUsed();
              if (nusedCl > 25) {
                isOK = kFALSE;
                break;
@@ -1780,7 +1914,7 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
            nclusters = 0;
            for (Int_t iLayer = 0; iLayer < 4; iLayer++) {
              if (cseed[sLayer+iLayer].IsOK()) {
-               nclusters += cseed[sLayer+iLayer].fN2;      
+               nclusters += cseed[sLayer+iLayer].GetN2();          
              }
            }
 
@@ -1788,8 +1922,8 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
            rieman.Reset();
            for (Int_t iLayer = 0; iLayer < 4; iLayer++) {
              rieman.AddPoint(xcl[sLayer+iLayer]
-                             ,cseed[sLayer+iLayer].fYfitR[0]
-                             ,cseed[sLayer+iLayer].fZProb
+                            ,cseed[sLayer+iLayer].GetYfitR(0)
+                            ,cseed[sLayer+iLayer].GetZProb()
                              ,1
                              ,10);
            }
@@ -1799,24 +1933,24 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
             chi2Z = 0.0;
 
            for (Int_t iLayer = 0; iLayer < 4; iLayer++) {
-             cseed[sLayer+iLayer].fYref[0] = rieman.GetYat(xcl[sLayer+iLayer]);
-             chi2R += (cseed[sLayer+iLayer].fYref[0] - cseed[sLayer+iLayer].fYfitR[0])
-                     * (cseed[sLayer+iLayer].fYref[0] - cseed[sLayer+iLayer].fYfitR[0]);
-             cseed[sLayer+iLayer].fYref[1] = rieman.GetDYat(xcl[sLayer+iLayer]);
-             cseed[sLayer+iLayer].fZref[0] = rieman.GetZat(xcl[sLayer+iLayer]);
-             chi2Z += (cseed[sLayer+iLayer].fZref[0] - cseed[sLayer+iLayer].fMeanz)
-                     * (cseed[sLayer+iLayer].fZref[0]- cseed[sLayer+iLayer].fMeanz);
-             cseed[sLayer+iLayer].fZref[1] = rieman.GetDZat(xcl[sLayer+iLayer]);
+             cseed[sLayer+iLayer].SetYref(0,rieman.GetYat(xcl[sLayer+iLayer]));
+             chi2R += (cseed[sLayer+iLayer].GetYref(0) - cseed[sLayer+iLayer].GetYfitR(0))
+                     * (cseed[sLayer+iLayer].GetYref(0) - cseed[sLayer+iLayer].GetYfitR(0));
+             cseed[sLayer+iLayer].SetYref(1,rieman.GetDYat(xcl[sLayer+iLayer]));
+             cseed[sLayer+iLayer].SetZref(0,rieman.GetZat(xcl[sLayer+iLayer]));
+             chi2Z += (cseed[sLayer+iLayer].GetZref(0) - cseed[sLayer+iLayer].GetMeanz())
+                     * (cseed[sLayer+iLayer].GetZref(0) - cseed[sLayer+iLayer].GetMeanz());
+             cseed[sLayer+iLayer].SetZref(1,rieman.GetDZat(xcl[sLayer+iLayer]));
            }
            Double_t curv = rieman.GetC();
 
            //
            // Likelihoods
            //
-           Double_t sumda     = TMath::Abs(cseed[sLayer+0].fYfitR[1] - cseed[sLayer+0].fYref[1])
-                               + TMath::Abs(cseed[sLayer+1].fYfitR[1] - cseed[sLayer+1].fYref[1])
-                               + TMath::Abs(cseed[sLayer+2].fYfitR[1] - cseed[sLayer+2].fYref[1])
-                               + TMath::Abs(cseed[sLayer+3].fYfitR[1]- cseed[sLayer+3].fYref[1]);
+           Double_t sumda     = TMath::Abs(cseed[sLayer+0].GetYfitR(1) - cseed[sLayer+0].GetYref(1))
+                               + TMath::Abs(cseed[sLayer+1].GetYfitR(1) - cseed[sLayer+1].GetYref(1))
+                               + TMath::Abs(cseed[sLayer+2].GetYfitR(1) - cseed[sLayer+2].GetYref(1))
+                               + TMath::Abs(cseed[sLayer+3].GetYfitR(1) - cseed[sLayer+3].GetYref(1));
            Double_t likea     = TMath::Exp(-sumda*10.6);
            Double_t likechi2  = 0.0000000001;
            if (chi2R < 0.5) {
@@ -1825,9 +1959,9 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
            Double_t likechi2z = TMath::Exp(-chi2Z * 0.088) / TMath::Exp(-chi2Z * 0.019);
            Double_t likeN     = TMath::Exp(-(72 - nclusters) * 0.19);
            Double_t like      = likea * likechi2 * likechi2z * likeN;
-           Double_t likePrimY = TMath::Exp(-TMath::Abs(cseed[sLayer+0].fYref[1] - 130.0*curv) * 1.9);
-           Double_t likePrimZ = TMath::Exp(-TMath::Abs(cseed[sLayer+0].fZref[1]
-                                                      - cseed[sLayer+0].fZref[0] / xcl[sLayer+0]) * 5.9);
+           Double_t likePrimY = TMath::Exp(-TMath::Abs(cseed[sLayer+0].GetYref(1) - 130.0*curv) * 1.9);
+           Double_t likePrimZ = TMath::Exp(-TMath::Abs(cseed[sLayer+0].GetZref(1)
+                                                      - cseed[sLayer+0].GetZref(0) / xcl[sLayer+0]) * 5.9);
            Double_t likePrim  = TMath::Max(likePrimY*likePrimZ,0.0005);
                                            
            seedquality[registered] = like; 
@@ -1870,12 +2004,12 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
            for (Int_t iLayer = 0; iLayer < 2; iLayer++) {
              Int_t jLayer = tLayer[iLayer]; // Set tracking layer            
              cseed[jLayer].Reset();
-             cseed[jLayer].fTilt      = hL[jLayer];
-             cseed[jLayer].fPadLength = padlength[jLayer];
-             cseed[jLayer].fX0        = xcl[jLayer];
+             cseed[jLayer].SetTilt(hL[jLayer]);
+             cseed[jLayer].SetPadLength(padlength[jLayer]);
+             cseed[jLayer].SetX0(xcl[jLayer]);
              // Get pad length and rough cluster
-             Int_t indexdummy = reflayers[jLayer]->FindNearestCluster(cseed[jLayer].fYref[0]
-                                                                      ,cseed[jLayer].fZref[0]
+             Int_t indexdummy = reflayers[jLayer]->FindNearestCluster(cseed[jLayer].GetYref(0)
+                                                                     ,cseed[jLayer].GetZref(0)
                                                                       ,kRoad2y
                                                                       ,kRoad2z);
              if (indexdummy <= 0) {
@@ -1895,7 +2029,7 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
              if ((jLayer == 5) && !(cseed[4].IsOK())) {
                 continue;  // break not allowed
              }
-             Float_t  zexp   = cseed[jLayer].fZref[0];
+             Float_t  zexp   = cseed[jLayer].GetZref(0);
              Double_t zroad  = padlength[jLayer] * 0.5 + 1.0;
 
              for (Int_t iter = 0; iter < 2; iter++) {
@@ -1906,26 +2040,26 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
                for (Int_t iTime = 2; iTime < 20; iTime++) { 
                  AliTRDpropagationLayer &layer = *(fTrSec[ns]->GetLayer(layers[jLayer][1]-iTime));
                  Double_t dxlayer = layer.GetX()-xcl[jLayer];
-                 Double_t yexp    = tseed.fYref[0] + tseed.fYref[1]*dxlayer;
+                 Double_t yexp    = tseed.GetYref(0) + tseed.GetYref(1) * dxlayer;
                  Float_t  yroad   = kRoad1y;
                  Int_t    index   = layer.FindNearestCluster(yexp,zexp,yroad,zroad);
                  if (index <= 0) {
                     continue; 
                  }
                  AliTRDcluster *cl = (AliTRDcluster *) GetCluster(index);            
-                 tseed.fIndexes[iTime]  = index;
-                 tseed.fClusters[iTime] = cl;         // Register cluster
-                 tseed.fX[iTime]        = dxlayer;    // Register cluster
-                 tseed.fY[iTime]        = cl->GetY(); // Register cluster
-                 tseed.fZ[iTime]        = cl->GetZ(); // Register cluster
+                 tseed.SetIndexes(iTime,index);
+                 tseed.SetClusters(iTime,cl);  // Register cluster
+                 tseed.SetX(iTime,dxlayer);    // Register cluster
+                 tseed.SetY(iTime,cl->GetY()); // Register cluster
+                 tseed.SetZ(iTime,cl->GetZ()); // Register cluster
                }
 
                tseed.Update();
                if (tseed.IsOK()) {
-                 Float_t dangle   = tseed.fYfit[1] - tseed.fYref[1];
-                 Float_t tquality = (18.0 - tseed.fN2)/2.0 + TMath::Abs(dangle)   / 0.1
-                                   + TMath::Abs(tseed.fYfit[0] - tseed.fYref[0])   / 0.2
-                                   + 2.0 * TMath::Abs(tseed.fMeanz-tseed.fZref[0]) / padlength[jLayer];
+                 Float_t dangle   = tseed.GetYfit(1) - tseed.GetYref(1);
+                 Float_t tquality = (18.0 - tseed.GetN2())/2.0 + TMath::Abs(dangle) / 0.1
+                                   + TMath::Abs(tseed.GetYfit(0) - tseed.GetYref(0)) / 0.2
+                                   + 2.0 * TMath::Abs(tseed.GetMeanz() - tseed.GetZref(0)) / padlength[jLayer];
                  if (tquality < quality) {
                    cseed[jLayer] = tseed;
                    quality       = tquality;
@@ -1939,7 +2073,7 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
              if ( cseed[jLayer].IsOK()) {
                cseed[jLayer].CookLabels();
                cseed[jLayer].UpdateUsed();
-               nusedf += cseed[jLayer].fNUsed;
+               nusedf += cseed[jLayer].GetNUsed();
                AliTRDseed::FitRiemanTilt(cseed,kTRUE);
              }
 
@@ -1964,11 +2098,11 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
              for (Int_t jLayer = 0; jLayer < 6; jLayer++) {
                if (bseed[jLayer].IsOK()) { 
                  AliTRDseed &tseed = bseed[jLayer];
-                 Double_t zcor     =  tseed.fTilt * (tseed.fZProb - tseed.fZref[0]);
-                 Float_t  dangle   = tseed.fYfit[1] - tseed.fYref[1];
-                 Float_t  tquality = (18.0 - tseed.fN2) / 2.0 + TMath::Abs(dangle)        / 0.1
-                                    + TMath::Abs(tseed.fYfit[0] - (tseed.fYref[0] - zcor)) / 0.2
-                                    + 2.0 * TMath::Abs(tseed.fMeanz - tseed.fZref[0])      / padlength[jLayer];
+                 Double_t zcor     = tseed.GetTilt() * (tseed.GetZProb() - tseed.GetZref(0));
+                 Float_t  dangle   = tseed.GetYfit(1) - tseed.GetYref(1);
+                 Float_t  tquality = (18.0 - tseed.GetN2()) / 2.0 + TMath::Abs(dangle)        / 0.1
+                                    + TMath::Abs(tseed.GetYfit(0) - (tseed.GetYref(0) - zcor)) / 0.2
+                                    + 2.0 * TMath::Abs(tseed.GetMeanz() - tseed.GetZref(0))    / padlength[jLayer];
                  squality[jLayer]  = tquality;
                }
                else {
@@ -1999,43 +2133,43 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
 
                  AliTRDpropagationLayer &layer = *(fTrSec[ns]->GetLayer(layers[bLayer][1]-iTime));
                  Double_t dxlayer = layer.GetX() - xcl[bLayer];
-                 Double_t zexp    =  tseed.fZref[0];
-                 Double_t zcor    =  tseed.fTilt * (tseed.fZProb - tseed.fZref[0]);
+                 Double_t zexp    = tseed.GetZref(0);
+                 Double_t zcor    = tseed.GetTilt() * (tseed.GetZProb() - tseed.GetZref(0));
                  Float_t  roadz   = padlength[bLayer] + 1;
-                 if (TMath::Abs(tseed.fZProb-zexp) > padlength[bLayer]*0.5) {
+                 if (TMath::Abs(tseed.GetZProb() - zexp) > 0.5*padlength[bLayer]) {
                     roadz = padlength[bLayer] * 0.5;
                   }
-                 if (tseed.fZfit[1]*tseed.fZref[1] < 0) {
+                 if (tseed.GetZfit(1)*tseed.GetZref(1)   < 0.0) {
                     roadz = padlength[bLayer] * 0.5;
                   }
-                 if (TMath::Abs(tseed.fZProb-zexp) < 0.1*padlength[bLayer]) {
-                   zexp  = tseed.fZProb
+                 if (TMath::Abs(tseed.GetZProb() - zexp) < 0.1*padlength[bLayer]) {
+                   zexp  = tseed.GetZProb()
                    roadz = padlength[bLayer] * 0.5;
                  }
 
-                 Double_t yexp  = tseed.fYref[0] + tseed.fYref[1]*dxlayer-zcor;
+                 Double_t yexp  = tseed.GetYref(0) + tseed.GetYref(1) * dxlayer - zcor;
                  Int_t    index = layer.FindNearestCluster(yexp,zexp,kRoad1y,roadz);
                  if (index <= 0) {
                     continue; 
                  }
                  AliTRDcluster *cl = (AliTRDcluster *) GetCluster(index);            
 
-                 tseed.fIndexes[iTime]  = index;
-                 tseed.fClusters[iTime] = cl;         // Register cluster
-                 tseed.fX[iTime]        = dxlayer;    // Register cluster
-                 tseed.fY[iTime]        = cl->GetY(); // Register cluster
-                 tseed.fZ[iTime]        = cl->GetZ(); // Register cluster
+                 tseed.SetIndexes(iTime,index);
+                 tseed.SetClusters(iTime,cl);  // Register cluster
+                 tseed.SetX(iTime,dxlayer);    // Register cluster
+                 tseed.SetY(iTime,cl->GetY()); // Register cluster
+                 tseed.SetZ(iTime,cl->GetZ()); // Register cluster
 
                }
 
                tseed.Update();
                if (tseed.IsOK()) {
-                 Float_t  dangle   = tseed.fYfit[1] - tseed.fYref[1];
-                 Double_t zcor     = tseed.fTilt * (tseed.fZProb - tseed.fZref[0]);
-                 Float_t  tquality = (18.0 - tseed.fN2) / 2.0 
-                                    + TMath::Abs(dangle) / 0.1
-                                    + TMath::Abs(tseed.fYfit[0] - (tseed.fYref[0] - zcor)) / 0.2
-                                    + 2.0 * TMath::Abs(tseed.fMeanz - tseed.fZref[0]) / padlength[jLayer];
+                 Float_t  dangle   = tseed.GetYfit(1) - tseed.GetYref(1);
+                 Double_t zcor     = tseed.GetTilt() * (tseed.GetZProb() - tseed.GetZref(0));
+                 Float_t  tquality = (18.0 - tseed.GetN2()) / 2.0 
+                                    + TMath::Abs(dangle)     / 0.1
+                                    + TMath::Abs(tseed.GetYfit(0) - (tseed.GetYref(0) - zcor)) / 0.2
+                                    + 2.0 * TMath::Abs(tseed.GetMeanz() - tseed.GetZref(0))    / padlength[jLayer];
                  if (tquality<squality[bLayer]) {
                    bseed[bLayer] = tseed;
                  }
@@ -2051,11 +2185,11 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
            nlayers   = 0;
            findable  = 0;
            for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
-             if (TMath::Abs(cseed[iLayer].fYref[0] / cseed[iLayer].fX0) < 0.15) {
+             if (TMath::Abs(cseed[iLayer].GetYref(0) / cseed[iLayer].GetX0()) < 0.15) {
                findable++;
              }
              if (cseed[iLayer].IsOK()) {
-               nclusters += cseed[iLayer].fN2;     
+               nclusters += cseed[iLayer].GetN2();         
                nlayers++;
              }
            }
@@ -2066,8 +2200,8 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
            for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
              if (cseed[iLayer].IsOK()) {
                 rieman.AddPoint(xcl[iLayer]
-                               ,cseed[iLayer].fYfitR[0]
-                               ,cseed[iLayer].fZProb
+                              ,cseed[iLayer].GetYfitR(0)
+                              ,cseed[iLayer].GetZProb()
                                ,1
                                ,10);
              }
@@ -2078,14 +2212,14 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
            chi2ZF = 0.0;
            for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
              if (cseed[iLayer].IsOK()) {
-               cseed[iLayer].fYref[0] = rieman.GetYat(xcl[iLayer]);
-               chi2RF += (cseed[iLayer].fYref[0] - cseed[iLayer].fYfitR[0])
-                        * (cseed[iLayer].fYref[0] - cseed[iLayer].fYfitR[0]);
-               cseed[iLayer].fYref[1] = rieman.GetDYat(xcl[iLayer]);
-               cseed[iLayer].fZref[0] = rieman.GetZat(xcl[iLayer]);
-               chi2ZF += (cseed[iLayer].fZref[0] - cseed[iLayer].fMeanz)
-                        * (cseed[iLayer].fZref[0] - cseed[iLayer].fMeanz);
-               cseed[iLayer].fZref[1] = rieman.GetDZat(xcl[iLayer]);
+               cseed[iLayer].SetYref(0,rieman.GetYat(xcl[iLayer]));
+               chi2RF += (cseed[iLayer].GetYref(0) - cseed[iLayer].GetYfitR(0))
+                        * (cseed[iLayer].GetYref(0) - cseed[iLayer].GetYfitR(0));
+               cseed[iLayer].SetYref(1,rieman.GetDYat(xcl[iLayer]));
+               cseed[iLayer].SetZref(0,rieman.GetZat(xcl[iLayer]));
+               chi2ZF += (cseed[iLayer].GetZref(0) - cseed[iLayer].GetMeanz())
+                        * (cseed[iLayer].GetZref(0) - cseed[iLayer].GetMeanz());
+               cseed[iLayer].SetZref(1,rieman.GetDZat(xcl[iLayer]));
              }
            }
            chi2RF /= TMath::Max((nlayers - 3.0),1.0);
@@ -2112,18 +2246,18 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
 
              for (Int_t itime = 0; itime < 25; itime++) {
 
-               if (!cseed[iLayer].fUsable[itime]) {
+               if (!cseed[iLayer].IsUsable(itime)) {
                   continue;
                }
                 // X relative to the middle chamber
-               Double_t x  = cseed[iLayer].fX[itime] + cseed[iLayer].fX0 - xref2;  
-               Double_t y  = cseed[iLayer].fY[itime];
-               Double_t z  = cseed[iLayer].fZ[itime];
+               Double_t x  = cseed[iLayer].GetX(itime) + cseed[iLayer].GetX0() - xref2;  
+               Double_t y  = cseed[iLayer].GetY(itime);
+               Double_t z  = cseed[iLayer].GetZ(itime);
                // ExB correction to the correction
                // Tilted rieman
                Double_t uvt[6];
                 // Global x
-               Double_t x2 = cseed[iLayer].fX[itime] + cseed[iLayer].fX0;      
+               Double_t x2 = cseed[iLayer].GetX(itime) + cseed[iLayer].GetX0();      
                Double_t t  = 1.0 / (x2*x2 + y*y);
                uvt[1] = t;                 // t
                uvt[0] = 2.0 * x2 * uvt[1]; // u 
@@ -2136,7 +2270,7 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
                //
                // Constrained rieman
                // 
-               z = cseed[iLayer].fZ[itime];
+               z = cseed[iLayer].GetZ(itime);
                uvt[0] = 2.0 * x2 * t; // u 
                uvt[1] = 2.0 * hL[iLayer] * x2 * uvt[1];              
                uvt[2] = 2.0 * (y + hL[iLayer] * (z - GetZ())) * t;
@@ -2162,7 +2296,7 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
            for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
              if (cseed[iLayer].IsOK()) {
                Double_t zT2 = rpolz0 + rpolz1 * (xcl[iLayer] - xref2);
-               if (TMath::Abs(cseed[iLayer].fZProb - zT2) > padlength[iLayer] * 0.5 + 1.0) {
+               if (TMath::Abs(cseed[iLayer].GetZProb() - zT2) > padlength[iLayer] * 0.5 + 1.0) {
                  acceptablez = kFALSE;
                }
              }
@@ -2200,8 +2334,8 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
              if (cseed[iLayer].IsOK()) {
                Double_t zT2 = rpolz0 + rpolz1 * (xcl[iLayer] - xref2);
                Double_t zTC = polz0c + polz1c * (xcl[iLayer] - xref2);
-               chi2ZT2 += TMath::Abs(cseed[iLayer].fMeanz - zT2);
-               chi2ZTC += TMath::Abs(cseed[iLayer].fMeanz - zTC);
+               chi2ZT2 += TMath::Abs(cseed[iLayer].GetMeanz() - zT2);
+               chi2ZTC += TMath::Abs(cseed[iLayer].GetMeanz() - zTC);
              }
            }
            chi2ZT2 /= TMath::Max((nlayers - 3.0),1.0);
@@ -2211,8 +2345,8 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
            Float_t sumdaf = 0.0;
            for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
              if (cseed[iLayer].IsOK()) {
-               sumdaf += TMath::Abs((cseed[iLayer].fYfit[1] - cseed[iLayer].fYref[1])
-                                    / cseed[iLayer].fSigmaY2);
+               sumdaf += TMath::Abs((cseed[iLayer].GetYfit(1) - cseed[iLayer].GetYref(1))
+                                    / cseed[iLayer].GetSigmaY2());
              }
            }
            sumdaf /= Float_t (nlayers - 2.0);
@@ -2245,13 +2379,13 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
                 index0 = 2;
              }
            }
-           seedparams[registered][0] = cseed[index0].fX0;
-           seedparams[registered][1] = cseed[index0].fYref[0];
-           seedparams[registered][2] = cseed[index0].fZref[0];
+           seedparams[registered][0] = cseed[index0].GetX0();
+           seedparams[registered][1] = cseed[index0].GetYref(0);
+           seedparams[registered][2] = cseed[index0].GetZref(0);
            seedparams[registered][5] = cR;
-           seedparams[registered][3] = cseed[index0].fX0 * cR - TMath::Sin(TMath::ATan(cseed[0].fYref[1]));
-           seedparams[registered][4] = cseed[index0].fZref[1]
-                                      /        TMath::Sqrt(1.0 + cseed[index0].fYref[1] * cseed[index0].fYref[1]);
+           seedparams[registered][3] = cseed[index0].GetX0() * cR - TMath::Sin(TMath::ATan(cseed[0].GetYref(1)));
+           seedparams[registered][4] = cseed[index0].GetZref(1)
+                                      /        TMath::Sqrt(1.0 + cseed[index0].GetYref(1) * cseed[index0].GetYref(1));
            seedparams[registered][6] = ns;
 
            Int_t labels[12];
@@ -2261,12 +2395,12 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
              if (!cseed[iLayer].IsOK()) {
                 continue;
              }
-             if (cseed[iLayer].fLabels[0] >= 0) {
-               labels[nlab] = cseed[iLayer].fLabels[0];
+             if (cseed[iLayer].GetLabels(0) >= 0) {
+               labels[nlab] = cseed[iLayer].GetLabels(0);
                nlab++;
              }
-             if (cseed[iLayer].fLabels[1] >= 0) {
-               labels[nlab] = cseed[iLayer].fLabels[1];
+             if (cseed[iLayer].GetLabels(1) >= 0) {
+               labels[nlab] = cseed[iLayer].GetLabels(1);
                nlab++;
              }
            }
@@ -2274,11 +2408,11 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
            Int_t label     = outlab[0];
            Int_t frequency = outlab[1];
            for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
-             cseed[iLayer].fFreq  = frequency;
-             cseed[iLayer].fC     = cR;
-             cseed[iLayer].fCC    = cC;
-             cseed[iLayer].fChi2  = chi2TR;
-             cseed[iLayer].fChi2Z = chi2ZF;
+             cseed[iLayer].SetFreq(frequency);
+             cseed[iLayer].SetC(cR);
+             cseed[iLayer].SetCC(cC);
+             cseed[iLayer].SetChi2(chi2TR);
+             cseed[iLayer].SetChi2Z(chi2ZF);
            }
 
            // Debugging print
@@ -2387,20 +2521,20 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
 
        for (Int_t jLayer = 0; jLayer < 6; jLayer++) {
 
-         if (TMath::Abs(seed[index][jLayer].fYref[0] / xcl[jLayer]) < 0.15) {
+         if (TMath::Abs(seed[index][jLayer].GetYref(0) / xcl[jLayer]) < 0.15) {
            findable++;
          }
          if (seed[index][jLayer].IsOK()) {
            seed[index][jLayer].UpdateUsed();
-           ncl   +=seed[index][jLayer].fN2;
-           nused +=seed[index][jLayer].fNUsed;
+           ncl   +=seed[index][jLayer].GetN2();
+           nused +=seed[index][jLayer].GetNUsed();
            nlayers++;
            // Cooking label
            for (Int_t itime = 0; itime < 25; itime++) {
-             if (seed[index][jLayer].fUsable[itime]) {
+             if (seed[index][jLayer].IsUsable(itime)) {
                naccepted++;
                for (Int_t ilab = 0; ilab < 3; ilab++) {
-                 Int_t tindex = seed[index][jLayer].fClusters[itime]->GetLabel(ilab);
+                 Int_t tindex = seed[index][jLayer].GetClusters(itime)->GetLabel(ilab);
                  if (tindex >= 0) {
                    labelsall[nlabelsall] = tindex;
                    nlabelsall++;
@@ -2463,12 +2597,12 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
        Int_t nlab = 0;
        for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
          if (seed[index][iLayer].IsOK()) {
-           if (seed[index][iLayer].fLabels[0] >= 0) {
-             labels[nlab] = seed[index][iLayer].fLabels[0];
+           if (seed[index][iLayer].GetLabels(0) >= 0) {
+             labels[nlab] = seed[index][iLayer].GetLabels(0);
              nlab++;
            }
-           if (seed[index][iLayer].fLabels[1] >= 0) {
-             labels[nlab] = seed[index][iLayer].fLabels[1];
+           if (seed[index][iLayer].GetLabels(1) >= 0) {
+             labels[nlab] = seed[index][iLayer].GetLabels(1);
              nlab++;
            }
          }   
@@ -2484,7 +2618,7 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
        if (ratio < 0.25) {
          for (Int_t jLayer = 0; jLayer < 6; jLayer++) {
            if ((seed[index][jLayer].IsOK()) && 
-                (TMath::Abs(seed[index][jLayer].fYfit[1] - seed[index][jLayer].fYfit[1]) < 0.2)) {
+                (TMath::Abs(seed[index][jLayer].GetYfit(1) - seed[index][jLayer].GetYfit(1)) < 0.2)) {
              seed[index][jLayer].UseClusters(); // Sign gold
            }
          }
@@ -2749,10 +2883,10 @@ void AliTRDtracker::UseClusters(const AliKalmanTrack *t, Int_t from) const
     Int_t index  = t->GetClusterIndex(i);
     AliTRDcluster *c = (AliTRDcluster *) fClusters->UncheckedAt(index);
     Int_t iplane = fGeom->GetPlane(c->GetDetector());
-    if (track->fTracklets[iplane].GetChi2() > kmaxchi2) {
+    if (track->GetTracklets(iplane).GetChi2() > kmaxchi2) {
       continue; 
     }
-    if (track->fTracklets[iplane].GetN()    <   kmincl) {
+    if (track->GetTracklets(iplane).GetN()    <   kmincl) {
       continue; 
     }
     if (!(c->IsUsed())) {
@@ -2875,8 +3009,8 @@ AliTRDtracker::AliTRDtrackingSector
   // AliTRDtrackingSector Constructor
   //
 
-  AliTRDpadPlane         *padPlane = 0;
-  AliTRDpropagationLayer *ppl      = 0;
+  AliTRDpadPlane *padPlane = 0;
+  AliTRDpropagationLayer *ppl = 0;
 
   // Get holes description from geometry
   Bool_t holes[AliTRDgeometry::kNcham];
@@ -2928,7 +3062,7 @@ AliTRDtracker::AliTRDtrackingSector
     }
 
     dx        = AliTRDcalibDB::Instance()->GetVdrift(0,0,0)
-              / AliTRDcalibDB::Instance()->GetSamplingFrequency();
+              / commonParam->GetSamplingFrequency();
     rho       = 0.00295 * 0.85; //????
     radLength = 11.0;  
 
@@ -3468,6 +3602,7 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
   if (road > 6.0) {
     road = 6.0;
   }
+  //road = 20.0;
 
   for (Int_t it = 0; it < t1-t0; it++) {
 
@@ -3491,7 +3626,12 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
     //
     // Find 2 nearest cluster at given time bin
     // 
+    int checkPoint[4] = {0,0,0,0};
+    double minY = 123456789;
+    double minD[2] = {1,1};
+
     for (Int_t i = timeBin.Find(y - road); i < maxn; i++) {
+      //for (Int_t i = 0; i < maxn; i++) {
 
       AliTRDcluster *c = (AliTRDcluster *) (timeBin[i]);
       h01 = GetTiltFactor(c);
@@ -3500,18 +3640,35 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
        plane     = fGeom->GetPlane(det);
        padlength = TMath::Sqrt(c->GetSigmaZ2() * 12.0);
       }
+
       //if (c->GetLocalTimeBin()==0) continue;
       if (c->GetY() > (y + road)) {
         break;
       }
-      if ((c->GetZ() - z) * (c->GetZ() - z) > (12.0 * sz2)) {
+
+      fHDeltaX->Fill(c->GetX() - x[it]);
+      //printf("%f\t%f\t%f \n", c->GetX(),  x[it], c->GetX()-x[it]);
+
+      if (TMath::Abs(c->GetY()-y) < TMath::Abs(minY)) {
+       minY = c->GetY()-y;
+       minD[0] = c->GetY()-y;
+       minD[1] = c->GetZ()-z;
+      }
+
+      checkPoint[0]++;
+
+      fHMinZ->Fill(c->GetZ() - z);
+      if ((c->GetZ() - z) * (c->GetZ() - z) > 2 * (12.0 * sz2)) {
         continue;
       }
+      checkPoint[1]++;
 
       Double_t dist = TMath::Abs(c->GetZ() - z);
-      if (dist > (0.5 * padlength + 6.0 * sigmaz)) {
+      if (dist > (0.5 * padlength + 6.0 * sigmaz)) { // 0.5
         continue;   // 6 sigma boundary cut
       }
+      checkPoint[2]++;
+
       Double_t cost = 0.0;
       // Sigma boundary cost function
       if (dist> (0.5 * padlength - sigmaz)){ 
@@ -3531,6 +3688,8 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
       if (chi2 > maxChi2[1]) {
         continue;
       }
+      checkPoint[3]++;
+
       detector = c->GetDetector();
       // Store the clusters in the road
       for (Int_t ih = 2; ih < 9; ih++) {  
@@ -3555,6 +3714,16 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
       indexes[1][it] = timeBin.GetIndex(i); 
 
     }
+    
+    for(int iCheckPoint = 0; iCheckPoint<4; iCheckPoint++)
+      fHFindCl[iCheckPoint]->Fill(checkPoint[iCheckPoint]);
+
+    if (checkPoint[3]) {
+      if (track->GetPt() > 0) fHMinYPos->Fill(minY);
+      else fHMinYNeg->Fill(minY);
+
+    fHMinD->Fill(minD[0], minD[1]);
+     }
 
     if (cl[0][it]) {
       nfound++;
@@ -3608,13 +3777,13 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
     mean[it]       = 0.0;    // Mean value
     angle[it]      = 0.0;    // Angle
 
-    smoffset[it]   = 1.0e10; // Sigma of mean offset
-    smean[it]      = 1.0e10; // Sigma of mean value
-    sangle[it]     = 1.0e10; // Sigma of angle
+    smoffset[it]   = 1.0e5; // Sigma of mean offset
+    smean[it]      = 1.0e5; // Sigma of mean value
+    sangle[it]     = 1.0e5; // Sigma of angle
     smeanangle[it] = 0.0;    // Correlation
 
-    sigmas[it]     = 1.0e10;     
-    tchi2s[it]     = 1.0e10; // Chi2s for tracklet
+    sigmas[it]     = 1.0e5;     
+    tchi2s[it]     = 1.0e5; // Chi2s for tracklet
 
   }
 
@@ -3844,8 +4013,8 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
   //if (tchi2s[bestiter]>25.) sigma2*=tchi2s[bestiter]/25.;
   //if (tchi2s[bestiter]>25.) sigma2=1000.;  // dont'accept
 
-  Double_t exB         = AliTRDcalibDB::Instance()->GetOmegaTau(
-                          AliTRDcalibDB::Instance()->GetVdrift(0,0,0));
+  Double_t exB         = AliTRDcalibDB::Instance()->GetOmegaTau(AliTRDcalibDB::Instance()->GetVdrift(0,0,0)
+                                                               ,-AliTracker::GetBz()*0.1);
   Double_t expectederr = sigma2*sigma2 + 0.01*0.01;
   if (mpads > 3.5) {
     expectederr += (mpads - 3.5) * 0.04;
@@ -3944,8 +4113,8 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
   tracklet.SetSigma2(expectederr);
   tracklet.SetChi2(tchi2s[bestiter]);
   tracklet.SetMaxPos(maxpos,maxpos4,maxpos5);
-  track->fTracklets[plane] = tracklet;
-  track->fNWrong += nbad[0];
+  track->SetTracklets(plane,tracklet);
+  track->SetNWrong(track->GetNWrong() + nbad[0]);
 
   //
   // Debuging part
@@ -4115,9 +4284,9 @@ AliTRDtrack *AliTRDtracker::RegisterSeed(AliTRDseed *seeds, Double_t *params)
   for (Int_t ilayer = 0; ilayer < 6; ilayer++) {
     if (seeds[ilayer].IsOK()) {
       for (Int_t itime = 22; itime > 0; itime--) {
-       if (seeds[ilayer].fIndexes[itime] > 0) {
-         index = seeds[ilayer].fIndexes[itime];
-         cl    = seeds[ilayer].fClusters[itime];
+       if (seeds[ilayer].GetIndexes(itime) > 0) {
+         index = seeds[ilayer].GetIndexes(itime);
+         cl    = seeds[ilayer].GetClusters(itime);
          break;
        }
       }
@@ -4151,5 +4320,72 @@ AliTRDtrack *AliTRDtracker::RegisterSeed(AliTRDseed *seeds, Double_t *params)
   }
 
   return track;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+
+void AliTRDtracker::InitLogHists() {
+  fHBackfit = new TH1D("logTRD_backfit", "", 40, -0.5, 39.5);  
+  fHRefit = new TH1D("logTRD_refit", "", 40, -0.5, 39.5);
+  fHClSearch = new TH1D("logTRD_clSearch", "", 60, -0.5, 59.5); 
+  
+  fHX = new TH1D("logTRD_X", ";x (cm)", 200, 50, 400);
+  fHNCl = new TH1D("logTRD_ncl", "", 40, -0.5, 39.5);
+  fHNClTrack = new TH1D("logTRD_nclTrack", "", 180, -0.5, 179.5);
+  
+  fHMinYPos = new TH1D("logTRD_minYPos", ";#delta Y (cm)", 400, -6, 6);
+  fHMinYNeg = new TH1D("logTRD_minYNeg", ";#delta Y (cm)", 400, -6, 6);
+  fHMinZ = new TH1D("logTRD_minZ", ";#delta Z (cm)", 400, -20, 20);
+  fHMinD = new TH2D("logTRD_minD", ";#delta Y (cm);#delta Z (cm)", 100, -6, 6, 100, -50, 50);
+  
+  fHDeltaX = new TH1D("logTRD_deltaX", ";#delta X (cm)", 100, -5, 5);
+  fHXCl = new TH1D("logTRD_xCl", ";cluster x position (cm)", 1000, 280, 380);
+  
+  const char *nameFindCl[4] = {"logTRD_clY", "logTRD_clZ", "logTRD_clB", "logTRD_clG"};
+  
+  for(int i=0; i<4; i++) {
+    fHFindCl[i] = new TH1D(nameFindCl[i], "", 30, -0.5, 29.5);
+  }
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+
+void AliTRDtracker::SaveLogHists() {
+
+  TDirectory *sav = gDirectory;
+  TFile *logFile = 0;
+
+  TSeqCollection *col = gROOT->GetListOfFiles();
+  int N = col->GetEntries();
+  for(int i=0; i<N; i++) {
+    logFile = (TFile*)col->At(i);
+    if (strstr(logFile->GetName(), "AliESDs.root")) break;
+  }
+   
+  logFile->cd();
+  fHBackfit->Write(fHBackfit->GetName(), TObject::kOverwrite);
+  fHRefit->Write(fHRefit->GetName(), TObject::kOverwrite);
+  fHClSearch->Write(fHClSearch->GetName(), TObject::kOverwrite);
+  fHX->Write(fHX->GetName(), TObject::kOverwrite);
+  fHNCl->Write(fHNCl->GetName(), TObject::kOverwrite);
+  fHNClTrack->Write(fHNClTrack->GetName(), TObject::kOverwrite);
+
+  fHMinYPos->Write(fHMinYPos->GetName(), TObject::kOverwrite);
+  fHMinYNeg->Write(fHMinYNeg->GetName(), TObject::kOverwrite);
+  fHMinD->Write(fHMinD->GetName(), TObject::kOverwrite);
+  fHMinZ->Write(fHMinZ->GetName(), TObject::kOverwrite);
+  
+  fHDeltaX->Write(fHDeltaX->GetName(), TObject::kOverwrite);
+  fHXCl->Write(fHXCl->GetName(), TObject::kOverwrite);
+
 
+  for(int i=0; i<4; i++)
+    fHFindCl[i]->Write(fHFindCl[i]->GetName(), TObject::kOverwrite);
+
+  logFile->Flush();
+  
+  sav->cd();
 }
+
+//////////////////////////////////////////////////////////////////////////////////////////