]>
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 | ||
24 | #include "AliAnalysisTaskPIDflowQA.h" | |
25 | #include "AliAnalysisManager.h" | |
26 | #include "AliESDEvent.h" | |
27 | #include "AliInputEventHandler.h" | |
28 | #include "AliStack.h" | |
29 | #include "AliMCEvent.h" | |
f98ea3f1 | 30 | #include "TH2F.h" |
5104aa35 | 31 | #include "TProfile.h" |
f98ea3f1 | 32 | #include "TMath.h" |
f98ea3f1 | 33 | #include "AliVEvent.h" |
34 | #include "AliESDtrackCuts.h" | |
35 | #include "AliPID.h" | |
36 | #include "AliCDBManager.h" | |
37 | #include "AliFlowEventCuts.h" | |
38 | ||
39 | ClassImp( AliAnalysisTaskPIDflowQA) | |
40 | ||
41 | //________________________________________________________________________ | |
42 | AliAnalysisTaskPIDflowQA:: AliAnalysisTaskPIDflowQA(): | |
43 | AliAnalysisTaskSE("AliAnalysisTaskPIDflowQA"), | |
44 | fESD(NULL), | |
45 | fCuts(NULL), | |
46 | fEventCuts(NULL), | |
47 | fESDpid(NULL), | |
48 | fMC(kFALSE), | |
49 | fITSsignal(NULL), | |
50 | fTPCsignal(NULL), | |
51 | fTOFsignal(NULL), | |
52 | fITSsignalpi(NULL), | |
53 | fTPCsignalpi(NULL), | |
54 | fTOFsignalpi(NULL), | |
55 | fITSsignalK(NULL), | |
56 | fTPCsignalK(NULL), | |
57 | fTOFsignalK(NULL), | |
58 | fITSsignalp(NULL), | |
59 | fTPCsignalp(NULL), | |
60 | fTOFsignalp(NULL), | |
61 | fITSsignalpiMC(NULL), | |
62 | fTPCsignalpiMC(NULL), | |
63 | fTOFsignalpiMC(NULL), | |
64 | fITSsignalKMC(NULL), | |
65 | fTPCsignalKMC(NULL), | |
66 | fTOFsignalKMC(NULL), | |
67 | fITSsignalpMC(NULL), | |
68 | fTPCsignalpMC(NULL), | |
69 | fTOFsignalpMC(NULL), | |
70 | fITSsignalpip(NULL), | |
71 | fTPCsignalpip(NULL), | |
72 | fTOFsignalpip(NULL), | |
73 | fITSsignalKp(NULL), | |
74 | fTPCsignalKp(NULL), | |
75 | fTOFsignalKp(NULL), | |
76 | fITSsignalpp(NULL), | |
77 | fTPCsignalpp(NULL), | |
78 | fTOFsignalpp(NULL), | |
79 | fITSsignalpiMCp(NULL), | |
80 | fTPCsignalpiMCp(NULL), | |
81 | fTOFsignalpiMCp(NULL), | |
82 | fITSsignalKMCp(NULL), | |
83 | fTPCsignalKMCp(NULL), | |
84 | fTOFsignalKMCp(NULL), | |
85 | fITSsignalpMCp(NULL), | |
86 | fTPCsignalpMCp(NULL), | |
87 | fTOFsignalpMCp(NULL), | |
88 | fTOFsignalPiExpKvsPt(NULL), | |
89 | fTOFsignalPiExpPvsPt(NULL), | |
90 | fTOFsignalKExpPivsPt(NULL), | |
91 | fTOFsignalKExpPvsPt(NULL), | |
92 | fTOFsignalPExpPivsPt(NULL), | |
93 | fTOFsignalPExpKvsPt(NULL), | |
94 | fTOFsignalPiExpKvsP(NULL), | |
95 | fTOFsignalPiExpPvsP(NULL), | |
96 | fTOFsignalKExpPivsP(NULL), | |
97 | fTOFsignalKExpPvsP(NULL), | |
98 | fTOFsignalPExpPivsP(NULL), | |
99 | fTOFsignalPExpKvsP(NULL), | |
5104aa35 | 100 | fTOFsignalBeta(NULL), |
101 | fTOFsignalPiBeta(NULL), | |
102 | fTOFsignalKBeta(NULL), | |
103 | fTOFsignalPBeta(NULL), | |
f98ea3f1 | 104 | fPvsPt(NULL), |
5104aa35 | 105 | fMeanPvsP(NULL), |
106 | fMeanPtvsPt(NULL), | |
107 | fOutputList(NULL) | |
f98ea3f1 | 108 | { |
109 | //def ctor | |
110 | } | |
111 | ||
112 | //________________________________________________________________________ | |
113 | AliAnalysisTaskPIDflowQA:: AliAnalysisTaskPIDflowQA(const char *name): | |
114 | AliAnalysisTaskSE(name), | |
115 | fESD(NULL), | |
116 | fCuts(NULL), | |
117 | fEventCuts(NULL), | |
118 | fESDpid(NULL), | |
119 | fMC(kFALSE), | |
120 | fITSsignal(NULL), | |
121 | fTPCsignal(NULL), | |
122 | fTOFsignal(NULL), | |
123 | fITSsignalpi(NULL), | |
124 | fTPCsignalpi(NULL), | |
125 | fTOFsignalpi(NULL), | |
126 | fITSsignalK(NULL), | |
127 | fTPCsignalK(NULL), | |
128 | fTOFsignalK(NULL), | |
129 | fITSsignalp(NULL), | |
130 | fTPCsignalp(NULL), | |
131 | fTOFsignalp(NULL), | |
132 | fITSsignalpiMC(NULL), | |
133 | fTPCsignalpiMC(NULL), | |
134 | fTOFsignalpiMC(NULL), | |
135 | fITSsignalKMC(NULL), | |
136 | fTPCsignalKMC(NULL), | |
137 | fTOFsignalKMC(NULL), | |
138 | fITSsignalpMC(NULL), | |
139 | fTPCsignalpMC(NULL), | |
140 | fTOFsignalpMC(NULL), | |
141 | fITSsignalpip(NULL), | |
142 | fTPCsignalpip(NULL), | |
143 | fTOFsignalpip(NULL), | |
144 | fITSsignalKp(NULL), | |
145 | fTPCsignalKp(NULL), | |
146 | fTOFsignalKp(NULL), | |
147 | fITSsignalpp(NULL), | |
148 | fTPCsignalpp(NULL), | |
149 | fTOFsignalpp(NULL), | |
150 | fITSsignalpiMCp(NULL), | |
151 | fTPCsignalpiMCp(NULL), | |
152 | fTOFsignalpiMCp(NULL), | |
153 | fITSsignalKMCp(NULL), | |
154 | fTPCsignalKMCp(NULL), | |
155 | fTOFsignalKMCp(NULL), | |
156 | fITSsignalpMCp(NULL), | |
157 | fTPCsignalpMCp(NULL), | |
158 | fTOFsignalpMCp(NULL), | |
159 | fTOFsignalPiExpKvsPt(NULL), | |
160 | fTOFsignalPiExpPvsPt(NULL), | |
161 | fTOFsignalKExpPivsPt(NULL), | |
162 | fTOFsignalKExpPvsPt(NULL), | |
163 | fTOFsignalPExpPivsPt(NULL), | |
164 | fTOFsignalPExpKvsPt(NULL), | |
165 | fTOFsignalPiExpKvsP(NULL), | |
166 | fTOFsignalPiExpPvsP(NULL), | |
167 | fTOFsignalKExpPivsP(NULL), | |
168 | fTOFsignalKExpPvsP(NULL), | |
169 | fTOFsignalPExpPivsP(NULL), | |
170 | fTOFsignalPExpKvsP(NULL), | |
5104aa35 | 171 | fTOFsignalBeta(NULL), |
172 | fTOFsignalPiBeta(NULL), | |
173 | fTOFsignalKBeta(NULL), | |
174 | fTOFsignalPBeta(NULL), | |
f98ea3f1 | 175 | fPvsPt(NULL), |
5104aa35 | 176 | fMeanPvsP(NULL), |
177 | fMeanPtvsPt(NULL), | |
178 | fOutputList(NULL) | |
f98ea3f1 | 179 | { |
180 | //Constructor | |
181 | fESDpid=new AliESDpid(); | |
182 | ||
183 | //old | |
184 | fESDpid->GetTPCResponse().SetBetheBlochParameters(0.0283086, | |
185 | 2.63394e+01, | |
186 | 5.04114e-11, | |
187 | 2.12543e+00, | |
188 | 4.88663e+00 ); | |
189 | //new | |
190 | //fESDpid->GetTPCResponse().SetBetheBlochParameters(1.28949/50., | |
191 | // 2.74095e+01, | |
192 | // TMath::Exp(-3.21763e+01), | |
193 | // 2.44026, | |
194 | // 6.58800); | |
195 | ||
196 | DefineOutput(1, TList::Class()); | |
197 | } | |
198 | ||
199 | //________________________________________________________________________ | |
200 | void AliAnalysisTaskPIDflowQA::UserCreateOutputObjects() | |
201 | { | |
202 | //UserCreateOutputObject | |
5104aa35 | 203 | if (fOutputList) fOutputList->Delete(); |
204 | delete fOutputList; | |
205 | fOutputList=new TList(); | |
f98ea3f1 | 206 | |
207 | const Int_t ndec=2; | |
208 | Int_t startvalue=-1; | |
209 | const Int_t npredec=50; | |
210 | Double_t tabx[ndec*npredec+1]; | |
211 | for (Int_t i=0; i<ndec; i++) | |
212 | { | |
213 | for (Int_t j=0; j<npredec; j++) | |
214 | { | |
215 | tabx[npredec*i+j]=TMath::Power(10,((Double_t)i)+((Double_t)startvalue)+((Double_t)j)/((Double_t)npredec)); | |
216 | } | |
217 | } | |
218 | tabx[ndec*npredec]=TMath::Power(10,ndec+startvalue); | |
219 | ||
220 | ||
221 | fITSsignal=new TH2F("fITSsignal","fITSsignal;dEdx;p[GeV/c]",ndec*npredec,tabx,900,0,900); | |
5104aa35 | 222 | fOutputList->Add(fITSsignal); |
f98ea3f1 | 223 | fTPCsignal=new TH2F("fTPCsignal","fTPCsignal;dEdx;p[GeV/c]",ndec*npredec,tabx,900,0,900); |
5104aa35 | 224 | fOutputList->Add(fTPCsignal); |
f98ea3f1 | 225 | fTOFsignal=new TH2F("fTOFsignal","fTOFsignal;t-t_{#pi};p[GeV/c]",ndec*npredec,tabx,1200,-2000,10000); |
5104aa35 | 226 | fOutputList->Add(fTOFsignal); |
f98ea3f1 | 227 | |
228 | Int_t kPtBins=60; | |
229 | Double_t binsPtDummy[kPtBins+1]; | |
230 | binsPtDummy[0]=0.0; | |
231 | for(int i=1; i<=kPtBins+1; i++) | |
232 | { | |
233 | if(binsPtDummy[i-1]+0.05<1.01) | |
234 | binsPtDummy[i]=binsPtDummy[i-1]+0.05; | |
235 | else | |
236 | binsPtDummy[i]=binsPtDummy[i-1]+0.1; | |
237 | } | |
238 | ||
239 | Int_t kPBins=60; | |
240 | Double_t binsPDummy[kPBins+1]; | |
241 | binsPDummy[0]=0.0; | |
242 | for(int i=1; i<=kPBins+1; i++) | |
243 | { | |
244 | if(binsPDummy[i-1]+0.05<1.01) | |
245 | binsPDummy[i]=binsPDummy[i-1]+0.05; | |
246 | else | |
247 | binsPDummy[i]=binsPDummy[i-1]+0.1; | |
248 | } | |
249 | ||
250 | fITSsignalpi=new TH2F("fITSsignalpi",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//ITS PID signal as function of pt for pi+ | |
251 | fTPCsignalpi=new TH2F("fTPCsignalpi",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//TPC PID signal as function of pt for pi+ | |
252 | fTOFsignalpi=new TH2F("fTOFsignalpi",";pt[GeV/c];signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt for pi+ | |
5104aa35 | 253 | fOutputList->Add(fITSsignalpi); |
254 | fOutputList->Add(fTPCsignalpi); | |
255 | fOutputList->Add(fTOFsignalpi); | |
f98ea3f1 | 256 | |
257 | fITSsignalK=new TH2F("fITSsignalK",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//ITS PID signal as function of pt for K+ | |
258 | fTPCsignalK=new TH2F("fTPCsignalK",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//TPC PID signal as function of pt for K+ | |
259 | fTOFsignalK=new TH2F("fTOFsignalK",";pt[GeV/c];signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt for K+ | |
5104aa35 | 260 | fOutputList->Add(fITSsignalK); |
261 | fOutputList->Add(fTPCsignalK); | |
262 | fOutputList->Add(fTOFsignalK); | |
f98ea3f1 | 263 | |
264 | fITSsignalp=new TH2F("fITSsignalp",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//ITS PID signal as function of pt for p | |
265 | fTPCsignalp=new TH2F("fTPCsignalp",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//TPC PID signal as function of pt for p | |
266 | fTOFsignalp=new TH2F("fTOFsignalp",";pt[GeV/c];signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt for p | |
5104aa35 | 267 | fOutputList->Add(fITSsignalp); |
268 | fOutputList->Add(fTPCsignalp); | |
269 | fOutputList->Add(fTOFsignalp); | |
f98ea3f1 | 270 | |
271 | fTOFsignalPiExpKvsPt=new TH2F("fTOFsignalPiExpKvsPt",";pt[GeV/c];expected signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
272 | fTOFsignalPiExpPvsPt=new TH2F("fTOFsignalPiExpPvsPt",";pt[GeV/c];expected signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
273 | fTOFsignalKExpPivsPt=new TH2F("fTOFsignalKExpPivsPt",";pt[GeV/c];expected signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
274 | fTOFsignalKExpPvsPt=new TH2F("fTOFsignalKExpPvsPt",";pt[GeV/c];expected signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
275 | fTOFsignalPExpPivsPt=new TH2F("fTOFsignalPExpPivsPt",";pt[GeV/c];expected signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
276 | fTOFsignalPExpKvsPt=new TH2F("fTOFsignalPExpKvsPt",";pt[GeV/c];expected signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
5104aa35 | 277 | fOutputList->Add(fTOFsignalPiExpKvsPt); |
278 | fOutputList->Add(fTOFsignalPiExpPvsPt); | |
279 | fOutputList->Add(fTOFsignalKExpPivsPt); | |
280 | fOutputList->Add(fTOFsignalKExpPvsPt); | |
281 | fOutputList->Add(fTOFsignalPExpPivsPt); | |
282 | fOutputList->Add(fTOFsignalPExpKvsPt); | |
f98ea3f1 | 283 | |
284 | //p | |
285 | fITSsignalpip=new TH2F("fITSsignalpip",";p[GeV/c];signal",kPBins,binsPDummy,600,-4,4);//ITS PID signal as function of p for pi+ | |
286 | fTPCsignalpip=new TH2F("fTPCsignalpip",";p[GeV/c];signal",kPBins,binsPDummy,600,-4,4);//TPC PID signal as function of p for pi+ | |
287 | fTOFsignalpip=new TH2F("fTOFsignalpip",";p[GeV/c];signal",kPBins,binsPDummy,1000,-8000,8000);//TOF PID signal as function of p for pi+ | |
5104aa35 | 288 | fOutputList->Add(fITSsignalpip); |
289 | fOutputList->Add(fTPCsignalpip); | |
290 | fOutputList->Add(fTOFsignalpip); | |
f98ea3f1 | 291 | |
292 | fITSsignalKp=new TH2F("fITSsignalKp",";p[GeV/c];signal",kPBins,binsPDummy,600,-4,4);//ITS PID signal as function of p for K+ | |
293 | fTPCsignalKp=new TH2F("fTPCsignalKp",";p[GeV/c];signal",kPBins,binsPDummy,600,-4,4);//TPC PID signal as function of p for K+ | |
294 | fTOFsignalKp=new TH2F("fTOFsignalKp",";p[GeV/c];signal",kPBins,binsPDummy,1000,-8000,8000);//TOF PID signal as function of p for K+ | |
5104aa35 | 295 | fOutputList->Add(fITSsignalKp); |
296 | fOutputList->Add(fTPCsignalKp); | |
297 | fOutputList->Add(fTOFsignalKp); | |
f98ea3f1 | 298 | |
299 | fITSsignalpp=new TH2F("fITSsignalpp",";p[GeV/c];signal",kPBins,binsPDummy,600,-4,4);//ITS PID signal as function of p for p | |
300 | fTPCsignalpp=new TH2F("fTPCsignalpp",";p[GeV/c];signal",kPBins,binsPDummy,600,-4,4);//TPC PID signal as function of p for p | |
301 | fTOFsignalpp=new TH2F("fTOFsignalpp",";p[GeV/c];signal",kPBins,binsPDummy,1000,-8000,8000);//TOF PID signal as function of p for p | |
5104aa35 | 302 | fOutputList->Add(fITSsignalpp); |
303 | fOutputList->Add(fTPCsignalpp); | |
304 | fOutputList->Add(fTOFsignalpp); | |
f98ea3f1 | 305 | |
306 | fTOFsignalPiExpKvsP=new TH2F("fTOFsignalPiExpKvsP",";p[GeV/c];expected signal",kPBins,binsPDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
307 | fTOFsignalPiExpPvsP=new TH2F("fTOFsignalPiExpPvsP",";p[GeV/c];expected signal",kPBins,binsPDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
308 | fTOFsignalKExpPivsP=new TH2F("fTOFsignalKExpPivsP",";p[GeV/c];expected signal",kPBins,binsPDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
309 | fTOFsignalKExpPvsP=new TH2F("fTOFsignalKExpPvsP",";p[GeV/c];expected signal",kPBins,binsPDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
310 | fTOFsignalPExpPivsP=new TH2F("fTOFsignalPExpPivsP",";p[GeV/c];expected signal",kPBins,binsPDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
311 | fTOFsignalPExpKvsP=new TH2F("fTOFsignalPExpKvsP",";p[GeV/c];expected signal",kPBins,binsPDummy,1000,-8000,8000);//TOF PID signal as function of pt | |
5104aa35 | 312 | fOutputList->Add(fTOFsignalPiExpKvsP); |
313 | fOutputList->Add(fTOFsignalPiExpPvsP); | |
314 | fOutputList->Add(fTOFsignalKExpPivsP); | |
315 | fOutputList->Add(fTOFsignalKExpPvsP); | |
316 | fOutputList->Add(fTOFsignalPExpPivsP); | |
317 | fOutputList->Add(fTOFsignalPExpKvsP); | |
318 | ||
319 | fTOFsignalBeta=new TH2F("fTOFsignalBeta",";p[GeV/c];#beta",kPBins,binsPDummy,1000, 0.2, 1.1);// | |
320 | fTOFsignalPiBeta=new TH2F("fTOFsignalPiBeta",";p[GeV/c];#beta-#beta_{#pi}",kPBins,binsPDummy,1000, -1.0, 1.0);// | |
321 | fTOFsignalKBeta=new TH2F("fTOFsignalKBeta",";p[GeV/c];#beta-#beta_{K}",kPBins,binsPDummy,1000, -1.0, 1.0);// | |
322 | fTOFsignalPBeta=new TH2F("fTOFsignalPBeta",";p[GeV/c];#beta-#beta_{p}",kPBins,binsPDummy,1000, -1.0, 1.0);// | |
323 | fOutputList->Add(fTOFsignalBeta); | |
324 | fOutputList->Add(fTOFsignalPiBeta); | |
325 | fOutputList->Add(fTOFsignalKBeta); | |
326 | fOutputList->Add(fTOFsignalPBeta); | |
f98ea3f1 | 327 | |
328 | if(fMC) | |
329 | { | |
330 | fITSsignalpiMC=new TH2F("fITSsignalpiMC",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//ITS PID signal as function of pt for pi+ | |
331 | fTPCsignalpiMC=new TH2F("fTPCsignalpiMC",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//TPC PID signal as function of pt for pi+ | |
332 | fTOFsignalpiMC=new TH2F("fTOFsignalpiMC",";pt[GeV/c];signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt for pi+ | |
5104aa35 | 333 | fOutputList->Add(fITSsignalpiMC); |
334 | fOutputList->Add(fTPCsignalpiMC); | |
335 | fOutputList->Add(fTOFsignalpiMC); | |
f98ea3f1 | 336 | |
337 | fITSsignalKMC=new TH2F("fITSsignalKMC",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//ITS PID signal as function of pt for K+ | |
338 | fTPCsignalKMC=new TH2F("fTPCsignalKMC",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//TPC PID signal as function of pt for K+ | |
339 | fTOFsignalKMC=new TH2F("fTOFsignalKMC",";pt[GeV/c];signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt for K+ | |
5104aa35 | 340 | fOutputList->Add(fITSsignalKMC); |
341 | fOutputList->Add(fTPCsignalKMC); | |
342 | fOutputList->Add(fTOFsignalKMC); | |
f98ea3f1 | 343 | |
344 | fITSsignalpMC=new TH2F("fITSsignalpMC",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//ITS PID signal as function of pt for p | |
345 | fTPCsignalpMC=new TH2F("fTPCsignalpMC",";pt[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//TPC PID signal as function of pt for p | |
346 | fTOFsignalpMC=new TH2F("fTOFsignalpMC",";pt[GeV/c];signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt for p | |
5104aa35 | 347 | fOutputList->Add(fITSsignalpMC); |
348 | fOutputList->Add(fTPCsignalpMC); | |
349 | fOutputList->Add(fTOFsignalpMC); | |
f98ea3f1 | 350 | |
351 | fITSsignalpiMCp=new TH2F("fITSsignalpiMCp",";p[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//ITS PID signal as function of pt for pi+ | |
352 | fTPCsignalpiMCp=new TH2F("fTPCsignalpiMCp",";p[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//TPC PID signal as function of pt for pi+ | |
353 | fTOFsignalpiMCp=new TH2F("fTOFsignalpiMCp",";p[GeV/c];signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt for pi+ | |
5104aa35 | 354 | fOutputList->Add(fITSsignalpiMCp); |
355 | fOutputList->Add(fTPCsignalpiMCp); | |
356 | fOutputList->Add(fTOFsignalpiMCp); | |
f98ea3f1 | 357 | |
358 | fITSsignalKMCp=new TH2F("fITSsignalKMCp",";p[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//ITS PID signal as function of pt for K+ | |
359 | fTPCsignalKMCp=new TH2F("fTPCsignalKMCp",";p[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//TPC PID signal as function of pt for K+ | |
360 | fTOFsignalKMCp=new TH2F("fTOFsignalKMCp",";p[GeV/c];signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt for K+ | |
5104aa35 | 361 | fOutputList->Add(fITSsignalKMCp); |
362 | fOutputList->Add(fTPCsignalKMCp); | |
363 | fOutputList->Add(fTOFsignalKMCp); | |
f98ea3f1 | 364 | |
365 | fITSsignalpMCp=new TH2F("fITSsignalpMCp",";p[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//ITS PID signal as function of pt for p | |
366 | fTPCsignalpMCp=new TH2F("fTPCsignalpMCp",";p[GeV/c];signal",kPtBins,binsPtDummy,600,-4,4);//TPC PID signal as function of pt for p | |
367 | fTOFsignalpMCp=new TH2F("fTOFsignalpMCp",";p[GeV/c];signal",kPtBins,binsPtDummy,1000,-8000,8000);//TOF PID signal as function of pt for p | |
5104aa35 | 368 | fOutputList->Add(fITSsignalpMCp); |
369 | fOutputList->Add(fTPCsignalpMCp); | |
370 | fOutputList->Add(fTOFsignalpMCp); | |
f98ea3f1 | 371 | } |
372 | ||
373 | fPvsPt=new TH2F("fPvsPt","p vs p_{t}",kPBins,binsPDummy,kPtBins,binsPtDummy); | |
5104aa35 | 374 | fOutputList->Add(fPvsPt); |
f98ea3f1 | 375 | |
5104aa35 | 376 | fMeanPvsP = new TProfile("fMeanPvsP","Mean P vs P",kPBins,binsPDummy); |
377 | fMeanPtvsPt = new TProfile("fMeanPtvsPt","Mean Pt vs Pt",kPtBins,binsPtDummy); | |
378 | fOutputList->Add(fMeanPvsP); | |
379 | fOutputList->Add(fMeanPtvsPt); | |
380 | ||
381 | PostData(1, fOutputList); | |
f98ea3f1 | 382 | } |
383 | ||
384 | //________________________________________________________________________ | |
385 | void AliAnalysisTaskPIDflowQA::UserExec(Option_t *) | |
386 | { | |
387 | fESD = dynamic_cast<AliESDEvent*> (InputEvent()); | |
388 | if (!fESD) return; | |
389 | ||
390 | if(!fCuts || !fEventCuts) | |
391 | { | |
392 | Printf("No CUTS Defined.........\n"); | |
5104aa35 | 393 | PostData(1, fOutputList); |
f98ea3f1 | 394 | return; |
395 | } | |
396 | ||
397 | if (!(fEventCuts->IsSelected(fESD))) | |
398 | { | |
399 | return; | |
400 | } | |
401 | ||
402 | AliStack* stack=0x0; | |
403 | if(fMC) | |
404 | { | |
405 | AliMCEvent* mcEvent = (AliMCEvent*) MCEvent(); | |
406 | Printf("MC particles: %d", mcEvent->GetNumberOfTracks()); | |
407 | stack = mcEvent->Stack(); | |
408 | } | |
409 | ||
410 | Printf("There are %d tracks in this event", fESD->GetNumberOfTracks()); | |
411 | Int_t nTracks=fESD->GetNumberOfTracks(); | |
412 | ||
413 | AliESDtrack *trackESD=0; | |
414 | ||
415 | for(int tr1=0; tr1<nTracks; tr1++) | |
416 | { | |
417 | trackESD=fESD->GetTrack(tr1); | |
418 | if (!trackESD) continue; | |
419 | ||
420 | if(!(fCuts->AcceptTrack(trackESD))) continue; | |
421 | ||
422 | Int_t label=-1; | |
423 | if(fMC) label=trackESD->GetLabel(); | |
424 | ||
425 | Int_t pdgcode=0; | |
426 | if(stack&&fMC) | |
427 | { | |
428 | TParticle* particle2 = stack->Particle(TMath::Abs(label)); | |
429 | pdgcode=particle2->GetPdgCode(); | |
430 | } | |
431 | ||
432 | Double_t p=trackESD->GetP(); | |
433 | Double_t pt=trackESD->Pt(); | |
434 | fPvsPt->Fill(p,pt); | |
5104aa35 | 435 | fMeanPvsP->Fill(p,p); |
436 | fMeanPtvsPt->Fill(pt,pt); | |
f98ea3f1 | 437 | |
438 | pidITS(trackESD,pdgcode); | |
439 | pidTPC(trackESD,pdgcode); | |
440 | pidTOF(trackESD,pdgcode); | |
441 | } | |
442 | ||
443 | // Post output data. | |
5104aa35 | 444 | PostData(1, fOutputList); |
f98ea3f1 | 445 | } |
446 | ||
447 | //________________________________________________________________________ | |
448 | void AliAnalysisTaskPIDflowQA::Terminate(Option_t *) | |
449 | { | |
450 | //Terminate | |
451 | if(fCuts) | |
452 | fCuts->Dump(); | |
453 | if(fMC) | |
454 | Printf("MC On\n"); | |
455 | ||
456 | Printf("AliAnalysisTaskPIDflowQA: end of Terminate"); | |
457 | } | |
458 | ||
459 | //________________________________________________________________________ | |
460 | void AliAnalysisTaskPIDflowQA::pidITS(AliESDtrack* t, Int_t pdgcode) | |
461 | { | |
462 | Int_t ngoodSDDSSD=0; | |
463 | Double_t sample[4]= {0.0,0.0,0.0,0.0}; | |
464 | t->GetITSdEdxSamples(sample); | |
465 | for(int i=0; i<4; i++) | |
466 | { | |
467 | if(sample[i]>50.0) | |
468 | ngoodSDDSSD++; | |
469 | } | |
470 | if(ngoodSDDSSD<3) return; | |
471 | ||
472 | Float_t dedx=(Float_t)t->GetITSsignal(); | |
473 | if(dedx<1.0) return; | |
474 | ||
475 | Bool_t ifSA=!(t->IsOn(AliESDtrack::kTPCin)); | |
476 | Float_t p=t->GetP(); | |
477 | Float_t pt=t->Pt(); | |
478 | ||
479 | Float_t signalpi=fESDpid->GetITSResponse().Bethe(p,AliPID::ParticleMass(2),ifSA); | |
480 | Float_t signalK=fESDpid->GetITSResponse().Bethe(p,AliPID::ParticleMass(3),ifSA); | |
481 | Float_t signalp=fESDpid->GetITSResponse().Bethe(p,AliPID::ParticleMass(4),ifSA); | |
482 | if(signalpi<1.0||signalK<1.0||signalp<1.0) return; | |
483 | ||
484 | fITSsignal->Fill(p,dedx); | |
485 | ||
486 | fITSsignalpip->Fill(p,TMath::Log(dedx)-TMath::Log(signalpi)); | |
487 | fITSsignalKp->Fill(p,TMath::Log(dedx)-TMath::Log(signalK)); | |
488 | fITSsignalpp->Fill(p,TMath::Log(dedx)-TMath::Log(signalp)); | |
489 | ||
490 | if(fMC) | |
491 | { | |
492 | if(TMath::Abs(pdgcode)==211) | |
493 | fITSsignalpiMCp->Fill(p,TMath::Log(dedx)-TMath::Log(signalpi)); | |
494 | else if(TMath::Abs(pdgcode)==321) | |
495 | fITSsignalKMCp->Fill(p,TMath::Log(dedx)-TMath::Log(signalK)); | |
496 | else if (TMath::Abs(pdgcode)==2212) | |
497 | fITSsignalpMCp->Fill(p,TMath::Log(dedx)-TMath::Log(signalp)); | |
498 | } | |
499 | ||
500 | fITSsignalpi->Fill(pt,TMath::Log(dedx)-TMath::Log(signalpi)); | |
501 | fITSsignalK->Fill(pt,TMath::Log(dedx)-TMath::Log(signalK)); | |
502 | fITSsignalp->Fill(pt,TMath::Log(dedx)-TMath::Log(signalp)); | |
503 | ||
504 | if(fMC) | |
505 | { | |
506 | if(TMath::Abs(pdgcode)==211) | |
507 | fITSsignalpiMC->Fill(pt,TMath::Log(dedx)-TMath::Log(signalpi)); | |
508 | else if(TMath::Abs(pdgcode)==321) | |
509 | fITSsignalKMC->Fill(pt,TMath::Log(dedx)-TMath::Log(signalK)); | |
510 | else if (TMath::Abs(pdgcode)==2212) | |
511 | fITSsignalpMC->Fill(pt,TMath::Log(dedx)-TMath::Log(signalp)); | |
512 | } | |
513 | } | |
514 | ||
515 | //________________________________________________________________________ | |
516 | void AliAnalysisTaskPIDflowQA::pidTPC(AliESDtrack* t, Int_t pdgcode) | |
517 | { | |
518 | Double_t pinTPCglobal=t->GetInnerParam()->GetP(); | |
519 | Float_t sigPion = fESDpid->GetTPCResponse().GetExpectedSignal(pinTPCglobal, AliPID::kPion); | |
520 | Float_t sigKaon = fESDpid->GetTPCResponse().GetExpectedSignal(pinTPCglobal, AliPID::kKaon); | |
521 | Float_t sigProton = fESDpid->GetTPCResponse().GetExpectedSignal(pinTPCglobal, AliPID::kProton); | |
522 | Float_t pt=t->Pt(); | |
523 | Float_t p=t->GetP(); | |
524 | Double_t tpcSignal =t ->GetTPCsignal(); | |
525 | if(!(sigPion>0.0&&sigKaon>0.0&&sigProton>0.0)) | |
526 | return; | |
527 | ||
528 | fTPCsignal->Fill(pinTPCglobal,tpcSignal); | |
529 | ||
530 | fTPCsignalpip->Fill(p,(tpcSignal-sigPion)/sigPion); | |
531 | fTPCsignalKp->Fill(p,(tpcSignal-sigKaon)/sigKaon); | |
532 | fTPCsignalpp->Fill(p,(tpcSignal-sigProton)/sigProton); | |
533 | ||
534 | if(fMC) | |
535 | { | |
536 | if(TMath::Abs(pdgcode)==211) | |
537 | fTPCsignalpiMCp->Fill(p,(tpcSignal-sigPion)/sigPion); | |
538 | else if(TMath::Abs(pdgcode)==321) | |
539 | fTPCsignalKMCp->Fill(p,(tpcSignal-sigKaon)/sigKaon); | |
540 | else if (TMath::Abs(pdgcode)==2212) | |
541 | fTPCsignalpMCp->Fill(p,(tpcSignal-sigProton)/sigProton); | |
542 | } | |
543 | ||
544 | fTPCsignalpi->Fill(pt,(tpcSignal-sigPion)/sigPion); | |
545 | fTPCsignalK->Fill(pt,(tpcSignal-sigKaon)/sigKaon); | |
546 | fTPCsignalp->Fill(pt,(tpcSignal-sigProton)/sigProton); | |
547 | ||
548 | if(fMC) | |
549 | { | |
550 | if(TMath::Abs(pdgcode)==211) | |
551 | fTPCsignalpiMC->Fill(pt,(tpcSignal-sigPion)/sigPion); | |
552 | else if(TMath::Abs(pdgcode)==321) | |
553 | fTPCsignalKMC->Fill(pt,(tpcSignal-sigKaon)/sigKaon); | |
554 | else if (TMath::Abs(pdgcode)==2212) | |
555 | fTPCsignalpMC->Fill(pt,(tpcSignal-sigProton)/sigProton); | |
556 | } | |
557 | } | |
558 | ||
559 | //________________________________________________________________________ | |
560 | void AliAnalysisTaskPIDflowQA::pidTOF(AliESDtrack* t, Int_t pdgcode) | |
561 | { | |
562 | Bool_t goodtrack = (t) && | |
563 | (t->GetStatus() & AliESDtrack::kTOFpid) && | |
564 | (t->GetTOFsignal() > 12000) && | |
565 | (t->GetTOFsignal() < 100000) && | |
566 | (t->GetIntegratedLength() > 365) && | |
567 | !(t->GetStatus() & AliESDtrack::kTOFmismatch); | |
568 | ||
569 | if (!goodtrack) return; | |
570 | ||
5104aa35 | 571 | const Float_t c = 2.99792457999999984e-02; |
f98ea3f1 | 572 | Float_t pt=t->Pt(); |
573 | Float_t p=t->GetP(); | |
5104aa35 | 574 | Float_t L = t->GetIntegratedLength(); |
f98ea3f1 | 575 | Float_t fT0track=fESDpid->GetTOFResponse().GetStartTime(p); |
5104aa35 | 576 | Float_t timeTOF=t->GetTOFsignal()- fT0track; |
f98ea3f1 | 577 | |
5104aa35 | 578 | //calculate beta for the track |
579 | Float_t beta = L/timeTOF/c; | |
580 | ||
f98ea3f1 | 581 | //2=pion 3=kaon 4=protons |
582 | Double_t inttimes[5]= {-1.0,-1.0,-1.0,-1.0,-1.0}; | |
583 | t->GetIntegratedTimes(inttimes); | |
5104aa35 | 584 | Float_t betaHypothesis[5] = {0.0,0.0,0.0,0.0,0.0}; |
585 | for (Int_t i=0;i<5;i++) | |
586 | { | |
587 | betaHypothesis[i] = L/inttimes[i]/c; | |
588 | } | |
589 | ||
590 | fTOFsignal->Fill(p,timeTOF-inttimes[2]); | |
591 | ||
592 | //beta part | |
593 | fTOFsignalBeta->Fill(p,beta); | |
594 | fTOFsignalPiBeta->Fill(p,beta-betaHypothesis[2]); | |
595 | fTOFsignalKBeta->Fill(p,beta-betaHypothesis[3]); | |
596 | fTOFsignalPBeta->Fill(p,beta-betaHypothesis[4]); | |
f98ea3f1 | 597 | |
598 | //P part | |
5104aa35 | 599 | fTOFsignalpip->Fill(p,timeTOF-inttimes[2]); |
600 | fTOFsignalKp->Fill(p,timeTOF-inttimes[3]); | |
601 | fTOFsignalpp->Fill(p,timeTOF-inttimes[4]); | |
f98ea3f1 | 602 | |
603 | fTOFsignalPiExpKvsPt->Fill(pt,-inttimes[2]+inttimes[3]); | |
604 | fTOFsignalPiExpPvsPt->Fill(pt,-inttimes[2]+inttimes[4]); | |
605 | fTOFsignalKExpPivsPt->Fill(pt,-inttimes[3]+inttimes[2]); | |
606 | fTOFsignalKExpPvsPt->Fill(pt,-inttimes[3]+inttimes[4]); | |
607 | fTOFsignalPExpPivsPt->Fill(pt,-inttimes[4]+inttimes[2]); | |
608 | fTOFsignalPExpKvsPt->Fill(pt,-inttimes[4]+inttimes[3]); | |
609 | ||
610 | if(fMC) | |
611 | { | |
612 | if(TMath::Abs(pdgcode)==211) | |
5104aa35 | 613 | fTOFsignalpiMCp->Fill(p,timeTOF-inttimes[2]); |
f98ea3f1 | 614 | else if(TMath::Abs(pdgcode)==321) |
5104aa35 | 615 | fTOFsignalKMCp->Fill(p,timeTOF-inttimes[3]); |
f98ea3f1 | 616 | else if (TMath::Abs(pdgcode)==2212) |
5104aa35 | 617 | fTOFsignalpMCp->Fill(p,timeTOF-inttimes[4]); |
f98ea3f1 | 618 | } |
619 | ||
620 | //Pt part | |
5104aa35 | 621 | fTOFsignalpi->Fill(pt,timeTOF-inttimes[2]); |
622 | fTOFsignalK->Fill(pt,timeTOF-inttimes[3]); | |
623 | fTOFsignalp->Fill(pt,timeTOF-inttimes[4]); | |
f98ea3f1 | 624 | |
625 | fTOFsignalPiExpKvsP->Fill(p,-inttimes[2]+inttimes[3]); | |
626 | fTOFsignalPiExpPvsP->Fill(p,-inttimes[2]+inttimes[4]); | |
627 | fTOFsignalKExpPivsP->Fill(p,-inttimes[3]+inttimes[2]); | |
628 | fTOFsignalKExpPvsP->Fill(p,-inttimes[3]+inttimes[4]); | |
629 | fTOFsignalPExpPivsP->Fill(p,-inttimes[4]+inttimes[2]); | |
630 | fTOFsignalPExpKvsP->Fill(p,-inttimes[4]+inttimes[3]); | |
631 | ||
632 | if(fMC) | |
633 | { | |
634 | if(TMath::Abs(pdgcode)==211) | |
5104aa35 | 635 | fTOFsignalpiMC->Fill(pt,timeTOF-inttimes[2]); |
f98ea3f1 | 636 | else if(TMath::Abs(pdgcode)==321) |
5104aa35 | 637 | fTOFsignalKMC->Fill(pt,timeTOF-inttimes[3]); |
f98ea3f1 | 638 | else if (TMath::Abs(pdgcode)==2212) |
5104aa35 | 639 | fTOFsignalpMC->Fill(pt,timeTOF-inttimes[4]); |
f98ea3f1 | 640 | } |
641 | } | |
642 | ||
5104aa35 | 643 | Float_t AliAnalysisTaskPIDflowQA::Beta(Float_t m, Float_t p) |
644 | { | |
645 | //get theoretical beta | |
646 | return TMath::Sqrt(1. / (1. + m * m / (p * p))); | |
647 | } | |
648 |