]>
Commit | Line | Data |
---|---|---|
f98ea3f1 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial pures is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any pure. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* $Id$ */ | |
17 | ||
18 | // AliAnalysisTaskPIDflowQA: | |
19 | // QA for pid | |
20 | // | |
21 | //origin: Marek Chojnacki, Marek.Chojnacki@cern.ch | |
22 | //modified: Mikolaj Krzewicki, Mikolaj.Krzewicki@cern.ch | |
23 | ||
2b1eaa10 | 24 | #include <stdio.h> |
25 | ||
f98ea3f1 | 26 | #include "AliAnalysisTaskPIDflowQA.h" |
27 | #include "AliAnalysisManager.h" | |
28 | #include "AliESDEvent.h" | |
f98ea3f1 | 29 | #include "AliStack.h" |
30 | #include "AliMCEvent.h" | |
1a80f9f6 | 31 | #include "TH1F.h" |
f98ea3f1 | 32 | #include "TH2F.h" |
5104aa35 | 33 | #include "TProfile.h" |
f98ea3f1 | 34 | #include "TMath.h" |
f98ea3f1 | 35 | #include "AliVEvent.h" |
f98ea3f1 | 36 | #include "AliPID.h" |
37 | #include "AliCDBManager.h" | |
38 | #include "AliFlowEventCuts.h" | |
cdc20344 | 39 | #include "AliFlowTrackCuts.h" |
2b1eaa10 | 40 | #include "AliVEventHandler.h" |
41 | #include "AliInputEventHandler.h" | |
42 | #include "TTree.h" | |
43 | #include "TFile.h" | |
f98ea3f1 | 44 | |
45 | ClassImp( AliAnalysisTaskPIDflowQA) | |
46 | ||
47 | //________________________________________________________________________ | |
48 | AliAnalysisTaskPIDflowQA:: AliAnalysisTaskPIDflowQA(): | |
49 | AliAnalysisTaskSE("AliAnalysisTaskPIDflowQA"), | |
50 | fESD(NULL), | |
51 | fCuts(NULL), | |
52 | fEventCuts(NULL), | |
53 | fESDpid(NULL), | |
54 | fMC(kFALSE), | |
2b1eaa10 | 55 | fUseDebugFile(kFALSE), |
56 | fFile(NULL), | |
f98ea3f1 | 57 | fTPCsignal(NULL), |
1a80f9f6 | 58 | fTPCsignalPi(NULL), |
59 | fTPCsignalK(NULL), | |
60 | fTPCsignalP(NULL), | |
61 | fTPCsignalPimc(NULL), | |
62 | fTPCsignalKmc(NULL), | |
63 | fTPCsignalPmc(NULL), | |
64 | fTOFbeta(NULL), | |
65 | fTOFbetaE(NULL), | |
66 | fTOFbetaPi(NULL), | |
67 | fTOFbetaK(NULL), | |
68 | fTOFbetaP(NULL), | |
69 | fTOFinvbeta(NULL), | |
70 | fTOFinvbetaE(NULL), | |
71 | fTOFinvbetaPi(NULL), | |
72 | fTOFinvbetaK(NULL), | |
73 | fTOFinvbetaP(NULL), | |
74 | fTOFbetaAfterElectronsCuts(NULL), | |
75 | fTOFbetaAfterPionCuts(NULL), | |
76 | fTOFbetaAfterKaonCuts(NULL), | |
77 | fTOFbetaAfterProtonCuts(NULL), | |
78 | fTPCsignalAfterPionCuts(NULL), | |
79 | fTPCsignalAfterKaonCuts(NULL), | |
80 | fTPCsignalAfterProtonCuts(NULL), | |
81 | fTOFbetaAfterElectronsCuts1(NULL), | |
82 | fTOFbetaAfterPionCuts1(NULL), | |
83 | fTOFbetaAfterKaonCuts1(NULL), | |
84 | fTOFbetaAfterProtonCuts1(NULL), | |
85 | fTPCsignalAfterPionCuts1(NULL), | |
86 | fTPCsignalAfterKaonCuts1(NULL), | |
87 | fTPCsignalAfterProtonCuts1(NULL), | |
88 | fTOFbetaEafter(NULL), | |
89 | fTOFbetaPiafter(NULL), | |
90 | fTOFbetaKafter(NULL), | |
91 | fTOFbetaPafter(NULL), | |
92 | fTPCsignalPiafter(NULL), | |
93 | fTPCsignalKafter(NULL), | |
94 | fTPCsignalPafter(NULL), | |
95 | fTOFyieldSelEmcE(NULL), | |
96 | fTOFyieldSelPimcE(NULL), | |
97 | fTOFyieldSelKmcE(NULL), | |
98 | fTOFyieldSelPmcE(NULL), | |
99 | fTOFyieldSelEmcM(NULL), | |
100 | fTOFyieldSelPimcM(NULL), | |
101 | fTOFyieldSelKmcM(NULL), | |
102 | fTOFyieldSelPmcM(NULL), | |
103 | fTOFyieldSelEmcPi(NULL), | |
104 | fTOFyieldSelPimcPi(NULL), | |
105 | fTOFyieldSelKmcPi(NULL), | |
106 | fTOFyieldSelPmcPi(NULL), | |
107 | fTOFyieldSelEmcK(NULL), | |
108 | fTOFyieldSelPimcK(NULL), | |
109 | fTOFyieldSelKmcK(NULL), | |
110 | fTOFyieldSelPmcK(NULL), | |
111 | fTOFyieldSelEmcP(NULL), | |
112 | fTOFyieldSelPimcP(NULL), | |
113 | fTOFyieldSelKmcP(NULL), | |
114 | fTOFyieldSelPmcP(NULL), | |
115 | fTPCyieldSelEmcE(NULL), | |
116 | fTPCyieldSelPimcE(NULL), | |
117 | fTPCyieldSelKmcE(NULL), | |
118 | fTPCyieldSelPmcE(NULL), | |
119 | fTPCyieldSelEmcM(NULL), | |
120 | fTPCyieldSelPimcM(NULL), | |
121 | fTPCyieldSelKmcM(NULL), | |
122 | fTPCyieldSelPmcM(NULL), | |
123 | fTPCyieldSelEmcPi(NULL), | |
124 | fTPCyieldSelPimcPi(NULL), | |
125 | fTPCyieldSelKmcPi(NULL), | |
126 | fTPCyieldSelPmcPi(NULL), | |
127 | fTPCyieldSelEmcK(NULL), | |
128 | fTPCyieldSelPimcK(NULL), | |
129 | fTPCyieldSelKmcK(NULL), | |
130 | fTPCyieldSelPmcK(NULL), | |
131 | fTPCyieldSelEmcP(NULL), | |
132 | fTPCyieldSelPimcP(NULL), | |
133 | fTPCyieldSelKmcP(NULL), | |
134 | fTPCyieldSelPmcP(NULL), | |
135 | fTPCdedxAfterTOFpidPions(NULL), | |
136 | fTPCdedxAfterTOFpidKaons(NULL), | |
137 | fTPCdedxAfterTOFpidProtons(NULL), | |
f98ea3f1 | 138 | fPvsPt(NULL), |
5104aa35 | 139 | fMeanPvsP(NULL), |
cdc20344 | 140 | fTPCvsGlobalMult(NULL), |
141 | fStandardGlobalCuts(NULL), | |
142 | fStandardTPCCuts(NULL), | |
1a80f9f6 | 143 | fCutsTOFElectrons(NULL), |
144 | fCutsTOFPions(NULL), | |
145 | fCutsTOFKaons(NULL), | |
146 | fCutsTOFProtons(NULL), | |
147 | fCutsTPCElectrons(NULL), | |
148 | fCutsTPCPions(NULL), | |
149 | fCutsTPCKaons(NULL), | |
150 | fCutsTPCProtons(NULL), | |
5104aa35 | 151 | fOutputList(NULL) |
f98ea3f1 | 152 | { |
153 | //def ctor | |
154 | } | |
155 | ||
156 | //________________________________________________________________________ | |
157 | AliAnalysisTaskPIDflowQA:: AliAnalysisTaskPIDflowQA(const char *name): | |
158 | AliAnalysisTaskSE(name), | |
159 | fESD(NULL), | |
160 | fCuts(NULL), | |
161 | fEventCuts(NULL), | |
162 | fESDpid(NULL), | |
163 | fMC(kFALSE), | |
2b1eaa10 | 164 | fUseDebugFile(kFALSE), |
165 | fFile(NULL), | |
f98ea3f1 | 166 | fTPCsignal(NULL), |
1a80f9f6 | 167 | fTPCsignalPi(NULL), |
168 | fTPCsignalK(NULL), | |
169 | fTPCsignalP(NULL), | |
170 | fTPCsignalPimc(NULL), | |
171 | fTPCsignalKmc(NULL), | |
172 | fTPCsignalPmc(NULL), | |
173 | fTOFbeta(NULL), | |
174 | fTOFbetaE(NULL), | |
175 | fTOFbetaPi(NULL), | |
176 | fTOFbetaK(NULL), | |
177 | fTOFbetaP(NULL), | |
178 | fTOFinvbeta(NULL), | |
179 | fTOFinvbetaE(NULL), | |
180 | fTOFinvbetaPi(NULL), | |
181 | fTOFinvbetaK(NULL), | |
182 | fTOFinvbetaP(NULL), | |
183 | fTOFbetaAfterElectronsCuts(NULL), | |
184 | fTOFbetaAfterPionCuts(NULL), | |
185 | fTOFbetaAfterKaonCuts(NULL), | |
186 | fTOFbetaAfterProtonCuts(NULL), | |
187 | fTPCsignalAfterPionCuts(NULL), | |
188 | fTPCsignalAfterKaonCuts(NULL), | |
189 | fTPCsignalAfterProtonCuts(NULL), | |
190 | fTOFbetaAfterElectronsCuts1(NULL), | |
191 | fTOFbetaAfterPionCuts1(NULL), | |
192 | fTOFbetaAfterKaonCuts1(NULL), | |
193 | fTOFbetaAfterProtonCuts1(NULL), | |
194 | fTPCsignalAfterPionCuts1(NULL), | |
195 | fTPCsignalAfterKaonCuts1(NULL), | |
196 | fTPCsignalAfterProtonCuts1(NULL), | |
197 | fTOFbetaEafter(NULL), | |
198 | fTOFbetaPiafter(NULL), | |
199 | fTOFbetaKafter(NULL), | |
200 | fTOFbetaPafter(NULL), | |
201 | fTPCsignalPiafter(NULL), | |
202 | fTPCsignalKafter(NULL), | |
203 | fTPCsignalPafter(NULL), | |
204 | fTOFyieldSelEmcE(NULL), | |
205 | fTOFyieldSelPimcE(NULL), | |
206 | fTOFyieldSelKmcE(NULL), | |
207 | fTOFyieldSelPmcE(NULL), | |
208 | fTOFyieldSelEmcM(NULL), | |
209 | fTOFyieldSelPimcM(NULL), | |
210 | fTOFyieldSelKmcM(NULL), | |
211 | fTOFyieldSelPmcM(NULL), | |
212 | fTOFyieldSelEmcPi(NULL), | |
213 | fTOFyieldSelPimcPi(NULL), | |
214 | fTOFyieldSelKmcPi(NULL), | |
215 | fTOFyieldSelPmcPi(NULL), | |
216 | fTOFyieldSelEmcK(NULL), | |
217 | fTOFyieldSelPimcK(NULL), | |
218 | fTOFyieldSelKmcK(NULL), | |
219 | fTOFyieldSelPmcK(NULL), | |
220 | fTOFyieldSelEmcP(NULL), | |
221 | fTOFyieldSelPimcP(NULL), | |
222 | fTOFyieldSelKmcP(NULL), | |
223 | fTOFyieldSelPmcP(NULL), | |
224 | fTPCyieldSelEmcE(NULL), | |
225 | fTPCyieldSelPimcE(NULL), | |
226 | fTPCyieldSelKmcE(NULL), | |
227 | fTPCyieldSelPmcE(NULL), | |
228 | fTPCyieldSelEmcM(NULL), | |
229 | fTPCyieldSelPimcM(NULL), | |
230 | fTPCyieldSelKmcM(NULL), | |
231 | fTPCyieldSelPmcM(NULL), | |
232 | fTPCyieldSelEmcPi(NULL), | |
233 | fTPCyieldSelPimcPi(NULL), | |
234 | fTPCyieldSelKmcPi(NULL), | |
235 | fTPCyieldSelPmcPi(NULL), | |
236 | fTPCyieldSelEmcK(NULL), | |
237 | fTPCyieldSelPimcK(NULL), | |
238 | fTPCyieldSelKmcK(NULL), | |
239 | fTPCyieldSelPmcK(NULL), | |
240 | fTPCyieldSelEmcP(NULL), | |
241 | fTPCyieldSelPimcP(NULL), | |
242 | fTPCyieldSelKmcP(NULL), | |
243 | fTPCyieldSelPmcP(NULL), | |
244 | fTPCdedxAfterTOFpidPions(NULL), | |
245 | fTPCdedxAfterTOFpidKaons(NULL), | |
246 | fTPCdedxAfterTOFpidProtons(NULL), | |
f98ea3f1 | 247 | fPvsPt(NULL), |
5104aa35 | 248 | fMeanPvsP(NULL), |
cdc20344 | 249 | fTPCvsGlobalMult(NULL), |
250 | fStandardGlobalCuts(NULL), | |
251 | fStandardTPCCuts(NULL), | |
1a80f9f6 | 252 | fCutsTOFElectrons(NULL), |
253 | fCutsTOFPions(NULL), | |
254 | fCutsTOFKaons(NULL), | |
255 | fCutsTOFProtons(NULL), | |
256 | fCutsTPCElectrons(NULL), | |
257 | fCutsTPCPions(NULL), | |
258 | fCutsTPCKaons(NULL), | |
259 | fCutsTPCProtons(NULL), | |
5104aa35 | 260 | fOutputList(NULL) |
f98ea3f1 | 261 | { |
262 | //Constructor | |
263 | fESDpid=new AliESDpid(); | |
264 | ||
265 | //old | |
266 | fESDpid->GetTPCResponse().SetBetheBlochParameters(0.0283086, | |
267 | 2.63394e+01, | |
268 | 5.04114e-11, | |
269 | 2.12543e+00, | |
270 | 4.88663e+00 ); | |
271 | //new | |
272 | //fESDpid->GetTPCResponse().SetBetheBlochParameters(1.28949/50., | |
273 | // 2.74095e+01, | |
274 | // TMath::Exp(-3.21763e+01), | |
275 | // 2.44026, | |
276 | // 6.58800); | |
277 | ||
278 | DefineOutput(1, TList::Class()); | |
279 | } | |
280 | ||
281 | //________________________________________________________________________ | |
282 | void AliAnalysisTaskPIDflowQA::UserCreateOutputObjects() | |
283 | { | |
284 | //UserCreateOutputObject | |
5104aa35 | 285 | if (fOutputList) fOutputList->Delete(); |
286 | delete fOutputList; | |
287 | fOutputList=new TList(); | |
ef7cafb6 | 288 | fOutputList->SetOwner(kTRUE); |
f98ea3f1 | 289 | |
290 | const Int_t ndec=2; | |
291 | Int_t startvalue=-1; | |
292 | const Int_t npredec=50; | |
293 | Double_t tabx[ndec*npredec+1]; | |
294 | for (Int_t i=0; i<ndec; i++) | |
295 | { | |
296 | for (Int_t j=0; j<npredec; j++) | |
297 | { | |
298 | tabx[npredec*i+j]=TMath::Power(10,((Double_t)i)+((Double_t)startvalue)+((Double_t)j)/((Double_t)npredec)); | |
299 | } | |
300 | } | |
301 | tabx[ndec*npredec]=TMath::Power(10,ndec+startvalue); | |
302 | ||
f98ea3f1 | 303 | Int_t kPtBins=60; |
304 | Double_t binsPtDummy[kPtBins+1]; | |
305 | binsPtDummy[0]=0.0; | |
306 | for(int i=1; i<=kPtBins+1; i++) | |
307 | { | |
308 | if(binsPtDummy[i-1]+0.05<1.01) | |
309 | binsPtDummy[i]=binsPtDummy[i-1]+0.05; | |
310 | else | |
311 | binsPtDummy[i]=binsPtDummy[i-1]+0.1; | |
312 | } | |
313 | ||
314 | Int_t kPBins=60; | |
315 | Double_t binsPDummy[kPBins+1]; | |
316 | binsPDummy[0]=0.0; | |
317 | for(int i=1; i<=kPBins+1; i++) | |
318 | { | |
319 | if(binsPDummy[i-1]+0.05<1.01) | |
320 | binsPDummy[i]=binsPDummy[i-1]+0.05; | |
321 | else | |
322 | binsPDummy[i]=binsPDummy[i-1]+0.1; | |
323 | } | |
324 | ||
1a80f9f6 | 325 | fTPCsignal=new TH2F("fTPCsignal",";p [GeV/c];dEdx",kPBins,binsPDummy,500,0,500); |
326 | fOutputList->Add(fTPCsignal); | |
327 | fTPCdedxAfterTOFpidPions=new TH2F("fTPCsignalAfterTOFpions",";p [GeV/c];dEdx",kPBins,binsPDummy,500,0,500); | |
328 | fOutputList->Add(fTPCdedxAfterTOFpidPions); | |
329 | fTPCdedxAfterTOFpidKaons=new TH2F("fTPCsignalAfterTOFkaons",";p [GeV/c];dEdx",kPBins,binsPDummy,500,0,500); | |
330 | fOutputList->Add(fTPCdedxAfterTOFpidKaons); | |
331 | fTPCdedxAfterTOFpidProtons=new TH2F("fTPCsignalAfterTOFprotons",";p [GeV/c];dEdx",kPBins,binsPDummy,500,0,500); | |
332 | fOutputList->Add(fTPCdedxAfterTOFpidProtons); | |
333 | fTPCsignalAfterPionCuts=new TH2F("fTPCsignalAfterPionCuts",";p [GeV/c];dE/dx",kPBins,binsPDummy,500, 0., 500.);// | |
334 | fTPCsignalAfterKaonCuts=new TH2F("fTPCsignalAfterKaonCuts",";p [GeV/c];dE/dx",kPBins,binsPDummy,500, 0., 500.);// | |
335 | fTPCsignalAfterProtonCuts=new TH2F("fTPCsignalAfterProtonCuts",";p [GeV/c];dE/dx",kPBins,binsPDummy,500, 0., 500.);// | |
336 | fOutputList->Add(fTPCsignalAfterPionCuts); | |
337 | fOutputList->Add(fTPCsignalAfterKaonCuts); | |
338 | fOutputList->Add(fTPCsignalAfterProtonCuts); | |
339 | fTPCsignalAfterPionCuts1=new TH2F("fTPCsignalAfterPionCuts1",";p [GeV/c];dE/dx",kPBins,binsPDummy,500, 0., 500.);// | |
340 | fTPCsignalAfterKaonCuts1=new TH2F("fTPCsignalAfterKaonCuts1",";p [GeV/c];dE/dx",kPBins,binsPDummy,500, 0., 500.);// | |
341 | fTPCsignalAfterProtonCuts1=new TH2F("fTPCsignalAfterProtonCuts1",";p [GeV/c];dE/dx",kPBins,binsPDummy,500, 0., 500.);// | |
342 | fOutputList->Add(fTPCsignalAfterPionCuts1); | |
343 | fOutputList->Add(fTPCsignalAfterKaonCuts1); | |
344 | fOutputList->Add(fTPCsignalAfterProtonCuts1); | |
345 | ||
346 | fTPCsignalPi=new TH2F("fTPCsignalPi",";p [GeV/c];signal",kPBins,binsPDummy,300,-2,2);//TPC PID signal as function of p for pi+ | |
347 | fTPCsignalK=new TH2F("fTPCsignalK",";p [GeV/c];signal",kPBins,binsPDummy,300,-2,2);//TPC PID signal as function of p for K+ | |
348 | fTPCsignalP=new TH2F("fTPCsignalP",";p [GeV/c];signal",kPBins,binsPDummy,300,-2,2);//TPC PID signal as function of p for p | |
349 | fOutputList->Add(fTPCsignalPi); | |
350 | fOutputList->Add(fTPCsignalK); | |
351 | fOutputList->Add(fTPCsignalP); | |
352 | fTPCsignalPiafter=new TH2F("fTPCsignalPiafter",";p [GeV/c];(dE/dx-dE/dx_{#pi})/dE/dx_{#pi}",kPBins,binsPDummy,300, -2., 2.);// | |
353 | fTPCsignalKafter=new TH2F("fTPCsignalKafter",";p [GeV/c];(dE/dx-dE/dx_{K})/dE/dx_{K}",kPBins,binsPDummy,300, -2., 2.);// | |
354 | fTPCsignalPafter=new TH2F("fTPCsignalPafter",";p [GeV/c];(dE/dx-dE/dx_{p})/dE/dx_{p}",kPBins,binsPDummy,300, -2., 2.);// | |
355 | fOutputList->Add(fTPCsignalPiafter); | |
356 | fOutputList->Add(fTPCsignalKafter); | |
357 | fOutputList->Add(fTPCsignalPafter); | |
f98ea3f1 | 358 | |
359 | if(fMC) | |
360 | { | |
1a80f9f6 | 361 | fTPCsignalPimc=new TH2F("fTPCsignalPionsMC",";p [GeV/c];signal",kPBins,binsPDummy,600,-2,2);//TPC PID signal as function of pt for pi+ |
362 | fTPCsignalKmc=new TH2F("fTPCsignalKaonsMC",";p [GeV/c];signal",kPBins,binsPDummy,600,-2,2);//TPC PID signal as function of pt for K+ | |
363 | fTPCsignalPmc=new TH2F("fTPCsignalProtonsMC",";p [GeV/c];signal",kPBins,binsPDummy,600,-2,2);//TPC PID signal as function of pt for p | |
364 | fOutputList->Add(fTPCsignalPimc); | |
365 | fOutputList->Add(fTPCsignalKmc); | |
366 | fOutputList->Add(fTPCsignalPmc); | |
367 | } | |
368 | ||
369 | fTOFbeta=new TH2F("fTOFbeta",";p[GeV/c];#beta",kPBins,binsPDummy,1000, 0.4, 1.1);// | |
370 | fOutputList->Add(fTOFbeta); | |
371 | fTOFbetaE=new TH2F("fTOFbetaE",";p [GeV/c];#beta-#beta_{#pi}",kPBins,binsPDummy,500, -0.25, 0.25);// | |
372 | fTOFbetaPi=new TH2F("fTOFbetaPi",";p [GeV/c];#beta-#beta_{#pi}",kPBins,binsPDummy,500, -0.25, 0.25);// | |
373 | fTOFbetaK=new TH2F("fTOFbetaK",";p [GeV/c];#beta-#beta_{K}",kPBins,binsPDummy,500, -0.25, 0.25);// | |
374 | fTOFbetaP=new TH2F("fTOFbetaP",";p [GeV/c];#beta-#beta_{p}",kPBins,binsPDummy,500, -0.25, 0.25);// | |
375 | fOutputList->Add(fTOFbetaE); | |
376 | fOutputList->Add(fTOFbetaPi); | |
377 | fOutputList->Add(fTOFbetaK); | |
378 | fOutputList->Add(fTOFbetaP); | |
379 | ||
380 | fTOFinvbeta=new TH2F("fTOFinvbeta",";p[GeV/c];1/#beta",kPBins,binsPDummy,1000, 0.90, 2.5);// | |
381 | fOutputList->Add(fTOFinvbeta); | |
382 | fTOFinvbetaE=new TH2F("fTOFinvbetaE",";p [GeV/c];1/#beta-1/#beta_{#pi}",kPBins,binsPDummy,600, -0.3, 0.3);// | |
383 | fTOFinvbetaPi=new TH2F("fTOFinvbetaPi",";p [GeV/c];1/#beta-1/#beta_{#pi}",kPBins,binsPDummy,600, -0.3, 0.3);// | |
384 | fTOFinvbetaK=new TH2F("fTOFinvbetaK",";p [GeV/c];1/#beta-1/#beta_{K}",kPBins,binsPDummy,600, -0.3, 0.3);// | |
385 | fTOFinvbetaP=new TH2F("fTOFinvbetaP",";p [GeV/c];1/#beta-1/#beta_{p}",kPBins,binsPDummy,600, -0.3, 0.3);// | |
386 | fOutputList->Add(fTOFinvbetaE); | |
387 | fOutputList->Add(fTOFinvbetaPi); | |
388 | fOutputList->Add(fTOFinvbetaK); | |
389 | fOutputList->Add(fTOFinvbetaP); | |
390 | ||
391 | fTOFbetaAfterElectronsCuts=new TH2F("fTOFbetaAfterElectronsCuts",";p [GeV/c];#beta",kPBins,binsPDummy,1000, 0.4, 1.1);// | |
392 | fTOFbetaAfterPionCuts=new TH2F("fTOFbetaAfterPionCuts",";p [GeV/c];#beta",kPBins,binsPDummy,1000, 0.4, 1.1);// | |
393 | fTOFbetaAfterKaonCuts=new TH2F("fTOFbetaAfterKaonCuts",";p [GeV/c];#beta",kPBins,binsPDummy,1000, 0.4, 1.1);// | |
394 | fTOFbetaAfterProtonCuts=new TH2F("fTOFbetaAfterProtonCuts",";p [GeV/c];#beta",kPBins,binsPDummy,1000, 0.4, 1.1);// | |
395 | fOutputList->Add(fTOFbetaAfterElectronsCuts); | |
396 | fOutputList->Add(fTOFbetaAfterPionCuts); | |
397 | fOutputList->Add(fTOFbetaAfterKaonCuts); | |
398 | fOutputList->Add(fTOFbetaAfterProtonCuts); | |
399 | fTOFbetaAfterElectronsCuts1=new TH2F("fTOFbetaAfterElectronsCuts1",";p [GeV/c];#beta",kPBins,binsPDummy,1000, 0.4, 1.1);// | |
400 | fTOFbetaAfterPionCuts1=new TH2F("fTOFbetaAfterPionCuts1",";p [GeV/c];#beta",kPBins,binsPDummy,1000, 0.4, 1.1);// | |
401 | fTOFbetaAfterKaonCuts1=new TH2F("fTOFbetaAfterKaonCuts1",";p [GeV/c];#beta",kPBins,binsPDummy,1000, 0.4, 1.1);// | |
402 | fTOFbetaAfterProtonCuts1=new TH2F("fTOFbetaAfterProtonCuts1",";p [GeV/c];#beta",kPBins,binsPDummy,1000, 0.4, 1.1);// | |
403 | fOutputList->Add(fTOFbetaAfterElectronsCuts1); | |
404 | fOutputList->Add(fTOFbetaAfterPionCuts1); | |
405 | fOutputList->Add(fTOFbetaAfterKaonCuts1); | |
406 | fOutputList->Add(fTOFbetaAfterProtonCuts1); | |
407 | ||
408 | fTOFbetaEafter=new TH2F("fTOFbetaEafter",";p [GeV/c];#beta-#beta_{#pi}",kPBins,binsPDummy,500, -0.25, 0.25 );// | |
409 | fTOFbetaPiafter=new TH2F("fTOFbetaPiafter",";p [GeV/c];#beta-#beta_{#pi}",kPBins,binsPDummy,500, -0.25, 0.25 );// | |
410 | fTOFbetaKafter=new TH2F("fTOFbetaKafter",";p [GeV/c];#beta-#beta_{K}",kPBins,binsPDummy,500, -0.25, 0.25 );// | |
411 | fTOFbetaPafter=new TH2F("fTOFbetaPafter",";p [GeV/c];#beta-#beta_{p}",kPBins,binsPDummy,500, -0.25, 0.25 );// | |
412 | fOutputList->Add(fTOFbetaEafter); | |
413 | fOutputList->Add(fTOFbetaPiafter); | |
414 | fOutputList->Add(fTOFbetaKafter); | |
415 | fOutputList->Add(fTOFbetaPafter); | |
416 | ||
417 | if (fMC) | |
418 | { | |
419 | fTOFyieldSelEmcE = new TH1F("fTOFyieldSelEmcE",";p [Gev/c];",kPBins,binsPDummy); | |
420 | fTOFyieldSelPimcE = new TH1F("fTOFyieldSelPimcE",";p [Gev/c];",kPBins,binsPDummy); | |
421 | fTOFyieldSelKmcE = new TH1F("fTOFyieldSelKmcE",";p [Gev/c];",kPBins,binsPDummy); | |
422 | fTOFyieldSelPmcE = new TH1F("fTOFyieldSelPmcE",";p [Gev/c];",kPBins,binsPDummy); | |
423 | fOutputList->Add(fTOFyieldSelEmcE); | |
424 | fOutputList->Add(fTOFyieldSelPimcE); | |
425 | fOutputList->Add(fTOFyieldSelKmcE); | |
426 | fOutputList->Add(fTOFyieldSelPmcE); | |
427 | fTOFyieldSelEmcM = new TH1F("fTOFyieldSelEmcM",";p [Gev/c];",kPBins,binsPDummy); | |
428 | fTOFyieldSelPimcM = new TH1F("fTOFyieldSelPimcM",";p [Gev/c];",kPBins,binsPDummy); | |
429 | fTOFyieldSelKmcM = new TH1F("fTOFyieldSelKmcM",";p [Gev/c];",kPBins,binsPDummy); | |
430 | fTOFyieldSelPmcM = new TH1F("fTOFyieldSelPmcM",";p [Gev/c];",kPBins,binsPDummy); | |
431 | fOutputList->Add(fTOFyieldSelEmcM); | |
432 | fOutputList->Add(fTOFyieldSelPimcM); | |
433 | fOutputList->Add(fTOFyieldSelKmcM); | |
434 | fOutputList->Add(fTOFyieldSelPmcM); | |
435 | fTOFyieldSelEmcPi = new TH1F("fTOFyieldSelEmcPi",";p [Gev/c];",kPBins,binsPDummy); | |
436 | fTOFyieldSelPimcPi = new TH1F("fTOFyieldSelPimcPi",";p [Gev/c];",kPBins,binsPDummy); | |
437 | fTOFyieldSelKmcPi = new TH1F("fTOFyieldSelKmcPi",";p [Gev/c];",kPBins,binsPDummy); | |
438 | fTOFyieldSelPmcPi = new TH1F("fTOFyieldSelPmcPi",";p [Gev/c];",kPBins,binsPDummy); | |
439 | fOutputList->Add(fTOFyieldSelEmcPi); | |
440 | fOutputList->Add(fTOFyieldSelPimcPi); | |
441 | fOutputList->Add(fTOFyieldSelKmcPi); | |
442 | fOutputList->Add(fTOFyieldSelPmcPi); | |
443 | fTOFyieldSelEmcK = new TH1F("fTOFyieldSelEmcK",";p [Gev/c];",kPBins,binsPDummy); | |
444 | fTOFyieldSelPimcK = new TH1F("fTOFyieldSelPimcK",";p [Gev/c];",kPBins,binsPDummy); | |
445 | fTOFyieldSelKmcK = new TH1F("fTOFyieldSelKmcK",";p [Gev/c];",kPBins,binsPDummy); | |
446 | fTOFyieldSelPmcK = new TH1F("fTOFyieldSelPmcK",";p [Gev/c];",kPBins,binsPDummy); | |
447 | fOutputList->Add(fTOFyieldSelEmcK); | |
448 | fOutputList->Add(fTOFyieldSelPimcK); | |
449 | fOutputList->Add(fTOFyieldSelKmcK); | |
450 | fOutputList->Add(fTOFyieldSelPmcK); | |
451 | fTOFyieldSelEmcP = new TH1F("fTOFyieldSelEmcP",";p [Gev/c];",kPBins,binsPDummy); | |
452 | fTOFyieldSelPimcP = new TH1F("fTOFyieldSelPimcP",";p [Gev/c];",kPBins,binsPDummy); | |
453 | fTOFyieldSelKmcP = new TH1F("fTOFyieldSelKmcP",";p [Gev/c];",kPBins,binsPDummy); | |
454 | fTOFyieldSelPmcP = new TH1F("fTOFyieldSelPmcP",";p [Gev/c];",kPBins,binsPDummy); | |
455 | fOutputList->Add(fTOFyieldSelEmcP); | |
456 | fOutputList->Add(fTOFyieldSelPimcP); | |
457 | fOutputList->Add(fTOFyieldSelKmcP); | |
458 | fOutputList->Add(fTOFyieldSelPmcP); | |
459 | fTPCyieldSelEmcE = new TH1F("fTPCyieldSelEmcE",";p [Gev/c];",kPBins,binsPDummy); | |
460 | fTPCyieldSelPimcE = new TH1F("fTPCyieldSelPimcE",";p [Gev/c];",kPBins,binsPDummy); | |
461 | fTPCyieldSelKmcE = new TH1F("fTPCyieldSelKmcE",";p [Gev/c];",kPBins,binsPDummy); | |
462 | fTPCyieldSelPmcE = new TH1F("fTPCyieldSelPmcE",";p [Gev/c];",kPBins,binsPDummy); | |
463 | fOutputList->Add(fTPCyieldSelEmcE); | |
464 | fOutputList->Add(fTPCyieldSelPimcE); | |
465 | fOutputList->Add(fTPCyieldSelKmcE); | |
466 | fOutputList->Add(fTPCyieldSelPmcE); | |
467 | fTPCyieldSelEmcM = new TH1F("fTPCyieldSelEmcM",";p [Gev/c];",kPBins,binsPDummy); | |
468 | fTPCyieldSelPimcM = new TH1F("fTPCyieldSelPimcM",";p [Gev/c];",kPBins,binsPDummy); | |
469 | fTPCyieldSelKmcM = new TH1F("fTPCyieldSelKmcM",";p [Gev/c];",kPBins,binsPDummy); | |
470 | fTPCyieldSelPmcM = new TH1F("fTPCyieldSelPmcM",";p [Gev/c];",kPBins,binsPDummy); | |
471 | fOutputList->Add(fTPCyieldSelEmcM); | |
472 | fOutputList->Add(fTPCyieldSelPimcM); | |
473 | fOutputList->Add(fTPCyieldSelKmcM); | |
474 | fOutputList->Add(fTPCyieldSelPmcM); | |
475 | fTPCyieldSelEmcPi = new TH1F("fTPCyieldSelEmcPi",";p [Gev/c];",kPBins,binsPDummy); | |
476 | fTPCyieldSelPimcPi = new TH1F("fTPCyieldSelPimcPi",";p [Gev/c];",kPBins,binsPDummy); | |
477 | fTPCyieldSelKmcPi = new TH1F("fTPCyieldSelKmcPi",";p [Gev/c];",kPBins,binsPDummy); | |
478 | fTPCyieldSelPmcPi = new TH1F("fTPCyieldSelPmcPi",";p [Gev/c];",kPBins,binsPDummy); | |
479 | fOutputList->Add(fTPCyieldSelEmcPi); | |
480 | fOutputList->Add(fTPCyieldSelPimcPi); | |
481 | fOutputList->Add(fTPCyieldSelKmcPi); | |
482 | fOutputList->Add(fTPCyieldSelPmcPi); | |
483 | fTPCyieldSelEmcK = new TH1F("fTPCyieldSelEmcK",";p [Gev/c];",kPBins,binsPDummy); | |
484 | fTPCyieldSelPimcK = new TH1F("fTPCyieldSelPimcK",";p [Gev/c];",kPBins,binsPDummy); | |
485 | fTPCyieldSelKmcK = new TH1F("fTPCyieldSelKmcK",";p [Gev/c];",kPBins,binsPDummy); | |
486 | fTPCyieldSelPmcK = new TH1F("fTPCyieldSelPmcK",";p [Gev/c];",kPBins,binsPDummy); | |
487 | fOutputList->Add(fTPCyieldSelEmcK); | |
488 | fOutputList->Add(fTPCyieldSelPimcK); | |
489 | fOutputList->Add(fTPCyieldSelKmcK); | |
490 | fOutputList->Add(fTPCyieldSelPmcK); | |
491 | fTPCyieldSelEmcP = new TH1F("fTPCyieldSelEmcP",";p [Gev/c];",kPBins,binsPDummy); | |
492 | fTPCyieldSelPimcP = new TH1F("fTPCyieldSelPimcP",";p [Gev/c];",kPBins,binsPDummy); | |
493 | fTPCyieldSelKmcP = new TH1F("fTPCyieldSelKmcP",";p [Gev/c];",kPBins,binsPDummy); | |
494 | fTPCyieldSelPmcP = new TH1F("fTPCyieldSelPmcP",";p [Gev/c];",kPBins,binsPDummy); | |
495 | fOutputList->Add(fTPCyieldSelEmcP); | |
496 | fOutputList->Add(fTPCyieldSelPimcP); | |
497 | fOutputList->Add(fTPCyieldSelKmcP); | |
498 | fOutputList->Add(fTPCyieldSelPmcP); | |
f98ea3f1 | 499 | } |
500 | ||
a0241c3a | 501 | fPvsPt=new TH2F("fPvsPt","p vs p_{t};p [GeV/c];p_{t} [GeV/c]",kPBins,binsPDummy,kPtBins,binsPtDummy); |
5104aa35 | 502 | fOutputList->Add(fPvsPt); |
f98ea3f1 | 503 | |
a0241c3a | 504 | fMeanPvsP = new TProfile("fMeanPvsP","Mean P vs P;p [Gev/c];<p> [GeV/c]",kPBins,binsPDummy); |
5104aa35 | 505 | fOutputList->Add(fMeanPvsP); |
a0241c3a | 506 | |
cdc20344 | 507 | fTPCvsGlobalMult = new TH2F("fTPCvsGlobalMult","TPC only vs Global track multiplicity;global;TPC only",500,0,2500,500,0,3500); |
508 | fOutputList->Add(fTPCvsGlobalMult); | |
509 | ||
510 | fStandardGlobalCuts = AliFlowTrackCuts::GetStandardGlobalTrackCuts2010(); | |
1a80f9f6 | 511 | fStandardTPCCuts = AliFlowTrackCuts::GetStandardTPCStandaloneTrackCuts2010(); |
512 | ||
513 | fCutsTOFElectrons = new AliFlowTrackCuts("tof electron cuts"); | |
514 | fCutsTOFElectrons->SetPID(AliPID::kElectron, AliFlowTrackCuts::kTOFbeta); | |
515 | fCutsTOFElectrons->SetQA(); | |
516 | fCutsTOFPions = new AliFlowTrackCuts("tof pion cuts"); | |
517 | fCutsTOFPions->SetPID(AliPID::kPion, AliFlowTrackCuts::kTOFbeta); | |
518 | fCutsTOFPions->SetQA(); | |
519 | fCutsTOFKaons = new AliFlowTrackCuts("tof kaon cuts"); | |
520 | fCutsTOFKaons->SetPID(AliPID::kKaon, AliFlowTrackCuts::kTOFbeta); | |
521 | fCutsTOFKaons->SetQA(); | |
522 | fCutsTOFProtons = new AliFlowTrackCuts("tof proton cuts"); | |
523 | fCutsTOFProtons->SetPID(AliPID::kProton, AliFlowTrackCuts::kTOFbeta); | |
524 | fCutsTOFProtons->SetQA(); | |
525 | fCutsTPCElectrons = new AliFlowTrackCuts("tpc electron cuts"); | |
526 | fCutsTPCElectrons->SetPID(AliPID::kElectron, AliFlowTrackCuts::kTPCdedx); | |
527 | fCutsTPCElectrons->SetQA(); | |
528 | fCutsTPCPions = new AliFlowTrackCuts("tpc pion cuts"); | |
529 | fCutsTPCPions->SetPID(AliPID::kPion, AliFlowTrackCuts::kTPCdedx); | |
530 | fCutsTPCPions->SetQA(); | |
531 | fCutsTPCKaons = new AliFlowTrackCuts("tpc kaon cuts"); | |
532 | fCutsTPCKaons->SetPID(AliPID::kKaon, AliFlowTrackCuts::kTPCdedx); | |
533 | fCutsTPCKaons->SetQA(); | |
534 | fCutsTPCProtons = new AliFlowTrackCuts("tpc proton cuts"); | |
535 | fCutsTPCProtons->SetPID(AliPID::kProton, AliFlowTrackCuts::kTPCdedx); | |
536 | fCutsTPCProtons->SetQA(); | |
cdc20344 | 537 | |
a0241c3a | 538 | //fOutputList->Add(fESDpid); |
5104aa35 | 539 | |
1a80f9f6 | 540 | TH1* h=NULL; |
541 | h = static_cast<TH1*>(fCutsTOFPions->GetQA()->At(0)); | |
542 | h->SetName(Form("pion direct %s",h->GetName())); | |
543 | h = static_cast<TH1*>(fCutsTOFKaons->GetQA()->At(0)); | |
544 | h->SetName(Form("kaon direct %s",h->GetName())); | |
545 | h = static_cast<TH1*>(fCutsTOFProtons->GetQA()->At(0)); | |
546 | h->SetName(Form("proton direct %s",h->GetName())); | |
547 | fOutputList->Add(fCutsTOFPions->GetQA()->At(0)); | |
548 | fOutputList->Add(fCutsTOFKaons->GetQA()->At(0)); | |
549 | fOutputList->Add(fCutsTOFProtons->GetQA()->At(0)); | |
550 | ||
551 | h = static_cast<TH1*>(fCutsTOFPions->GetQA()->At(1)); | |
552 | h->SetName(Form("pion direct %s",h->GetName())); | |
553 | h = static_cast<TH1*>(fCutsTOFKaons->GetQA()->At(1)); | |
554 | h->SetName(Form("kaon direct %s",h->GetName())); | |
555 | h = static_cast<TH1*>(fCutsTOFProtons->GetQA()->At(1)); | |
556 | h->SetName(Form("proton direct %s",h->GetName())); | |
557 | fOutputList->Add(fCutsTOFPions->GetQA()->At(1)); | |
558 | fOutputList->Add(fCutsTOFKaons->GetQA()->At(1)); | |
559 | fOutputList->Add(fCutsTOFProtons->GetQA()->At(1)); | |
560 | ||
561 | h = static_cast<TH1*>(fCutsTOFPions->GetQA()->At(2)); | |
562 | h->SetName(Form("pion direct %s",h->GetName())); | |
563 | h = static_cast<TH1*>(fCutsTOFKaons->GetQA()->At(2)); | |
564 | h->SetName(Form("kaon direct %s",h->GetName())); | |
565 | h = static_cast<TH1*>(fCutsTOFProtons->GetQA()->At(2)); | |
566 | h->SetName(Form("proton direct %s",h->GetName())); | |
567 | fOutputList->Add(fCutsTOFPions->GetQA()->At(2)); | |
568 | fOutputList->Add(fCutsTOFKaons->GetQA()->At(2)); | |
569 | fOutputList->Add(fCutsTOFProtons->GetQA()->At(2)); | |
570 | ||
571 | h = static_cast<TH1*>(fCutsTOFPions->GetQA()->At(3)); | |
572 | h->SetName(Form("pion direct %s",h->GetName())); | |
573 | h = static_cast<TH1*>(fCutsTOFKaons->GetQA()->At(3)); | |
574 | h->SetName(Form("kaon direct %s",h->GetName())); | |
575 | h = static_cast<TH1*>(fCutsTOFProtons->GetQA()->At(3)); | |
576 | h->SetName(Form("proton direct %s",h->GetName())); | |
577 | fOutputList->Add(fCutsTOFPions->GetQA()->At(3)); | |
578 | fOutputList->Add(fCutsTOFKaons->GetQA()->At(3)); | |
579 | fOutputList->Add(fCutsTOFProtons->GetQA()->At(3)); | |
580 | ||
2b1eaa10 | 581 | if (fUseDebugFile) fFile = fopen("debug.txt","w"); |
582 | ||
5104aa35 | 583 | PostData(1, fOutputList); |
f98ea3f1 | 584 | } |
585 | ||
586 | //________________________________________________________________________ | |
587 | void AliAnalysisTaskPIDflowQA::UserExec(Option_t *) | |
588 | { | |
589 | fESD = dynamic_cast<AliESDEvent*> (InputEvent()); | |
590 | if (!fESD) return; | |
591 | ||
cb070a12 | 592 | //do the calibration bit |
593 | fESDpid->SetTOFResponse(fESD,AliESDpid::kTOF_T0); // to use T0-TOF | |
594 | fESDpid->MakePID(fESD,kFALSE); | |
595 | ||
f98ea3f1 | 596 | if(!fCuts || !fEventCuts) |
597 | { | |
598 | Printf("No CUTS Defined.........\n"); | |
5104aa35 | 599 | PostData(1, fOutputList); |
f98ea3f1 | 600 | return; |
601 | } | |
602 | ||
603 | if (!(fEventCuts->IsSelected(fESD))) | |
604 | { | |
605 | return; | |
606 | } | |
607 | ||
608 | AliStack* stack=0x0; | |
1a80f9f6 | 609 | AliMCEvent* mcEvent=NULL; |
f98ea3f1 | 610 | if(fMC) |
611 | { | |
1a80f9f6 | 612 | mcEvent = (AliMCEvent*) MCEvent(); |
f98ea3f1 | 613 | Printf("MC particles: %d", mcEvent->GetNumberOfTracks()); |
614 | stack = mcEvent->Stack(); | |
615 | } | |
616 | ||
617 | Printf("There are %d tracks in this event", fESD->GetNumberOfTracks()); | |
618 | Int_t nTracks=fESD->GetNumberOfTracks(); | |
619 | ||
620 | AliESDtrack *trackESD=0; | |
621 | ||
622 | for(int tr1=0; tr1<nTracks; tr1++) | |
623 | { | |
624 | trackESD=fESD->GetTrack(tr1); | |
625 | if (!trackESD) continue; | |
626 | ||
1a80f9f6 | 627 | Double_t p=trackESD->GetP(); |
628 | Double_t pt=trackESD->Pt(); | |
629 | ||
2b1eaa10 | 630 | if(!(fCuts->IsSelected(trackESD))) continue; |
f98ea3f1 | 631 | |
632 | Int_t label=-1; | |
633 | if(fMC) label=trackESD->GetLabel(); | |
634 | ||
635 | Int_t pdgcode=0; | |
636 | if(stack&&fMC) | |
637 | { | |
638 | TParticle* particle2 = stack->Particle(TMath::Abs(label)); | |
639 | pdgcode=particle2->GetPdgCode(); | |
640 | } | |
641 | ||
f98ea3f1 | 642 | fPvsPt->Fill(p,pt); |
5104aa35 | 643 | fMeanPvsP->Fill(p,p); |
f98ea3f1 | 644 | |
f98ea3f1 | 645 | pidTPC(trackESD,pdgcode); |
646 | pidTOF(trackESD,pdgcode); | |
647 | } | |
648 | ||
cdc20344 | 649 | //check the correlation between the global and TPConly number of tracks |
650 | fStandardGlobalCuts->SetEvent(fESD); | |
651 | fStandardTPCCuts->SetEvent(fESD); | |
2b1eaa10 | 652 | Int_t multGlobal = fStandardGlobalCuts->Count(); |
653 | Int_t multTPC = fStandardTPCCuts->Count(); | |
654 | fTPCvsGlobalMult->Fill(multGlobal,multTPC); | |
cdc20344 | 655 | |
2b1eaa10 | 656 | if (fFile) |
657 | { | |
658 | const AliESDVertex* pvtx = fESD->GetPrimaryVertex(); | |
659 | const AliESDVertex* tpcvtx = fESD->GetPrimaryVertexTPC(); | |
660 | const AliESDVertex* spdvtx = fESD->GetPrimaryVertexSPD(); | |
661 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
662 | AliVEventHandler* handler = mgr->GetInputEventHandler(); | |
663 | TTree* tree = handler->GetTree(); | |
664 | TFile* file = tree->GetCurrentFile(); | |
665 | if (multTPC>(23+1.216*multGlobal) || multTPC<(-20+1.087*multGlobal)) | |
666 | { | |
667 | fprintf(fFile, "%i %i %s %i\n",multTPC,multGlobal,file->GetName(),fESD->GetEventNumberInFile()); | |
668 | fprintf(fFile, " primary vertex: x: %.2f, y: %.2f, z: %.2f, n: %i\n", pvtx->GetX(), pvtx->GetY(), pvtx->GetZ(), pvtx->GetNContributors()); | |
669 | fprintf(fFile, " SPD vertex: x: %.2f, y: %.2f, z: %.2f, n: %i\n", spdvtx->GetX(), spdvtx->GetY(), spdvtx->GetZ(), spdvtx->GetNContributors()); | |
670 | fprintf(fFile, " TPC vertex: x: %.2f, y: %.2f, z: %.2f, n: %i\n", tpcvtx->GetX(), tpcvtx->GetY(), tpcvtx->GetZ(), tpcvtx->GetNContributors()); | |
671 | } | |
672 | } | |
f98ea3f1 | 673 | } |
674 | ||
675 | //________________________________________________________________________ | |
676 | void AliAnalysisTaskPIDflowQA::Terminate(Option_t *) | |
677 | { | |
678 | //Terminate | |
679 | if(fCuts) | |
680 | fCuts->Dump(); | |
681 | if(fMC) | |
682 | Printf("MC On\n"); | |
683 | ||
684 | Printf("AliAnalysisTaskPIDflowQA: end of Terminate"); | |
685 | } | |
686 | ||
f98ea3f1 | 687 | |
688 | //________________________________________________________________________ | |
689 | void AliAnalysisTaskPIDflowQA::pidTPC(AliESDtrack* t, Int_t pdgcode) | |
690 | { | |
1a80f9f6 | 691 | //do TPC pid |
4ea2bb6b | 692 | const AliExternalTrackParam* innerParam = t->GetInnerParam(); |
693 | if (!innerParam) return; | |
694 | Double_t pinTPCglobal=innerParam->GetP(); | |
1a80f9f6 | 695 | Double_t tpcSignal =t ->GetTPCsignal(); |
696 | Float_t p=innerParam->P(); | |
697 | Float_t pt=innerParam->Pt(); | |
f98ea3f1 | 698 | Float_t sigPion = fESDpid->GetTPCResponse().GetExpectedSignal(pinTPCglobal, AliPID::kPion); |
699 | Float_t sigKaon = fESDpid->GetTPCResponse().GetExpectedSignal(pinTPCglobal, AliPID::kKaon); | |
700 | Float_t sigProton = fESDpid->GetTPCResponse().GetExpectedSignal(pinTPCglobal, AliPID::kProton); | |
f98ea3f1 | 701 | if(!(sigPion>0.0&&sigKaon>0.0&&sigProton>0.0)) |
702 | return; | |
703 | ||
704 | fTPCsignal->Fill(pinTPCglobal,tpcSignal); | |
705 | ||
1a80f9f6 | 706 | fTPCsignalPi->Fill(p,(tpcSignal-sigPion)/sigPion); |
707 | fTPCsignalK->Fill(p,(tpcSignal-sigKaon)/sigKaon); | |
708 | fTPCsignalP->Fill(p,(tpcSignal-sigProton)/sigProton); | |
709 | ||
710 | if (fCutsTPCPions->IsSelected(t)) | |
711 | { | |
712 | fTPCsignalAfterPionCuts->Fill(p,tpcSignal); | |
713 | fTPCsignalPiafter->Fill(p,(tpcSignal-sigPion)/sigPion); | |
714 | if(fMC) | |
715 | { | |
716 | if (TMath::Abs(pdgcode)==11) | |
717 | { | |
718 | fTPCyieldSelPimcE->Fill(pt); | |
719 | } | |
720 | if (TMath::Abs(pdgcode)==13) | |
721 | { | |
722 | fTPCyieldSelPimcM->Fill(pt); | |
723 | } | |
724 | if (TMath::Abs(pdgcode)==211) | |
725 | { | |
726 | fTPCyieldSelPimcPi->Fill(pt); | |
727 | } | |
728 | else if(TMath::Abs(pdgcode)==321) | |
729 | { | |
730 | fTPCyieldSelPimcK->Fill(pt); | |
731 | } | |
732 | else if (TMath::Abs(pdgcode)==2212) | |
733 | { | |
734 | fTPCyieldSelPimcP->Fill(pt); | |
735 | } | |
736 | } | |
737 | } | |
738 | if (fCutsTPCKaons->IsSelected(t)) | |
739 | { | |
740 | fTPCsignalAfterKaonCuts->Fill(p,tpcSignal); | |
741 | fTPCsignalKafter->Fill(p,(tpcSignal-sigKaon)/sigKaon); | |
742 | if(fMC) | |
743 | { | |
744 | if (TMath::Abs(pdgcode)==11) | |
745 | { | |
746 | fTPCyieldSelKmcE->Fill(pt); | |
747 | } | |
748 | if (TMath::Abs(pdgcode)==13) | |
749 | { | |
750 | fTPCyieldSelKmcM->Fill(pt); | |
751 | } | |
752 | if (TMath::Abs(pdgcode)==211) | |
753 | { | |
754 | fTPCyieldSelKmcPi->Fill(pt); | |
755 | } | |
756 | else if(TMath::Abs(pdgcode)==321) | |
757 | { | |
758 | fTPCyieldSelKmcK->Fill(pt); | |
759 | } | |
760 | else if (TMath::Abs(pdgcode)==2212) | |
761 | { | |
762 | fTPCyieldSelKmcP->Fill(pt); | |
763 | } | |
764 | } | |
765 | } | |
766 | if (fCutsTPCProtons->IsSelected(t)) | |
767 | { | |
768 | fTPCsignalAfterProtonCuts->Fill(p,tpcSignal); | |
769 | fTPCsignalPafter->Fill(p,(tpcSignal-sigProton)/sigProton); | |
770 | if(fMC) | |
771 | { | |
772 | if (TMath::Abs(pdgcode)==11) | |
773 | { | |
774 | fTPCyieldSelPmcE->Fill(pt); | |
775 | } | |
776 | if (TMath::Abs(pdgcode)==13) | |
777 | { | |
778 | fTPCyieldSelPmcM->Fill(pt); | |
779 | } | |
780 | if (TMath::Abs(pdgcode)==211) | |
781 | { | |
782 | fTPCyieldSelPmcPi->Fill(pt); | |
783 | } | |
784 | else if(TMath::Abs(pdgcode)==321) | |
785 | { | |
786 | fTPCyieldSelPmcK->Fill(pt); | |
787 | } | |
788 | else if (TMath::Abs(pdgcode)==2212) | |
789 | { | |
790 | fTPCyieldSelPmcP->Fill(pt); | |
791 | } | |
792 | } | |
793 | } | |
f98ea3f1 | 794 | |
795 | if(fMC) | |
796 | { | |
797 | if(TMath::Abs(pdgcode)==211) | |
1a80f9f6 | 798 | fTPCsignalPimc->Fill(p,(tpcSignal-sigPion)/sigPion); |
f98ea3f1 | 799 | else if(TMath::Abs(pdgcode)==321) |
1a80f9f6 | 800 | fTPCsignalKmc->Fill(p,(tpcSignal-sigKaon)/sigKaon); |
f98ea3f1 | 801 | else if (TMath::Abs(pdgcode)==2212) |
1a80f9f6 | 802 | fTPCsignalPmc->Fill(p,(tpcSignal-sigProton)/sigProton); |
f98ea3f1 | 803 | } |
f98ea3f1 | 804 | } |
805 | ||
1a80f9f6 | 806 | //______________________________________________________________________________ |
807 | void AliAnalysisTaskPIDflowQA::pidTOF(AliESDtrack* track, Int_t pdgcode) | |
f98ea3f1 | 808 | { |
1a80f9f6 | 809 | //do TOF pid |
810 | Bool_t goodtrack = (track) && | |
811 | (track->GetStatus() & AliESDtrack::kTOFpid) && | |
812 | (track->GetTOFsignal() > 12000) && | |
813 | (track->GetTOFsignal() < 100000) && | |
814 | (track->GetIntegratedLength() > 365) && | |
815 | !(track->GetStatus() & AliESDtrack::kTOFmismatch); | |
f98ea3f1 | 816 | |
817 | if (!goodtrack) return; | |
818 | ||
1a80f9f6 | 819 | const AliExternalTrackParam* innerParam = track->GetInnerParam(); |
820 | if (!innerParam) return; | |
821 | Double_t pinTPCglobal=innerParam->GetP(); | |
822 | Double_t tpcSignal =track->GetTPCsignal(); | |
823 | const Float_t c = 2.99792457999999984e-02; | |
824 | Float_t p = track->GetP(); | |
825 | Float_t pt = track->Pt(); | |
826 | Float_t l = track->GetIntegratedLength(); | |
827 | Float_t trackT0 = fESDpid->GetTOFResponse().GetStartTime(p); | |
828 | Float_t timeTOF = track->GetTOFsignal()- trackT0; | |
829 | Double_t integratedTimes[5] = {-1.0,-1.0,-1.0,-1.0,-1.0}; | |
830 | track->GetIntegratedTimes(integratedTimes); | |
831 | ||
832 | //beta | |
833 | Float_t beta = l/timeTOF/c; | |
5104aa35 | 834 | Float_t betaHypothesis[5] = {0.0,0.0,0.0,0.0,0.0}; |
1a80f9f6 | 835 | Float_t betadiff[5] = {0.0,0.0,0.0,0.0,0.0}; |
5104aa35 | 836 | for (Int_t i=0;i<5;i++) |
837 | { | |
1a80f9f6 | 838 | betaHypothesis[i] = l/integratedTimes[i]/c; |
839 | betadiff[i] = beta-betaHypothesis[i]; | |
5104aa35 | 840 | } |
841 | ||
1a80f9f6 | 842 | //inverse beta |
843 | Float_t invbeta = 1/beta; | |
844 | Float_t invbetaHypothesis[5] = {0.0,0.0,0.0,0.0,0.0}; | |
845 | Float_t invbetadiff[5] = {0.0,0.0,0.0,0.0,0.0}; | |
846 | for (Int_t i=0;i<5;i++) | |
847 | { | |
848 | invbetaHypothesis[i] = 1/betaHypothesis[i]; | |
849 | invbetadiff[i] = invbeta-invbetaHypothesis[i]; | |
850 | } | |
f98ea3f1 | 851 | |
1a80f9f6 | 852 | /////////////simple cuts |
853 | Bool_t isPion = ( (betadiff[2]<0.015) && (betadiff[2]>-0.015) && | |
854 | (betadiff[3]>0.025) && | |
855 | (betadiff[4]>0.03) ); | |
856 | ||
857 | Bool_t isKaon = ( (betadiff[3]<0.015) && (betadiff[3]>-0.015) && | |
858 | (betadiff[2]<-0.03) && | |
859 | (betadiff[4]>0.03) ); | |
860 | ||
861 | Bool_t isProton = ( (betadiff[4]<0.015) && (betadiff[4]>-0.015) && | |
862 | (betadiff[3]<-0.025) && | |
863 | (betadiff[2]<-0.025) ); | |
864 | ||
865 | if (isPion) fTOFbetaAfterPionCuts1->Fill(p,beta); | |
866 | if (isKaon) fTOFbetaAfterKaonCuts1->Fill(p,beta); | |
867 | if (isProton) fTOFbetaAfterProtonCuts1->Fill(p,beta); | |
868 | ||
869 | //responses | |
870 | fTOFbeta->Fill(p,beta); | |
871 | fTOFbetaE->Fill(p,betadiff[0]); | |
872 | fTOFbetaPi->Fill(p,betadiff[2]); | |
873 | fTOFbetaK->Fill(p,betadiff[3]); | |
874 | fTOFbetaP->Fill(p,betadiff[4]); | |
875 | ||
876 | fTOFinvbeta->Fill(p,invbeta); | |
877 | fTOFinvbetaE->Fill(p,invbetadiff[0]); | |
878 | fTOFinvbetaPi->Fill(p,invbetadiff[2]); | |
879 | fTOFinvbetaK->Fill(p,invbetadiff[3]); | |
880 | fTOFinvbetaP->Fill(p,invbetadiff[4]); | |
881 | ||
882 | if (fCutsTOFElectrons->PassesTOFbetaCut(track)) | |
f98ea3f1 | 883 | { |
1a80f9f6 | 884 | fTOFbetaAfterElectronsCuts->Fill(p,beta); |
885 | fTOFbetaEafter->Fill(p,beta-betaHypothesis[0]); | |
886 | if(fMC) | |
887 | { | |
888 | if (TMath::Abs(pdgcode)==11) | |
889 | { | |
890 | fTOFyieldSelEmcE->Fill(pt); | |
891 | } | |
892 | if (TMath::Abs(pdgcode)==13) | |
893 | { | |
894 | fTOFyieldSelEmcM->Fill(pt); | |
895 | } | |
896 | if (TMath::Abs(pdgcode)==211) | |
897 | { | |
898 | fTOFyieldSelEmcPi->Fill(pt); | |
899 | } | |
900 | else if(TMath::Abs(pdgcode)==321) | |
901 | { | |
902 | fTOFyieldSelEmcK->Fill(pt); | |
903 | } | |
904 | else if (TMath::Abs(pdgcode)==2212) | |
905 | { | |
906 | fTOFyieldSelEmcP->Fill(pt); | |
907 | } | |
908 | } | |
f98ea3f1 | 909 | } |
1a80f9f6 | 910 | if (fCutsTOFPions->PassesTOFbetaCut(track)) |
911 | { | |
912 | fTPCdedxAfterTOFpidPions->Fill(pinTPCglobal,tpcSignal); | |
913 | fTOFbetaAfterPionCuts->Fill(p,beta); | |
914 | fTOFbetaPiafter->Fill(p,beta-betaHypothesis[2]); | |
915 | if(fMC) | |
916 | { | |
917 | if (TMath::Abs(pdgcode)==11) | |
918 | { | |
919 | fTOFyieldSelPimcE->Fill(pt); | |
920 | } | |
921 | if (TMath::Abs(pdgcode)==13) | |
922 | { | |
923 | fTOFyieldSelPimcM->Fill(pt); | |
924 | } | |
925 | if (TMath::Abs(pdgcode)==211) | |
926 | { | |
927 | fTOFyieldSelPimcPi->Fill(pt); | |
928 | } | |
929 | else if(TMath::Abs(pdgcode)==321) | |
930 | { | |
931 | fTOFyieldSelPimcK->Fill(pt); | |
932 | } | |
933 | else if (TMath::Abs(pdgcode)==2212) | |
934 | { | |
935 | fTOFyieldSelPimcP->Fill(pt); | |
936 | } | |
937 | } | |
938 | } | |
939 | if (fCutsTOFKaons->PassesTOFbetaCut(track)) | |
940 | { | |
941 | fTPCdedxAfterTOFpidKaons->Fill(pinTPCglobal,tpcSignal); | |
942 | fTOFbetaAfterKaonCuts->Fill(p,beta); | |
943 | fTOFbetaKafter->Fill(p,beta-betaHypothesis[3]); | |
944 | if(fMC) | |
945 | { | |
946 | if (TMath::Abs(pdgcode)==11) | |
947 | { | |
948 | fTOFyieldSelKmcE->Fill(pt); | |
949 | } | |
950 | if (TMath::Abs(pdgcode)==13) | |
951 | { | |
952 | fTOFyieldSelKmcM->Fill(pt); | |
953 | } | |
954 | if (TMath::Abs(pdgcode)==211) | |
955 | { | |
956 | fTOFyieldSelKmcPi->Fill(pt); | |
957 | } | |
958 | else if(TMath::Abs(pdgcode)==321) | |
959 | { | |
960 | fTOFyieldSelKmcK->Fill(pt); | |
961 | } | |
962 | else if (TMath::Abs(pdgcode)==2212) | |
963 | { | |
964 | fTOFyieldSelKmcP->Fill(pt); | |
965 | } | |
966 | } | |
967 | } | |
968 | if (fCutsTOFProtons->PassesTOFbetaCut(track)) | |
969 | { | |
970 | fTPCdedxAfterTOFpidProtons->Fill(pinTPCglobal,tpcSignal); | |
971 | fTOFbetaAfterProtonCuts->Fill(p,beta); | |
972 | fTOFbetaPafter->Fill(p,beta-betaHypothesis[4]); | |
973 | if(fMC) | |
974 | { | |
975 | if (TMath::Abs(pdgcode)==11) | |
976 | { | |
977 | fTOFyieldSelPmcE->Fill(pt); | |
978 | } | |
979 | if (TMath::Abs(pdgcode)==13) | |
980 | { | |
981 | fTOFyieldSelPmcM->Fill(pt); | |
982 | } | |
983 | if (TMath::Abs(pdgcode)==211) | |
984 | { | |
985 | fTOFyieldSelPmcPi->Fill(pt); | |
986 | } | |
987 | else if(TMath::Abs(pdgcode)==321) | |
988 | { | |
989 | fTOFyieldSelPmcK->Fill(pt); | |
990 | } | |
991 | else if (TMath::Abs(pdgcode)==2212) | |
992 | { | |
993 | fTOFyieldSelPmcP->Fill(pt); | |
994 | } | |
995 | } | |
996 | } | |
997 | ||
f98ea3f1 | 998 | } |
999 | ||
1a80f9f6 | 1000 | //______________________________________________________________________________ |
5104aa35 | 1001 | Float_t AliAnalysisTaskPIDflowQA::Beta(Float_t m, Float_t p) |
1002 | { | |
1003 | //get theoretical beta | |
1004 | return TMath::Sqrt(1. / (1. + m * m / (p * p))); | |
1005 | } | |
1006 |