//
#include "../CreateESDChain.C"
+#include "../PWG0Helper.C"
-void testAnalysis2(Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool_t aMC = kFALSE, Bool_t aDebug = kFALSE, Bool_t aProof = kFALSE)
+void testAnalysis2(Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool_t aMC = kFALSE, Bool_t aDebug = kFALSE, Bool_t aProof = kFALSE, const char* correctionMapFile = "correction_map.root", const char* correctionMapFolder = "dndeta_correction", const char* option = "", const char* proofServer = "jgrosseo@lxb6046")
{
- gSystem->Load("libEG");
- gSystem->Load("libGeom");
- gSystem->Load("libESD");
- gSystem->Load("libPWG0base");
- if (aMC != kFALSE)
- gSystem->Load("libPWG0dep");
+ if (aProof)
+ {
+ connectProof(proofServer);
+ gProof->AddInput(new TParameter<long>("PROOF_MaxSlavesPerNode", (long)2));
+ gProof->AddInput(new TNamed("PROOF_Packetizer", "TAdaptivePacketizer"));
+ }
+
+ TString libraries("libEG;libGeom;libESD;libPWG0base");
+ TString packages("adaptivepacketizer;PWG0base");
+
+ if (!prepareQuery(libraries, packages, kTRUE))
+ return;
- gROOT->ProcessLine(".L CreatedNdEta.C");
+ //TODO somehow prevent loading several times
gROOT->ProcessLine(".L CreateCuts.C");
+ gROOT->ProcessLine(".L drawPlots.C");
- TChain* chain = 0;
- TVirtualProof* proof = 0;
- if (aProof == kFALSE)
- chain = CreateESDChainFromDir(data, nRuns, offset);
- else
- {
- chain = CreateESDChainFromList(data, nRuns, offset);
- proof = gROOT->Proof("alicecaf@lxb6041");
+ TChain* chain = CreateESDChain(data, nRuns, offset);
- if (!proof)
- {
- printf("ERROR: PROOF connection not established.\n");
- return;
- }
+ TList inputList;
- if (proof->EnablePackage("ESD"))
+ if (aMC == kFALSE)
+ {
+ // selection of esd tracks
+ AliESDtrackCuts* esdTrackCuts = CreateTrackCuts();
+ if (!esdTrackCuts)
{
- printf("ERROR: ESD package could not be enabled.\n");
+ printf("ERROR: esdTrackCuts could not be created\n");
return;
}
- if (proof->EnablePackage("PWG0base"))
- {
- printf("ERROR: PWG0base package could not be enabled.\n");
- return;
- }
+ inputList.Add(esdTrackCuts);
+ }
+
+ TString selectorName = ((aMC == kFALSE) ? "AlidNdEtaAnalysisESDSelector" : "AlidNdEtaAnalysisMCSelector");
+ AliLog::SetClassDebugLevel(selectorName, AliLog::kInfo);
+
+ selectorName += ".cxx+";
+
+ if (aDebug != kFALSE)
+ selectorName += "+g";
+
+ Int_t result = executeQuery(chain, &inputList, selectorName, option);
- if (aMC != kFALSE)
+ if (result >= 0)
+ {
+ if (aMC)
{
- if (proof->EnablePackage("PWG0dep"))
+ dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
+
+ TFile* file = TFile::Open("analysis_mc.root");
+
+ if (!file)
{
- printf("ERROR: PWG0dep package could not be enabled.\n");
+ cout << "Error. File not found" << endl;
return;
}
+ fdNdEtaAnalysis->LoadHistograms();
+ fdNdEtaAnalysis->DrawHistograms(kTRUE);
}
-
- chain->SetProof(proof);
+ else
+ FinishAnalysisAll("analysis_esd_raw.root", "analysis_esd.root", correctionMapFile, correctionMapFolder);
}
+}
- // ########################################################
- // selection of esd tracks
- AliESDtrackCuts* esdTrackCuts = CreateTrackCuts();
- if (!esdTrackCuts)
+void FinishAnalysisAll(const char* dataInput = "analysis_esd_raw.root", const char* dataOutput = "analysis_esd.root", const char* correctionMapFile = "correction_map.root", const char* correctionMapFolder = "dndeta_correction")
+{
+ gSystem->Load("libPWG0base");
+
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
+ TFile::Open(correctionMapFile);
+ dNdEtaCorrection->LoadHistograms();
+
+ TFile* file = TFile::Open(dataInput);
+
+ if (!file)
{
- printf("ERROR: esdTrackCuts could not be created\n");
+ cout << "Error. File not found" << endl;
return;
}
- chain->GetUserInfo()->Add(esdTrackCuts);
- if (proof)
- proof->AddInput(esdTrackCuts);
-
- TString selectorName = ((aMC == kFALSE) ? "AlidNdEtaAnalysisESDSelector" : "AlidNdEtaAnalysisMCSelector");
- AliLog::SetClassDebugLevel(selectorName, AliLog::kInfo);
+ dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
+ fdNdEtaAnalysis->LoadHistograms("dndeta");
+ fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3, AlidNdEtaCorrection::kINEL);
+ fdNdEtaAnalysis->DrawHistograms(kTRUE);
+ TFile* file2 = TFile::Open(dataOutput, "RECREATE");
+ fdNdEtaAnalysis->SaveHistograms();
+
+ file->cd();
+ fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTr", "dndetaTr");
+ fdNdEtaAnalysis->LoadHistograms("dndeta");
+ fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3, AlidNdEtaCorrection::kVertexReco);
+ fdNdEtaAnalysis->DrawHistograms(kTRUE);
+ file2->cd();
+ fdNdEtaAnalysis->SaveHistograms();
+
+ file->cd();
+ fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTrVtx", "dndetaTrVtx");
+ fdNdEtaAnalysis->LoadHistograms("dndeta");
+ fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3, AlidNdEtaCorrection::kTrack2Particle);
+ fdNdEtaAnalysis->DrawHistograms(kTRUE);
+ file2->cd();
+ fdNdEtaAnalysis->SaveHistograms();
+}
- // workaround for a bug in PROOF that only allows header files for .C files
- // please create symlink from <selector>.cxx to <selector>.C
- if (proof != kFALSE)
- selectorName += ".C+";
- else
- selectorName += ".cxx+";
+void FinishAnalysis(const char* analysisFile = "analysis_esd.root", const char* analysisDir = "dndeta", const char* correctionMapFile = "correction_map.root", const char* correctionMapFolder = "dndeta_correction", Bool_t useUncorrected = kFALSE, Bool_t simple = kFALSE)
+{
+ gSystem->Load("libPWG0base");
- if (aDebug != kFALSE)
- selectorName += "g";
+ TFile* file = TFile::Open(analysisFile);
- TStopwatch timer;
- timer.Start();
+ dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis(analysisDir, analysisDir);
+ fdNdEtaAnalysis->LoadHistograms();
- Long64_t result = chain->Process(selectorName);
- if (result != 0)
+ if (correctionMapFile)
{
- printf("ERROR: Executing process failed with %d.\n", result);
- return;
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
+ TFile::Open(correctionMapFile);
+ dNdEtaCorrection->LoadHistograms();
+
+ fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3);
}
- timer.Stop();
- timer.Print();
+ fdNdEtaAnalysis->DrawHistograms(simple);
- CreatedNdEta(aMC ? kFALSE : kTRUE);
-}
+ TH1* hist = fdNdEtaAnalysis->GetdNdEtaHistogram(1);
+ Int_t binLeft = hist->GetXaxis()->FindBin(-0.5);
+ Int_t binRight = hist->GetXaxis()->FindBin(0.5);
+ Float_t value1 = hist->Integral(binLeft, binRight);
+ hist = fdNdEtaAnalysis->GetdNdEtaHistogram(2);
+ Float_t value2 = hist->Integral(binLeft, binRight);
+
+ printf("Ratio is %f, values are %f %f\n", value1 / value2, value1, value2);
+}