]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/PiKaPr/TestAOD/analysis_macro.C
Annotations
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TestAOD / analysis_macro.C
CommitLineData
c88234ad 1#include "AliAODTrack.h"
2#include <iostream>
3#include "TFile.h"
4#include "TH1I.h"
5#include "TH2.h"
6#include "AliSpectraAODHistoManager.h"
7#include "AliSpectraAODEventCuts.h"
8#include "AliSpectraAODTrackCuts.h"
9#include "TCanvas.h"
10#include "TLegend.h"
11
12using namespace std;
13
14void analysis_macro(const char * dataFile = "Pt.AOD.1._data_ptcut.root", const char * mcFile ="Pt.AOD.1._MC.root") {
15
16 // gSystem->Load("libTree.so");
17 // gSystem->Load("libGeom.so");
18 // gSystem->Load("libVMC.so");
19 // gSystem->Load("libPhysics.so");
20 // gSystem->Load("libSTEERBase.so");
21 // gSystem->Load("libESD.so");
22 // gSystem->Load("libAOD.so");
23 // gSystem->Load("libANALYSIS.so");
24 // gSystem->Load("libANALYSISalice.so");
25 // gSystem->Load("libANALYSIS");
26 // gSystem->Load("libANALYSISalice");
27 // gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
28 // gSystem->AddIncludePath("-I$ALICE_ROOT/include");
29 // gStyle->SetPalette(1);
30 // gStyle->SetFillColor(kWhite);
31
32 // gROOT->LoadMacro("AliSpectraAODTrackCuts.cxx+g");
33 // gROOT->LoadMacro("AliSpectraAODEventCuts.cxx+g");
34 // gROOT->LoadMacro("AliSpectraAODHistoManager.cxx+g");
35 // gROOT->LoadMacro("AliAnalysisTaskSpectraAOD.cxx+g");
36
37 const char * histoname[] =
38 {
39 // names of histos we want to draw. please observe order of histos, elsewise name will not make sense
40 "#frac{MC_{#sigma, rec}}{Data}, P^{+}",
41 "#frac{MC_{#sigma, rec}}{Data}, K^{+}",
42 "#frac{MC_{#sigma, rec}}{Data}, #pi^{+}",
43 "#frac{MC_{#sigma, rec}}{Data}, P^{-}",
44 "#frac{MC_{#sigma, rec}}{Data}, K^{-}",
45 "#frac{MC_{#sigma, rec}}{Data}, #pi^{-}",
46
47 "#frac{MC_{#sigma, rec, prim}}{Data}, P^{+}",
48 "#frac{MC_{#sigma, rec, prim}}{Data}, K^{+}",
49 "#frac{MC_{#sigma, rec, prim}}{Data}, #pi^{+}",
50 "#frac{MC_{#sigma, rec, prim}}{Data}, P^{-}",
51 "#frac{MC_{#sigma, rec, prim}}{Data}, K^{-}",
52 "#frac{MC_{#sigma, rec, prim}}{Data}, #pi^{-}",
53
54 "#frac{MC_{#sigma, rec, sec}}{Data}, P^{+}",
55 "#frac{MC_{#sigma, rec, sec}}{Data}, K^{+}",
56 "#frac{MC_{#sigma, rec, sec}}{Data}, #pi^{+}",
57 "#frac{MC_{#sigma, rec, sec}}{Data}, P^{-}",
58 "#frac{MC_{#sigma, rec, sec}}{Data}, K^{-}",
59 "#frac{MC_{#sigma, rec, sec}}{Data}, #pi^{-}",
60
61 "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, P^{+}",
62 "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, K^{+}",
63 "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, #pi^{+}",
64 "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, P^{-}",
65 "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, K^{-}",
66 "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, #pi^{-}",
67
68 "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, P^{+}",
69 "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, K^{+}",
70 "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, #pi^{+}",
71 "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, P^{-}",
72 "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, K^{-}",
73 "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, #pi^{-}",
74
75 "Data, P^{+}",
76 "Data, K^{+}",
77 "Data, #pi^{+}",
78 "Data, P^{-}",
79 "Data, K^{-}",
80 "Data, #pi^{-}",
81
82 "#frac{MC_{rec #sigma}}{MC_{true, rec}}, P^{+}",
83 "#frac{MC_{rec #sigma}}{MC_{true, rec}}, K^{+}",
84 "#frac{MC_{rec #sigma}}{MC_{true, rec}}, #pi^{+}",
85 "#frac{MC_{rec #sigma}}{MC_{true, rec}}, P^{-}",
86 "#frac{MC_{rec #sigma}}{MC_{true, rec}}, K^{-}",
87 "#frac{MC_{rec #sigma}}{MC_{true, rec}}, #pi^{-}",
88
89 "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, P^{+}",
90 "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, K^{+}",
91 "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, #pi^{+}",
92 "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, P^{-}",
93 "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, K^{-}",
94 "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, #pi^{-}",
95 };
96
97 const char * histotitle[] =
98 {
99 // titles of histos we want to draw. please observe order of histos, elsewise name will not make sense
100 "MC #sigma, rec / Data, P^{+}",
101 "MC #sigma, rec / Data, K^{+}",
102 "MC #sigma, rec / Data, #pi^{+}",
103 "MC #sigma, rec / Data, P^{-}",
104 "MC #sigma, rec / Data, K^{-}",
105 "MC #sigma, rec / Data, #pi^{-}",
106
107 "MC #sigma, rec, prim / Data, P^{+}",
108 "MC #sigma, rec, prim / Data, K^{+}",
109 "MC #sigma, rec, prim / Data, #pi^{+}",
110 "MC #sigma, rec, prim / Data, P^{-}",
111 "MC #sigma, rec, prim / Data, K^{-}",
112 "MC #sigma, rec, prim / Data, #pi^{-}",
113
114 "MC #sigma, rec, sec / Data, P^{+}",
115 "MC #sigma, rec, sec / Data, K^{+}",
116 "MC #sigma, rec, sec / Data, #pi^{+}",
117 "MC #sigma, rec, sec / Data, P^{-}",
118 "MC #sigma, rec, sec / Data, K^{-}",
119 "MC #sigma, rec, sec / Data, #pi^{-}",
120
121 "Correction factor, P^{+}",
122 "Correction factor, K^{+}",
123 "Correction factor, #pi^{+}",
124 "Correction factor, P^{-}",
125 "Correction factor, K^{-}",
126 "Correction factor, #pi^{-}",
127
128 "True Data, P^{+}",
129 "True Data, K^{+}",
130 "True Data, #pi^{+}",
131 "True Data, P^{-}",
132 "True Data, K^{-}",
133 "True Data, #pi^{-}",
134
135 "Raw Data, P^{+}",
136 "Raw Data, K^{+}",
137 "Raw Data, #pi^{+}",
138 "Raw Data, P^{-}",
139 "Raw Data, K^{-}",
140 "Raw Data, #pi^{-}",
141
142 "Identificaiton quality, P^{+}",
143 "Identificaiton quality, K^{+}",
144 "Identificaiton quality, #pi^{+}",
145 "Identificaiton quality, P^{-}",
146 "Identificaiton quality, K^{-}",
147 "Identificaiton quality, #pi^{-}",
148
149 "Contribution of secondaries, P^{+}",
150 "Contribution of secondaries, K^{+}",
151 "Contribution of secondaries, #pi^{+}",
152 "Contribution of secondaries, P^{-}",
153 "Contribution of secondaries, K^{-}",
154 "Contribution of secondaries, #pi^{-}",
155 };
156
157 // Open root MC file and get classes
158 cout << "Analysis Macro" << endl;
159 cout << " > Reading MC data" << endl;
160 TFile *_mc = TFile::Open(mcFile);
161 AliSpectraAODHistoManager* hman_mc = (AliSpectraAODHistoManager*) _mc->Get("SpectraHistos");
162 AliSpectraAODEventCuts* ecuts_mc = (AliSpectraAODEventCuts*) _mc->Get("Event Cuts");
163 AliSpectraAODTrackCuts* tcuts_mc = (AliSpectraAODTrackCuts*) _mc->Get("Track Cuts");
164 // print info about mc track and Event cuts
165 cout << " -- Info about MC -- "<< endl;
166 ecuts_mc->PrintCuts();
167 tcuts_mc->PrintCuts();
168 // get the mc histo's necessary to write the contamination histos from the rootfile
169 TH1F* spectrahistos_mc[30];
170 cout << " -- Reading and normalizing histograms -- " << endl;
171 for( Int_t i = 0 ; i <= AliSpectraNameSpace::kNPtSpecies ; i++ ) {
172 spectrahistos_mc[i] = dynamic_cast<TH1F*>(hman_mc->GetHistogram((AliSpectraNameSpace::AODPtHist_t)i));
173 Double_t events_mc = 1. / ecuts_mc->NumberOfEvents();
174 if(!spectrahistos_mc[i]) {
175 continue;
176 }
177 spectrahistos_mc[i]->Scale(events_mc, "width");
178 }
179 cout << " > Reading real data " << endl;
180 // proceed likewise for data
181 TFile *_data = TFile::Open(dataFile);
182 AliSpectraAODHistoManager* hman_data = (AliSpectraAODHistoManager*) _data->Get("SpectraHistos");
183 AliSpectraAODEventCuts* ecuts_data = (AliSpectraAODEventCuts*) _data->Get("Event Cuts");
184 AliSpectraAODTrackCuts* tcuts_data = (AliSpectraAODTrackCuts*) _data->Get("Track Cuts");
185 // print info about track and Event cuts
186 cout << " -- Info about data -- " << endl;
187 ecuts_data->PrintCuts();
188 tcuts_data->PrintCuts();
189 // get the histo's necessary to write the contamination histos from the rootfile
7df5f6a3 190 // MF 22/02/2012
191 // Get the raw data distribution:
192 // 1. Get DCA vs pt histo for each particle
193 // 2. Loop over all pt bins, projecting on DCA
194 // 3. Fit the DCA data distribution with MC templates for primaries, sec. w., sec. m. (TFractionFitter)
195 // 4. Extract from the fit raw primaries vs pt in data
196 // 5. Correct for the primaries efficiency estimated in MC
c88234ad 197 TH1F* spectrahistos_data[30];
198 cout << " -- Reading and normalizing histograms -- " << endl;
199 for( Int_t i = 0 ; i <= AliSpectraNameSpace::kNPtSpecies ; i++ ) {
200 spectrahistos_data[i] = dynamic_cast<TH1F*>(hman_data->GetHistogram((AliSpectraNameSpace::AODPtHist_t)i));
201 if(!spectrahistos_data[i]) {
202 continue;
203 }
204 Double_t events_data = 1. / ecuts_data->NumberOfEvents();
205 //normalize the histos
206 spectrahistos_data[i]->Scale(events_data, "width");
207 }
208 //create output file and select it as the active file
209 TFile * output = new TFile("analysis_output.root", "RECREATE");
210 output->cd();
211 // Write the scaled data and MC histos in the output file for convenience
212 output->mkdir("Data");
213 output->cd("Data");
214 for(Int_t ihist = 0; ihist <= AliSpectraNameSpace::kNPtSpecies; ihist++){
215 spectrahistos_data[ihist]->Write();
216 }
217 output->mkdir("MC");
218 output->cd("MC");
219 for(Int_t ihist = 0; ihist <= AliSpectraNameSpace::kNPtSpecies; ihist++){
220 spectrahistos_mc[ihist]->Write();
221 }
222 output->mkdir("ANALYSIS");
223 output->cd("ANALYSIS");
224 // perform some analysis!
225 // next loop: MC_Sigma_Rec over Rec_Data
226 TCanvas* c1 = new TCanvas("MC reconstructed over Data","MC reconstructed over Data");
227 c1->Divide(3,2);
228 TH1F* kRatioPtMCSigmaRecSigmaRec[6];
229 for (Int_t i = 0 ; i < 6 ; i ++ )
230 {
231 kRatioPtMCSigmaRecSigmaRec[i] = (TH1F*)(spectrahistos_mc[i])->Clone(histotitle[i]);
232 kRatioPtMCSigmaRecSigmaRec[i]->Divide(spectrahistos_data[i]);
233 c1->cd(1+i);
234 kRatioPtMCSigmaRecSigmaRec[i]->SetTitle(histoname[i]);
235 kRatioPtMCSigmaRecSigmaRec[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
236 kRatioPtMCSigmaRecSigmaRec[i]->Draw();
237 kRatioPtMCSigmaRecSigmaRec[i]->Write();
238 }
239 // next loop: MC_sigma_primaries over Rec_data
240 TCanvas* c2 = new TCanvas("MC reconstructed primaries over Data", "MC reconstructed primaries over Data");
241 c2->Divide(3,2);
242 TH1F* kRatioPtMCSigmaRecPrimarySigmaRec[6];
243 for (Int_t i = 0 ; i < 6 ; i ++ )
244 {
245 kRatioPtMCSigmaRecPrimarySigmaRec[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaPrimaryProtonPlus])->Clone(histotitle[i+6]);
246 kRatioPtMCSigmaRecPrimarySigmaRec[i]->Divide(spectrahistos_data[i]);
247 c2->cd(1+i);
248 kRatioPtMCSigmaRecPrimarySigmaRec[i]->SetTitle(histoname[i+6]);
249 kRatioPtMCSigmaRecPrimarySigmaRec[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
250 kRatioPtMCSigmaRecPrimarySigmaRec[i]->Draw();
251 kRatioPtMCSigmaRecPrimarySigmaRec[i]->Write();
252 }
253 // next loop: MC_Sigma_secondaries over Rec_data
254 TCanvas* c3 = new TCanvas("MC reconstructed secondaries over Data","MC reconstructed secondaries over Data");
255 c3->Divide(3,2);
256 TH1F* kRatioPtMCSigmaRecSigmaRecSecondary[6];
257 for (Int_t i = 0 ; i < 6 ; i ++ )
258 {
259 kRatioPtMCSigmaRecSigmaRecSecondary[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaSecondaryProtonPlus])->Clone(histotitle[i+12]);
260 kRatioPtMCSigmaRecSigmaRecSecondary[i]->Divide(spectrahistos_data[i]);
261 c3->cd(1+i);
262 kRatioPtMCSigmaRecSigmaRecSecondary[i]->SetTitle(histoname[12+i]);
263 kRatioPtMCSigmaRecSigmaRecSecondary[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
264 kRatioPtMCSigmaRecSigmaRecSecondary[i]->Draw();
265 kRatioPtMCSigmaRecSigmaRecSecondary[i]->Write();
266 }
267 //
268 TCanvas* c4 = new TCanvas("MC true generated over MC true reconstructed","MC true generated over MC true reconstructed");
269 c4->Divide(3,2);
270 TH1F* kRatioPtMCTrueMCRec[6];
271 for (Int_t i = 0 ; i < 6 ; i ++ )
272 {
273 kRatioPtMCTrueMCRec[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus])->Clone(histotitle[i+18]);
274 kRatioPtMCTrueMCRec[i]->Divide(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaPrimaryProtonPlus]);
275 c4->cd(1+i);
276 kRatioPtMCTrueMCRec[i]->SetTitle(histoname[18+i]);
277 kRatioPtMCTrueMCRec[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
278 kRatioPtMCTrueMCRec[i]->Draw();
279 kRatioPtMCTrueMCRec[i]->Write();
280 }
281
282 TCanvas* c5 = new TCanvas("True Data","True Data");
283 c5->Divide(3,2);
284 TH1F* kRatioPtTrueData[6];
285 for (Int_t i = 0 ; i < 6 ; i ++ )
286 {
287 kRatioPtTrueData[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus])->Clone(histotitle[i+24]);
288 kRatioPtTrueData[i]->Divide(spectrahistos_mc[i]); // Michele: Since we are correcting all contributions at once, this should be exaclty the same as in the data!
289 kRatioPtTrueData[i]->Multiply(spectrahistos_data[i]);
290 c5->cd(1+i);
291 kRatioPtTrueData[i]->SetTitle(histoname[24+i]);
292 kRatioPtTrueData[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
293 kRatioPtTrueData[i]->Draw();
294 kRatioPtTrueData[i]->Write();
295 }
296
297 TCanvas* c6 = new TCanvas("Raw data", "Raw data");
298 c6->Divide(3,2);
299 TH1F* kRawData[6];
300 for (Int_t i = 0 ; i < 6 ; i ++ )
301 {
302 kRawData[i] = (TH1F*)(spectrahistos_data[i+AliSpectraNameSpace::kHistPtRecSigmaProtonPlus])->Clone(histotitle[i+30]);
303 c6->cd(1+i);
304 kRawData[i]->SetTitle(histoname[30+i]);
305 kRawData[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
306 kRawData[i]->Draw();
307 kRawData[i]->Write();
308 }
309
310 TCanvas* c7 = new TCanvas("contamination", "contamination");
311 c7->Divide(3,2);
312 TH1F* kContamination[6];
313 for (Int_t i = 0 ; i < 6 ; i ++ )
314 {
315 kContamination[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaProtonPlus])->Clone(histotitle[i+36]);
316 kContamination[i]->Divide(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecTrueProtonPlus]);
317 c7->cd(1+i);
318 kContamination[i]->SetTitle(histoname[36+i]);
319 kContamination[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
320 kContamination[i]->Draw();
321 kContamination[i]->Write();
322 }
323
324 TCanvas* c8 = new TCanvas("contamination secondary", "contamination secondary");
325 c8->Divide(3,2);
326 TH1F* kSecContamination[6];
327 for (Int_t i = 0 ; i < 6 ; i ++ )
328 {
329 kSecContamination[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaSecondaryProtonPlus])->Clone(histotitle[i+42]);
330 kSecContamination[i]->Divide(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaProtonPlus]);
331 c8->cd(1+i);
332 kSecContamination[i]->SetTitle(histoname[42+i]);
333 kSecContamination[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
334 kSecContamination[i]->Draw();
335 kSecContamination[i]->Write();
336 }
337
338 TCanvas* c9 = new TCanvas("true data and generated", "true data and generated");
339 c9->Divide(3,2);
340 TH1F* ktrueandgenerated[6];
341 for (Int_t i = 0 ; i < 6 ; i ++ )
342 {
343 // kSecContamination[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaSecondaryProtonPlus])->Clone(histotitle[i+42]);
344 // kSecContamination[i]->Divide(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaProtonPlus]);
345 c9->cd(1+i);
346 // kSecContamination[i]->SetTitle(histoname[42+i]);
347 // kSecContamination[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
348 kRatioPtTrueData[i]->Draw();
349 spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus]->SetMarkerColor(kRed);
350 spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus]->SetMarkerStyle(kOpenCircle);
351 spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus]->SetLineColor(kRed);
352 spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus]->Draw("same");
353
354 // legend
355 TLegend * leg = new TLegend(0.6,0.64,0.89,0.79); //coordinates are fractions
356 leg->AddEntry(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus],"Generated","p");
357 leg->AddEntry(kRatioPtTrueData[i],"Corrected","p");
358 leg->Draw();
359 }
360
361 cout << "Analysis complete" << endl;
362 cout << " - Please exit root to close and save output file " << endl;
363}