]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/TenderSupplies/AliTRDTenderSupply.cxx
Changing to centrality dependent corrections
[u/mrichter/AliRoot.git] / ANALYSIS / TenderSupplies / AliTRDTenderSupply.cxx
index 2bb9a981c58aa0ecd8c860d9a836fe2979126bff..5c8b2743e8129853f819ee1cabab4e19ba3ff89b 100644 (file)
@@ -34,6 +34,7 @@
 #include <AliCDBManager.h>
 #include <AliOADBContainer.h>
 #include <AliTRDCalDet.h>
+#include "AliTRDonlineTrackMatching.h"
 
 #include <AliLog.h>
 #include <TTree.h>
@@ -61,6 +62,7 @@ AliTRDTenderSupply::AliTRDTenderSupply() :
   AliTenderSupply(),
   fESD(NULL),
   fESDpid(NULL),
+  fTrdOnlineTrackMatcher(NULL),
   fChamberGainOld(NULL),
   fChamberGainNew(NULL),
   fChamberVdriftOld(NULL),
@@ -78,11 +80,14 @@ AliTRDTenderSupply::AliTRDTenderSupply() :
   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,6 +96,7 @@ AliTRDTenderSupply::AliTRDTenderSupply(const char *name, const AliTender *tender
   AliTenderSupply(name,tender),
   fESD(NULL),
   fESDpid(NULL),
+  fTrdOnlineTrackMatcher(NULL),
   fChamberGainOld(NULL),
   fChamberGainNew(NULL),
   fChamberVdriftOld(NULL),
@@ -108,7 +114,9 @@ AliTRDTenderSupply::AliTRDTenderSupply(const char *name, const AliTender *tender
   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;
 }
 
 //_____________________________________________________
@@ -146,7 +156,7 @@ void AliTRDTenderSupply::Init()
   //fESDpid->SetTRDslicesForPID(fSlicesForPID[0], fSlicesForPID[1]);
 
   if(fNameRunByRunCorrection.Length()) LoadRunByRunCorrection(fNameRunByRunCorrection.Data());
-
+  fTrdOnlineTrackMatcher=new AliTRDonlineTrackMatching();
   // Set Normalisation Factors
   if(mgr->GetMCtruthEventHandler()){
     // Assume MC
@@ -185,8 +195,19 @@ void AliTRDTenderSupply::ProcessEvent()
 
   fESD = fTender->GetEvent();
   if (!fESD) return;
+  if(fNormalizationFactorArray) fNormalizationFactor = GetNormalizationFactor(fESD->GetRunNumber());\r
   Int_t ntracks=fESD->GetNumberOfTracks();
-   
+
+
+
+  if (fRedoTrdMatching) {
+      if (!fTrdOnlineTrackMatcher->ProcessEvent(fESD)) {
+         AliError("TRD online track matching failed!");
+      } 
+  }
+
+
+
   //
   // recalculate PID probabilities
   //
@@ -468,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\r
+    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++){
@@ -481,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\r
+  //
+  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){
   //