//
#include "../CreateESDChain.C"
+#include "../PWG0Helper.C"
-testAnalysis2(Char_t* dataDir, Int_t nRuns=20, Int_t offset=0, Bool_t aMC = 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("libPWG0base");
+ 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;
- TChain* chain = CreateESDChainFromDir(dataDir, nRuns, offset);
+ //TODO somehow prevent loading several times
+ gROOT->ProcessLine(".L CreateCuts.C");
+ gROOT->ProcessLine(".L drawPlots.C");
+
+ TChain* chain = CreateESDChain(data, nRuns, offset);
+
+ TList inputList;
- // ########################################################
// selection of esd tracks
- AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts();
- esdTrackCuts->DefineHistograms(1);
+ AliESDtrackCuts* esdTrackCuts = CreateTrackCuts();
+ if (!esdTrackCuts)
+ {
+ printf("ERROR: esdTrackCuts could not be created\n");
+ return;
+ }
- esdTrackCuts->SetMinNClustersTPC(50);
- esdTrackCuts->SetMaxChi2PerClusterTPC(3.5);
- esdTrackCuts->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);
- esdTrackCuts->SetRequireTPCRefit(kTRUE);
+ inputList.Add(esdTrackCuts);
- esdTrackCuts->SetMinNsigmaToVertex(3);
- esdTrackCuts->SetAcceptKingDaughters(kFALSE);
+ TString selectorName = ((aMC == kFALSE) ? "AlidNdEtaAnalysisESDSelector" : "AlidNdEtaAnalysisMCSelector");
+ AliLog::SetClassDebugLevel(selectorName, AliLog::kInfo);
+
+ selectorName += ".cxx+";
+
+ if (aDebug != kFALSE)
+ selectorName += "+g";
- chain->GetUserInfo()->Add(esdTrackCuts);
+ Int_t result = executeQuery(chain, &inputList, selectorName, option);
- if (aMC == kFALSE)
+ if (result >= 0)
{
- dNdEtaCorrection* dNdEtaCorrection = new dNdEtaCorrection();
- dNdEtaCorrection->LoadHistograms("correction_map.root","dndeta_correction");
- dNdEtaCorrection->RemoveEdges(2, 0, 2);
+ if (aMC)
+ {
+ dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
- chain->GetUserInfo()->Add(dNdEtaCorrection);
+ TFile* file = TFile::Open("analysis_mc.root");
+
+ if (!file)
+ {
+ cout << "Error. File not found" << endl;
+ return;
+ }
+ fdNdEtaAnalysis->LoadHistograms();
+ fdNdEtaAnalysis->DrawHistograms(kTRUE);
+ }
+ else
+ FinishAnalysisAll("analysis_esd_raw.root", "analysis_esd.root", correctionMapFile, correctionMapFolder);
}
+}
- TString selectorName = ((aMC == kFALSE) ? "AlidNdEtaAnalysisESDSelector" : "AlidNdEtaAnalysisMCSelector");
+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");
- AliLog::SetClassDebugLevel(selectorName, AliLog::kInfo);
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
+ TFile::Open(correctionMapFile);
+ dNdEtaCorrection->LoadHistograms();
+
+ TFile* file = TFile::Open(dataInput);
+
+ if (!file)
+ {
+ cout << "Error. File not found" << endl;
+ return;
+ }
+
+ 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();
+
+ file->cd();
+ fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTracks", "dndetaTracks");
+ fdNdEtaAnalysis->LoadHistograms("dndeta");
+ fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone);
+ fdNdEtaAnalysis->DrawHistograms(kTRUE);
+ file2->cd();
+ fdNdEtaAnalysis->SaveHistograms();
+}
+
+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");
+
+ TFile* file = TFile::Open(analysisFile);
+
+ dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis(analysisDir, analysisDir);
+ fdNdEtaAnalysis->LoadHistograms();
+
+ if (correctionMapFile)
+ {
+ AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
+ TFile::Open(correctionMapFile);
+ dNdEtaCorrection->LoadHistograms();
+
+ fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3);
+ }
+
+ fdNdEtaAnalysis->DrawHistograms(simple);
- TStopwatch timer;
- timer.Start();
+ 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);
- chain->Process(selectorName + ".cxx+");
+ hist = fdNdEtaAnalysis->GetdNdEtaHistogram(2);
+ Float_t value2 = hist->Integral(binLeft, binRight);
- timer.Stop();
- timer.Print();
+ printf("Ratio is %f, values are %f %f\n", value1 / value2, value1, value2);
}