]> 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 c96f59b2eebad7f2738448576ae8a64d945930b4..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");
 
@@ -316,7 +320,7 @@ Int_t  AliTRDtracker::GlobalToLocalID(Int_t gid)
 }
 
 //_____________________________________________________________________________
-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) {
@@ -376,14 +380,14 @@ 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]);
@@ -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;
@@ -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
@@ -2780,9 +2784,9 @@ AliTRDtracker::AliTRDtrackingSector
     //Double_t xtop    = x0 + dxAmp;
                
                //temporary !! (A.Bercuci)
-    Int_t T0 = (Int_t)fCalibration->GetT0Average(AliTRDgeometry::GetDetector(layer, 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;
@@ -2794,7 +2798,7 @@ AliTRDtracker::AliTRDtrackingSector
       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;
@@ -3116,7 +3120,7 @@ Int_t AliTRDtracker::FindClusters(Int_t sector, Int_t t0, Int_t t1
 
   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;
   }
@@ -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()); 
     }
@@ -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 
@@ -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();