b653112399dd79ca1360b3fcc436e340c03df8f7
[u/mrichter/AliRoot.git] / PWG0 / dNdEta / rundNdEtaAnalysis.C
1 /* $Id$ */
2
3 //
4 // Script to test the dN/dEta analysis using the dNdEtaAnalysis and
5 // dNdEtaCorrection classes. Note that there is a cut on the events,
6 // so the measurement will be biassed.
7 //
8 // implementation with TSelector
9 //
10
11 #include "../CreateESDChain.C"
12 #include "../PWG0Helper.C"
13
14 void rundNdEtaAnalysis(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 = "lxb6046")
15 {
16   if (aProof)
17     connectProof(proofServer);
18
19   TString libraries("libEG;libGeom;libESD;libPWG0base");
20   TString packages("PWG0base");
21
22   if (!prepareQuery(libraries, packages, kTRUE))
23     return;
24
25   gROOT->ProcessLine(".L CreateCuts.C");
26   gROOT->ProcessLine(".L drawPlots.C");
27
28   TChain* chain = CreateESDChain(data, nRuns, offset);
29
30   TList inputList;
31
32   // selection of esd tracks
33   AliESDtrackCuts* esdTrackCuts = CreateTrackCuts();
34   if (!esdTrackCuts)
35   {
36     printf("ERROR: esdTrackCuts could not be created\n");
37     return;
38   }
39
40   inputList.Add(esdTrackCuts);
41
42   TString selectorName = ((aMC == kFALSE) ? "AlidNdEtaAnalysisESDSelector" : "AlidNdEtaAnalysisMCSelector");
43   AliLog::SetClassDebugLevel(selectorName, AliLog::kInfo);
44
45   selectorName += ".cxx+";
46
47   if (aDebug != kFALSE)
48     selectorName += "+g";
49
50   Int_t result = executeQuery(chain, &inputList, selectorName, option);
51
52   if (result >= 0)
53   {
54     if (aMC)
55     {
56       dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
57
58       TFile* file = TFile::Open("analysis_mc.root");
59
60       if (!file)
61       {
62         cout << "Error. File not found" << endl;
63         return;
64       }
65       fdNdEtaAnalysis->LoadHistograms();
66       fdNdEtaAnalysis->DrawHistograms(kTRUE);
67     }
68     else
69       FinishAnalysisAll("analysis_esd_raw.root", "analysis_esd.root", correctionMapFile, correctionMapFolder);
70   }
71 }
72
73 void loadlibs()
74 {
75   gSystem->Load("libTree");
76   gSystem->Load("libVMC");
77
78   gSystem->Load("libSTEERBase");
79   gSystem->Load("libANALYSIS");
80   gSystem->Load("libPWG0base");
81 }
82
83 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")
84 {
85   loadlibs();
86
87   AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
88   TFile::Open(correctionMapFile);
89   dNdEtaCorrection->LoadHistograms();
90
91   TFile* file = TFile::Open(dataInput);
92
93   if (!file)
94   {
95     cout << "Error. File not found" << endl;
96     return;
97   }
98
99   dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
100   fdNdEtaAnalysis->LoadHistograms("fdNdEtaAnalysisESD");
101   fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3, AlidNdEtaCorrection::kINEL);
102   fdNdEtaAnalysis->DrawHistograms(kTRUE);
103   TFile* file2 = TFile::Open(dataOutput, "RECREATE");
104   fdNdEtaAnalysis->SaveHistograms();
105
106   file->cd();
107   fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTr", "dndetaTr");
108   fdNdEtaAnalysis->LoadHistograms("fdNdEtaAnalysisESD");
109   fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3, AlidNdEtaCorrection::kVertexReco);
110   fdNdEtaAnalysis->DrawHistograms(kTRUE);
111   file2->cd();
112   fdNdEtaAnalysis->SaveHistograms();
113
114   file->cd();
115   fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTrVtx", "dndetaTrVtx");
116   fdNdEtaAnalysis->LoadHistograms("fdNdEtaAnalysisESD");
117   fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3, AlidNdEtaCorrection::kTrack2Particle);
118   fdNdEtaAnalysis->DrawHistograms(kTRUE);
119   file2->cd();
120   fdNdEtaAnalysis->SaveHistograms();
121
122   file->cd();
123   fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTracks", "dndetaTracks");
124   fdNdEtaAnalysis->LoadHistograms("fdNdEtaAnalysisESD");
125   fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone);
126   fdNdEtaAnalysis->DrawHistograms(kTRUE);
127   file2->cd();
128   fdNdEtaAnalysis->SaveHistograms();
129 }
130
131 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)
132 {
133   loadlibs();
134
135   TFile* file = TFile::Open(analysisFile);
136
137   dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis(analysisDir, analysisDir);
138   fdNdEtaAnalysis->LoadHistograms();
139
140   if (correctionMapFile)
141   {
142     AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
143     TFile::Open(correctionMapFile);
144     dNdEtaCorrection->LoadHistograms();
145
146     //fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.2, AlidNdEtaCorrection::kINEL);
147     fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0, AlidNdEtaCorrection::kINEL);
148     //fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0, AlidNdEtaCorrection::kTrack2Particle);
149   }
150
151   fdNdEtaAnalysis->DrawHistograms(simple);
152
153   TH1* hist = fdNdEtaAnalysis->GetdNdEtaHistogram(1);
154   Int_t binLeft = hist->GetXaxis()->FindBin(-0.5);
155   Int_t binRight = hist->GetXaxis()->FindBin(0.5);
156   Float_t value1 = hist->Integral(binLeft, binRight);
157
158   hist = fdNdEtaAnalysis->GetdNdEtaHistogram(2);
159   Float_t value2 = hist->Integral(binLeft, binRight);
160
161   printf("Ratio is %f, values are %f %f\n", value1 / value2, value1, value2);
162 }