]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDtracker.cxx
Moveing AliNeutralTrackParam to STEERBase to avoid dependence of libAOD on libESD
[u/mrichter/AliRoot.git] / TRD / AliTRDtracker.cxx
index e0d182b294748df5326fd2b479568060083050e9..374b35039e1bbe83523d689a859917fec9b2cc66 100644 (file)
@@ -36,7 +36,8 @@
 
 #include "AliESDEvent.h"
 #include "AliESDtrack.h"
-#include "AliAlignObj.h"
+//#include "AliAlignObj.h"
+#include "AliGeomManager.h"
 #include "AliRieman.h"
 #include "AliTrackPointArray.h"
 
@@ -62,8 +63,9 @@ const  Double_t AliTRDtracker::fgkMaxSnp             =  0.95; // Maximum local s
 const  Double_t AliTRDtracker::fgkMaxStep            =  2.0;  // Maximal step size in propagation 
 
 //_____________________________________________________________________________
-AliTRDtracker::AliTRDtracker()
+AliTRDtracker::AliTRDtracker(AliTRDReconstructor *rec)
   :AliTracker()
+  ,fReconstructor(rec)
   ,fGeom(0)
   ,fNclusters(0)
   ,fClusters(0)
@@ -74,18 +76,18 @@ AliTRDtracker::AliTRDtracker()
   ,fTimeBinsPerPlane(0)
   ,fAddTRDseeds(kFALSE)
   ,fNoTilt(kFALSE)
-  ,fHBackfit(0x0)
-  ,fHClSearch(0x0)
-  ,fHRefit(0x0)
-  ,fHX(0x0)
-  ,fHNCl(0x0)
-  ,fHNClTrack(0x0)
-  ,fHMinYPos(0x0)
-  ,fHMinYNeg(0x0)
-  ,fHMinZ(0x0)
-  ,fHMinD(0x0)
-  ,fHDeltaX(0x0)
-  ,fHXCl(0x0)
+  ,fHBackfit(NULL)
+  ,fHClSearch(NULL)
+  ,fHRefit(NULL)
+  ,fHX(NULL)
+  ,fHNCl(NULL)
+  ,fHNClTrack(NULL)
+  ,fHMinYPos(NULL)
+  ,fHMinYNeg(NULL)
+  ,fHMinZ(NULL)
+  ,fHMinD(NULL)
+  ,fHDeltaX(NULL)
+  ,fHXCl(NULL)
   ,fDebugStreamer(0)
 {
   //
@@ -103,6 +105,7 @@ AliTRDtracker::AliTRDtracker()
 //_____________________________________________________________________________
 AliTRDtracker::AliTRDtracker(const AliTRDtracker &t)
   :AliTracker(t)
+  ,fReconstructor(t.fReconstructor)
   ,fGeom(0)
   ,fNclusters(0)
   ,fClusters(0)
@@ -113,18 +116,18 @@ AliTRDtracker::AliTRDtracker(const AliTRDtracker &t)
   ,fTimeBinsPerPlane(0)
   ,fAddTRDseeds(kFALSE)
   ,fNoTilt(kFALSE)
-  ,fHBackfit(0x0)
-  ,fHClSearch(0x0)
-  ,fHRefit(0x0)
-  ,fHX(0x0)
-  ,fHNCl(0x0)
-  ,fHNClTrack(0x0)
-  ,fHMinYPos(0x0)
-  ,fHMinYNeg(0x0)
-  ,fHMinZ(0x0)
-  ,fHMinD(0x0)
-  ,fHDeltaX(0x0)
-  ,fHXCl(0x0)
+  ,fHBackfit(NULL)
+  ,fHClSearch(NULL)
+  ,fHRefit(NULL)
+  ,fHX(NULL)
+  ,fHNCl(NULL)
+  ,fHNClTrack(NULL)
+  ,fHMinYPos(NULL)
+  ,fHMinYNeg(NULL)
+  ,fHMinZ(NULL)
+  ,fHMinD(NULL)
+  ,fHDeltaX(NULL)
+  ,fHXCl(NULL)
   ,fDebugStreamer(0)
 {
   //
@@ -134,8 +137,9 @@ AliTRDtracker::AliTRDtracker(const AliTRDtracker &t)
 }
 
 //_____________________________________________________________________________
-AliTRDtracker::AliTRDtracker(const TFile */*geomfile*/)
+AliTRDtracker::AliTRDtracker(const TFile */*geomfile*/, AliTRDReconstructor *rec)
   :AliTracker()
+  ,fReconstructor(rec)
   ,fGeom(0)
   ,fNclusters(0)
   ,fClusters(new TObjArray(2000))
@@ -146,18 +150,18 @@ AliTRDtracker::AliTRDtracker(const TFile */*geomfile*/)
   ,fTimeBinsPerPlane(0)
   ,fAddTRDseeds(kFALSE)
   ,fNoTilt(kFALSE)
-  ,fHBackfit(0x0)
-  ,fHClSearch(0x0)
-  ,fHRefit(0x0)
-  ,fHX(0x0)
-  ,fHNCl(0x0)
-  ,fHNClTrack(0x0)
-  ,fHMinYPos(0x0)
-  ,fHMinYNeg(0x0)
-  ,fHMinZ(0x0)
-  ,fHMinD(0x0)
-  ,fHDeltaX(0x0)
-  ,fHXCl(0x0)
+  ,fHBackfit(NULL)
+  ,fHClSearch(NULL)
+  ,fHRefit(NULL)
+  ,fHX(NULL)
+  ,fHNCl(NULL)
+  ,fHNClTrack(NULL)
+  ,fHMinYPos(NULL)
+  ,fHMinYNeg(NULL)
+  ,fHMinZ(NULL)
+  ,fHMinD(NULL)
+  ,fHDeltaX(NULL)
+  ,fHXCl(NULL)
   ,fDebugStreamer(0)
 {
   // 
@@ -182,7 +186,7 @@ AliTRDtracker::AliTRDtracker(const TFile */*geomfile*/)
   if (!AliTRDcalibDB::Instance()) {
     AliFatal("Could not get calibration object");
   }
-  fTimeBinsPerPlane = AliTRDcalibDB::Instance()->GetNumberOfTimeBins();
+  fTimeBinsPerPlane = AliTRDcalibDB::Instance()->GetNumberOfTimeBinsDCS();
 
   fDebugStreamer    = new TTreeSRedirector("TRDdebug.root");
 
@@ -235,12 +239,12 @@ Int_t  AliTRDtracker::LocalToGlobalID(Int_t lid)
   // Transform internal TRD ID to global detector ID
   //
 
-  Int_t  isector  = fGeom->GetSector(lid);
-  Int_t  ichamber = fGeom->GetChamber(lid);
-  Int_t  iplan    = fGeom->GetPlane(lid);
+  Int_t  isector = fGeom->GetSector(lid);
+  Int_t  istack  = fGeom->GetStack(lid);
+  Int_t  ilayer  = fGeom->GetLayer(lid);
 
   AliGeomManager::ELayerID iLayer = AliGeomManager::kTRD1;
-  switch (iplan) {
+  switch (ilayer) {
   case 0:
     iLayer = AliGeomManager::kTRD1;
     break;
@@ -261,7 +265,7 @@ Int_t  AliTRDtracker::LocalToGlobalID(Int_t lid)
     break;
   };
 
-  Int_t    modId = isector * fGeom->Ncham() + ichamber;
+  Int_t    modId = isector * fGeom->Nstack() + istack;
   UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,modId);
 
   return volid;
@@ -278,9 +282,9 @@ Int_t  AliTRDtracker::GlobalToLocalID(Int_t gid)
   Int_t modId    = 0;
   AliGeomManager::ELayerID layerId = AliGeomManager::VolUIDToLayer(gid,modId);
 
-  Int_t isector  = modId / fGeom->Ncham();
-  Int_t ichamber = modId % fGeom->Ncham();
-  Int_t iLayer   = -1;
+  Int_t isector = modId / fGeom->Nstack();
+  Int_t istack  = modId % fGeom->Nstack();
+  Int_t iLayer  = -1;
 
   switch (layerId) {
   case AliGeomManager::kTRD1:
@@ -309,14 +313,14 @@ Int_t  AliTRDtracker::GlobalToLocalID(Int_t gid)
     return -1;
   }
 
-  Int_t lid = fGeom->GetDetector(iLayer,ichamber,isector);
+  Int_t lid = fGeom->GetDetector(iLayer,istack,isector);
 
   return lid;
 
 }
 
 //_____________________________________________________________________________
-Bool_t AliTRDtracker::AdjustSector(AliTRDtrack *track) 
+Bool_t AliTRDtracker::AdjustSector(AliTRDtrack* const track) const 
 {
   //
   // Rotates the track when necessary
@@ -342,7 +346,7 @@ Bool_t AliTRDtracker::AdjustSector(AliTRDtrack *track)
 }
 
 //_____________________________________________________________________________
-AliTRDcluster *AliTRDtracker::GetCluster(AliTRDtrack *track, Int_t plane
+AliTRDcluster *AliTRDtracker::GetCluster(AliTRDtrack * const track, Int_t plane
                                        , Int_t timebin, UInt_t &index)
 {
   //
@@ -350,7 +354,7 @@ AliTRDcluster *AliTRDtracker::GetCluster(AliTRDtrack *track, Int_t plane
   //
 
   AliTRDcluster *cl =0;
-  Int_t *indexes = track->GetBackupIndexes();
+  const Int_t *indexes = track->GetBackupIndexes();
 
   for (UInt_t i = 0; i < kMaxTimeBinIndex; i++) {
     if (indexes[i] == 0) {
@@ -363,8 +367,8 @@ AliTRDcluster *AliTRDtracker::GetCluster(AliTRDtrack *track, Int_t plane
     if (cli->GetLocalTimeBin() != timebin) {
       continue;
     }
-    Int_t iplane = fGeom->GetPlane(cli->GetDetector());
-    if (iplane == plane) {
+    Int_t ilayer = fGeom->GetLayer(cli->GetDetector());
+    if (ilayer == plane) {
       cl    = cli;
       index = indexes[i];
       break;
@@ -376,23 +380,23 @@ AliTRDcluster *AliTRDtracker::GetCluster(AliTRDtrack *track, Int_t plane
 }
 
 //_____________________________________________________________________________
-Int_t  AliTRDtracker::GetLastPlane(AliTRDtrack *track)
+Int_t  AliTRDtracker::GetLastPlane(AliTRDtrack * const track)
 {
   //
   // Return last updated plane
   //
 
   Int_t  lastplane = 0;
-  Int_t *indexes   = track->GetBackupIndexes();
+  const Int_t *indexes   = track->GetBackupIndexes();
 
   for (UInt_t i = 0; i < kMaxTimeBinIndex; i++) {
     AliTRDcluster *cli = (AliTRDcluster *) fClusters->UncheckedAt(indexes[i]);
     if (!cli) {
       break;
     }
-    Int_t iplane = fGeom->GetPlane(cli->GetDetector());
-    if (iplane > lastplane) {
-      lastplane = iplane;
+    Int_t ilayer = fGeom->GetLayer(cli->GetDetector());
+    if (ilayer > lastplane) {
+      lastplane = ilayer;
     }
   }
 
@@ -418,7 +422,7 @@ Int_t AliTRDtracker::PropagateBack(AliESDEvent *event)
        Int_t    nSeed   = event->GetNumberOfTracks();
        if(!nSeed){
                // run stand alone tracking
-               if (AliTRDReconstructor::RecoParam()->SeedingOn()) Clusters2Tracks(event);
+               if (fReconstructor->IsSeeding()) Clusters2Tracks(event);
                return 0;
        }
        
@@ -526,7 +530,7 @@ Int_t AliTRDtracker::PropagateBack(AliESDEvent *event)
                // Debug part of tracking
                TTreeSRedirector &cstream = *fDebugStreamer;
                Int_t eventNrInFile = event->GetEventNumberInFile(); // This is most likely NOT the event number you'd like to use. It has nothing to do with the 'real' event number.
-               if (AliTRDReconstructor::RecoParam()->GetStreamLevel() > 0) {
+               if (fReconstructor->GetRecoParam()->GetStreamLevel(AliTRDrecoParam::kTracker) > 0) {
                        if (track->GetBackupTrack()) {
                                cstream << "Tracks"
                                << "EventNrInFile="  << eventNrInFile
@@ -598,9 +602,9 @@ Int_t AliTRDtracker::PropagateBack(AliESDEvent *event)
                                seed->UpdateTrackParams(track,AliESDtrack::kTRDout);
                                fHBackfit->Fill(10);
        
-        seed->SetNumberOfTRDslices(AliTRDtrack::kNslice);
+        seed->SetNumberOfTRDslices(AliTRDCalPID::kNSlicesLQ);
                                for (Int_t i = 0; i < AliTRDtrack::kNplane; i++) {
-                                       for (Int_t j = 0; j < AliTRDtrack::kNslice; j++) {
+                                       for (Int_t j = 0; j < AliTRDCalPID::kNSlicesLQ; j++) {
                                                seed->SetTRDslice(track->GetPIDsignals(i,j),i,j);
                                        }
                                        seed->SetTRDTimBin(track->GetPIDTimBin(i),i);
@@ -622,9 +626,9 @@ Int_t AliTRDtracker::PropagateBack(AliESDEvent *event)
        
                                //seed->SetStatus(AliESDtrack::kTRDStop);
 
-        seed->SetNumberOfTRDslices(AliTRDtrack::kNslice);
+        seed->SetNumberOfTRDslices(AliTRDCalPID::kNSlicesLQ);
                                for (Int_t i = 0; i < AliTRDtrack::kNplane; i++) {
-                                       for (Int_t j = 0; j <AliTRDtrack::kNslice; j++) {
+                                       for (Int_t j = 0; j <AliTRDCalPID::kNSlicesLQ; j++) {
                                                seed->SetTRDslice(track->GetPIDsignals(i,j),i,j);
                                        }
                                        seed->SetTRDTimBin(track->GetPIDTimBin(i),i);
@@ -709,15 +713,15 @@ Int_t AliTRDtracker::RefitInward(AliESDEvent *event)
     seed2.ResetCovariance(50.0); 
 
     AliTRDtrack *pt = new AliTRDtrack(seed2,seed2.GetAlpha());
-    Int_t *indexes2 = seed2.GetIndexes();
+    const Int_t *indexes2 = seed2.GetIndexes();
     for (Int_t l = 0; l < AliTRDtrack::kNplane;++l) {
-      for (Int_t j = 0; j < AliTRDtrack::kNslice;j++) {
+      for (Int_t j = 0; j < AliTRDCalPID::kNSlicesLQ;j++) {
         pt->SetPIDsignals(seed2.GetPIDsignals(l,j),l,j);
       }
       pt->SetPIDTimBin(seed2.GetPIDTimBin(l),l);
     }
 
-    Int_t *indexes3 = pt->GetBackupIndexes();
+    Int_t *indexes3 = const_cast<Int_t *>(pt->GetBackupIndexes());
     for (Int_t l = 0; l < 200;++l) {
       if (indexes2[l] == 0) {
         break;
@@ -733,7 +737,7 @@ Int_t AliTRDtracker::RefitInward(AliESDEvent *event)
     pt->SetPIDMethod(AliTRDtrack::kLQ);
     pt->CookPID(pidQ);
     seed->SetTRDpid(pt->GetPID());
-    seed->SetTRDpidQuality(pidQ);
+    seed->SetTRDntracklets(pidQ<<3);
 
     // update calibration
     if(calibra->GetHisto2d()) calibra->UpdateHistograms(pt);
@@ -745,7 +749,7 @@ Int_t AliTRDtracker::RefitInward(AliESDEvent *event)
       fHRefit->Fill(5);
 
       for (Int_t l = 0; l < AliTRDtrack::kNplane; ++l) {
-        for (Int_t j = 0; j < AliTRDtrack::kNslice; j++) {
+        for (Int_t j = 0; j < AliTRDCalPID::kNSlicesLQ; j++) {
           seed->SetTRDslice(pt->GetPIDsignals(l,j),l,j);
         }
         seed->SetTRDTimBin(pt->GetPIDTimBin(l),l);
@@ -765,7 +769,7 @@ Int_t AliTRDtracker::RefitInward(AliESDEvent *event)
         fHRefit->Fill(6);
 
         for (Int_t l = 0; l < AliTRDtrack::kNplane; ++l) {
-          for (Int_t j = 0; j < AliTRDtrack::kNslice; j++) {
+          for (Int_t j = 0; j < AliTRDCalPID::kNSlicesLQ; j++) {
             seed->SetTRDslice(pt2->GetPIDsignals(l,j),l,j);
           }
           seed->SetTRDTimBin(pt2->GetPIDTimBin(l),l);
@@ -774,7 +778,7 @@ Int_t AliTRDtracker::RefitInward(AliESDEvent *event)
 
       // Add TRD track to ESDfriendTrack - maybe this tracks are
       // not useful for post-processing - TODO make decision
-      if (AliTRDReconstructor::RecoParam()->GetStreamLevel() > 0)  {
+      if (fReconstructor->GetRecoParam()->GetStreamLevel(AliTRDrecoParam::kTracker) > 0)  {
         seed->AddCalibObject(new AliTRDtrack(*pt2/*, kTRUE*/));
       }
       delete pt2;
@@ -782,7 +786,7 @@ Int_t AliTRDtracker::RefitInward(AliESDEvent *event)
     }
 
     // Add TRD track to ESDfriendTrack
-    if (AliTRDReconstructor::RecoParam()->GetStreamLevel() > 0)  {
+    if (fReconstructor->GetRecoParam()->GetStreamLevel(AliTRDrecoParam::kTracker) > 0)  {
       seed->AddCalibObject(new AliTRDtrack(*pt/*, kTRUE*/));
     }
     delete pt;
@@ -892,13 +896,13 @@ Int_t AliTRDtracker::FollowProlongation(AliTRDtrack &t)
          continue;
        }
 
-        Int_t plane = fGeom->GetPlane(cl0->GetDetector());
-       if (plane > lastplane) {
+        Int_t layer = fGeom->GetLayer(cl0->GetDetector());
+       if (layer > lastplane) {
          continue;
        }
 
        Int_t timebin = cl0->GetLocalTimeBin();
-       AliTRDcluster *cl2 = GetCluster(&t,plane,timebin,index);
+       AliTRDcluster *cl2 = GetCluster(&t,layer,timebin,index);
 
        if (cl2) {
          cl = cl2;
@@ -913,7 +917,7 @@ Int_t AliTRDtracker::FollowProlongation(AliTRDtrack &t)
          t.SetSampledEdx(TMath::Abs(cl->GetQ()/dxsample));
          Double_t h01      = GetTiltFactor(cl);
          Int_t    det      = cl->GetDetector();
-         Int_t    pplane    = fGeom->GetPlane(det);
+         Int_t    llayer   = fGeom->GetLayer(det);
 
          if (t.GetX() > 345.0) {
            t.SetNLast(t.GetNLast() + 1);
@@ -928,7 +932,7 @@ Int_t AliTRDtracker::FollowProlongation(AliTRDtrack &t)
 
          maxChi2 = t.GetPredictedChi2(cl,h01);                                 
          if (maxChi2 < 1e+10) {
-           if (!t.UpdateMI(cl,maxChi2,index,h01,pplane)) {
+           if (!t.UpdateMI(cl,maxChi2,index,h01,llayer)) {
              // ????
            } 
             else {
@@ -1094,7 +1098,7 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
                                        t.SetSampledEdx(TMath::Abs(cl->GetQ()/dxsample));
                                                                Double_t h01      = GetTiltFactor(cl);
                                        Int_t    det      = cl->GetDetector();
-                                       Int_t    plane    = fGeom->GetPlane(det);
+                                       Int_t    layer    = fGeom->GetLayer(det);
                                        if (t.GetX() > 345.0) {
                                                t.SetNLast(t.GetNLast() + 1);
                                                t.SetChi2Last(t.GetChi2Last() + maxChi2);
@@ -1104,7 +1108,7 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
                                        maxChi2 = t.GetPredictedChi2(cl,h01);
 
                                        if (maxChi2<1e+10)
-                                               if (!t.UpdateMI(cl,maxChi2,index,h01,plane)) {
+                                               if (!t.UpdateMI(cl,maxChi2,index,h01,layer)) {
                                                        if (!t.Update(cl,maxChi2,index,h01)) {
                                        // ????
                                                        }
@@ -1116,8 +1120,8 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
 //           }
 
                                        // Reset material budget if 2 consecutive gold
-                                       if (plane > 0) {
-                                               if ((t.GetTracklets(plane).GetN() + t.GetTracklets(plane-1).GetN()) > 20) {
+                                       if (layer > 0) {
+                                               if ((t.GetTracklets(layer).GetN() + t.GetTracklets(layer-1).GetN()) > 20) {
                                                        t.SetBudget(2,0.0);
                                                }
                                        }
@@ -1238,25 +1242,25 @@ Int_t AliTRDtracker::LoadClusters(TTree *cTree)
     Int_t detector       = c->GetDetector();
     Int_t localTimeBin   = c->GetLocalTimeBin();
     Int_t sector         = fGeom->GetSector(detector);
-    Int_t plane          = fGeom->GetPlane(detector);
+    Int_t layer          = fGeom->GetLayer(detector);
     Int_t trackingSector = sector;
 
     //if (c->GetQ() > 10) {
-    //  Int_t chamber = fGeom->GetChamber(detector);
+    //  Int_t stack = fGeom->GetStack(detector);
     //}
 
-    Int_t gtb   = fTrSec[trackingSector]->CookTimeBinIndex(plane,localTimeBin);
+    Int_t gtb   = fTrSec[trackingSector]->CookTimeBinIndex(layer,localTimeBin);
     if (gtb < 0) {
       continue; 
     }
-    Int_t layer = fTrSec[trackingSector]->GetLayerNumber(gtb);
+    Int_t trLayer = fTrSec[trackingSector]->GetLayerNumber(gtb);
 
     index = ncl;
 
     fHXCl->Fill(c->GetX());
 
-    fTrSec[trackingSector]->GetLayer(layer)->SetX(c->GetX());
-    fTrSec[trackingSector]->GetLayer(layer)->InsertCluster(c,index);
+    fTrSec[trackingSector]->GetLayer(trLayer)->SetX(c->GetX());
+    fTrSec[trackingSector]->GetLayer(trLayer)->InsertCluster(c,index);
 
   }
 
@@ -1290,7 +1294,7 @@ void AliTRDtracker::UnloadClusters()
     delete fTracks->RemoveAt(i);
   }
 
-  Int_t nsec = AliTRDgeometry::kNsect;
+  Int_t nsec = AliTRDgeometry::kNsector;
   for (i = 0; i < nsec; i++) {    
     for(Int_t pl = 0; pl < fTrSec[i]->GetNumberOfLayers(); pl++) {
       fTrSec[i]->GetLayer(pl)->Clear();
@@ -1319,7 +1323,7 @@ Int_t AliTRDtracker::Clusters2Tracks(AliESDEvent *esd)
   const Double_t kRoad2z   = 20.0; // Road in z for extrapolated cluster
   const Int_t    kMaxSeed  = 3000;
 
-  Int_t maxSec = AliTRDgeometry::kNsect;  
+  Int_t maxSec = AliTRDgeometry::kNsector;  
 
   // Linear fitters in planes
   TLinearFitter fitterTC(2,"hyp2");  // Fitting with tilting pads - kz fixed - kz= Z/x, + vertex const
@@ -1338,17 +1342,17 @@ Int_t AliTRDtracker::Clusters2Tracks(AliESDEvent *esd)
   }
   for (Int_t ns = 0; ns < maxSec; ns++) {
     for (Int_t ilayer = 0; ilayer < fTrSec[ns]->GetNumberOfLayers(); ilayer++) {
-      AliTRDpropagationLayer &layer = *(fTrSec[ns]->GetLayer(ilayer));
-      if (layer == 0) {
+      AliTRDpropagationLayer &propLayer = *(fTrSec[ns]->GetLayer(ilayer));
+      if (propLayer == 0) {
         continue;
       }
-      Int_t det   = layer[0]->GetDetector();    
-      Int_t plane = fGeom->GetPlane(det);
-      if (ilayer < layers[plane][0]) {
-        layers[plane][0] = ilayer;
+      Int_t det   = propLayer[0]->GetDetector();    
+      Int_t layer = fGeom->GetLayer(det);
+      if (ilayer < layers[layer][0]) {
+        layers[layer][0] = ilayer;
       }
-      if (ilayer > layers[plane][1]) {
-        layers[plane][1] = ilayer;
+      if (ilayer > layers[layer][1]) {
+        layers[layer][1] = ilayer;
       }
     }
   }
@@ -1560,7 +1564,7 @@ Int_t AliTRDtracker::Clusters2Tracks(AliESDEvent *esd)
               isFake = kTRUE;
            }
 
-           if (AliTRDReconstructor::RecoParam()->GetStreamLevel() > 0) {
+           if (fReconstructor->GetRecoParam()->GetStreamLevel(AliTRDrecoParam::kTracker) > 0) {
              if ((!isFake) || ((icl3%10) == 0)) {  // Debugging print
                TTreeSRedirector &cstream = *fDebugStreamer;
                cstream << "Seeds0"
@@ -2198,7 +2202,7 @@ Int_t AliTRDtracker::Clusters2Tracks(AliESDEvent *esd)
            if (1 || (!isFake)) {
              Float_t zvertex = GetZ();
              TTreeSRedirector &cstream = *fDebugStreamer;
-             if (AliTRDReconstructor::RecoParam()->GetStreamLevel() > 0) {
+             if (fReconstructor->GetRecoParam()->GetStreamLevel(AliTRDrecoParam::kTracker) > 0) {
                cstream << "Seeds1"
                        << "isFake="     << isFake
                        << "Vertex="     << zvertex
@@ -2419,7 +2423,7 @@ Int_t AliTRDtracker::Clusters2Tracks(AliESDEvent *esd)
          esdtrack.UpdateTrackParams(track,AliESDtrack::kTRDout);
          esdtrack.SetLabel(label);
          esd->AddTrack(&esdtrack);     
-         if (AliTRDReconstructor::RecoParam()->GetStreamLevel() > 0) {
+         if (fReconstructor->GetRecoParam()->GetStreamLevel(AliTRDrecoParam::kTracker) > 0) {
            cstream << "Tracks"
                    << "EventNrInFile="  << eventNrInFile
                    << "ESD.="     << &esdtrack
@@ -2429,7 +2433,7 @@ Int_t AliTRDtracker::Clusters2Tracks(AliESDEvent *esd)
          }
        }
 
-       if (AliTRDReconstructor::RecoParam()->GetStreamLevel() > 0) {
+       if (fReconstructor->GetRecoParam()->GetStreamLevel(AliTRDrecoParam::kTracker) > 0) {
          cstream << "Seeds2"
                  << "Iter="      << jter
                  << "Track.="    << track
@@ -2488,7 +2492,7 @@ Int_t AliTRDtracker::ReadClusters(TObjArray *array, TTree *clusterTree) const
   // Loop through all entries in the tree
   Int_t nEntries   = (Int_t) clusterTree->GetEntries();
   Int_t nbytes     = 0;
-  AliTRDcluster *c = 0x0;
+  AliTRDcluster *c = NULL;
   for (Int_t iEntry = 0; iEntry < nEntries; iEntry++) {    
     
     // Import the tree
@@ -2520,40 +2524,40 @@ Bool_t AliTRDtracker::GetTrackPoint(Int_t index, AliTrackPoint &p) const
   //
 
   AliTRDcluster *cl = (AliTRDcluster *) fClusters->UncheckedAt(index);
-  Int_t  idet     = cl->GetDetector();
-  Int_t  isector  = fGeom->GetSector(idet);
-  Int_t  ichamber = fGeom->GetChamber(idet);
-  Int_t  iplan    = fGeom->GetPlane(idet);
+  Int_t  idet    = cl->GetDetector();
+  Int_t  isector = fGeom->GetSector(idet);
+  Int_t  istack  = fGeom->GetStack(idet);
+  Int_t  ilayer  = fGeom->GetLayer(idet);
   Double_t local[3];
-  local[0] = GetX(isector,iplan,cl->GetLocalTimeBin());
+  local[0] = GetX(isector,ilayer,cl->GetLocalTimeBin());
   local[1] = cl->GetY();
   local[2] = cl->GetZ();
   Double_t global[3];
   fGeom->RotateBack(idet,local,global);
   p.SetXYZ(global[0],global[1],global[2]);
-  AliGeomManager::ELayerID iLayer = AliGeomManager::kTRD1;
-  switch (iplan) {
+  AliGeomManager::ELayerID iGeoLayer = AliGeomManager::kTRD1;
+  switch (ilayer) {
   case 0:
-    iLayer = AliGeomManager::kTRD1;
+    iGeoLayer = AliGeomManager::kTRD1;
     break;
   case 1:
-    iLayer = AliGeomManager::kTRD2;
+    iGeoLayer = AliGeomManager::kTRD2;
     break;
   case 2:
-    iLayer = AliGeomManager::kTRD3;
+    iGeoLayer = AliGeomManager::kTRD3;
     break;
   case 3:
-    iLayer = AliGeomManager::kTRD4;
+    iGeoLayer = AliGeomManager::kTRD4;
     break;
   case 4:
-    iLayer = AliGeomManager::kTRD5;
+    iGeoLayer = AliGeomManager::kTRD5;
     break;
   case 5:
-    iLayer = AliGeomManager::kTRD6;
+    iGeoLayer = AliGeomManager::kTRD6;
     break;
   };
-  Int_t    modId = isector * fGeom->Ncham() + ichamber;
-  UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,modId);
+  Int_t    modId = isector * fGeom->Nstack() + istack;
+  UShort_t volid = AliGeomManager::LayerToVolUID(iGeoLayer,modId);
   p.SetVolumeID(volid);
 
   return kTRUE;
@@ -2659,11 +2663,11 @@ void AliTRDtracker::UseClusters(const AliKalmanTrack *t, Int_t from) const
   for (Int_t i = from; i < ncl; i++) {
     Int_t index  = t->GetClusterIndex(i);
     AliTRDcluster *c = (AliTRDcluster *) fClusters->UncheckedAt(index);
-    Int_t iplane = fGeom->GetPlane(c->GetDetector());
-    if (track->GetTracklets(iplane).GetChi2() > kmaxchi2) {
+    Int_t ilayer = fGeom->GetLayer(c->GetDetector());
+    if (track->GetTracklets(ilayer).GetChi2() > kmaxchi2) {
       continue; 
     }
-    if (track->GetTracklets(iplane).GetN()    <   kmincl) {
+    if (track->GetTracklets(ilayer).GetN()    <   kmincl) {
       continue; 
     }
     if (!(c->IsUsed())) {
@@ -2728,9 +2732,9 @@ AliTRDtracker::AliTRDtrackingSector
   AliTRDpropagationLayer *ppl = 0;
 
   // Get holes description from geometry
-  Bool_t holes[AliTRDgeometry::kNcham];
-  for (Int_t icham = 0; icham < AliTRDgeometry::kNcham; icham++) {
-    holes[icham] = fGeom->IsHole(0,icham,gs);
+  Bool_t holes[AliTRDgeometry::kNstack];
+  for (Int_t istack = 0; istack < AliTRDgeometry::kNstack; istack++) {
+    holes[istack] = fGeom->IsHole(0,istack,gs);
   } 
   
   for (UInt_t i = 0; i < kMaxTimeBinIndex; i++) {
@@ -2746,27 +2750,27 @@ AliTRDtracker::AliTRDtrackingSector
   Double_t dxAmp   = (Double_t) fGeom->CamHght(); // Amplification region
   //Double_t dxDrift = (Double_t) fGeom->CdrHght(); // Drift region  
 
-  const Int_t kNchambers  = AliTRDgeometry::Ncham();
+  const Int_t kNstacks  = AliTRDgeometry::Nstack();
   Int_t    tbIndex;
   Double_t ymax           = 0;
   Double_t ymaxsensitive  = 0;
-  Double_t *zc            = new Double_t[kNchambers];
-  Double_t *zmax          = new Double_t[kNchambers];
-  Double_t *zmaxsensitive = new Double_t[kNchambers];  
+  Double_t *zc            = new Double_t[kNstacks];
+  Double_t *zmax          = new Double_t[kNstacks];
+  Double_t *zmaxsensitive = new Double_t[kNstacks];  
     
-  for (Int_t plane = 0; plane < AliTRDgeometry::Nplan(); plane++) {
+  for (Int_t layer = 0; layer < AliTRDgeometry::Nlayer(); layer++) {
 
-    ymax          = fGeom->GetChamberWidth(plane) / 2.0;
-    padPlane      = fGeom->GetPadPlane(plane,0);
+    ymax          = fGeom->GetChamberWidth(layer) / 2.0;
+    padPlane      = fGeom->GetPadPlane(layer,0);
     ymaxsensitive = (padPlane->GetColSize(1) * padPlane->GetNcols() - 4.0) / 2.0;    
 
-    for (Int_t ch = 0; ch < kNchambers; ch++) {
-      zmax[ch]          = fGeom->GetChamberLength(plane,ch) / 2.0;
+    for (Int_t st = 0; st < kNstacks; st++) {
+      zmax[st]          = fGeom->GetChamberLength(layer,st) / 2.0;
       Float_t pad       = padPlane->GetRowSize(1);
-      Float_t row0      = fGeom->GetRow0(plane,ch,0);
-      Int_t   nPads     = fGeom->GetRowMax(plane,ch,0);
-      zmaxsensitive[ch] = Float_t(nPads) * pad / 2.0;      
-      zc[ch]            = -(pad * nPads) / 2.0 + row0;
+      Float_t row0      = fGeom->GetRow0(layer,st,0);
+      Int_t   nPads     = fGeom->GetRowMax(layer,st,0);
+      zmaxsensitive[st] = Float_t(nPads) * pad / 2.0;      
+      zc[st]            = -(pad * nPads) / 2.0 + row0;
     }
 
                AliTRDcalibDB *fCalibration = AliTRDcalibDB::Instance();
@@ -2775,26 +2779,26 @@ AliTRDtracker::AliTRDtrackingSector
     rho       = 0.00295 * 0.85; //????
     radLength = 11.0;  
 
-    Double_t x0 = (Double_t) AliTRDgeometry::GetTime0(plane);
+    Double_t x0 = (Double_t) AliTRDgeometry::GetTime0(layer);
     //Double_t xbottom = x0 - dxDrift;
     //Double_t xtop    = x0 + dxAmp;
                
                //temporary !! (A.Bercuci)
-       Int_t T0 = (Int_t)fCalibration->GetT0Average(AliTRDgeometry::GetDetector(plane, 2, gs));
+    Int_t t0 = (Int_t)fCalibration->GetT0Average(AliTRDgeometry::GetDetector(layer, 2, gs));
 
-    Int_t nTimeBins =  AliTRDcalibDB::Instance()->GetNumberOfTimeBins();    
+    Int_t nTimeBins =  AliTRDcalibDB::Instance()->GetNumberOfTimeBinsDCS();    
     for (Int_t iTime = 0; iTime < nTimeBins; iTime++) {
 
       Double_t xlayer = iTime * dx - dxAmp;
       //if (xlayer<0) xlayer = dxAmp / 2.0;
       x = x0 - xlayer;
 
-      tbIndex = CookTimeBinIndex(plane,iTime);
-      ppl     = new AliTRDpropagationLayer(x,dx,rho,radLength,tbIndex,plane);
+      tbIndex = CookTimeBinIndex(layer,iTime);
+      ppl     = new AliTRDpropagationLayer(x,dx,rho,radLength,tbIndex,layer);
       ppl->SetYmax(ymax,ymaxsensitive);
       ppl->SetZ(zc,zmax,zmaxsensitive);
       ppl->SetHoles(holes);
-      if(iTime == T0) ppl->SetT0();
+      if(iTime == t0) ppl->SetT0();
                        
                        InsertLayer(ppl);      
 
@@ -2847,7 +2851,7 @@ Int_t  AliTRDtracker::AliTRDtrackingSector
   // timebin <localTB> in plane <plane>
   //
 
-  Int_t tbPerPlane = AliTRDcalibDB::Instance()->GetNumberOfTimeBins();
+  Int_t tbPerPlane = AliTRDcalibDB::Instance()->GetNumberOfTimeBinsDCS();
   Int_t gtb        = (plane+1) * tbPerPlane - localTB - 1;
   if (localTB < 0) {
     return -1;
@@ -3042,8 +3046,8 @@ Double_t AliTRDtracker::GetTiltFactor(const AliTRDcluster *c)
   //
 
   Int_t    det   = c->GetDetector();    
-  Int_t    plane = fGeom->GetPlane(det);
-  AliTRDpadPlane *padPlane = fGeom->GetPadPlane(plane,0);
+  Int_t    layer = fGeom->GetLayer(det);
+  AliTRDpadPlane *padPlane = fGeom->GetPadPlane(layer,0);
   Double_t h01   = TMath::Tan(-TMath::Pi() / 180.0 * padPlane->GetTiltingAngle());
 
   if (fNoTilt) {
@@ -3110,13 +3114,13 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
   Int_t    nall      = 0;
   Int_t    nfound    = 0;
   Double_t h01       = 0.0;
-  Int_t    plane     = -1;
+  Int_t    layer     = -1;
   Int_t    detector  = -1;
   Float_t  padlength = 0.0;
 
   AliTRDtrack track2(* track);
   Float_t  snpy      = track->GetSnp();
-  Float_t  tany      = TMath::Sqrt(snpy*snpy / (1.0 - snpy*snpy)); 
+  Float_t  tany      = TMath::Sqrt(snpy*snpy / ((1.-snpy)*(1.+snpy))); 
   if (snpy < 0.0) {
     tany *= -1.0;
   }
@@ -3158,9 +3162,9 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
 
       AliTRDcluster *c = (AliTRDcluster *) (timeBin[i]);
       h01 = GetTiltFactor(c);
-      if (plane < 0) {
+      if (layer < 0) {
        Int_t det = c->GetDetector();
-       plane     = fGeom->GetPlane(det);
+       layer     = fGeom->GetLayer(det);
        padlength = TMath::Sqrt(c->GetSigmaZ2() * 12.0);
       }
 
@@ -3535,8 +3539,7 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
   Short_t  maxpos5    = -1;
   Float_t  maxcharge5 =  0.0;
 
-  Double_t exB         = AliTRDcalibDB::Instance()->GetOmegaTau(AliTRDcalibDB::Instance()->GetVdrift(0,0,0)
-                                                               ,-AliTracker::GetBz()*0.1);
+  Double_t exB         = AliTRDCommonParam::Instance()->GetOmegaTau(AliTRDcalibDB::Instance()->GetVdrift(0,0,0));
   Double_t expectederr = sigma2*sigma2 + 0.01*0.01;
   if (mpads > 3.5) {
     expectederr += (mpads - 3.5) * 0.04;
@@ -3553,7 +3556,7 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
     }
 
     // Set cluster error
-    cl[best[bestiter][it]][it]->SetSigmaY2(expectederr); 
+    ((AliCluster*)cl[best[bestiter][it]][it])->SetSigmaY2(expectederr); 
     if (!cl[best[bestiter][it]][it]->IsUsed()) {
       cl[best[bestiter][it]][it]->SetY(cl[best[bestiter][it]][it]->GetY()); 
     }
@@ -3621,11 +3624,11 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
   tracklet.SetP1(angle[bestiter]);
   tracklet.SetN(nfound);
   tracklet.SetNCross(changes[bestiter]);
-  tracklet.SetPlane(plane);
+  tracklet.SetPlane(layer);
   tracklet.SetSigma2(expectederr);
   tracklet.SetChi2(tchi2s[bestiter]);
   tracklet.SetMaxPos(maxpos,maxpos4,maxpos5);
-  track->SetTracklets(plane,tracklet);
+  track->SetTracklets(layer,tracklet);
   track->SetNWrong(track->GetNWrong() + nbad[0]);
 
   //
@@ -3662,7 +3665,7 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
   TGraph graphy(t1-t0,x,yt);
   TGraph graphz(t1-t0,x,zt);
 
-  if (AliTRDReconstructor::RecoParam()->GetStreamLevel() > 0) {
+  if (fReconstructor->GetRecoParam()->GetStreamLevel(AliTRDrecoParam::kTracker) > 0) {
     cstream << "tracklet"
            << "track.="      << track              // Track parameters
            << "tany="        << tany               // Tangent of the local track angle 
@@ -3672,7 +3675,7 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
            << "nfound="      << nfound             // Number of found clusters
            << "clfound="     << clfound            // Total number of found clusters in road 
            << "mpads="       << mpads              // Mean number of pads per cluster
-           << "plane="       << plane              // Plane number 
+           << "layer="       << layer              // Layer number 
            << "detector="    << detector           // Detector number
            << "road="        << road               // The width of the used road
            << "graph0.="     << &graph0            // x - y = dy for closest cluster
@@ -3779,7 +3782,7 @@ Int_t AliTRDtracker::Freq(Int_t n, const Int_t *inlist
 }
 
 //_____________________________________________________________________________
-AliTRDtrack *AliTRDtracker::RegisterSeed(AliTRDseed *seeds, Double_t *params)
+AliTRDtrack *AliTRDtracker::RegisterSeed(AliTRDseed * const seeds, Double_t *params)
 {
   //
   // Build a TRD track out of tracklet candidates
@@ -3797,7 +3800,7 @@ AliTRDtrack *AliTRDtracker::RegisterSeed(AliTRDseed *seeds, Double_t *params)
   //
 
        AliTRDcalibDB *cal = AliTRDcalibDB::Instance();
-       Int_t nTimeBins = cal->GetNumberOfTimeBins();
+       Int_t nTimeBins = cal->GetNumberOfTimeBinsDCS();
        
 
   Double_t alpha = AliTRDgeometry::GetAlpha();