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