]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDtracker.cxx
New class AliESDEvent, backward compatibility with the old AliESD (Christian)
[u/mrichter/AliRoot.git] / TRD / AliTRDtracker.cxx
index fbe984d783501f435598b4db255880e3e7d5ed67..120b345f0edbe89395f47f1837f6981bff622c6c 100644 (file)
@@ -39,7 +39,7 @@
 #include <TTree.h>  
 #include <TTreeStream.h>
 
-#include "AliESD.h"
+#include "AliESDEvent.h"
 #include "AliAlignObj.h"
 #include "AliRieman.h"
 #include "AliTrackPointArray.h"
 #include "AliTRDCommonParam.h"
 #include "AliTRDtracker.h"
 #include "AliTRDReconstructor.h"
-#include "AliTRDCalibra.h"
+#include "AliTRDCalibraFillHisto.h"
+
 ClassImp(AliTRDtracker)
 
-const  Float_t  AliTRDtracker::fgkMinClustersInTrack =  0.5;  
-const  Float_t  AliTRDtracker::fgkLabelFraction      =  0.8;  // ??
-const  Double_t AliTRDtracker::fgkMaxChi2            = 12.0; 
+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 
 
@@ -141,7 +142,7 @@ AliTRDtracker::AliTRDtracker(const AliTRDtracker &t)
 }
 
 //_____________________________________________________________________________
-AliTRDtracker::AliTRDtracker(const TFile *geomfile)
+AliTRDtracker::AliTRDtracker(const TFile */*geomfile*/)
   :AliTracker()
   ,fHBackfit(0x0)
   ,fHClSearch(0x0)
@@ -172,40 +173,29 @@ AliTRDtracker::AliTRDtracker(const TFile *geomfile)
   //  
    
   TDirectory *savedir = gDirectory; 
-  TFile      *in      = (TFile *) geomfile; 
-  if (!in->IsOpen()) {
-    AliWarning("geometry file is not open!\n");
-    AliWarning("FULL TRD geometry and DEFAULT TRD parameter will be used\n");
-  }
-  else {
-    in->cd();  
-    fGeom = (AliTRDgeometry *) in->Get("TRDgeometry");
-  }
 
-  if (!fGeom) {
-    AliWarning("Cannot find TRD geometry!\n");
-    fGeom = new AliTRDgeometry();
-  } 
+  fGeom = new AliTRDgeometry();
   fGeom->ReadGeoMatrices();
 
-  savedir->cd();  
-
   for (Int_t geomS = 0; geomS < kTrackingSectors; geomS++) {
     Int_t trS   = geomS;
     fTrSec[trS] = new AliTRDtrackingSector(fGeom,geomS);
     for (Int_t icham = 0; icham < AliTRDgeometry::kNcham; icham++) {
+      // Could also go ...
       fHoles[icham][trS] = fGeom->IsHole(0,icham,geomS);
     }
   }
 
-  AliTRDpadPlane *padPlane = AliTRDCommonParam::Instance()->GetPadPlane(0,0);
+  AliTRDpadPlane *padPlane = fGeom->GetPadPlane(0,0);
   Float_t tiltAngle = TMath::Abs(padPlane->GetTiltingAngle());
   if (tiltAngle < 0.1) {
     fNoTilt = kTRUE;
   }
 
-  fTimeBinsPerPlane =  AliTRDcalibDB::Instance()->GetNumberOfTimeBins();
+  if (!AliTRDcalibDB::Instance()) {
+    AliFatal("Could not get calibration object");
+  }
+  fTimeBinsPerPlane = AliTRDcalibDB::Instance()->GetNumberOfTimeBins();
 
   fDebugStreamer    = new TTreeSRedirector("TRDdebug.root");
 
@@ -237,7 +227,9 @@ AliTRDtracker::~AliTRDtracker()
     delete fSeeds;
   }
 
-  delete fGeom;  
+  if (fGeom) {
+    delete fGeom;  
+  }
 
   for (Int_t geomS = 0; geomS < kTrackingSectors; geomS++) {
     delete fTrSec[geomS];
@@ -260,30 +252,30 @@ Int_t  AliTRDtracker::LocalToGlobalID(Int_t lid)
   Int_t  ichamber = fGeom->GetChamber(lid);
   Int_t  iplan    = fGeom->GetPlane(lid);
 
-  AliAlignObj::ELayerID iLayer = AliAlignObj::kTRD1;
+  AliGeomManager::ELayerID iLayer = AliGeomManager::kTRD1;
   switch (iplan) {
   case 0:
-    iLayer = AliAlignObj::kTRD1;
+    iLayer = AliGeomManager::kTRD1;
     break;
   case 1:
-    iLayer = AliAlignObj::kTRD2;
+    iLayer = AliGeomManager::kTRD2;
     break;
   case 2:
-    iLayer = AliAlignObj::kTRD3;
+    iLayer = AliGeomManager::kTRD3;
     break;
   case 3:
-    iLayer = AliAlignObj::kTRD4;
+    iLayer = AliGeomManager::kTRD4;
     break;
   case 4:
-    iLayer = AliAlignObj::kTRD5;
+    iLayer = AliGeomManager::kTRD5;
     break;
   case 5:
-    iLayer = AliAlignObj::kTRD6;
+    iLayer = AliGeomManager::kTRD6;
     break;
   };
 
   Int_t    modId = isector * fGeom->Ncham() + ichamber;
-  UShort_t volid = AliAlignObj::LayerToVolUID(iLayer,modId);
+  UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,modId);
 
   return volid;
 
@@ -297,29 +289,29 @@ Int_t  AliTRDtracker::GlobalToLocalID(Int_t gid)
   // 
 
   Int_t modId    = 0;
-  AliAlignObj::ELayerID layerId = AliAlignObj::VolUIDToLayer(gid,modId);
+  AliGeomManager::ELayerID layerId = AliGeomManager::VolUIDToLayer(gid,modId);
 
   Int_t isector  = modId / fGeom->Ncham();
   Int_t ichamber = modId % fGeom->Ncham();
   Int_t iLayer   = -1;
 
   switch (layerId) {
-  case AliAlignObj::kTRD1:
+  case AliGeomManager::kTRD1:
     iLayer = 0;
     break;
-  case AliAlignObj::kTRD2:
+  case AliGeomManager::kTRD2:
     iLayer = 1;
     break;
-  case AliAlignObj::kTRD3:
+  case AliGeomManager::kTRD3:
     iLayer = 2;
     break;
-  case AliAlignObj::kTRD4:
+  case AliGeomManager::kTRD4:
     iLayer = 3;
     break;
-  case AliAlignObj::kTRD5:
+  case AliGeomManager::kTRD5:
     iLayer = 4;
     break;
-  case AliAlignObj::kTRD6:
+  case AliGeomManager::kTRD6:
     iLayer = 5;
     break;
   default:
@@ -340,12 +332,11 @@ Int_t  AliTRDtracker::GlobalToLocalID(Int_t gid)
 Bool_t  AliTRDtracker::Transform(AliTRDcluster *cluster)
 {
   //
-  // Transform something ... whatever ...
+  // Transform from cluster system to tracking system
   //
 
   // Magic constants for geo manager transformation
   const Double_t kX0shift  = 2.52;
-  const Double_t kX0shift5 = 3.05;
 
   //
   // Apply alignment and calibration to transform cluster
@@ -364,8 +355,7 @@ Bool_t  AliTRDtracker::Transform(AliTRDcluster *cluster)
   Double_t vdrift = AliTRDcalibDB::Instance()->GetVdrift(cluster->GetDetector(),0,0);
   Double_t exB    = AliTRDcalibDB::Instance()->GetOmegaTau(vdrift,-AliTracker::GetBz()*0.1);
 
-  AliTRDCommonParam *commonParam = AliTRDCommonParam::Instance();  
-  AliTRDpadPlane    *padPlane    = commonParam->GetPadPlane(plane,chamber);
+  AliTRDpadPlane    *padPlane    = fGeom->GetPadPlane(plane,chamber);
   Double_t zshiftIdeal = 0.5*(padPlane->GetRow0()+padPlane->GetRowEnd());
   Double_t localPos[3];
   Double_t localPosTracker[3];
@@ -375,9 +365,9 @@ Bool_t  AliTRDtracker::Transform(AliTRDcluster *cluster)
 
   cluster->SetY(cluster->GetY() - driftX*exB);
   Double_t xplane = (Double_t) AliTRDgeometry::GetTime0(plane); 
-  cluster->SetX(xplane- cluster->GetX());
+  cluster->SetX(xplane - cluster->GetX());
 
-  TGeoHMatrix *matrix =  fGeom->GetCorrectionMatrix(cluster->GetDetector());
+  TGeoHMatrix *matrix = fGeom->GetCorrectionMatrix(cluster->GetDetector());
   if (!matrix) {
     // No matrix found - if somebody used geometry with holes
     AliError("Invalid Geometry - Default Geometry used\n");
@@ -399,13 +389,7 @@ Bool_t  AliTRDtracker::Transform(AliTRDcluster *cluster)
                        << "\n";
   }
 
-  if (plane == 5) {
-     cluster->SetX(localPosTracker[0]+kX0shift5);
-  }
-  else {
-    cluster->SetX(localPosTracker[0]+kX0shift);
-  }    
-
+  cluster->SetX(localPosTracker[0]+kX0shift);
   cluster->SetY(localPosTracker[1]);
   cluster->SetZ(localPosTracker[2]);
 
@@ -586,7 +570,7 @@ Int_t  AliTRDtracker::GetLastPlane(AliTRDtrack *track)
 }
 
 //_____________________________________________________________________________
-Int_t AliTRDtracker::Clusters2Tracks(AliESD *event)
+Int_t AliTRDtracker::Clusters2Tracks(AliESDEvent *event)
 {
   //
   // Finds tracks within the TRD. The ESD event is expected to contain seeds 
@@ -645,7 +629,7 @@ Int_t AliTRDtracker::Clusters2Tracks(AliESD *event)
 }     
      
 //_____________________________________________________________________________
-Int_t AliTRDtracker::PropagateBack(AliESD *event) 
+Int_t AliTRDtracker::PropagateBack(AliESDEvent *event) 
 {
   //
   // Gets seeds from ESD event. The seeds are AliTPCtrack's found and
@@ -930,7 +914,7 @@ Int_t AliTRDtracker::PropagateBack(AliESD *event)
 }
 
 //_____________________________________________________________________________
-Int_t AliTRDtracker::RefitInward(AliESD *event)
+Int_t AliTRDtracker::RefitInward(AliESDEvent *event)
 {
   //
   // Refits tracks within the TRD. The ESD event is expected to contain seeds 
@@ -1214,7 +1198,7 @@ Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack &t)
   AliTRDtracklet tracklet;
 
   // Calibration fill 2D
-  AliTRDCalibra *calibra = AliTRDCalibra::Instance();
+  AliTRDCalibraFillHisto *calibra = AliTRDCalibraFillHisto::Instance();
   if (!calibra) {
     AliInfo("Could not get Calibra instance\n");
   }
@@ -1521,7 +1505,7 @@ void AliTRDtracker::UnloadClusters()
 }
 
 //_____________________________________________________________________________
-void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
+void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESDEvent *esd)
 {
   //
   // Creates  seeds using clusters between  position inner plane  and outer plane 
@@ -1574,7 +1558,7 @@ void AliTRDtracker::MakeSeedsMI(Int_t /*inner*/, Int_t /*outer*/, AliESD *esd)
     }
   }
 
-  AliTRDpadPlane *padPlane = AliTRDCommonParam::Instance()->GetPadPlane(0,0);
+  AliTRDpadPlane *padPlane = fGeom->GetPadPlane(0,0);
   Double_t h01 = TMath::Tan(-TMath::Pi() / 180.0 * padPlane->GetTiltingAngle());
   Double_t hL[6];                                                // Tilting angle
   Double_t xcl[6];                                               // X - position of reference cluster
@@ -2754,29 +2738,29 @@ Bool_t AliTRDtracker::GetTrackPoint(Int_t index, AliTrackPoint &p) const
   Double_t global[3];
   fGeom->RotateBack(idet,local,global);
   p.SetXYZ(global[0],global[1],global[2]);
-  AliAlignObj::ELayerID iLayer = AliAlignObj::kTRD1;
+  AliGeomManager::ELayerID iLayer = AliGeomManager::kTRD1;
   switch (iplan) {
   case 0:
-    iLayer = AliAlignObj::kTRD1;
+    iLayer = AliGeomManager::kTRD1;
     break;
   case 1:
-    iLayer = AliAlignObj::kTRD2;
+    iLayer = AliGeomManager::kTRD2;
     break;
   case 2:
-    iLayer = AliAlignObj::kTRD3;
+    iLayer = AliGeomManager::kTRD3;
     break;
   case 3:
-    iLayer = AliAlignObj::kTRD4;
+    iLayer = AliGeomManager::kTRD4;
     break;
   case 4:
-    iLayer = AliAlignObj::kTRD5;
+    iLayer = AliGeomManager::kTRD5;
     break;
   case 5:
-    iLayer = AliAlignObj::kTRD6;
+    iLayer = AliGeomManager::kTRD6;
     break;
   };
   Int_t    modId = isector * fGeom->Ncham() + ichamber;
-  UShort_t volid = AliAlignObj::LayerToVolUID(iLayer,modId);
+  UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,modId);
   p.SetVolumeID(volid);
 
   return kTRUE;
@@ -3038,31 +3022,24 @@ AliTRDtracker::AliTRDtrackingSector
   Double_t *zc            = new Double_t[kNchambers];
   Double_t *zmax          = new Double_t[kNchambers];
   Double_t *zmaxsensitive = new Double_t[kNchambers];  
-
-  AliTRDCommonParam *commonParam = AliTRDCommonParam::Instance();
-  if (!commonParam) {
-    AliErrorGeneral("AliTRDtrackingSector::Ctor"
-                   ,"Could not get common parameters\n");
-    return;
-  }
     
   for (Int_t plane = 0; plane < AliTRDgeometry::Nplan(); plane++) {
 
     ymax          = fGeom->GetChamberWidth(plane) / 2.0;
-    padPlane      = commonParam->GetPadPlane(plane,0);
+    padPlane      = fGeom->GetPadPlane(plane,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;
       Float_t pad       = padPlane->GetRowSize(1);
-      Float_t row0      = commonParam->GetRow0(plane,ch,0);
-      Int_t   nPads     = commonParam->GetRowMax(plane,ch,0);
+      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;
     }
 
     dx        = AliTRDcalibDB::Instance()->GetVdrift(0,0,0)
-              / commonParam->GetSamplingFrequency();
+              / AliTRDCommonParam::Instance()->GetSamplingFrequency();
     rho       = 0.00295 * 0.85; //????
     radLength = 11.0;  
 
@@ -3449,7 +3426,7 @@ Double_t AliTRDtracker::GetTiltFactor(const AliTRDcluster *c)
 
   Int_t    det   = c->GetDetector();    
   Int_t    plane = fGeom->GetPlane(det);
-  AliTRDpadPlane *padPlane = AliTRDCommonParam::Instance()->GetPadPlane(plane,0);
+  AliTRDpadPlane *padPlane = fGeom->GetPadPlane(plane,0);
   Double_t h01   = TMath::Tan(-TMath::Pi() / 180.0 * padPlane->GetTiltingAngle());
 
   if (fNoTilt) {
@@ -3508,7 +3485,8 @@ void AliTRDtracker::CookdEdxTimBin(AliTRDtrack &TRDtrack)
       AliError(Form("Wrong plane %d",iPlane));
       continue;
     }
-    Int_t iSlice    = tb * AliESDtrack::kNSlice / AliTRDtrack::kNtimeBins;
+    Int_t iSlice    = tb * AliESDtrack::kNSlice 
+                         / AliTRDcalibDB::Instance()->GetNumberOfTimeBins();
     if (iSlice >= AliESDtrack::kNSlice) {
       AliError(Form("Wrong slice %d",iSlice));
       continue;