]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliCentralitySelectionTask.cxx
Modifications from Jochen Thaeder
[u/mrichter/AliRoot.git] / ANALYSIS / AliCentralitySelectionTask.cxx
index f3f157fb408b47acc859e15094fd21394e165963..3289104c4c186ceb923b5a1ab34a5bb0b89dca7e 100644 (file)
@@ -25,6 +25,7 @@
 #include <TH2F.h>
 #include <TProfile.h>
 #include <TFile.h>
+#include <TObjString.h>
 #include <TString.h>
 #include <TCanvas.h>
 #include <iostream>
@@ -71,11 +72,15 @@ AliAnalysisTaskSE(),
   fFile2(0),
   fCentfilename(0),
   fCentfilename2(0),
+  fFileList(new TList),
+  fFileList2(new TList),
+  fCurrentRun(-1),
   fCentV0M(0),
   fCentFMD(0),
   fCentTRK(0),
   fCentTKL(0),
   fCentCL0(0),
+  fCentCL1(0),
   fCentV0MvsFMD(0),
   fCentTKLvsV0M(0),
   fCentZEMvsZDC(0),
@@ -84,11 +89,16 @@ AliAnalysisTaskSE(),
   fHtempTRK(0),
   fHtempTKL(0),
   fHtempCL0(0),
+  fHtempCL1(0),
   fHtempV0MvsFMD(0),
   fHtempTKLvsV0M(0),
   fHtempZEMvsZDC(0)
 {   
   // Default constructor
+  fFileList->SetOwner();
+  fFileList2->SetOwner();
+
+  AliInfo("Centrality Selection enabled.");
 }   
 
 //________________________________________________________________________
@@ -101,11 +111,15 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
   fFile2(0),
   fCentfilename(0),
   fCentfilename2(0),
+  fFileList(new TList),
+  fFileList2(new TList),
+  fCurrentRun(-1),
   fCentV0M(0),
   fCentFMD(0),
   fCentTRK(0),
   fCentTKL(0),
   fCentCL0(0),
+  fCentCL1(0),
   fCentV0MvsFMD(0),
   fCentTKLvsV0M(0),
   fCentZEMvsZDC(0),
@@ -114,11 +128,16 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
   fHtempTRK(0),
   fHtempTKL(0),
   fHtempCL0(0),
+  fHtempCL1(0),
   fHtempV0MvsFMD(0),
   fHtempTKLvsV0M(0),
   fHtempZEMvsZDC(0)
 {
   // Default constructor
+  fFileList->SetOwner();
+  fFileList2->SetOwner();
+
+  AliInfo("Centrality Selection enabled.");
 }
 
 //________________________________________________________________________
@@ -141,11 +160,15 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelect
   fFile2(ana.fFile2),
   fCentfilename(ana.fCentfilename),
   fCentfilename2(ana.fCentfilename2),
+  fFileList(ana.fFileList),
+  fFileList2(ana.fFileList2),
+  fCurrentRun(ana.fCurrentRun),
   fCentV0M(ana.fCentV0M),
   fCentFMD(ana.fCentFMD),
   fCentTRK(ana.fCentTRK),
   fCentTKL(ana.fCentTKL),
   fCentCL0(ana.fCentCL0),
+  fCentCL1(ana.fCentCL1),
   fCentV0MvsFMD(ana.fCentV0MvsFMD),
   fCentTKLvsV0M(ana.fCentTKLvsV0M),
   fCentZEMvsZDC(ana.fCentZEMvsZDC),
@@ -154,6 +177,7 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelect
   fHtempTRK(ana.fHtempTRK),
   fHtempTKL(ana.fHtempTKL),
   fHtempCL0(ana.fHtempCL0),
+  fHtempCL1(ana.fHtempCL1),
   fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
   fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
   fHtempZEMvsZDC(ana.fHtempZEMvsZDC)
@@ -162,16 +186,34 @@ AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelect
 }
  
 //________________________________________________________________________
- AliCentralitySelectionTask::~AliCentralitySelectionTask()
- {
-   // Destructor
- }  
+AliCentralitySelectionTask::~AliCentralitySelectionTask()
+{
+  // Destructor
+  
+  if (fFileList) {
+    fFileList->Clear();
+    delete fFileList;
+  }
+  fFileList = NULL;
+
+  if (fFileList2) {
+    fFileList2->Clear();
+    delete fFileList2;
+  }
+  fFileList2 = NULL;
+}  
 
 //________________________________________________________________________
 void AliCentralitySelectionTask::UserCreateOutputObjects()
 {  
   // Create the output containers
   if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
+
+  if (fFileList->GetEntries() < 1) {
+    AliError("No Inputfiles Added");
+  }
+
+  AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo);
 }
 
 //________________________________________________________________________
@@ -180,14 +222,14 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
   // Execute analysis for current event:
   if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
   
-  Float_t  zncEnergy;               //  ZNC Energy
-  Float_t  zpcEnergy;               //  ZPC Energy
-  Float_t  znaEnergy;               //  ZNA Energy
-  Float_t  zpaEnergy;               //  ZPA Energy
+  Float_t  zncEnergy;          //  ZNC Energy
+  Float_t  zpcEnergy;          //  ZPC Energy
+  Float_t  znaEnergy;          //  ZNA Energy
+  Float_t  zpaEnergy;          //  ZPA Energy
   Float_t  zem1Energy = 0.;         //  ZEM1 Energy
   Float_t  zem2Energy = 0.;         //  ZEM2 Energy
   
-  Int_t    nTracks    = 0;          //  no. tracks
+  Int_t    nTracks = 0;             //  no. tracks
   Int_t    nTracklets = 0;          //  no. tracklets
   Int_t    nClusters[6];            //  no. clusters on 6 ITS layers
   Int_t    nChips[2];               //  no. chips on 2 SPD layers
@@ -204,6 +246,9 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
     AliVEvent* event = InputEvent();
     AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
 
+    if (SetupRun(esd))   
+      return;
+
     esdCent = esd->GetCentrality();
 
     // ***** V0 info    
@@ -279,21 +324,32 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
   }
 
   // ***** Centrality Selection
-  fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((multV0A+multV0C)));
-  fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
-  fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
-  fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
-  fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
-  
-  fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
-  fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
-  fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin((zem1Energy+zem2Energy)/1000.));
+  if(fHtempV0M)  fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((multV0A+multV0C)));
+  ///  else     printf("  Centrality by V0 not available!!!\n\n");
+  if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
+  //  else     printf("  Centrality by FMD not available!!!\n\n");
+  if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
+  //  else     printf("  Centrality by TRK not available!!!\n\n");
+  if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
+  //  else     printf("  Centrality by TKL not available!!!\n\n");
+  if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
+  //  else     printf("  Centrality by CL0 not available!!!\n\n");
+  if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(nClusters[1]));
+  ///  else     printf("  Centrality by CL1 not available!!!\n\n");
   
+  if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
+  //  else     printf("  Centrality by V0 vs FMD not available!!!\n\n");
+  if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
+  //  else     printf("  Centrality by V0 vs TKL not available!!!\n\n");
+  if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin((zem1Energy+zem2Energy)/1000.));
+  //  else     printf("  Centrality by ZEM vs ZDC not available!!!\n\n");
+
   esdCent->SetCentralityV0M(fCentV0M);
   esdCent->SetCentralityFMD(fCentFMD);
   esdCent->SetCentralityTRK(fCentTRK);
   esdCent->SetCentralityTKL(fCentTKL);
   esdCent->SetCentralityCL0(fCentCL0);
+  esdCent->SetCentralityCL1(fCentCL1);
   esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
   esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
   esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
@@ -302,28 +358,32 @@ void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
 //________________________________________________________________________
 void AliCentralitySelectionTask::ReadCentralityHistos() 
 {
-  fFile  = new TFile(fCentfilename);
+  fFile = TFile::Open(fCentfilename,"READ");
   fHtempV0M  = (TH1D*) (fFile->Get("hmultV0_percentile")); 
   fHtempFMD  = (TH1D*) (fFile->Get("hmultFMD_percentile")); 
   fHtempTRK  = (TH1D*) (fFile->Get("hNtracks_percentile")); 
   fHtempTKL  = (TH1D*) (fFile->Get("hNtracklets_percentile")); 
   fHtempCL0  = (TH1D*) (fFile->Get("hNclusters0_percentile")); 
+  fHtempCL1  = (TH1D*) (fFile->Get("hNclusters1_percentile")); 
 }  
-  
+
+//________________________________________________________________________
 void AliCentralitySelectionTask::ReadCentralityHistos2() 
 {
-  fFile2  = new TFile(fCentfilename2);
+  fFile2 = TFile::Open(fCentfilename2);
   fHtempV0MvsFMD  = (TH1D*) (fFile2->Get("hmultV0vsmultFMD_all_percentile")); 
   fHtempTKLvsV0M  = (TH1D*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile")); 
   fHtempZEMvsZDC  = (TH1D*) (fFile2->Get("hEzemvsEzdc_all_percentile"));  
 }
 
+//________________________________________________________________________
 void AliCentralitySelectionTask::SetPercentileFile(TString filename) 
 {
   fCentfilename = filename;
   ReadCentralityHistos();
 }
 
+//________________________________________________________________________
 void AliCentralitySelectionTask::SetPercentileFile2(TString filename) 
 {
   fCentfilename2 = filename;
@@ -334,8 +394,62 @@ void AliCentralitySelectionTask::SetPercentileFile2(TString filename)
 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
 {
   // Terminate analysis
-  fFile->Close();  
-  fFile2->Close();  
+  if (fFile && fFile->IsOpen())
+    fFile->Close();  
+  if (fFile2 && fFile2->IsOpen())
+    fFile2->Close();  
 }
 //________________________________________________________________________
+Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* esd)
+{
+  // Setup files for run
+
+  if (!esd)
+    return -1;
+
+  // check if something to be done
+  if (fCurrentRun == esd->GetRunNumber())
+    return 0;
+  else
+    fCurrentRun = esd->GetRunNumber();
+  
+  AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun));
+
+  Int_t runNo = fCurrentRun;
+
+  // CHANGE HERE FOR RUN RANGES
+  if ( runNo == 137162 ) runNo = 137161;
+  else if ( runNo == 137365 ) runNo = 137366;
+  // CHANGE HERE FOR RUN RANGES
+
+  TString runName(Form("%d", runNo));
+  TString fileName("");
+  Bool_t isRunKnown = kFALSE;
+
+  // Check if run is in fileList
+  // if not, take the last name in the list
+  for ( Int_t idx=0 ; idx < fFileList->GetEntries(); ++idx ) {
 
+    TString str((dynamic_cast<TObjString*>(fFileList->At(idx)))->GetString());
+    if (str.Contains(runName)) {
+      fileName += str;
+      isRunKnown = kTRUE;
+      break;
+    }
+  }
+
+  if (!isRunKnown) {
+    if (fFileList->Last()) {
+      fileName += (dynamic_cast<TObjString*>(fFileList->Last()))->GetString();
+      AliError(Form("Run %d not known to centrality selection!", fCurrentRun));
+    }
+  }
+
+  if (fileName.Contains(".root")) {
+    AliInfo(Form("Centrality Selection for run %d is initialized with %s", fCurrentRun, fileName.Data()));
+    SetPercentileFile(fileName.Data());
+    return 0;
+  }
+  
+  return -1;
+}