]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/TenderSupplies/AliTRDTenderSupply.cxx
Fix bug introduced with commit c04400125176f83a8af92dff26905b7832a3065d on June 11th...
[u/mrichter/AliRoot.git] / ANALYSIS / TenderSupplies / AliTRDTenderSupply.cxx
index a6e8f93cdfd3dbac0c3e834898413f2b876f6060..dff80e8c74f9b82a931d4922a5b6b90a717f883e 100644 (file)
@@ -34,6 +34,7 @@
 #include <AliCDBManager.h>
 #include <AliOADBContainer.h>
 #include <AliTRDCalDet.h>
+#include "AliTRDonlineTrackMatching.h"
 
 #include <AliLog.h>
 #include <TTree.h>
@@ -49,7 +50,7 @@
 #include <AliTrackerBase.h>
 #include <AliTRDPIDReference.h>
 #include <AliTRDPIDResponse.h>
-#include "AliTRDCalChamberStatus.h"
+#include <AliTRDCalChamberStatus.h>
 #include <AliTender.h>
 
 #include "AliTRDTenderSupply.h"
@@ -61,28 +62,32 @@ AliTRDTenderSupply::AliTRDTenderSupply() :
   AliTenderSupply(),
   fESD(NULL),
   fESDpid(NULL),
+  fTrdOnlineTrackMatcher(NULL),
   fChamberGainOld(NULL),
   fChamberGainNew(NULL),
   fChamberVdriftOld(NULL),
   fChamberVdriftNew(NULL),
   fRunByRunCorrection(NULL),
-  fPIDmethod(kNNpid),
+  fPIDmethod(k1DLQpid),
   fNormalizationFactor(1.),
   fPthreshold(0.8),
   fNBadChambers(0),
   fGeoFile(NULL),
   fGainCorrection(kTRUE),
-  fLoadReferences(kFALSE),
-  fLoadReferencesFromCDB(kFALSE),
+//  fLoadReferences(kFALSE),
+//  fLoadReferencesFromCDB(kFALSE),
   fLoadDeadChambers(kFALSE),
   fHasReferences(kFALSE),
   fHasNewCalibration(kTRUE),
   fDebugMode(kFALSE),
-  fNameRunByRunCorrection()
+  fRedoTrdMatching(kTRUE),
+  fNameRunByRunCorrection(),
+  fNormalizationFactorArray(NULL)
 {
   //
   // default ctor
   //
+  memset(fBadChamberID, 0, sizeof(Int_t) * kNChambers);
   memset(fSlicesForPID, 0, sizeof(UInt_t) * 2);
 }
 
@@ -91,24 +96,27 @@ AliTRDTenderSupply::AliTRDTenderSupply(const char *name, const AliTender *tender
   AliTenderSupply(name,tender),
   fESD(NULL),
   fESDpid(NULL),
+  fTrdOnlineTrackMatcher(NULL),
   fChamberGainOld(NULL),
   fChamberGainNew(NULL),
   fChamberVdriftOld(NULL),
   fChamberVdriftNew(NULL),
   fRunByRunCorrection(NULL),
-  fPIDmethod(kNNpid),
+  fPIDmethod(k1DLQpid),
   fNormalizationFactor(1.),
   fPthreshold(0.8),
   fNBadChambers(0),
   fGeoFile(NULL),
   fGainCorrection(kTRUE),
-  fLoadReferences(kFALSE),
-  fLoadReferencesFromCDB(kFALSE),
+//  fLoadReferences(kFALSE),
+//  fLoadReferencesFromCDB(kFALSE),
   fLoadDeadChambers(kFALSE),
   fHasReferences(kFALSE),
   fHasNewCalibration(kTRUE),
   fDebugMode(kFALSE),
-  fNameRunByRunCorrection()
+  fRedoTrdMatching(kTRUE),
+  fNameRunByRunCorrection(),
+  fNormalizationFactorArray(NULL)
 {
   //
   // named ctor
@@ -123,6 +131,8 @@ AliTRDTenderSupply::~AliTRDTenderSupply()
   //
   // dtor
   //
+    if(fNormalizationFactorArray) delete fNormalizationFactorArray;
+    delete fTrdOnlineTrackMatcher;
 }
 
 //_____________________________________________________
@@ -141,12 +151,12 @@ void AliTRDTenderSupply::Init()
     fTender->GetESDhandler()->SetESDpid(fESDpid);
   }
   // Load References
-  if(fLoadReferences && !fLoadReferencesFromCDB) LoadReferences();
+  //if(fLoadReferences && !fLoadReferencesFromCDB) LoadReferences();
   //fESDpid->GetTRDResponse().SetGainNormalisationFactor(fNormalizationFactor);
-  fESDpid->SetTRDslicesForPID(fSlicesForPID[0], fSlicesForPID[1]);
+  //fESDpid->SetTRDslicesForPID(fSlicesForPID[0], fSlicesForPID[1]);
 
   if(fNameRunByRunCorrection.Length()) LoadRunByRunCorrection(fNameRunByRunCorrection.Data());
-
+  fTrdOnlineTrackMatcher=new AliTRDonlineTrackMatching();
   // Set Normalisation Factors
   if(mgr->GetMCtruthEventHandler()){
     // Assume MC
@@ -170,7 +180,7 @@ void AliTRDTenderSupply::ProcessEvent()
   if (fTender->RunChanged()){
     AliDebug(0, Form("AliTPCTenderSupply::ProcessEvent - Run Changed (%d)\n",fTender->GetRun()));
     if (fGainCorrection) SetChamberGain();
-    if(fLoadReferences && !fHasReferences) LoadReferences();
+    //if(fLoadReferences && !fHasReferences) LoadReferences();
     if(fLoadDeadChambers) LoadDeadChambersFromCDB();
     // Load Geometry
     if(AliGeomManager::GetGeometry()){
@@ -185,8 +195,19 @@ void AliTRDTenderSupply::ProcessEvent()
 
   fESD = fTender->GetEvent();
   if (!fESD) return;
+  if(fNormalizationFactorArray) fNormalizationFactor = GetNormalizationFactor(fESD->GetRunNumber());
   Int_t ntracks=fESD->GetNumberOfTracks();
-   
+
+
+
+  if (fRedoTrdMatching) {
+      if (!fTrdOnlineTrackMatcher->ProcessEvent(fESD)) {
+         AliError("TRD online track matching failed!");
+      } 
+  }
+
+
+
   //
   // recalculate PID probabilities
   //
@@ -256,6 +277,7 @@ void AliTRDTenderSupply::LoadDeadChambersFromCDB(){
   }
 }
 
+/*
 //_____________________________________________________
 void AliTRDTenderSupply::LoadReferences(){
   //
@@ -296,6 +318,7 @@ void AliTRDTenderSupply::LoadReferences(){
     fHasReferences = kTRUE;
   }
 }
+*/
 
 //_____________________________________________________
 void AliTRDTenderSupply::SetChamberGain(){
@@ -466,7 +489,11 @@ void AliTRDTenderSupply::ApplyRunByRunCorrection(AliESDtrack *const track) {
   //
 
   TVectorD *corrfactor = dynamic_cast<TVectorD *>(fRunByRunCorrection->GetObject(fTender->GetRun()));
-  if(!corrfactor) AliDebug(2, "Couldn't derive gain correction factor from OADB");
+  if(!corrfactor){ 
+    // No correction available - simply return
+    AliDebug(2, "Couldn't derive gain correction factor from OADB");
+    return;
+  }
   else AliDebug(2, Form("Gain factor from OADB %f", (*corrfactor)[0]));
   Double_t slice = 0;
   for(Int_t ily = 0; ily < kNPlanes; ily++){
@@ -479,6 +506,42 @@ void AliTRDTenderSupply::ApplyRunByRunCorrection(AliESDtrack *const track) {
   }
 }
 
+//_____________________________________________________
+void AliTRDTenderSupply::SetNormalizationFactor(Double_t norm, Int_t runMin, Int_t runMax) {
+  //
+  // Set the normalisation factor for a given run range
+  //
+  if(!fNormalizationFactorArray)
+    fNormalizationFactorArray = new TObjArray;
+  TVectorD *entry = new TVectorD(3);
+  TVectorD &myentry = *entry;
+  myentry(0) = runMin;
+  myentry(1) = runMax;
+  myentry(2) = norm;
+  fNormalizationFactorArray->Add(entry);
+}
+
+//_____________________________________________________
+Double_t AliTRDTenderSupply::GetNormalizationFactor(Int_t runnumber){
+  // 
+  // Load the normalization factor
+  //
+  Double_t norm = 1.;
+  if(fNormalizationFactorArray){
+    TVectorD *entry;
+    Int_t runMin, runMax;
+    TIter entries(fNormalizationFactorArray);
+    while((entry = dynamic_cast<TVectorD *>(entries()))){
+      TVectorD &myentry = *entry;
+      runMin = TMath::Nint(myentry(0));
+      runMax = TMath::Nint(myentry(1));
+      if(runnumber >= runMin && runnumber <= runMax) norm = myentry(2);
+    }
+  }
+  AliDebug(1, Form("Gain normalization factor: %f\n", norm));
+  return norm;
+}
+
 //_____________________________________________________
 void AliTRDTenderSupply::MaskChambers(AliESDtrack *const track, const Int_t * const chamberID){
   //
@@ -520,6 +583,7 @@ Bool_t AliTRDTenderSupply::GetTRDchamberID(AliESDtrack * const track, Int_t *det
   Double_t xLayer[kNPlanes] = {300.2, 312.8, 325.4, 338., 350.6, 363.2};
   Double_t etamin[kNStacks] = {0.536, 0.157, -0.145, -0.527,-0.851};
   Double_t etamax[kNStacks] = {0.851, 0.527, 0.145, -0.157,-0.536};
+  //Double_t zboundary[kNPlanes] = {302., 317., 328., 343., 350., 350.};
   for(Int_t ily = 0; ily < kNPlanes; ily++) detectors[ily] = -1;
 
   const AliExternalTrackParam *trueparam = NULL;
@@ -535,28 +599,37 @@ Bool_t AliTRDTenderSupply::GetTRDchamberID(AliESDtrack * const track, Int_t *det
   Double_t pos[3];
   Int_t nDet = 0;
   for(Int_t ily = 0; ily < kNPlanes; ily++){
-    if(!AliTrackerBase::PropagateTrackToBxByBz(&workparam, xLayer[ily], 0.139, 100)){   // Assuming the pion mass
+    //if(TMath::Abs(workparam.GetZ()) > zboundary[ily]) break;
+    //if(!AliTrackerBase::PropagateTrackToBxByBz(&workparam, xLayer[ily], 0.139, 100)){   // Assuming the pion mass
+    if(!workparam.PropagateTo(xLayer[ily], fESD->GetMagneticField())) {
       AliDebug(2, "Propagation failed");
       break;
     }
     workparam.GetXYZ(pos);
     Double_t trackAlpha = TMath::ATan2(pos[1], pos[0]);
+    if(trackAlpha < 0) trackAlpha = 2 * TMath::Pi() + trackAlpha;
+    Double_t secAlpha = 2 * TMath::Pi() / 18.;
+   
+    Int_t sector = static_cast<Int_t>(trackAlpha/secAlpha);
+/*
     if(fDebugMode){
       // Compare to simple propagation without magnetic field
       AliExternalTrackParam workparam1(*trueparam); // Do calculation on working Copy
       Double_t pos1[3];
-      if(!workparam1.PropagateTo(xLayer[ily], fESD->GetMagneticField())) {
+      //if(!workparam1.PropagateTo(xLayer[ily], fESD->GetMagneticField())) {
+      if(!AliTrackerBase::PropagateTrackToBxByBz(&workparam1, xLayer[ily], 0.139, 100)){   // Assuming the pion mass
         AliDebug(2, "Propagation failed");
         break;
       }
       workparam1.GetXYZ(pos1);
       Double_t trackAlpha1 = TMath::ATan2(pos1[1], pos1[0]);
-      AliDebug(2, Form("Alpha: Old %f, New %f, diff %f", trackAlpha1, trackAlpha, trackAlpha-trackAlpha1));
-    }
-    if(trackAlpha < 0) trackAlpha = 2 * TMath::Pi() + trackAlpha;
-    Double_t secAlpha = 2 * TMath::Pi() / 18.;
+      if(trackAlpha1 < 0) trackAlpha1 = 2 * TMath::Pi() + trackAlpha1;
    
-    Int_t sector = static_cast<Int_t>(trackAlpha/secAlpha);
+      Int_t sector1 = static_cast<Int_t>(trackAlpha1/secAlpha);
+      AliDebug(2, Form("Alpha: Old %f, New %f, diff %f", trackAlpha, trackAlpha1, trackAlpha-trackAlpha1));
+      AliDebug(2, Form("Sector: Old %d, New %d", sector, sector1));
+    }
+*/
     Double_t etaTrack = track->Eta();
     Int_t stack = -1;
     for(Int_t istack = 0; istack < 5; istack++){