]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGPP/macros/tpcPIDResol.C
update the chain of scirpts/mcros for filtering of raw data
[u/mrichter/AliRoot.git] / PWGPP / macros / tpcPIDResol.C
CommitLineData
e7babc5b 1/*
2 //Analysis of the output of AliTPCtaskPID.
3 //3 6D histograms - THnSparse created in the task:
4 //TPC raw dEdx
5 //TPC normalized dEdx (dEdx_rec/dNdx_mc)
6 //TPC PID probabilities
7 //
8 //The values are binned in following variables:
9 // Some of them are correlated - but THnSpase handle it
10 // ~ 14 MBy per object needed
11 //
12 // 0 - particle specie as defined in the AliPID - negatives+5 <0,9>
13 // 1 - momenta - at the entrance of the TPC
14 // 2 - tan lambda- fP[3]
15 // 3 - betagamma
16 // 4 - npoints
17 // 5 - measurement - dEdx, dEdx/BB resp. PID probability
18 // 6 - BB
19
20
21
22 .x ~/NimStyle.C
23 .x ~/UliStyle.C
2bfe5463 24 .L $ALICE_ROOT/PWGPP/Macros/tpcPIDResol.C+
e7babc5b 25 Init();
26 //
27 // custom draw GetProjection(THnSparse*his, Int_t i0, Int_t i1, Float_t type0, Float_t type1, Float_t p0, Float_t p1, Float_t eta0, Float_t eta1, Int_t ncl0, Int_t ncl1)
28 GetProjection(fTPCsignalNorm,5,2, -1,11, 5,10, -1.4,1.4, 120,160,0,4) ->ProfileX()->Draw();
29 //
30
31 //
32 // predefined draw
33 // 0 1 2 4 6
34 //1. SetRange - part p eta ncl par 6
35 SetRange(fTPCsignal, 0,10, 0.2,5, -0.9,0.9, 120,160, 0,6);
36 SetRange(fTPCsignalNorm, 0,10, 0.2,5, -0.9,0.9, 120,160, 0,6);
37 SetRange(fTPCr, 0,100, 0.2,5, -0.9,0.9, 120,160, 0,10);
38
39 //
40 // Draw
41 //
42 DrawPIDpt();
43 DrawSignalTypeBG();
44 DrawSignalTypeMom();
45 DrawNormSignalTypeBG();
46 DrawNormSignalTypeMom();
47 DrawNormSignalTypeBB();
48
49*/
50#include "TFile.h"
51#include "THnSparse.h"
52#include "TH1F.h"
53#include "TH2F.h"
54#include "TProfile.h"
55#include "TF1.h"
56
57#include "TLegend.h"
58#include "TCanvas.h"
59
60#include "AliPID.h"
61
62Int_t kmicolors[10]={1,2,3,4,6,7,8,9,10,11};
63Int_t kmimarkers[10]={21,22,23,24,25,26,27,28,29,30};
64
65
66
67THnSparse * fTPCsignal = 0;
68THnSparse * fTPCsignalNorm = 0;
69THnSparse * fTPCr = 0;
70Float_t fNorm=50;
71TString selName;
72Int_t version=0;
73
74void Init(){
75 TFile *f = new TFile("OutputPID.root");
76 TObjArray *array= (TObjArray*)f->Get("tpcTaskPID");
77 delete f;
78 fTPCsignal = (THnSparse*)array->At(0);
79 fTPCsignalNorm = (THnSparse*)array->At(1);
80 fTPCr = (THnSparse*)array->At(2);
81
82 fTPCsignal->GetAxis(5)->SetTitle("dEdx_{rec}");
83 fTPCsignal->GetAxis(6)->SetTitle("dNdx_{mc}");
84 fTPCsignal->GetAxis(5)->SetName("dEdx_{rec}");
85 fTPCsignal->GetAxis(6)->SetName("dNdx_{mc}");
86
87 fTPCsignalNorm->GetAxis(5)->SetTitle("dEdx_{rec}/dNdx_{mc}");
88 fTPCsignalNorm->GetAxis(6)->SetTitle("dNdx_{mc}");
89 fTPCsignalNorm->GetAxis(5)->SetName("dEdx_{rec}/dNdx_{mc}");
90 fTPCsignalNorm->GetAxis(6)->SetName("dNdx_{mc}");
91 new TCanvas("dEdx study");
92}
93
94void ResetRange(THnSparse* his){
95 //
96 // reset range to full
97 for (Int_t idim=0;idim< his->GetNdimensions(); idim++){
98 his->GetAxis(idim)->SetRange(0, his->GetAxis(idim)->GetNbins());
99 }
100}
101
102void SetRange(THnSparse*his, Float_t type0, Float_t type1, Float_t p0, Float_t p1, Float_t eta0, Float_t eta1, Int_t ncl0, Int_t ncl1, Float_t p60, Float_t p61){
103 //
104 //
105 //
106 ResetRange(his);
107 selName=Form("pic/p%f_%f_eta_%f_%f_ncl_%d_%d_p6_%f_%f",p0,p1,eta0,eta1,ncl0,ncl1,p60,p61);
108 his->GetAxis(0)->SetRangeUser(type0,type1);
109 his->GetAxis(1)->SetRangeUser(p0,p1);
110 his->GetAxis(2)->SetRangeUser(eta0,eta1);
111 his->GetAxis(4)->SetRangeUser(ncl0,ncl1);
112 his->GetAxis(6)->SetRangeUser(p60,p61);
113 version++;
114}
115
116
117
118
119TH2F* GetProjection(THnSparse*his, Int_t i0, Int_t i1, Float_t type0, Float_t type1, Float_t p0, Float_t p1, Float_t eta0, Float_t eta1, Int_t ncl0, Int_t ncl1, Float_t p60, Float_t p61){
120
121 SetRange(his, type0, type1, p0, p1, eta0,eta1 , ncl0, ncl1, p60,p61);
122 TH2F * res = (TH2F*) his->Projection(i0,i1);
123 res->SetXTitle(his->GetAxis(i1)->GetTitle());
124 res->SetYTitle(his->GetAxis(i0)->GetTitle());
125 return res;
126}
127
128TH1F* GetProjection(THnSparse*his, Int_t i0, Float_t type0, Float_t type1, Float_t p0, Float_t p1, Float_t eta0, Float_t eta1, Int_t ncl0, Int_t ncl1, Float_t p60, Float_t p61){
129
130 SetRange(his, type0, type1, p0, p1, eta0,eta1 , ncl0, ncl1, p60,p61);
131 TH1F * res = (TH1F*) his->Projection(i0);
132 res->SetXTitle(his->GetAxis(i0)->GetTitle());
133 return res;
134}
135
136
137
138void DrawSignalTypeBG(){
139 //
140 //
141 //
142 //
143 TObjArray array;
144 TH2F *hisdEdxBG_part[10];
145 TH1 *hisdEdxBG_partProfile[10];
146 // TH1 *hisdEdxBG_partFit[10];
147 for (Int_t ipart=0;ipart<10;ipart++){
148 fTPCsignal->GetAxis(0)->SetRange(1+ipart, 1+ipart);
149 hisdEdxBG_part[ipart] = (TH2F*)fTPCsignal->Projection(5,3);
150 if (!hisdEdxBG_part[ipart]) continue;
151 hisdEdxBG_partProfile[ipart]=(TH1F*)(hisdEdxBG_part[ipart]->ProfileX(Form("SignalTypeBG_%d_%dProf",ipart,version)));
152 // hisdEdxBG_partProfile[ipart]->SetName(;
153 hisdEdxBG_partProfile[ipart]->SetMaximum(3);
154 hisdEdxBG_partProfile[ipart]->SetXTitle("#beta#gamma");
155 hisdEdxBG_partProfile[ipart]->SetYTitle("dEdx/MIP");
156 hisdEdxBG_partProfile[ipart]->Scale(1/fNorm);
157 hisdEdxBG_partProfile[ipart]->SetMarkerColor(kmicolors[ipart%5]);
158 hisdEdxBG_partProfile[ipart]->SetMarkerStyle(22+ipart);
159 delete hisdEdxBG_part[ipart];
160 }
161 if (gPad) gPad->SetLogx(kTRUE);
162 hisdEdxBG_partProfile[0]->Draw("");
163 TLegend * legend = new TLegend(.7,.7, .99, .99, "TPC dEdx");
164 for (Int_t ipart=0;ipart<10;ipart++) {
165 hisdEdxBG_partProfile[ipart]->Draw("same");
166 legend->AddEntry(hisdEdxBG_partProfile[ipart],AliPID::ParticleName(ipart%5),"p");
167 }
168 legend->Draw();
169 gPad->SaveAs(selName+"_hisdEdxBG.gif");
170 gPad->SaveAs(selName+"_hisdEdxBG.eps");
171}
172
173void DrawSignalTypeMom(){
174 //
175 //
176 //
177 TObjArray array;
178 TH2F *hisdEdxMom_part[10];
179 TH1 *hisdEdxMom_partProfile[10];
180 // TH1 *hisdEdxMom_partFit[10];
181 for (Int_t ipart=0;ipart<10;ipart++){
182 fTPCsignal->GetAxis(0)->SetRange(1+ipart, 1+ipart);
183 hisdEdxMom_part[ipart] = (TH2F*)fTPCsignal->Projection(5,1);
184 if (!hisdEdxMom_part[ipart]) continue;
185 hisdEdxMom_partProfile[ipart]=(TH1F*)(hisdEdxMom_part[ipart]->ProfileX(Form("SignalTypeMom_%d_%dProf",ipart,version)));
186
187 hisdEdxMom_partProfile[ipart]->SetMaximum(5);
188 hisdEdxMom_partProfile[ipart]->SetMinimum(0);
189 hisdEdxMom_partProfile[ipart]->SetXTitle("p (GeV/c)");
190 hisdEdxMom_partProfile[ipart]->SetYTitle("dEdx/MIP");
191 hisdEdxMom_partProfile[ipart]->Scale(1/fNorm);
192 hisdEdxMom_partProfile[ipart]->SetMarkerColor(kmicolors[ipart%5]);
193 hisdEdxMom_partProfile[ipart]->SetMarkerStyle(22+ipart);
194 delete hisdEdxMom_part[ipart];
195 }
196 if (gPad) gPad->SetLogx(kTRUE);
197 hisdEdxMom_partProfile[0]->Draw("");
198 TLegend * legend = new TLegend(.7,.7, .99, .99, "TPC dEdx");
199 for (Int_t ipart=0;ipart<10;ipart++) {
200 hisdEdxMom_partProfile[ipart]->Draw("same");
201 legend->AddEntry(hisdEdxMom_partProfile[ipart],AliPID::ParticleName(ipart%5),"p");
202 }
203 legend->Draw();
204 gPad->SaveAs(selName+"_hisdEdxMom.gif");
205 gPad->SaveAs(selName+"_hisdEdxMom.eps");
206}
207
208
209void DrawNormSignalTypeBG(){
210 //
211 //
212 //
213 //
214 TObjArray array;
215 TH2F *hisdEdxNormBG_part[10];
216 TH1 *hisdEdxNormBG_partProfile[10];
217 // TH1 *hisdEdxNormBG_partFit[10];
218 for (Int_t ipart=0;ipart<10;ipart++){
219 fTPCsignalNorm->GetAxis(0)->SetRange(1+ipart, 1+ipart);
220 hisdEdxNormBG_part[ipart] = (TH2F*)fTPCsignalNorm->Projection(5,3);
221 if (!hisdEdxNormBG_part[ipart]) continue;
222 hisdEdxNormBG_partProfile[ipart]=(TH1F*)(hisdEdxNormBG_part[ipart]->ProfileX(Form("NormSignalTypeBG_%d_%dProf",ipart,version)));
223 // hisdEdxNormBG_partProfile[ipart]->SetName(;
224 hisdEdxNormBG_partProfile[ipart]->SetMaximum(1.5);
225 hisdEdxNormBG_partProfile[ipart]->SetMinimum(0.5);
226 hisdEdxNormBG_partProfile[ipart]->SetXTitle("#beta#gamma");
227 hisdEdxNormBG_partProfile[ipart]->SetYTitle("dEdx/MIP");
228 hisdEdxNormBG_partProfile[ipart]->Scale(1/fNorm);
229 hisdEdxNormBG_partProfile[ipart]->SetMarkerColor(kmicolors[ipart%5]);
230 hisdEdxNormBG_partProfile[ipart]->SetMarkerStyle(22+ipart);
231 delete hisdEdxNormBG_part[ipart];
232 }
233 if (gPad) gPad->SetLogx(kTRUE);
234 hisdEdxNormBG_partProfile[0]->Draw("");
235 TLegend * legend = new TLegend(.7,.7, .99, .99, "TPC dEdx");
236 for (Int_t ipart=0;ipart<10;ipart++) {
237 hisdEdxNormBG_partProfile[ipart]->Draw("same");
238 legend->AddEntry(hisdEdxNormBG_partProfile[ipart],AliPID::ParticleName(ipart%5),"p");
239 }
240 legend->Draw();
241 gPad->SaveAs(selName+"_hisdEdxNormBG.gif");
242 gPad->SaveAs(selName+"_hisdEdxNormBG.eps");
243}
244
245
246void DrawNormSignalTypeMom(){
247 //
248 //
249 //
250 //
251 //
252 TObjArray array;
253 TH2F *hisdEdxNormMom_part[10];
254 TH1 *hisdEdxNormMom_partProfile[10];
255 // TH1 *hisdEdxNormMom_partFit[10];
256 for (Int_t ipart=0;ipart<10;ipart++){
257 fTPCsignalNorm->GetAxis(0)->SetRange(1+ipart, 1+ipart);
258 hisdEdxNormMom_part[ipart] = (TH2F*)fTPCsignalNorm->Projection(5,1);
259 if (!hisdEdxNormMom_part[ipart]) continue;
260 hisdEdxNormMom_partProfile[ipart]=(TH1F*)(hisdEdxNormMom_part[ipart]->ProfileX(Form("NormSignalTypeMom_%d_%dProf",ipart,version)));
261 hisdEdxNormMom_partProfile[ipart]->Scale(1/fNorm);
262 hisdEdxNormMom_partProfile[ipart]->SetMaximum(1.5);
263 hisdEdxNormMom_partProfile[ipart]->SetMinimum(0.5);
264 hisdEdxNormMom_partProfile[ipart]->SetXTitle("p (GeV/c)");
265 hisdEdxNormMom_partProfile[ipart]->SetYTitle("dEdx_{rec}/dNdx_{mc}");
266 hisdEdxNormMom_partProfile[ipart]->SetMarkerColor(kmicolors[ipart%5]);
267 hisdEdxNormMom_partProfile[ipart]->SetMarkerStyle(22+ipart);
268 delete hisdEdxNormMom_part[ipart];
269 }
270 if (gPad) gPad->SetLogx(kTRUE);
271 hisdEdxNormMom_partProfile[0]->Draw("");
272 TLegend * legend = new TLegend(.7,.7, .99, .99, "TPC dEdx");
273 for (Int_t ipart=0;ipart<10;ipart++) {
274 hisdEdxNormMom_partProfile[ipart]->Draw("same");
275 legend->AddEntry(hisdEdxNormMom_partProfile[ipart],AliPID::ParticleName(ipart%5),"p");
276 }
277 legend->Draw();
278 gPad->SaveAs(selName+"_hisdEdxNormMom.gif");
279 gPad->SaveAs(selName+"_hisdEdxNormMom.eps");
280}
281
282
283
284void DrawNormSignalTypeBB(){
285 //
286 //
287 //
288 //
289 //
290 TObjArray array;
291 TH2F *hisdEdxNormBG_part[10];
292 TH1 *hisdEdxNormBG_partProfile[10];
293 // TH1 *hisdEdxNormBG_partFit[10];
294 Double_t itypes[10];
295 Double_t ival[10];
296 Double_t ierr[10];
297 for (Int_t ipart=0;ipart<10;ipart++){
298 fTPCsignalNorm->GetAxis(0)->SetRange(1+ipart, 1+ipart);
299 hisdEdxNormBG_part[ipart] = (TH2F*)fTPCsignalNorm->Projection(5,6);
300 if (!hisdEdxNormBG_part[ipart]) continue;
301 hisdEdxNormBG_partProfile[ipart]=(TH1F*)(hisdEdxNormBG_part[ipart]->ProfileX(Form("NormSignalTypeBB_%d_%dProf",ipart,version)));
302 hisdEdxNormBG_partProfile[ipart]->Scale(1/fNorm);
303 hisdEdxNormBG_partProfile[ipart]->SetMaximum(1.5);
304 hisdEdxNormBG_partProfile[ipart]->SetMinimum(0.9);
305 hisdEdxNormBG_partProfile[ipart]->SetXTitle("dNdx_{mc}");
306 hisdEdxNormBG_partProfile[ipart]->SetYTitle("dEdx_{rec}/dNdx_{mc}");
307 hisdEdxNormBG_partProfile[ipart]->SetMarkerColor(kmicolors[ipart%5]);
308 hisdEdxNormBG_partProfile[ipart]->SetMarkerStyle(22+ipart);
309 itypes[ipart]=ipart;
310 itypes[ipart]=0;
311 itypes[ipart]=0;
312 if (ipart%5!=0) {
313 hisdEdxNormBG_partProfile[ipart]->Fit("pol1","q","",1,2);
314 if (hisdEdxNormBG_partProfile[ipart]->GetFunction("pol1")){
315 ival[ipart]= hisdEdxNormBG_partProfile[ipart]->GetFunction("pol1")->GetParameter(1);
316 ierr[ipart]= hisdEdxNormBG_partProfile[ipart]->GetFunction("pol1")->GetParError(1);
317 }
318 }
319 printf("%d\t\t%s%f\t%f\n",ipart,AliPID::ParticleName(ipart%5), ival[ipart], ierr[ipart]);
320 delete hisdEdxNormBG_part[ipart];
321 }
322 if (gPad) gPad->SetLogx(kFALSE);
323 hisdEdxNormBG_partProfile[0]->Draw("");
324 TLegend * legend = new TLegend(.7,.7, .99, .99, "TPC dEdx");
325 for (Int_t ipart=0;ipart<10;ipart++) {
326 hisdEdxNormBG_partProfile[ipart]->Draw("same");
327 legend->AddEntry(hisdEdxNormBG_partProfile[ipart],AliPID::ParticleName(ipart%5),"p");
328 }
329 legend->Draw();
330 gPad->SaveAs(selName+"_hisdEdxNormBG.gif");
331 gPad->SaveAs(selName+"_hisdEdxNormBG.eps");
332}
333
334
335void DrawPIDpt(){
336 //
337 //
338 //
339 //
340 TObjArray array;
341 TH2F *hisPIDMCRCSame_part[10];
342 TH1 *hisPIDMCRCSame_partProfile[10];
343
344 // TH1 *hisPIDMCRCSame_partFit[10];
345 for (Int_t ipart=0;ipart<5;ipart++){
346 fTPCr->GetAxis(0)->SetRange(1+ipart,1+ipart);
347 fTPCr->GetAxis(6)->SetRange(1+ipart,1+ipart);
348 hisPIDMCRCSame_part[ipart] = (TH2F*)fTPCr->Projection(5,1);
349 if (!hisPIDMCRCSame_part[ipart]) continue;
350 hisPIDMCRCSame_partProfile[ipart]=(hisPIDMCRCSame_part[ipart]->ProfileX(Form("PIDpt_%d_%dProf",ipart,version)));
351 hisPIDMCRCSame_partProfile[ipart]->SetDirectory(0);
352 hisPIDMCRCSame_partProfile[ipart]->SetMaximum(1.0);
353 hisPIDMCRCSame_partProfile[ipart]->SetMinimum(0.0);
354 hisPIDMCRCSame_partProfile[ipart]->SetXTitle("p (GeV/c)");
355 hisPIDMCRCSame_partProfile[ipart]->SetYTitle("TPCr");
356 hisPIDMCRCSame_partProfile[ipart]->SetMarkerColor(kmicolors[ipart%5]);
357 hisPIDMCRCSame_partProfile[ipart]->SetMarkerStyle(22+ipart);
358 delete hisPIDMCRCSame_part[ipart];
359 }
360 if (gPad) gPad->SetLogx(kTRUE);
361 hisPIDMCRCSame_partProfile[0]->Draw("");
362 TLegend * legend = new TLegend(.7,.7, .99, .99, "TPC dEdx");
363 for (Int_t ipart=0;ipart<5;ipart++) {
364 hisPIDMCRCSame_partProfile[ipart]->Draw("same");
365 legend->AddEntry(hisPIDMCRCSame_partProfile[ipart],AliPID::ParticleName(ipart%5),"p");
366 }
367 legend->Draw();
368 gPad->SaveAs(selName+"pidPIDMCRCSame.gif");
369 gPad->SaveAs(selName+"pidPIDMCRCSame.eps");
370}
371
372
373/*
374
375
376TObjArray arr;
377TH2F * his = (TH2F*) GetProjection(fTPCsignalNorm,5,1 , 7,7, 0.2,5, -0.6,0.6, 130,160,0.5,1.3);
378his->FitSlicesY(0,0,-1,0,"QNR",&arr)
379 TH1F * hsigma = (TH1F*)arr.At(2);
380TH1F * hmean = (TH1F*)arr.At(1);
381hsigma->Divide(hmean);
382hsigma->Scale(100);
383hsigma->SetMaximum(10);
384hsigma->SetMinimum(0.0);
385hsigma->SetMarkerStyle(22);
386hsigma->SetYTitle("#sigma_{dEdx}/dEdx (%)");
387hsigma->Draw();
388gPad->SaveAs("pic/resoldEdx_pt.eps");
389gPad->SaveAs("pic/resoldEdx_pt.gif");
390
391
392*/
393/*
394 TObjArray arr;
395 TH2F * his = (TH2F*) GetProjection(fTPCsignalNorm,5,2 , 7,7, 0.6,1, -0.9,0.9, 0,160,0,1.3);
396 his->FitSlicesY(0,0,-1,0,"QNR",&arr)
397 TH1F * hsigma = (TH1F*)arr.At(2);
398 TH1F * hmean = (TH1F*)arr.At(1);
399 hsigma->Divide(hmean);
400 hsigma->Scale(100);
401 hsigma->SetMaximum(10);
402 hsigma->SetMinimum(0.0);
403 hsigma->SetMarkerStyle(22);
404 hsigma->SetYTitle("#sigma_{dEdx}/dEdx (%)");
405 hsigma->Draw();
406 gPad->SaveAs("pic/resoldEdx_theta.eps");
407 gPad->SaveAs("pic/resoldEdx_theta.gif");
408
409*/