]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/AliFlowTasks/AliAnalysisTaskPIDflowQA.cxx
coverity fixes, coding viols(some methods, constants and emuns are renamed!), V0...
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowTasks / AliAnalysisTaskPIDflowQA.cxx
CommitLineData
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
45ClassImp( AliAnalysisTaskPIDflowQA)
46
47//________________________________________________________________________
48AliAnalysisTaskPIDflowQA:: 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//________________________________________________________________________
157AliAnalysisTaskPIDflowQA:: 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//________________________________________________________________________
282void 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//________________________________________________________________________
587void 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//________________________________________________________________________
676void 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//________________________________________________________________________
689void 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//______________________________________________________________________________
807void 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 1001Float_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