#include <TH2F.h>
#include <TProfile.h>
#include <TFile.h>
+#include <TObjString.h>
#include <TString.h>
#include <TCanvas.h>
#include <iostream>
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),
fHtempTRK(0),
fHtempTKL(0),
fHtempCL0(0),
+ fHtempCL1(0),
fHtempV0MvsFMD(0),
fHtempTKLvsV0M(0),
fHtempZEMvsZDC(0)
{
// Default constructor
+ fFileList->SetOwner();
+ fFileList2->SetOwner();
+
+ AliInfo("Centrality Selection enabled.");
}
//________________________________________________________________________
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),
fHtempTRK(0),
fHtempTKL(0),
fHtempCL0(0),
+ fHtempCL1(0),
fHtempV0MvsFMD(0),
fHtempTKLvsV0M(0),
fHtempZEMvsZDC(0)
{
// Default constructor
+ fFileList->SetOwner();
+ fFileList2->SetOwner();
+
+ AliInfo("Centrality Selection enabled.");
}
//________________________________________________________________________
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),
fHtempTRK(ana.fHtempTRK),
fHtempTKL(ana.fHtempTKL),
fHtempCL0(ana.fHtempCL0),
+ fHtempCL1(ana.fHtempCL1),
fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
fHtempZEMvsZDC(ana.fHtempZEMvsZDC)
}
//________________________________________________________________________
- 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);
}
//________________________________________________________________________
// 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
AliVEvent* event = InputEvent();
AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
+ if (SetupRun(esd))
+ return;
+
esdCent = esd->GetCentrality();
// ***** V0 info
}
// ***** 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);
//________________________________________________________________________
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;
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;
+}