]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/ITS/AliAnalysisTaskITSTrackingCheck.cxx
Commented a printf
[u/mrichter/AliRoot.git] / PWG1 / ITS / AliAnalysisTaskITSTrackingCheck.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2009, 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 purposes 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 purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /////////////////////////////////////////////////////////////
17 //
18 // AliAnalysisTask to extract from ESD tracks the information
19 // on ITS tracking efficiency and resolutions.
20 //
21 // Author: A.Dainese, andrea.dainese@pd.infn.it
22 /////////////////////////////////////////////////////////////
23
24 #include <TStyle.h>
25 #include <TChain.h>
26 #include <TTree.h>
27 #include <TNtuple.h>
28 #include <TBranch.h>
29 #include <TClonesArray.h>
30 #include <TObjArray.h>
31 #include <TH1F.h>
32 #include <TH2F.h>  
33 #include <TCanvas.h>
34 #include <TParticle.h>
35
36 #include "AliAnalysisTask.h"
37 #include "AliAnalysisManager.h"
38
39 #include "AliMultiplicity.h"
40 #include "AliVertexerTracks.h"
41 #include "AliESDtrack.h"
42 #include "AliExternalTrackParam.h"
43 #include "AliESDVertex.h"
44 #include "AliESDEvent.h"
45 #include "AliESDfriend.h"
46 #include "AliESDInputHandler.h"
47 #include "AliESDInputHandlerRP.h"
48 #include "AliESDtrackCuts.h"
49 #include "AliTrackPointArray.h"
50 #include "../ITS/AliITSRecPoint.h"
51
52 #include "AliInputEventHandler.h"
53 #include "AliMCEventHandler.h"
54 #include "AliMCEvent.h"
55 #include "AliStack.h"
56 #include "AliLog.h"
57
58 #include "AliGenEventHeader.h" 
59 #include "AliAnalysisTaskITSTrackingCheck.h"
60
61
62 ClassImp(AliAnalysisTaskITSTrackingCheck)
63 AliAnalysisTaskITSTrackingCheck::AliAnalysisTaskITSTrackingCheck() : 
64 AliAnalysisTaskSE(), 
65 fReadMC(kFALSE),
66 fReadRPLabels(kFALSE),
67 fFillNtuples(kFALSE),
68 fUseITSSAforNtuples(kFALSE),
69 fUsePhysSel(kFALSE),
70 fESD(0), 
71 fOutput(0), 
72 fHistNEvents(0),
73 fHistNEventsFrac(0),
74 fHistNtracks(0),
75 fHistNclsITSMI(0),
76 fHistNclsITSSA(0),
77 fHistNclsITSSAInAcc(0),
78 fHistClusterMapITSMI(0),
79 fHistClusterMapITSMIok(0),
80 fHistClusterMapITSMIbad(0),
81 fHistClusterMapITSMIskipped(0),
82 fHistClusterMapITSMIoutinz(0),
83 fHistClusterMapITSMInorefit(0),
84 fHistClusterMapITSMInocls(0),
85 fHistClusterMapITSMIokoutinzbad(0),
86 fHistClusterMapITSSA(0),
87 fHistClusterMapITSSAok(0),
88 fHistClusterMapITSSAbad(0),
89 fHistClusterMapITSSAskipped(0),
90 fHistClusterMapITSSAoutinz(0),
91 fHistClusterMapITSSAnorefit(0),
92 fHistClusterMapITSSAnocls(0),
93 fHistClusterMapITSSAokoutinzbad(0),
94 fHistClusterMapITSSAInAcc(0),
95 fHistClusterMapITSSAokInAcc(0),
96 fHistClusterMapITSSAbadInAcc(0),
97 fHistClusterMapITSSAskippedInAcc(0),
98 fHistClusterMapITSSAoutinzInAcc(0),
99 fHistClusterMapITSSAnorefitInAcc(0),
100 fHistClusterMapITSSAnoclsInAcc(0),
101 fHistClusterMapITSSAokoutinzbadInAcc(0),
102 fHistClusterMapModuleITSSAokInAcc(0),
103 fHistClusterMapModuleITSSAbadInAcc(0),
104 fHistClusterMapModuleITSSAnoclsInAcc(0),
105 fHistClusterMapModuleITSMIokInAcc(0),
106 fHistClusterMapModuleITSMIbadInAcc(0),
107 fHistClusterMapModuleITSMInoclsInAcc(0),
108 fHistZatSPDouter0ok(0),
109 fHistZatSPDouter1ok(0),
110 fHistZatSPDouter2ok(0),
111 fHistZatSPDouter3ok(0),
112 fHistZatSPDouter0notok(0),
113 fHistZatSPDouter1notok(0),
114 fHistZatSPDouter2notok(0),
115 fHistZatSPDouter3notok(0),
116 fHistxlocSDDok(0),
117 fHistzlocSDDok(0),
118 fHistxlocVSmodSDDok(0),
119 fHistxlocSDDall(0),
120 fHistzlocSDDall(0),
121 fHistPhiTPCInAcc(0),
122 fHistPtTPC(0),
123 fHistPtTPCInAcc(0),
124 fHistPtTPCInAccMCtwoSPD(0),
125 fHistPtTPCInAccMConeSPD(0),
126 fHistdEdxVSPtTPCInAcc(0),
127 fHistdEdxVSPtITSTPCsel(0),
128 fHistPtVSphiTPCInAcc(0),
129 fHistPtTPCInAccNoTRDout(0),
130 fHistPtTPCInAccNoTOFout(0),
131 fHistPtTPCInAccWithPtTPCAtInnerWall(0),
132 fHistPtTPCInAccWithPtTPCAtVtx(0),
133 fHistDeltaPtTPC(0),
134 fHistPtTPCInAccP(0),
135 fHistPtTPCInAccS(0),
136 fHistPtTPCInAccPfromStrange(0),
137 fHistPtTPCInAccSfromStrange(0),
138 fHistPtTPCInAccSfromMat(0),
139 fHistPtITSMI2(0),
140 fHistPtITSMI3(0),
141 fHistPtITSMI4(0),
142 fHistPtITSMI5(0),
143 fHistPtITSMI6(0),
144 fHistPtITSMISPD(0),
145 fHistPtITSMIoneSPD(0),
146 fHistPtITSMI2InAcc(0),
147 fHistPtITSMI3InAcc(0),
148 fHistPtITSMI4InAcc(0),
149 fHistPtITSMI5InAcc(0),
150 fHistPtITSMI6InAcc(0),
151 fHistPtITSMISPDInAcc(0),
152 fHistPtITSMIoneSPDInAcc(0),
153 fHistPtITSMI2InAccFake(0),
154 fHistPtITSMI3InAccFake(0),
155 fHistPtITSMI4InAccFake(0),
156 fHistPtITSMI5InAccFake(0),
157 fHistPtITSMI6InAccFake(0),
158 fHistPtITSMISPDInAccFake(0),
159 fHistPtITSMIoneSPDInAccFake(0),
160 fHistPtITSMIoneSPDthreeSDDSSDInAcc(0),
161 fHistPtITSTPCsel(0),
162 fHistPtITSTPCselP(0),
163 fHistPtITSTPCselS(0),
164 fHistPtITSTPCselPfromStrange(0),
165 fHistPtITSTPCselSfromStrange(0),
166 fHistPtITSTPCselSfromMat(0),
167 fHistPtITSMI2InAccP(0),
168 fHistPtITSMI3InAccP(0),
169 fHistPtITSMI4InAccP(0),
170 fHistPtITSMI5InAccP(0),
171 fHistPtITSMI6InAccP(0),
172 fHistPtITSMISPDInAccP(0),
173 fHistPtITSMIoneSPDInAccP(0),
174 fHistPtITSMI2InAccS(0),
175 fHistPtITSMI3InAccS(0),
176 fHistPtITSMI4InAccS(0),
177 fHistPtITSMI5InAccS(0),
178 fHistPtITSMI6InAccS(0),
179 fHistPtITSMISPDInAccS(0),
180 fHistPtITSMIoneSPDInAccS(0),
181 fHistPtITSMIokbadoutinz6(0),
182 fHistPtITSMIokbadoutinz4InAcc(0),
183 fHistPtITSMIokbadoutinz5InAcc(0),
184 fHistPtITSMIokbadoutinz6InAcc(0),
185 fHistPhiITSMIokbadoutinz6InAcc(0),
186 fHistRProdVtxInAccP(0),
187 fHistRProdVtxInAccS(0),
188 fHistd0rphiTPCInAccP150200(0),
189 fHistd0rphiTPCInAccP500700(0),
190 fHistd0rphiTPCInAccP10001500(0),
191 fHistd0rphiTPCInAccS150200(0),
192 fHistd0rphiTPCInAccS500700(0),
193 fHistd0rphiTPCInAccS10001500(0),
194 fHistd0rphiITSMISPDInAccP150200(0),
195 fHistd0rphiITSMISPDInAccP500700(0),
196 fHistd0rphiITSMISPDInAccP10001500(0),
197 fHistd0rphiITSMISPDInAccS150200(0),
198 fHistd0rphiITSMISPDInAccS500700(0),
199 fHistd0rphiITSMISPDInAccS10001500(0),
200 fHistd0rphiITSMIoneSPDInAccP150200(0),
201 fHistd0rphiITSMIoneSPDInAccP350450(0),
202 fHistd0rphiITSMIoneSPDInAccP500700(0),
203 fHistd0rphiITSMIoneSPDInAccP10001500(0),
204 fHistd0rphiITSMIoneSPDInAccP25004000(0),
205 fHistd0rphiITSMIoneSPDInAccP40008000(0),
206 fHistd0zITSMIoneSPDInAccP150200(0),
207 fHistd0zITSMIoneSPDInAccP500700(0),
208 fHistd0zITSMIoneSPDInAccP10001500(0),
209 fHistd0zVSetaTPCInAccP10001500(0),
210 fHistd0rphiVSphiITSMIoneSPDInAccP10001500(0),
211 fHistd0rphiVSetaITSMIoneSPDInAccP10001500(0),
212 fHistd0rphiITSMIoneSPDInAccS150200(0),
213 fHistd0rphiITSMIoneSPDInAccS350450(0),
214 fHistd0rphiITSMIoneSPDInAccS500700(0),
215 fHistd0rphiITSMIoneSPDInAccS500700from22(0),
216 fHistd0rphiITSMIoneSPDInAccS500700from211(0),
217 fHistd0rphiITSMIoneSPDInAccS500700from310(0),
218 fHistd0rphiITSMIoneSPDInAccS500700from321(0),
219 fHistd0rphiITSMIoneSPDInAccS500700from3122(0),
220 fHistd0rphiITSMIoneSPDInAccS10001500(0),
221 fHistd0rphiITSMIoneSPDInAccS25004000(0),
222 fHistd0rphiITSMIoneSPDInAccS40008000(0),
223 fHistd0rphiITSMIoneSPDInAccS150200fromStrange(0),
224 fHistd0rphiITSMIoneSPDInAccS150200fromMat(0),
225 fHistd0rphiITSMIoneSPDInAccS350450fromStrange(0),
226 fHistd0rphiITSMIoneSPDInAccS350450fromMat(0),
227 fHistd0rphiITSMIoneSPDInAccS500700fromStrange(0),
228 fHistd0rphiITSMIoneSPDInAccS500700fromMat(0),
229 fHistd0rphiITSMIoneSPDInAccS10001500fromStrange(0),
230 fHistd0rphiITSMIoneSPDInAccS10001500fromMat(0),
231 fHistd0rphiITSMIoneSPDInAccS25004000fromStrange(0),
232 fHistd0rphiITSMIoneSPDInAccS25004000fromMat(0),
233 fHistd0rphiITSMIoneSPDInAccS40008000fromStrange(0),
234 fHistd0rphiITSMIoneSPDInAccS40008000fromMat(0),
235 fHistd0zITSMIoneSPDInAccS150200(0),
236 fHistd0zITSMIoneSPDInAccS500700(0),
237 fHistd0zITSMIoneSPDInAccS10001500(0),
238 fHistPDGMoth(0),
239 fHistPDGMoth150200(0),
240 fHistPDGMoth500700(0),
241 fHistPDGMoth10001500(0),
242 fHistPDGTrk(0),
243 fNtupleESDTracks(0),
244 fNtupleITSAlignExtra(0),
245 fNtupleITSAlignSPDTracklets(0),
246 fESDtrackCutsTPC(0),
247 fESDtrackCutsITSTPC(0)
248 {
249   // Constructor
250 }
251
252 //________________________________________________________________________
253 AliAnalysisTaskITSTrackingCheck::AliAnalysisTaskITSTrackingCheck(const char *name) : 
254 AliAnalysisTaskSE(name), 
255 fReadMC(kFALSE),
256 fReadRPLabels(kFALSE),
257 fFillNtuples(kFALSE),
258 fUseITSSAforNtuples(kFALSE),
259 fUsePhysSel(kFALSE),
260 fESD(0), 
261 fOutput(0), 
262 fHistNEvents(0),
263 fHistNEventsFrac(0),
264 fHistNtracks(0),
265 fHistNclsITSMI(0),
266 fHistNclsITSSA(0),
267 fHistNclsITSSAInAcc(0),
268 fHistClusterMapITSMI(0),
269 fHistClusterMapITSMIok(0),
270 fHistClusterMapITSMIbad(0),
271 fHistClusterMapITSMIskipped(0),
272 fHistClusterMapITSMIoutinz(0),
273 fHistClusterMapITSMInorefit(0),
274 fHistClusterMapITSMInocls(0),
275 fHistClusterMapITSMIokoutinzbad(0),
276 fHistClusterMapITSSA(0),
277 fHistClusterMapITSSAok(0),
278 fHistClusterMapITSSAbad(0),
279 fHistClusterMapITSSAskipped(0),
280 fHistClusterMapITSSAoutinz(0),
281 fHistClusterMapITSSAnorefit(0),
282 fHistClusterMapITSSAnocls(0),
283 fHistClusterMapITSSAokoutinzbad(0),
284 fHistClusterMapITSSAInAcc(0),
285 fHistClusterMapITSSAokInAcc(0),
286 fHistClusterMapITSSAbadInAcc(0),
287 fHistClusterMapITSSAskippedInAcc(0),
288 fHistClusterMapITSSAoutinzInAcc(0),
289 fHistClusterMapITSSAnorefitInAcc(0),
290 fHistClusterMapITSSAnoclsInAcc(0),
291 fHistClusterMapITSSAokoutinzbadInAcc(0),
292 fHistClusterMapModuleITSSAokInAcc(0),
293 fHistClusterMapModuleITSSAbadInAcc(0),
294 fHistClusterMapModuleITSSAnoclsInAcc(0),
295 fHistClusterMapModuleITSMIokInAcc(0),
296 fHistClusterMapModuleITSMIbadInAcc(0),
297 fHistClusterMapModuleITSMInoclsInAcc(0),
298 fHistZatSPDouter0ok(0),
299 fHistZatSPDouter1ok(0),
300 fHistZatSPDouter2ok(0),
301 fHistZatSPDouter3ok(0),
302 fHistZatSPDouter0notok(0),
303 fHistZatSPDouter1notok(0),
304 fHistZatSPDouter2notok(0),
305 fHistZatSPDouter3notok(0),
306 fHistxlocSDDok(0),
307 fHistzlocSDDok(0),
308 fHistxlocVSmodSDDok(0),
309 fHistxlocSDDall(0),
310 fHistzlocSDDall(0),
311 fHistPhiTPCInAcc(0),
312 fHistPtTPC(0),
313 fHistPtTPCInAcc(0),
314 fHistPtTPCInAccMCtwoSPD(0),
315 fHistPtTPCInAccMConeSPD(0),
316 fHistdEdxVSPtTPCInAcc(0),
317 fHistdEdxVSPtITSTPCsel(0),
318 fHistPtVSphiTPCInAcc(0),
319 fHistPtTPCInAccNoTRDout(0),
320 fHistPtTPCInAccNoTOFout(0),
321 fHistPtTPCInAccWithPtTPCAtInnerWall(0),
322 fHistPtTPCInAccWithPtTPCAtVtx(0),
323 fHistDeltaPtTPC(0),
324 fHistPtTPCInAccP(0),
325 fHistPtTPCInAccS(0),
326 fHistPtTPCInAccPfromStrange(0),
327 fHistPtTPCInAccSfromStrange(0),
328 fHistPtTPCInAccSfromMat(0),
329 fHistPtITSMI2(0),
330 fHistPtITSMI3(0),
331 fHistPtITSMI4(0),
332 fHistPtITSMI5(0),
333 fHistPtITSMI6(0),
334 fHistPtITSMISPD(0),
335 fHistPtITSMIoneSPD(0),
336 fHistPtITSMI2InAcc(0),
337 fHistPtITSMI3InAcc(0),
338 fHistPtITSMI4InAcc(0),
339 fHistPtITSMI5InAcc(0),
340 fHistPtITSMI6InAcc(0),
341 fHistPtITSMISPDInAcc(0),
342 fHistPtITSMIoneSPDInAcc(0),
343 fHistPtITSMI2InAccFake(0),
344 fHistPtITSMI3InAccFake(0),
345 fHistPtITSMI4InAccFake(0),
346 fHistPtITSMI5InAccFake(0),
347 fHistPtITSMI6InAccFake(0),
348 fHistPtITSMISPDInAccFake(0),
349 fHistPtITSMIoneSPDInAccFake(0),
350 fHistPtITSMIoneSPDthreeSDDSSDInAcc(0),
351 fHistPtITSTPCsel(0),
352 fHistPtITSTPCselP(0),
353 fHistPtITSTPCselS(0),
354 fHistPtITSTPCselPfromStrange(0),
355 fHistPtITSTPCselSfromStrange(0),
356 fHistPtITSTPCselSfromMat(0),
357 fHistPtITSMI2InAccP(0),
358 fHistPtITSMI3InAccP(0),
359 fHistPtITSMI4InAccP(0),
360 fHistPtITSMI5InAccP(0),
361 fHistPtITSMI6InAccP(0),
362 fHistPtITSMISPDInAccP(0),
363 fHistPtITSMIoneSPDInAccP(0),
364 fHistPtITSMI2InAccS(0),
365 fHistPtITSMI3InAccS(0),
366 fHistPtITSMI4InAccS(0),
367 fHistPtITSMI5InAccS(0),
368 fHistPtITSMI6InAccS(0),
369 fHistPtITSMISPDInAccS(0),
370 fHistPtITSMIoneSPDInAccS(0),
371 fHistPtITSMIokbadoutinz6(0),
372 fHistPtITSMIokbadoutinz4InAcc(0),
373 fHistPtITSMIokbadoutinz5InAcc(0),
374 fHistPtITSMIokbadoutinz6InAcc(0),
375 fHistPhiITSMIokbadoutinz6InAcc(0),
376 fHistRProdVtxInAccP(0),
377 fHistRProdVtxInAccS(0),
378 fHistd0rphiTPCInAccP150200(0),
379 fHistd0rphiTPCInAccP500700(0),
380 fHistd0rphiTPCInAccP10001500(0),
381 fHistd0rphiTPCInAccS150200(0),
382 fHistd0rphiTPCInAccS500700(0),
383 fHistd0rphiTPCInAccS10001500(0),
384 fHistd0rphiITSMISPDInAccP150200(0),
385 fHistd0rphiITSMISPDInAccP500700(0),
386 fHistd0rphiITSMISPDInAccP10001500(0),
387 fHistd0rphiITSMISPDInAccS150200(0),
388 fHistd0rphiITSMISPDInAccS500700(0),
389 fHistd0rphiITSMISPDInAccS10001500(0),
390 fHistd0rphiITSMIoneSPDInAccP150200(0),
391 fHistd0rphiITSMIoneSPDInAccP350450(0),
392 fHistd0rphiITSMIoneSPDInAccP500700(0),
393 fHistd0rphiITSMIoneSPDInAccP10001500(0),
394 fHistd0rphiITSMIoneSPDInAccP25004000(0),
395 fHistd0rphiITSMIoneSPDInAccP40008000(0),
396 fHistd0zITSMIoneSPDInAccP150200(0),
397 fHistd0zITSMIoneSPDInAccP500700(0),
398 fHistd0zITSMIoneSPDInAccP10001500(0),
399 fHistd0zVSetaTPCInAccP10001500(0),
400 fHistd0rphiVSphiITSMIoneSPDInAccP10001500(0),
401 fHistd0rphiVSetaITSMIoneSPDInAccP10001500(0),
402 fHistd0rphiITSMIoneSPDInAccS150200(0),
403 fHistd0rphiITSMIoneSPDInAccS350450(0),
404 fHistd0rphiITSMIoneSPDInAccS500700(0),
405 fHistd0rphiITSMIoneSPDInAccS500700from22(0),
406 fHistd0rphiITSMIoneSPDInAccS500700from211(0),
407 fHistd0rphiITSMIoneSPDInAccS500700from310(0),
408 fHistd0rphiITSMIoneSPDInAccS500700from321(0),
409 fHistd0rphiITSMIoneSPDInAccS500700from3122(0),
410 fHistd0rphiITSMIoneSPDInAccS10001500(0),
411 fHistd0rphiITSMIoneSPDInAccS25004000(0),
412 fHistd0rphiITSMIoneSPDInAccS40008000(0),
413 fHistd0rphiITSMIoneSPDInAccS150200fromStrange(0),
414 fHistd0rphiITSMIoneSPDInAccS150200fromMat(0),
415 fHistd0rphiITSMIoneSPDInAccS350450fromStrange(0),
416 fHistd0rphiITSMIoneSPDInAccS350450fromMat(0),
417 fHistd0rphiITSMIoneSPDInAccS500700fromStrange(0),
418 fHistd0rphiITSMIoneSPDInAccS500700fromMat(0),
419 fHistd0rphiITSMIoneSPDInAccS10001500fromStrange(0),
420 fHistd0rphiITSMIoneSPDInAccS10001500fromMat(0),
421 fHistd0rphiITSMIoneSPDInAccS25004000fromStrange(0),
422 fHistd0rphiITSMIoneSPDInAccS25004000fromMat(0),
423 fHistd0rphiITSMIoneSPDInAccS40008000fromStrange(0),
424 fHistd0rphiITSMIoneSPDInAccS40008000fromMat(0),
425 fHistd0zITSMIoneSPDInAccS150200(0),
426 fHistd0zITSMIoneSPDInAccS500700(0),
427 fHistd0zITSMIoneSPDInAccS10001500(0),
428 fHistPDGMoth(0),
429 fHistPDGMoth150200(0),
430 fHistPDGMoth500700(0),
431 fHistPDGMoth10001500(0),
432 fHistPDGTrk(0),
433 fNtupleESDTracks(0),
434 fNtupleITSAlignExtra(0),
435 fNtupleITSAlignSPDTracklets(0),
436 fESDtrackCutsTPC(0),
437 fESDtrackCutsITSTPC(0)
438 {
439   // Constructor
440
441   for(Int_t i=0; i<11; i++) fCountsPerPtBin[i]=0;
442
443   // Define input and output slots here
444   // Output slot #0 writes into a TList container
445   DefineOutput(1, TList::Class());  //My private output
446 }
447 //________________________________________________________________________
448 AliAnalysisTaskITSTrackingCheck::~AliAnalysisTaskITSTrackingCheck()
449 {
450   // Destructor
451
452   // histograms are in the output list and deleted when the output
453   // list is deleted by the TSelector dtor
454
455   if (fOutput) {
456     delete fOutput;
457     fOutput = 0;
458   }
459 }
460 //________________________________________________________________________
461 void AliAnalysisTaskITSTrackingCheck::UserCreateOutputObjects()
462 {
463   // Create histograms
464   // Called once
465
466   gStyle->SetHistLineWidth(2);
467
468   Int_t nPtBins=34;
469   Float_t xPtBins[35]={0,0.025,0.05,0.075,0.08,0.125,0.15,0.175,0.2,0.225,0.25,0.275,0.280,0.325,0.35,0.375,0.4,0.45,0.55,0.7,0.75,0.9,1.2,1.7,2.5,3.5,4.5,5,6,8,13,15,23,28,35};
470   //Float_t xPtBins[35]={0,0.025,0.05,0.075,0.1,0.125,0.15,0.175,0.2,0.225,0.25,0.275,0.3,0.325,0.35,0.375,0.4,0.5,0.6,0.7,0.8,1.0,1.5,2.,2.5,3,4,5,6,8,10,15,20,25,30};
471
472   for(Int_t i=0; i<11; i++) fCountsPerPtBin[i]=0;
473
474   // Several histograms are more conveniently managed in a TList
475   fOutput = new TList;
476   fOutput->SetOwner();
477
478   fHistPDGMoth = new TH1F("fHistPDGMoth","",4000,0,4000);
479   fOutput->Add(fHistPDGMoth);
480   fHistPDGMoth150200 = new TH1F("fHistPDGMoth150200","",4000,0,4000);
481   fOutput->Add(fHistPDGMoth150200);
482   fHistPDGMoth500700 = new TH1F("fHistPDGMoth500700","",4000,0,4000);
483   fOutput->Add(fHistPDGMoth500700);
484   fHistPDGMoth10001500 = new TH1F("fHistPDGMoth10001500","",4000,0,4000);
485   fOutput->Add(fHistPDGMoth10001500);
486   fHistPDGTrk = new TH1F("fHistPDGTrk","",4000,0,4000);
487   fOutput->Add(fHistPDGTrk);
488
489   fHistNEvents = new TH1F("fHistNEvents", "Events: -1 tot, 0 sel, 1 vSPD3D, 2 vSPDZ, 3 vSPD, 4 vTRK; Type; N Events",12, -1.5, 10.5);
490   fHistNEvents->SetMinimum(0);
491   fOutput->Add(fHistNEvents);
492
493   fHistNEventsFrac = (TH1F*)fHistNEvents->Clone("fHistNEventsFrac");
494   fOutput->Add(fHistNEventsFrac);
495
496   fHistNtracks = new TH1F("fHistNtracks", "N ESD tracks; N tracks; Events",5000, -0.5, 4999.5);
497   fHistNtracks->Sumw2();
498   fHistNtracks->SetMinimum(0);
499   fOutput->Add(fHistNtracks);
500
501   fHistNclsITSMI = new TH1F("fHistNclsITSMI", "N ITS clusters per track (MI); N clusters; Counts",7, -0.5, 6.5);
502   fHistNclsITSMI->Sumw2();
503   fHistNclsITSMI->SetMinimum(0);
504   fOutput->Add(fHistNclsITSMI);
505
506   fHistNclsITSSAInAcc = new TH1F("fHistNclsITSSAInAcc", "N ITS clusters per track (SA); N clusters; Counts",7, -0.5, 6.5);
507   fHistNclsITSSAInAcc->Sumw2();
508   fHistNclsITSSAInAcc->SetMinimum(0);
509   fOutput->Add(fHistNclsITSSAInAcc);  
510
511   fHistNclsITSSA = new TH1F("fHistNclsITSSA", "N ITS clusters per track (SA); N clusters; Counts",7, -0.5, 6.5);
512   fHistNclsITSSA->Sumw2();
513   fHistNclsITSSA->SetMinimum(0);
514   fOutput->Add(fHistNclsITSSA);  
515
516   fHistClusterMapITSMI = new TH1F("fHistClusterMapITSMI", "N tracks with point on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
517   fHistClusterMapITSMI->Sumw2();
518   fHistClusterMapITSMI->SetMinimum(0);
519   fOutput->Add(fHistClusterMapITSMI);
520   
521   fHistClusterMapITSSA = new TH1F("fHistClusterMapITSSA", "N tracks with point on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
522   fHistClusterMapITSSA->Sumw2();
523   fHistClusterMapITSSA->SetMinimum(0);
524   fOutput->Add(fHistClusterMapITSSA);
525
526   fHistClusterMapITSSAInAcc = new TH1F("fHistClusterMapITSSAInAcc", "N tracks with point on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
527   fHistClusterMapITSSAInAcc->Sumw2();
528   fHistClusterMapITSSAInAcc->SetMinimum(0);
529   fOutput->Add(fHistClusterMapITSSAInAcc);
530
531   fHistClusterMapITSMIok = new TH1F("fHistClusterMapITSMIok", "N tracks with ok on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
532   fHistClusterMapITSMIok->Sumw2();
533   fHistClusterMapITSMIok->SetMinimum(0);
534   fOutput->Add(fHistClusterMapITSMIok);
535   
536   fHistClusterMapITSSAokInAcc = new TH1F("fHistClusterMapITSSAokInAcc", "N tracks with ok on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
537   fHistClusterMapITSSAokInAcc->Sumw2();
538   fHistClusterMapITSSAokInAcc->SetMinimum(0);
539   fOutput->Add(fHistClusterMapITSSAokInAcc);
540
541   fHistClusterMapModuleITSSAokInAcc = new TH1F("fHistClusterMapModuleITSSAokInAcc", "N tracks with ok on Module (SA); Module; N tracks",2198, -0.5, 2197.5);
542   fHistClusterMapModuleITSSAokInAcc->SetMinimum(0);
543   fOutput->Add(fHistClusterMapModuleITSSAokInAcc);
544
545   fHistClusterMapModuleITSMIokInAcc = new TH1F("fHistClusterMapModuleITSMIokInAcc", "N tracks with ok on Module (MI); Module; N tracks",2198, -0.5, 2197.5);
546   fHistClusterMapModuleITSMIokInAcc->SetMinimum(0);
547   fOutput->Add(fHistClusterMapModuleITSMIokInAcc);
548
549   fHistClusterMapITSSAok = new TH1F("fHistClusterMapITSSAok", "N tracks with ok on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
550   fHistClusterMapITSSAok->Sumw2();
551   fHistClusterMapITSSAok->SetMinimum(0);
552   fOutput->Add(fHistClusterMapITSSAok);
553
554   fHistClusterMapITSMIbad = new TH1F("fHistClusterMapITSMIbad", "N tracks with bad on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
555   fHistClusterMapITSMIbad->Sumw2();
556   fHistClusterMapITSMIbad->SetMinimum(0);
557   fOutput->Add(fHistClusterMapITSMIbad);
558   
559   fHistClusterMapITSSAbadInAcc = new TH1F("fHistClusterMapITSSAbadInAcc", "N tracks with bad on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
560   fHistClusterMapITSSAbadInAcc->Sumw2();
561   fHistClusterMapITSSAbadInAcc->SetMinimum(0);
562   fOutput->Add(fHistClusterMapITSSAbadInAcc);
563
564   fHistClusterMapModuleITSSAbadInAcc = new TH1F("fHistClusterMapModuleITSSAbadInAcc", "N tracks with bad on Module (SA); Module; N tracks",2198, -0.5, 2197.5);
565   fHistClusterMapModuleITSSAbadInAcc->SetMinimum(0);
566   fOutput->Add(fHistClusterMapModuleITSSAbadInAcc);
567
568   fHistClusterMapModuleITSMIbadInAcc = new TH1F("fHistClusterMapModuleITSMIbadInAcc", "N tracks with bad on Module (MI); Module; N tracks",2198, -0.5, 2197.5);
569   fHistClusterMapModuleITSMIbadInAcc->SetMinimum(0);
570   fOutput->Add(fHistClusterMapModuleITSMIbadInAcc);
571
572   fHistClusterMapITSSAbad = new TH1F("fHistClusterMapITSSAbad", "N tracks with bad on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
573   fHistClusterMapITSSAbad->Sumw2();
574   fHistClusterMapITSSAbad->SetMinimum(0);
575   fOutput->Add(fHistClusterMapITSSAbad);
576
577   fHistClusterMapITSMIskipped = new TH1F("fHistClusterMapITSMIskipped", "N tracks with skip on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
578   fHistClusterMapITSMIskipped->Sumw2();
579   fHistClusterMapITSMIskipped->SetMinimum(0);
580   fOutput->Add(fHistClusterMapITSMIskipped);
581   
582   fHistClusterMapITSSAskippedInAcc = new TH1F("fHistClusterMapITSSAskippedInAcc", "N tracks with skip on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
583   fHistClusterMapITSSAskippedInAcc->Sumw2();
584   fHistClusterMapITSSAskippedInAcc->SetMinimum(0);
585   fOutput->Add(fHistClusterMapITSSAskippedInAcc);
586
587   fHistClusterMapITSSAskipped = new TH1F("fHistClusterMapITSSAskipped", "N tracks with skip on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
588   fHistClusterMapITSSAskipped->Sumw2();
589   fHistClusterMapITSSAskipped->SetMinimum(0);
590   fOutput->Add(fHistClusterMapITSSAskipped);
591
592   fHistClusterMapITSMIoutinz = new TH1F("fHistClusterMapITSMIoutinz", "N tracks out in z on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
593   fHistClusterMapITSMIoutinz->Sumw2();
594   fHistClusterMapITSMIoutinz->SetMinimum(0);
595   fOutput->Add(fHistClusterMapITSMIoutinz);
596   
597   fHistClusterMapITSSAoutinzInAcc = new TH1F("fHistClusterMapITSSAoutinzInAcc", "N tracks with out in z on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
598   fHistClusterMapITSSAoutinzInAcc->Sumw2();
599   fHistClusterMapITSSAoutinzInAcc->SetMinimum(0);
600   fOutput->Add(fHistClusterMapITSSAoutinzInAcc);
601
602   fHistClusterMapITSSAoutinz = new TH1F("fHistClusterMapITSSAoutinz", "N tracks with out in z on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
603   fHistClusterMapITSSAoutinz->Sumw2();
604   fHistClusterMapITSSAoutinz->SetMinimum(0);
605   fOutput->Add(fHistClusterMapITSSAoutinz);
606
607   fHistClusterMapITSSAokoutinzbad = new TH1F("fHistClusterMapITSSAokoutinzbad", "N tracks with cluster or bad zone or out in z (SA); Layer; N tracks",6, -0.5, 5.5);
608   fHistClusterMapITSSAokoutinzbad->Sumw2();
609   fHistClusterMapITSSAokoutinzbad->SetMinimum(0);
610   fOutput->Add(fHistClusterMapITSSAokoutinzbad);
611
612   fHistClusterMapITSMIokoutinzbad = new TH1F("fHistClusterMapITSMIokoutinzbad", "N tracks with cluster or bad zone or out in z (MI); Layer; N tracks",6, -0.5, 5.5);
613   fHistClusterMapITSMIokoutinzbad->Sumw2();
614   fHistClusterMapITSMIokoutinzbad->SetMinimum(0);
615   fOutput->Add(fHistClusterMapITSMIokoutinzbad);
616
617   fHistClusterMapITSSAokoutinzbadInAcc = new TH1F("fHistClusterMapITSSAokoutinzbadInAcc", "N tracks with cluster or bad zone or out in z (SA); Layer; N tracks",6, -0.5, 5.5);
618   fHistClusterMapITSSAokoutinzbadInAcc->Sumw2();
619   fHistClusterMapITSSAokoutinzbadInAcc->SetMinimum(0);
620   fOutput->Add(fHistClusterMapITSSAokoutinzbadInAcc);
621
622   fHistClusterMapITSMInorefit = new TH1F("fHistClusterMapITSMInorefit", "N tracks with norefit on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
623   fHistClusterMapITSMInorefit->Sumw2();
624   fHistClusterMapITSMInorefit->SetMinimum(0);
625   fOutput->Add(fHistClusterMapITSMInorefit);
626   
627   fHistClusterMapITSSAnorefitInAcc = new TH1F("fHistClusterMapITSSAnorefitInAcc", "N tracks with norefit on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
628   fHistClusterMapITSSAnorefitInAcc->Sumw2();
629   fHistClusterMapITSSAnorefitInAcc->SetMinimum(0);
630   fOutput->Add(fHistClusterMapITSSAnorefitInAcc);
631
632   fHistClusterMapITSSAnorefit = new TH1F("fHistClusterMapITSSAnorefit", "N tracks with norefit on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
633   fHistClusterMapITSSAnorefit->Sumw2();
634   fHistClusterMapITSSAnorefit->SetMinimum(0);
635   fOutput->Add(fHistClusterMapITSSAnorefit);
636
637   fHistClusterMapITSMInocls = new TH1F("fHistClusterMapITSMInocls", "N tracks with nocls on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
638   fHistClusterMapITSMInocls->Sumw2();
639   fHistClusterMapITSMInocls->SetMinimum(0);
640   fOutput->Add(fHistClusterMapITSMInocls);
641   
642   fHistClusterMapITSSAnoclsInAcc = new TH1F("fHistClusterMapITSSAnoclsInAcc", "N tracks with nocls on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
643   fHistClusterMapITSSAnoclsInAcc->Sumw2();
644   fHistClusterMapITSSAnoclsInAcc->SetMinimum(0);
645   fOutput->Add(fHistClusterMapITSSAnoclsInAcc);
646   
647   fHistClusterMapModuleITSSAnoclsInAcc = new TH1F("fHistClusterMapModuleITSSAnoclsInAcc", "N tracks with nocls on Module (SA); Module; N tracks",2198, -0.5, 2197.5);
648   fHistClusterMapModuleITSSAnoclsInAcc->SetMinimum(0);
649   fOutput->Add(fHistClusterMapModuleITSSAnoclsInAcc);
650
651   fHistClusterMapModuleITSMInoclsInAcc = new TH1F("fHistClusterMapModuleITSMInoclsInAcc", "N tracks with nocls on Module (MI); Module; N tracks",2198, -0.5, 2197.5);
652   fHistClusterMapModuleITSMInoclsInAcc->SetMinimum(0);
653   fOutput->Add(fHistClusterMapModuleITSMInoclsInAcc);
654
655   fHistClusterMapITSSAnocls = new TH1F("fHistClusterMapITSSAnocls", "N tracks with nocls on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
656   fHistClusterMapITSSAnocls->Sumw2();
657   fHistClusterMapITSSAnocls->SetMinimum(0);
658   fOutput->Add(fHistClusterMapITSSAnocls);
659   
660   
661   fHistZatSPDouter0ok = new TH1F("fHistZatSPDouter0ok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
662   fHistZatSPDouter0ok->Sumw2();
663   fHistZatSPDouter0ok->SetMinimum(0);
664   fOutput->Add(fHistZatSPDouter0ok);
665   fHistZatSPDouter1ok = new TH1F("fHistZatSPDouter1ok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
666   fHistZatSPDouter1ok->Sumw2();
667   fHistZatSPDouter1ok->SetMinimum(0);
668   fOutput->Add(fHistZatSPDouter1ok);
669   fHistZatSPDouter2ok = new TH1F("fHistZatSPDouter2ok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
670   fHistZatSPDouter2ok->Sumw2();
671   fHistZatSPDouter2ok->SetMinimum(0);
672   fOutput->Add(fHistZatSPDouter2ok);
673   fHistZatSPDouter3ok = new TH1F("fHistZatSPDouter3ok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
674   fHistZatSPDouter3ok->Sumw2();
675   fHistZatSPDouter3ok->SetMinimum(0);
676   fOutput->Add(fHistZatSPDouter3ok);
677   fHistZatSPDouter0notok = new TH1F("fHistZatSPDouter0notok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
678   fHistZatSPDouter0notok->Sumw2();
679   fHistZatSPDouter0notok->SetMinimum(0);
680   fOutput->Add(fHistZatSPDouter0notok);
681   fHistZatSPDouter1notok = new TH1F("fHistZatSPDouter1notok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
682   fHistZatSPDouter1notok->Sumw2();
683   fHistZatSPDouter1notok->SetMinimum(0);
684   fOutput->Add(fHistZatSPDouter1notok);
685   fHistZatSPDouter2notok = new TH1F("fHistZatSPDouter2notok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
686   fHistZatSPDouter2notok->Sumw2();
687   fHistZatSPDouter2notok->SetMinimum(0);
688   fOutput->Add(fHistZatSPDouter2notok);
689   fHistZatSPDouter3notok = new TH1F("fHistZatSPDouter3notok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
690   fHistZatSPDouter3notok->Sumw2();
691   fHistZatSPDouter3notok->SetMinimum(0);
692   fOutput->Add(fHistZatSPDouter3notok);
693   
694   fHistxlocSDDok = new TH1F("fHistxlocSDDok", "SDD points; xloc [cm]; N tracks",75, -3.75, 3.75);
695   fHistxlocSDDok->Sumw2();
696   fHistxlocSDDok->SetMinimum(0);
697   fOutput->Add(fHistxlocSDDok);
698
699   fHistxlocVSmodSDDok = new TH2F("fHistxlocVSmodSDDok", "SDD points; module; xloc [cm]",260,239.5,499.5,25, -3.75, 3.75);
700   fOutput->Add(fHistxlocVSmodSDDok);
701
702   fHistzlocSDDok = new TH1F("fHistzlocSDDok", "SDD points; zloc [cm]; N tracks",77, -3.85, 3.85);
703   fHistzlocSDDok->Sumw2();
704   fHistzlocSDDok->SetMinimum(0);
705   fOutput->Add(fHistzlocSDDok);
706   
707   fHistxlocSDDall = new TH1F("fHistxlocSDDall", "SDD points; xloc [cm]; N tracks",75, -3.75, 3.75);
708   fHistxlocSDDall->Sumw2();
709   fHistxlocSDDall->SetMinimum(0);
710   fOutput->Add(fHistxlocSDDall);
711
712   fHistzlocSDDall = new TH1F("fHistzlocSDDall", "SDD points; zloc [cm]; N tracks",77, -3.85, 3.85);
713   fHistzlocSDDall->Sumw2();
714   fHistzlocSDDall->SetMinimum(0);
715   fOutput->Add(fHistzlocSDDall);
716   
717
718   fHistPhiTPCInAcc = new TH1F("fHistPhiTPCInAcc","Azimuthal distribution of TPC tracks; #phi; N tracks",100, 0, 2.*3.1415);
719   fHistPhiTPCInAcc->Sumw2();
720   fHistPhiTPCInAcc->SetMinimum(0);
721   fOutput->Add(fHistPhiTPCInAcc);
722
723   fHistPhiITSMIokbadoutinz6InAcc = new TH1F("fHistPhiITSMIokbadoutinz6InAcc","Azimuthal distribution of ITSMI tracks with 6 layers OK; #phi; N tracks",100,0,2.*3.1415);
724   fHistPhiITSMIokbadoutinz6InAcc->Sumw2();
725   fHistPhiITSMIokbadoutinz6InAcc->SetMinimum(0);
726   fOutput->Add(fHistPhiITSMIokbadoutinz6InAcc);
727   
728   fHistPtTPC = new TH1F("fHistPtTPC","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
729   fHistPtTPC->Sumw2();
730   fHistPtTPC->SetMinimum(0);
731   fOutput->Add(fHistPtTPC);
732   
733   fHistPtITSMI6 = new TH1F("fHistPtITSMI6","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
734   fHistPtITSMI6->Sumw2();
735   fHistPtITSMI6->SetMinimum(0);
736   fOutput->Add(fHistPtITSMI6);
737   
738   fHistPtITSMI5 = new TH1F("fHistPtITSMI5","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
739   fHistPtITSMI5->Sumw2();
740   fHistPtITSMI5->SetMinimum(0);
741   fOutput->Add(fHistPtITSMI5);
742   
743   fHistPtITSMI4 = new TH1F("fHistPtITSMI4","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
744   fHistPtITSMI4->Sumw2();
745   fHistPtITSMI4->SetMinimum(0);
746   fOutput->Add(fHistPtITSMI4);
747   
748   fHistPtITSMI3 = new TH1F("fHistPtITSMI3","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
749   fHistPtITSMI3->Sumw2();
750   fHistPtITSMI3->SetMinimum(0);
751   fOutput->Add(fHistPtITSMI3);
752   
753   fHistPtITSMI2 = new TH1F("fHistPtITSMI2","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
754   fHistPtITSMI2->Sumw2();
755   fHistPtITSMI2->SetMinimum(0);
756   fOutput->Add(fHistPtITSMI2);
757   
758   fHistPtITSMISPD = new TH1F("fHistPtITSMISPD","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
759   fHistPtITSMISPD->Sumw2();
760   fHistPtITSMISPD->SetMinimum(0);
761   fOutput->Add(fHistPtITSMISPD);
762
763   fHistPtITSMIoneSPD = new TH1F("fHistPtITSMIoneSPD","pt distribution of ITSMIoneSPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
764   fHistPtITSMIoneSPD->Sumw2();
765   fHistPtITSMIoneSPD->SetMinimum(0);
766   fOutput->Add(fHistPtITSMIoneSPD);
767
768   fHistPtTPCInAcc = new TH1F("fHistPtTPCInAcc","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
769   fHistPtTPCInAcc->Sumw2();
770   fHistPtTPCInAcc->SetMinimum(0);
771   fOutput->Add(fHistPtTPCInAcc);
772   
773   fHistPtTPCInAccMCtwoSPD = new TH1F("fHistPtTPCInAccMCtwoSPD","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
774   fHistPtTPCInAccMCtwoSPD->Sumw2();
775   fHistPtTPCInAccMCtwoSPD->SetMinimum(0);
776   fOutput->Add(fHistPtTPCInAccMCtwoSPD);
777   
778   fHistPtTPCInAccMConeSPD = new TH1F("fHistPtTPCInAccMConeSPD","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
779   fHistPtTPCInAccMConeSPD->Sumw2();
780   fHistPtTPCInAccMConeSPD->SetMinimum(0);
781   fOutput->Add(fHistPtTPCInAccMConeSPD);
782   
783   fHistdEdxVSPtTPCInAcc = new TH2F("fHistdEdxVSPtTPCInAcc","dE/dx distribution of TPC tracks; p_{t} [GeV/c]; TPC dE/dx",100,0,1,50,0,500);
784   fOutput->Add(fHistdEdxVSPtTPCInAcc);
785   
786   fHistdEdxVSPtITSTPCsel = new TH2F("fHistdEdxVSPtITSTPCsel","dE/dx distribution of TPC tracks; p_{t} [GeV/c]; ITS dE/dx",100,0,1,50,0,500);
787   fOutput->Add(fHistdEdxVSPtITSTPCsel);
788   
789   fHistPtVSphiTPCInAcc = new TH2F("fHistPtVSphiTPCInAcc","pt distribution of TPC tracks; phi; p_{t} [GeV/c]",18,0,6.28,20,0,0.5);
790   fHistPtVSphiTPCInAcc->SetMinimum(0);
791   fOutput->Add(fHistPtVSphiTPCInAcc);
792   
793   fHistPtTPCInAccNoTRDout = new TH1F("fHistPtTPCInAccNoTRDout","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
794   fHistPtTPCInAccNoTRDout->Sumw2();
795   fHistPtTPCInAccNoTRDout->SetMinimum(0);
796   fOutput->Add(fHistPtTPCInAccNoTRDout);
797   
798   fHistPtTPCInAccNoTOFout = new TH1F("fHistPtTPCInAccNoTOFout","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
799   fHistPtTPCInAccNoTOFout->Sumw2();
800   fHistPtTPCInAccNoTOFout->SetMinimum(0);
801   fOutput->Add(fHistPtTPCInAccNoTOFout);
802   
803   fHistPtTPCInAccWithPtTPCAtVtx = new TH1F("fHistPtTPCInAccWithPtTPCAtVtx","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
804   fHistPtTPCInAccWithPtTPCAtVtx->Sumw2();
805   fHistPtTPCInAccWithPtTPCAtVtx->SetMinimum(0);
806   fOutput->Add(fHistPtTPCInAccWithPtTPCAtVtx);
807   
808   fHistPtTPCInAccWithPtTPCAtInnerWall = new TH1F("fHistPtTPCInAccWithPtTPCAtInnerWall","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
809   fHistPtTPCInAccWithPtTPCAtInnerWall->Sumw2();
810   fHistPtTPCInAccWithPtTPCAtInnerWall->SetMinimum(0);
811   fOutput->Add(fHistPtTPCInAccWithPtTPCAtInnerWall);
812   
813   fHistDeltaPtTPC = new TH2F("fHistDeltaPtTPC","pt distribution of TPC tracks; p_{t} [GeV/c]; p_{t} TPC at vtx - p_{t} at inner wall [GeV/c]",100,0,1,50,-0.2,0.2);
814   fHistDeltaPtTPC->SetMinimum(0);
815   fOutput->Add(fHistDeltaPtTPC);
816   
817   fHistPtITSMI6InAcc = new TH1F("fHistPtITSMI6InAcc","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
818   fHistPtITSMI6InAcc->Sumw2();
819   fHistPtITSMI6InAcc->SetMinimum(0);
820   fOutput->Add(fHistPtITSMI6InAcc);
821   
822   fHistPtITSMI5InAcc = new TH1F("fHistPtITSMI5InAcc","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
823   fHistPtITSMI5InAcc->Sumw2();
824   fHistPtITSMI5InAcc->SetMinimum(0);
825   fOutput->Add(fHistPtITSMI5InAcc);
826   
827   fHistPtITSMI4InAcc = new TH1F("fHistPtITSMI4InAcc","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
828   fHistPtITSMI4InAcc->Sumw2();
829   fHistPtITSMI4InAcc->SetMinimum(0);
830   fOutput->Add(fHistPtITSMI4InAcc);
831   
832   fHistPtITSMI3InAcc = new TH1F("fHistPtITSMI3InAcc","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
833   fHistPtITSMI3InAcc->Sumw2();
834   fHistPtITSMI3InAcc->SetMinimum(0);
835   fOutput->Add(fHistPtITSMI3InAcc);
836   
837   fHistPtITSMI2InAcc = new TH1F("fHistPtITSMI2InAcc","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
838   fHistPtITSMI2InAcc->Sumw2();
839   fHistPtITSMI2InAcc->SetMinimum(0);
840   fOutput->Add(fHistPtITSMI2InAcc);
841   
842   fHistPtITSMISPDInAcc = new TH1F("fHistPtITSMISPDInAcc","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
843   fHistPtITSMISPDInAcc->Sumw2();
844   fHistPtITSMISPDInAcc->SetMinimum(0);
845   fOutput->Add(fHistPtITSMISPDInAcc);
846   
847   fHistPtITSMIoneSPDInAcc = new TH1F("fHistPtITSMIoneSPDInAcc","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
848   fHistPtITSMIoneSPDInAcc->Sumw2();
849   fHistPtITSMIoneSPDInAcc->SetMinimum(0);
850   fOutput->Add(fHistPtITSMIoneSPDInAcc);
851
852   fHistPtITSMI6InAccFake = new TH1F("fHistPtITSMI6InAccFake","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
853   fHistPtITSMI6InAccFake->Sumw2();
854   fHistPtITSMI6InAccFake->SetMinimum(0);
855   fOutput->Add(fHistPtITSMI6InAccFake);
856   
857   fHistPtITSMI5InAccFake = new TH1F("fHistPtITSMI5InAccFake","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
858   fHistPtITSMI5InAccFake->Sumw2();
859   fHistPtITSMI5InAccFake->SetMinimum(0);
860   fOutput->Add(fHistPtITSMI5InAccFake);
861   
862   fHistPtITSMI4InAccFake = new TH1F("fHistPtITSMI4InAccFake","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
863   fHistPtITSMI4InAccFake->Sumw2();
864   fHistPtITSMI4InAccFake->SetMinimum(0);
865   fOutput->Add(fHistPtITSMI4InAccFake);
866   
867   fHistPtITSMI3InAccFake = new TH1F("fHistPtITSMI3InAccFake","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
868   fHistPtITSMI3InAccFake->Sumw2();
869   fHistPtITSMI3InAccFake->SetMinimum(0);
870   fOutput->Add(fHistPtITSMI3InAccFake);
871   
872   fHistPtITSMI2InAccFake = new TH1F("fHistPtITSMI2InAccFake","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
873   fHistPtITSMI2InAccFake->Sumw2();
874   fHistPtITSMI2InAccFake->SetMinimum(0);
875   fOutput->Add(fHistPtITSMI2InAccFake);
876   
877   fHistPtITSMISPDInAccFake = new TH1F("fHistPtITSMISPDInAccFake","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
878   fHistPtITSMISPDInAccFake->Sumw2();
879   fHistPtITSMISPDInAccFake->SetMinimum(0);
880   fOutput->Add(fHistPtITSMISPDInAccFake);
881   
882   fHistPtITSMIoneSPDInAccFake = new TH1F("fHistPtITSMIoneSPDInAccFake","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
883   fHistPtITSMIoneSPDInAccFake->Sumw2();
884   fHistPtITSMIoneSPDInAccFake->SetMinimum(0);
885   fOutput->Add(fHistPtITSMIoneSPDInAccFake);
886
887   fHistPtITSMIoneSPDthreeSDDSSDInAcc = new TH1F("fHistPtITSMIoneSPDthreeSDDSSDInAcc","pt distribution of ITSMI tracks (>0 in SPD, >2 in SDD+SSD); p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
888   fHistPtITSMIoneSPDthreeSDDSSDInAcc->Sumw2();
889   fHistPtITSMIoneSPDthreeSDDSSDInAcc->SetMinimum(0);
890   fOutput->Add(fHistPtITSMIoneSPDthreeSDDSSDInAcc);
891
892   fHistPtITSTPCsel = new TH1F("fHistPtITSTPCsel","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
893   fHistPtITSTPCsel->Sumw2();
894   fHistPtITSTPCsel->SetMinimum(0);
895   fOutput->Add(fHistPtITSTPCsel);
896
897   fHistPtITSTPCselP = new TH1F("fHistPtITSTPCselP","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
898   fHistPtITSTPCselP->Sumw2();
899   fHistPtITSTPCselP->SetMinimum(0);
900   fOutput->Add(fHistPtITSTPCselP);
901
902   fHistPtITSTPCselS = new TH1F("fHistPtITSTPCselS","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
903   fHistPtITSTPCselS->Sumw2();
904   fHistPtITSTPCselS->SetMinimum(0);
905   fOutput->Add(fHistPtITSTPCselS);
906
907   fHistPtITSTPCselSfromStrange = new TH1F("fHistPtITSTPCselSfromStrange","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
908   fHistPtITSTPCselSfromStrange->Sumw2();
909   fHistPtITSTPCselSfromStrange->SetMinimum(0);
910   fOutput->Add(fHistPtITSTPCselSfromStrange);
911
912   fHistPtITSTPCselPfromStrange = new TH1F("fHistPtITSTPCselPfromStrange","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
913   fHistPtITSTPCselPfromStrange->Sumw2();
914   fHistPtITSTPCselPfromStrange->SetMinimum(0);
915   fOutput->Add(fHistPtITSTPCselPfromStrange);
916
917   fHistPtITSTPCselSfromMat = new TH1F("fHistPtITSTPCselSfromMat","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
918   fHistPtITSTPCselSfromMat->Sumw2();
919   fHistPtITSTPCselSfromMat->SetMinimum(0);
920   fOutput->Add(fHistPtITSTPCselSfromMat);
921
922   fHistPtTPCInAccP = new TH1F("fHistPtTPCInAccP","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
923   fHistPtTPCInAccP->Sumw2();
924   fHistPtTPCInAccP->SetMinimum(0);
925   fOutput->Add(fHistPtTPCInAccP);
926
927   fHistPtTPCInAccPfromStrange = new TH1F("fHistPtTPCInAccPfromStrange","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
928   fHistPtTPCInAccPfromStrange->Sumw2();
929   fHistPtTPCInAccPfromStrange->SetMinimum(0);
930   fOutput->Add(fHistPtTPCInAccPfromStrange);
931   
932   fHistPtITSMI6InAccP = new TH1F("fHistPtITSMI6InAccP","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
933   fHistPtITSMI6InAccP->Sumw2();
934   fHistPtITSMI6InAccP->SetMinimum(0);
935   fOutput->Add(fHistPtITSMI6InAccP);
936   
937   fHistPtITSMI5InAccP = new TH1F("fHistPtITSMI5InAccP","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
938   fHistPtITSMI5InAccP->Sumw2();
939   fHistPtITSMI5InAccP->SetMinimum(0);
940   fOutput->Add(fHistPtITSMI5InAccP);
941   
942   fHistPtITSMI4InAccP = new TH1F("fHistPtITSMI4InAccP","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
943   fHistPtITSMI4InAccP->Sumw2();
944   fHistPtITSMI4InAccP->SetMinimum(0);
945   fOutput->Add(fHistPtITSMI4InAccP);
946   
947   fHistPtITSMI3InAccP = new TH1F("fHistPtITSMI3InAccP","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
948   fHistPtITSMI3InAccP->Sumw2();
949   fHistPtITSMI3InAccP->SetMinimum(0);
950   fOutput->Add(fHistPtITSMI3InAccP);
951   
952   fHistPtITSMI2InAccP = new TH1F("fHistPtITSMI2InAccP","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
953   fHistPtITSMI2InAccP->Sumw2();
954   fHistPtITSMI2InAccP->SetMinimum(0);
955   fOutput->Add(fHistPtITSMI2InAccP);
956   
957   fHistPtITSMISPDInAccP = new TH1F("fHistPtITSMISPDInAccP","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
958   fHistPtITSMISPDInAccP->Sumw2();
959   fHistPtITSMISPDInAccP->SetMinimum(0);
960   fOutput->Add(fHistPtITSMISPDInAccP);
961   
962   fHistPtITSMIoneSPDInAccP = new TH1F("fHistPtITSMIoneSPDInAccP","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
963   fHistPtITSMIoneSPDInAccP->Sumw2();
964   fHistPtITSMIoneSPDInAccP->SetMinimum(0);
965   fOutput->Add(fHistPtITSMIoneSPDInAccP);
966
967   fHistPtTPCInAccS = new TH1F("fHistPtTPCInAccS","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
968   fHistPtTPCInAccS->Sumw2();
969   fHistPtTPCInAccS->SetMinimum(0);
970   fOutput->Add(fHistPtTPCInAccS);
971   
972   fHistPtTPCInAccSfromStrange = new TH1F("fHistPtTPCInAccSfromStrange","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
973   fHistPtTPCInAccSfromStrange->Sumw2();
974   fHistPtTPCInAccSfromStrange->SetMinimum(0);
975   fOutput->Add(fHistPtTPCInAccSfromStrange);
976   
977   fHistPtTPCInAccSfromMat = new TH1F("fHistPtTPCInAccSfromMat","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
978   fHistPtTPCInAccSfromMat->Sumw2();
979   fHistPtTPCInAccSfromMat->SetMinimum(0);
980   fOutput->Add(fHistPtTPCInAccSfromMat);
981   
982   fHistPtITSMI6InAccS = new TH1F("fHistPtITSMI6InAccS","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
983   fHistPtITSMI6InAccS->Sumw2();
984   fHistPtITSMI6InAccS->SetMinimum(0);
985   fOutput->Add(fHistPtITSMI6InAccS);
986   
987   fHistPtITSMI5InAccS = new TH1F("fHistPtITSMI5InAccS","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
988   fHistPtITSMI5InAccS->Sumw2();
989   fHistPtITSMI5InAccS->SetMinimum(0);
990   fOutput->Add(fHistPtITSMI5InAccS);
991   
992   fHistPtITSMI4InAccS = new TH1F("fHistPtITSMI4InAccS","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
993   fHistPtITSMI4InAccS->Sumw2();
994   fHistPtITSMI4InAccS->SetMinimum(0);
995   fOutput->Add(fHistPtITSMI4InAccS);
996   
997   fHistPtITSMI3InAccS = new TH1F("fHistPtITSMI3InAccS","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
998   fHistPtITSMI3InAccS->Sumw2();
999   fHistPtITSMI3InAccS->SetMinimum(0);
1000   fOutput->Add(fHistPtITSMI3InAccS);
1001   
1002   fHistPtITSMI2InAccS = new TH1F("fHistPtITSMI2InAccS","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
1003   fHistPtITSMI2InAccS->Sumw2();
1004   fHistPtITSMI2InAccS->SetMinimum(0);
1005   fOutput->Add(fHistPtITSMI2InAccS);
1006   
1007   fHistPtITSMISPDInAccS = new TH1F("fHistPtITSMISPDInAccS","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
1008   fHistPtITSMISPDInAccS->Sumw2();
1009   fHistPtITSMISPDInAccS->SetMinimum(0);
1010   fOutput->Add(fHistPtITSMISPDInAccS);
1011   
1012   fHistPtITSMIoneSPDInAccS = new TH1F("fHistPtITSMIoneSPDInAccS","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
1013   fHistPtITSMIoneSPDInAccS->Sumw2();
1014   fHistPtITSMIoneSPDInAccS->SetMinimum(0);
1015   fOutput->Add(fHistPtITSMIoneSPDInAccS);
1016   
1017   fHistPtITSMIokbadoutinz6 = new TH1F("fHistPtITSMIokbadoutinz6","pt distribution of ITSMI tracks with 6 layers OK; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
1018   fHistPtITSMIokbadoutinz6->Sumw2();
1019   fHistPtITSMIokbadoutinz6->SetMinimum(0);
1020   fOutput->Add(fHistPtITSMIokbadoutinz6);
1021
1022   fHistPtITSMIokbadoutinz4InAcc = new TH1F("fHistPtITSMIokbadoutinz4InAcc","pt distribution of ITSMI tracks with 4 layers OK; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
1023   fHistPtITSMIokbadoutinz4InAcc->Sumw2();
1024   fHistPtITSMIokbadoutinz4InAcc->SetMinimum(0);
1025   fOutput->Add(fHistPtITSMIokbadoutinz4InAcc);
1026
1027   fHistPtITSMIokbadoutinz5InAcc = new TH1F("fHistPtITSMIokbadoutinz5InAcc","pt distribution of ITSMI tracks with 5 layers OK; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
1028   fHistPtITSMIokbadoutinz5InAcc->Sumw2();
1029   fHistPtITSMIokbadoutinz5InAcc->SetMinimum(0);
1030   fOutput->Add(fHistPtITSMIokbadoutinz5InAcc);
1031
1032   fHistPtITSMIokbadoutinz6InAcc = new TH1F("fHistPtITSMIokbadoutinz6InAcc","pt distribution of ITSMI tracks with 6 layers OK; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
1033   fHistPtITSMIokbadoutinz6InAcc->Sumw2();
1034   fHistPtITSMIokbadoutinz6InAcc->SetMinimum(0);
1035   fOutput->Add(fHistPtITSMIokbadoutinz6InAcc);
1036
1037   fHistRProdVtxInAccP = new TH1F("fHistRProdVtxInAccP","Radius of production vertex for primaries; r [cm]; N tracks",100,0,10);
1038   fHistRProdVtxInAccP->Sumw2();
1039   fHistRProdVtxInAccP->SetMinimum(0);
1040   fOutput->Add(fHistRProdVtxInAccP);
1041
1042   fHistRProdVtxInAccS = new TH1F("fHistRProdVtxInAccS","Radius of production vertex for secondaries; r [cm]; N tracks",100,0,10);
1043   fHistRProdVtxInAccS->Sumw2();
1044   fHistRProdVtxInAccS->SetMinimum(0);
1045   fOutput->Add(fHistRProdVtxInAccS);
1046   
1047   fHistd0rphiTPCInAccP150200 = new TH1F("fHistd0rphiTPCInAccP150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
1048   fHistd0rphiTPCInAccP150200->Sumw2();
1049   fHistd0rphiTPCInAccP150200->SetMinimum(0);
1050   fOutput->Add(fHistd0rphiTPCInAccP150200);
1051
1052   fHistd0rphiTPCInAccP500700 = new TH1F("fHistd0rphiTPCInAccP500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
1053   fHistd0rphiTPCInAccP500700->Sumw2();
1054   fHistd0rphiTPCInAccP500700->SetMinimum(0);
1055   fOutput->Add(fHistd0rphiTPCInAccP500700);
1056
1057   fHistd0rphiTPCInAccP10001500 = new TH1F("fHistd0rphiTPCInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
1058   fHistd0rphiTPCInAccP10001500->Sumw2();
1059   fHistd0rphiTPCInAccP10001500->SetMinimum(0);
1060   fOutput->Add(fHistd0rphiTPCInAccP10001500);
1061
1062   fHistd0rphiTPCInAccS150200 = new TH1F("fHistd0rphiTPCInAccS150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
1063   fHistd0rphiTPCInAccS150200->Sumw2();
1064   fHistd0rphiTPCInAccS150200->SetMinimum(0);
1065   fOutput->Add(fHistd0rphiTPCInAccS150200);
1066
1067   fHistd0rphiTPCInAccS500700 = new TH1F("fHistd0rphiTPCInAccS500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
1068   fHistd0rphiTPCInAccS500700->Sumw2();
1069   fHistd0rphiTPCInAccS500700->SetMinimum(0);
1070   fOutput->Add(fHistd0rphiTPCInAccS500700);
1071
1072   fHistd0rphiTPCInAccS10001500 = new TH1F("fHistd0rphiTPCInAccS10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
1073   fHistd0rphiTPCInAccS10001500->Sumw2();
1074   fHistd0rphiTPCInAccS10001500->SetMinimum(0);
1075   fOutput->Add(fHistd0rphiTPCInAccS10001500);
1076
1077   fHistd0rphiITSMISPDInAccP150200 = new TH1F("fHistd0rphiITSMISPDInAccP150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1078   fHistd0rphiITSMISPDInAccP150200->Sumw2();
1079   fHistd0rphiITSMISPDInAccP150200->SetMinimum(0);
1080   fOutput->Add(fHistd0rphiITSMISPDInAccP150200);
1081
1082   fHistd0rphiITSMISPDInAccP500700 = new TH1F("fHistd0rphiITSMISPDInAccP500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1083   fHistd0rphiITSMISPDInAccP500700->Sumw2();
1084   fHistd0rphiITSMISPDInAccP500700->SetMinimum(0);
1085   fOutput->Add(fHistd0rphiITSMISPDInAccP500700);
1086
1087   fHistd0rphiITSMISPDInAccP10001500 = new TH1F("fHistd0rphiITSMISPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1088   fHistd0rphiITSMISPDInAccP10001500->Sumw2();
1089   fHistd0rphiITSMISPDInAccP10001500->SetMinimum(0);
1090   fOutput->Add(fHistd0rphiITSMISPDInAccP10001500);
1091
1092   fHistd0rphiITSMISPDInAccS150200 = new TH1F("fHistd0rphiITSMISPDInAccS150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1093   fHistd0rphiITSMISPDInAccS150200->Sumw2();
1094   fHistd0rphiITSMISPDInAccS150200->SetMinimum(0);
1095   fOutput->Add(fHistd0rphiITSMISPDInAccS150200);
1096
1097   fHistd0rphiITSMISPDInAccS500700 = new TH1F("fHistd0rphiITSMISPDInAccS500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1098   fHistd0rphiITSMISPDInAccS500700->Sumw2();
1099   fHistd0rphiITSMISPDInAccS500700->SetMinimum(0);
1100   fOutput->Add(fHistd0rphiITSMISPDInAccS500700);
1101
1102   fHistd0rphiITSMISPDInAccS10001500 = new TH1F("fHistd0rphiITSMISPDInAccS10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1103   fHistd0rphiITSMISPDInAccS10001500->Sumw2();
1104   fHistd0rphiITSMISPDInAccS10001500->SetMinimum(0);
1105   fOutput->Add(fHistd0rphiITSMISPDInAccS10001500);
1106
1107   fHistd0rphiITSMIoneSPDInAccP150200 = new TH1F("fHistd0rphiITSMIoneSPDInAccP150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1108   fHistd0rphiITSMIoneSPDInAccP150200->Sumw2();
1109   fHistd0rphiITSMIoneSPDInAccP150200->SetMinimum(0);
1110   fOutput->Add(fHistd0rphiITSMIoneSPDInAccP150200);
1111
1112   fHistd0rphiITSMIoneSPDInAccP350450 = new TH1F("fHistd0rphiITSMIoneSPDInAccP350450","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1113   fHistd0rphiITSMIoneSPDInAccP350450->Sumw2();
1114   fHistd0rphiITSMIoneSPDInAccP350450->SetMinimum(0);
1115   fOutput->Add(fHistd0rphiITSMIoneSPDInAccP350450);
1116
1117   fHistd0rphiITSMIoneSPDInAccP500700 = new TH1F("fHistd0rphiITSMIoneSPDInAccP500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1118   fHistd0rphiITSMIoneSPDInAccP500700->Sumw2();
1119   fHistd0rphiITSMIoneSPDInAccP500700->SetMinimum(0);
1120   fOutput->Add(fHistd0rphiITSMIoneSPDInAccP500700);
1121
1122   fHistd0rphiITSMIoneSPDInAccP10001500 = new TH1F("fHistd0rphiITSMIoneSPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1123   fHistd0rphiITSMIoneSPDInAccP10001500->Sumw2();
1124   fHistd0rphiITSMIoneSPDInAccP10001500->SetMinimum(0);
1125   fOutput->Add(fHistd0rphiITSMIoneSPDInAccP10001500);
1126
1127   fHistd0rphiITSMIoneSPDInAccP25004000 = new TH1F("fHistd0rphiITSMIoneSPDInAccP25004000","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1128   fHistd0rphiITSMIoneSPDInAccP25004000->Sumw2();
1129   fHistd0rphiITSMIoneSPDInAccP25004000->SetMinimum(0);
1130   fOutput->Add(fHistd0rphiITSMIoneSPDInAccP25004000);
1131
1132   fHistd0rphiITSMIoneSPDInAccP40008000 = new TH1F("fHistd0rphiITSMIoneSPDInAccP40008000","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1133   fHistd0rphiITSMIoneSPDInAccP40008000->Sumw2();
1134   fHistd0rphiITSMIoneSPDInAccP40008000->SetMinimum(0);
1135   fOutput->Add(fHistd0rphiITSMIoneSPDInAccP40008000);
1136
1137   fHistd0zITSMIoneSPDInAccP150200 = new TH1F("fHistd0zITSMIoneSPDInAccP150200","Longitudinal imp. par. to VertexTracks for primaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
1138   fHistd0zITSMIoneSPDInAccP150200->Sumw2();
1139   fHistd0zITSMIoneSPDInAccP150200->SetMinimum(0);
1140   fOutput->Add(fHistd0zITSMIoneSPDInAccP150200);
1141
1142   fHistd0zITSMIoneSPDInAccP500700 = new TH1F("fHistd0zITSMIoneSPDInAccP500700","Longitudinal imp. par. to VertexTracks for primaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
1143   fHistd0zITSMIoneSPDInAccP500700->Sumw2();
1144   fHistd0zITSMIoneSPDInAccP500700->SetMinimum(0);
1145   fOutput->Add(fHistd0zITSMIoneSPDInAccP500700);
1146
1147   fHistd0zITSMIoneSPDInAccP10001500 = new TH1F("fHistd0zITSMIoneSPDInAccP10001500","Longitudinal imp. par. to VertexTracks for primaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
1148   fHistd0zITSMIoneSPDInAccP10001500->Sumw2();
1149   fHistd0zITSMIoneSPDInAccP10001500->SetMinimum(0);
1150   fOutput->Add(fHistd0zITSMIoneSPDInAccP10001500);
1151
1152   fHistd0zVSetaTPCInAccP10001500 = new TH2F("fHistd0zVSetaTPCInAccP10001500","Long. imp. par. to VertexSPD for TPC tracks; d_{0} z [cm]; eta",100,-4,4,10,-1,1);
1153   fOutput->Add(fHistd0zVSetaTPCInAccP10001500);
1154
1155   fHistd0rphiVSphiITSMIoneSPDInAccP10001500 = new TH2F("fHistd0rphiVSphiITSMIoneSPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; phi",30,-0.3,0.3,40,0,2*3.1415);
1156   fOutput->Add(fHistd0rphiVSphiITSMIoneSPDInAccP10001500);
1157
1158   fHistd0rphiVSetaITSMIoneSPDInAccP10001500 = new TH2F("fHistd0rphiVSetaITSMIoneSPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; eta",30,-0.3,0.3,10,-1,1);
1159   fOutput->Add(fHistd0rphiVSetaITSMIoneSPDInAccP10001500);
1160
1161   fHistd0rphiITSMIoneSPDInAccS150200 = new TH1F("fHistd0rphiITSMIoneSPDInAccS150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1162   fHistd0rphiITSMIoneSPDInAccS150200->Sumw2();
1163   fHistd0rphiITSMIoneSPDInAccS150200->SetMinimum(0);
1164   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS150200);
1165
1166   fHistd0rphiITSMIoneSPDInAccS350450 = new TH1F("fHistd0rphiITSMIoneSPDInAccS350450","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1167   fHistd0rphiITSMIoneSPDInAccS350450->Sumw2();
1168   fHistd0rphiITSMIoneSPDInAccS350450->SetMinimum(0);
1169   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS350450);
1170
1171   fHistd0rphiITSMIoneSPDInAccS500700 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1172   fHistd0rphiITSMIoneSPDInAccS500700->Sumw2();
1173   fHistd0rphiITSMIoneSPDInAccS500700->SetMinimum(0);
1174   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700);
1175
1176   fHistd0rphiITSMIoneSPDInAccS500700from22 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from22","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1177   fHistd0rphiITSMIoneSPDInAccS500700from22->Sumw2();
1178   fHistd0rphiITSMIoneSPDInAccS500700from22->SetMinimum(0);
1179   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from22);
1180
1181   fHistd0rphiITSMIoneSPDInAccS500700from211 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from211","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1182   fHistd0rphiITSMIoneSPDInAccS500700from211->Sumw2();
1183   fHistd0rphiITSMIoneSPDInAccS500700from211->SetMinimum(0);
1184   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from211);
1185
1186   fHistd0rphiITSMIoneSPDInAccS500700from310 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from310","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1187   fHistd0rphiITSMIoneSPDInAccS500700from310->Sumw2();
1188   fHistd0rphiITSMIoneSPDInAccS500700from310->SetMinimum(0);
1189   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from310);
1190
1191   fHistd0rphiITSMIoneSPDInAccS500700from321 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from321","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1192   fHistd0rphiITSMIoneSPDInAccS500700from321->Sumw2();
1193   fHistd0rphiITSMIoneSPDInAccS500700from321->SetMinimum(0);
1194   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from321);
1195
1196   fHistd0rphiITSMIoneSPDInAccS500700from3122 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from3122","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1197   fHistd0rphiITSMIoneSPDInAccS500700from3122->Sumw2();
1198   fHistd0rphiITSMIoneSPDInAccS500700from3122->SetMinimum(0);
1199   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from3122);
1200
1201   fHistd0rphiITSMIoneSPDInAccS10001500 = new TH1F("fHistd0rphiITSMIoneSPDInAccS10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1202   fHistd0rphiITSMIoneSPDInAccS10001500->Sumw2();
1203   fHistd0rphiITSMIoneSPDInAccS10001500->SetMinimum(0);
1204   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS10001500);
1205
1206   fHistd0rphiITSMIoneSPDInAccS25004000 = new TH1F("fHistd0rphiITSMIoneSPDInAccS25004000","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1207   fHistd0rphiITSMIoneSPDInAccS25004000->Sumw2();
1208   fHistd0rphiITSMIoneSPDInAccS25004000->SetMinimum(0);
1209   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS25004000);
1210
1211   fHistd0rphiITSMIoneSPDInAccS40008000 = new TH1F("fHistd0rphiITSMIoneSPDInAccS40008000","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1212   fHistd0rphiITSMIoneSPDInAccS40008000->Sumw2();
1213   fHistd0rphiITSMIoneSPDInAccS40008000->SetMinimum(0);
1214   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS40008000);
1215
1216   fHistd0rphiITSMIoneSPDInAccS150200fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS150200fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1217   fHistd0rphiITSMIoneSPDInAccS150200fromStrange->Sumw2();
1218   fHistd0rphiITSMIoneSPDInAccS150200fromStrange->SetMinimum(0);
1219   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS150200fromStrange);
1220
1221   fHistd0rphiITSMIoneSPDInAccS150200fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS150200fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1222   fHistd0rphiITSMIoneSPDInAccS150200fromMat->Sumw2();
1223   fHistd0rphiITSMIoneSPDInAccS150200fromMat->SetMinimum(0);
1224   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS150200fromMat);
1225
1226   fHistd0rphiITSMIoneSPDInAccS350450fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS350450fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1227   fHistd0rphiITSMIoneSPDInAccS350450fromStrange->Sumw2();
1228   fHistd0rphiITSMIoneSPDInAccS350450fromStrange->SetMinimum(0);
1229   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS350450fromStrange);
1230
1231   fHistd0rphiITSMIoneSPDInAccS350450fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS350450fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1232   fHistd0rphiITSMIoneSPDInAccS350450fromMat->Sumw2();
1233   fHistd0rphiITSMIoneSPDInAccS350450fromMat->SetMinimum(0);
1234   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS350450fromMat);
1235
1236   fHistd0rphiITSMIoneSPDInAccS500700fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1237   fHistd0rphiITSMIoneSPDInAccS500700fromStrange->Sumw2();
1238   fHistd0rphiITSMIoneSPDInAccS500700fromStrange->SetMinimum(0);
1239   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700fromStrange);
1240
1241   fHistd0rphiITSMIoneSPDInAccS500700fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1242   fHistd0rphiITSMIoneSPDInAccS500700fromMat->Sumw2();
1243   fHistd0rphiITSMIoneSPDInAccS500700fromMat->SetMinimum(0);
1244   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700fromMat);
1245
1246   fHistd0rphiITSMIoneSPDInAccS10001500fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS10001500fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1247   fHistd0rphiITSMIoneSPDInAccS10001500fromStrange->Sumw2();
1248   fHistd0rphiITSMIoneSPDInAccS10001500fromStrange->SetMinimum(0);
1249   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS10001500fromStrange);
1250
1251   fHistd0rphiITSMIoneSPDInAccS10001500fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS10001500fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1252   fHistd0rphiITSMIoneSPDInAccS10001500fromMat->Sumw2();
1253   fHistd0rphiITSMIoneSPDInAccS10001500fromMat->SetMinimum(0);
1254   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS10001500fromMat);
1255
1256   fHistd0rphiITSMIoneSPDInAccS25004000fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS25004000fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1257   fHistd0rphiITSMIoneSPDInAccS25004000fromStrange->Sumw2();
1258   fHistd0rphiITSMIoneSPDInAccS25004000fromStrange->SetMinimum(0);
1259   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS25004000fromStrange);
1260
1261   fHistd0rphiITSMIoneSPDInAccS25004000fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS25004000fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1262   fHistd0rphiITSMIoneSPDInAccS25004000fromMat->Sumw2();
1263   fHistd0rphiITSMIoneSPDInAccS25004000fromMat->SetMinimum(0);
1264   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS25004000fromMat);
1265
1266   fHistd0rphiITSMIoneSPDInAccS40008000fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS40008000fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1267   fHistd0rphiITSMIoneSPDInAccS40008000fromStrange->Sumw2();
1268   fHistd0rphiITSMIoneSPDInAccS40008000fromStrange->SetMinimum(0);
1269   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS40008000fromStrange);
1270
1271   fHistd0rphiITSMIoneSPDInAccS40008000fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS40008000fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
1272   fHistd0rphiITSMIoneSPDInAccS40008000fromMat->Sumw2();
1273   fHistd0rphiITSMIoneSPDInAccS40008000fromMat->SetMinimum(0);
1274   fOutput->Add(fHistd0rphiITSMIoneSPDInAccS40008000fromMat);
1275
1276   
1277   fHistd0zITSMIoneSPDInAccS150200 = new TH1F("fHistd0zITSMIoneSPDInAccS150200","Longitudinal imp. par. to VertexTracks for secondaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
1278   fHistd0zITSMIoneSPDInAccS150200->Sumw2();
1279   fHistd0zITSMIoneSPDInAccS150200->SetMinimum(0);
1280   fOutput->Add(fHistd0zITSMIoneSPDInAccS150200);
1281
1282   fHistd0zITSMIoneSPDInAccS500700 = new TH1F("fHistd0zITSMIoneSPDInAccS500700","Longitudinal imp. par. to VertexTracks for secondaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
1283   fHistd0zITSMIoneSPDInAccS500700->Sumw2();
1284   fHistd0zITSMIoneSPDInAccS500700->SetMinimum(0);
1285   fOutput->Add(fHistd0zITSMIoneSPDInAccS500700);
1286
1287   fHistd0zITSMIoneSPDInAccS10001500 = new TH1F("fHistd0zITSMIoneSPDInAccS10001500","Longitudinal imp. par. to VertexTracks for secondaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
1288   fHistd0zITSMIoneSPDInAccS10001500->Sumw2();
1289   fHistd0zITSMIoneSPDInAccS10001500->SetMinimum(0);
1290   fOutput->Add(fHistd0zITSMIoneSPDInAccS10001500);
1291
1292
1293   // ntuples
1294   //
1295   fNtupleESDTracks = new TNtuple("fNtupleESDTracks","tracks","pt:eta:phi:d0:z0:sigmad0:sigmaz0:ptMC:pdgMC:pdgMCMoth:d0MC:d0MCv:z0MCv:sigmad0MCv:sigmaz0MCv:ITSflag:isPrimary:isTPCSel");  
1296   fOutput->Add(fNtupleESDTracks);
1297
1298   fNtupleITSAlignExtra = new TNtuple("fNtupleITSAlignExtra","ITS alignment checks: extra clusters","layer:x:y:z:dxy:dz:xloc:zloc:npoints:pt");  
1299   fOutput->Add(fNtupleITSAlignExtra);
1300
1301   fNtupleITSAlignSPDTracklets = new TNtuple("fNtupleITSAlignSPDTracklets","ITS alignment checks: SPD tracklets wrt SPD vertex","phi:theta:z:dxy:dz:pt");  
1302   fOutput->Add(fNtupleITSAlignSPDTracklets);
1303
1304   return;
1305 }
1306
1307 //________________________________________________________________________
1308 void AliAnalysisTaskITSTrackingCheck::UserExec(Option_t *) 
1309 {
1310   // Main loop
1311   // Called for each event
1312
1313   fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1314
1315   if (!fESD) {
1316     Printf("ERROR: fESD not available");
1317     return;
1318   }
1319
1320
1321   fHistNEvents->Fill(-1);
1322
1323
1324   Bool_t isSelected = kTRUE;
1325   if(fUsePhysSel) {
1326     isSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1327   }
1328   if(!isSelected) return;
1329
1330   
1331   //if(fESD->GetEventType()!=7) return;
1332
1333   // ***********  MC info ***************
1334   TArrayF mcVertex(3);
1335   mcVertex[0]=9999.; mcVertex[1]=9999.; mcVertex[2]=9999.;
1336   Float_t dNchdy=-999.;
1337
1338   TParticle *part=0;
1339   AliESDVertex *vertexMC=0;
1340   AliStack *stack=0;
1341   if (fReadMC) {
1342     AliMCEventHandler *eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1343     if (!eventHandler) {
1344       Printf("ERROR: Could not retrieve MC event handler");
1345       return;
1346     }
1347     
1348     AliMCEvent* mcEvent = eventHandler->MCEvent();
1349     if (!mcEvent) {
1350       Printf("ERROR: Could not retrieve MC event");
1351       return;
1352     }
1353     
1354     stack = mcEvent->Stack();
1355     if (!stack) {
1356       AliDebug(AliLog::kError, "Stack not available");
1357       return;
1358     }
1359     
1360     AliHeader* header = mcEvent->Header();
1361     if (!header) {
1362       AliDebug(AliLog::kError, "Header not available");
1363       return;
1364     }
1365     AliGenEventHeader* genHeader = header->GenEventHeader();
1366     genHeader->PrimaryVertex(mcVertex);
1367
1368
1369     Int_t ngenpart = (Int_t)stack->GetNtrack();
1370     //printf("# generated particles = %d\n",ngenpart);
1371     dNchdy=0;
1372     for(Int_t ip=0; ip<ngenpart; ip++) {
1373       part = (TParticle*)stack->Particle(ip);
1374       // keep only electrons, muons, pions, kaons and protons
1375       Int_t apdg = TMath::Abs(part->GetPdgCode());
1376       if(apdg!=11 && apdg!=13 && apdg!=211 && apdg!=321 && apdg!=2212) continue;      
1377       // reject secondaries
1378       if(TMath::Sqrt((part->Vx()-mcVertex[0])*(part->Vx()-mcVertex[0])+(part->Vy()-mcVertex[1])*(part->Vy()-mcVertex[1]))>0.0010) continue;
1379       // reject incoming protons
1380       Double_t energy  = part->Energy();
1381       if(energy>900.) continue;
1382       Double_t pz = part->Pz();
1383       Double_t y = 0.5*TMath::Log((energy+pz+1.e-13)/(energy-pz+1.e-13));
1384       if(TMath::Abs(y)<1.0) dNchdy += 0.5; // count 1/2 of particles in |y|<1
1385     }
1386     //printf("# primary particles = %7.1f\n",dNchdy);
1387   } 
1388   // ***********  MC info ***************
1389   Double_t mcVtxPos[3]={mcVertex[0],mcVertex[1],mcVertex[2]},mcVtxSigma[3]={0,0,0};
1390   vertexMC = new AliESDVertex(mcVtxPos,mcVtxSigma);
1391
1392
1393
1394   //------- event selection --------
1395   Int_t   mincontrSPDvtx=1;
1396   Double_t maxzSPDvtx=20.;
1397   Double_t maxrSPDvtx=1.;
1398   Bool_t useTRKvtx=kTRUE;
1399   Bool_t useSPDvtxifNotTRK=kTRUE;
1400   Int_t   mincontrTRKvtx=1;
1401   //Double_t maxzTRKvtx=20.;
1402   //Double_t maxrTRKvtx=1.;
1403   //------- TPC track selection --------
1404   Int_t    minclsTPC=90;
1405   Double_t maxchi2perTPCcl=4.;
1406   Double_t minEtaInAcc=-0.8; // -0.8
1407   Double_t maxEtaInAcc=0.8; // 0.8
1408   Double_t maxdcaxy=2.4;//2.4;
1409   Double_t maxdcaz=3.2;//3.2;
1410   AliESDtrackCuts* esdtrackCutsTPC = new AliESDtrackCuts("esdtrackCutsTPC");
1411   esdtrackCutsTPC->SetMaxDCAToVertexXY(maxdcaxy);
1412   esdtrackCutsTPC->SetMaxDCAToVertexZ(maxdcaz);
1413   esdtrackCutsTPC->SetDCAToVertex2D(kTRUE);
1414   esdtrackCutsTPC->SetRequireSigmaToVertex(kFALSE);
1415   esdtrackCutsTPC->SetRequireTPCRefit(kFALSE);// cannot do it because status not copied in AliESDtrack::FillTPCOnlyTrack
1416   esdtrackCutsTPC->SetAcceptKinkDaughters(kFALSE);
1417   esdtrackCutsTPC->SetMinNClustersTPC(minclsTPC);
1418   esdtrackCutsTPC->SetMaxChi2PerClusterTPC(maxchi2perTPCcl);
1419   esdtrackCutsTPC->SetEtaRange(minEtaInAcc,maxEtaInAcc);
1420   SetESDtrackCutsTPC(esdtrackCutsTPC);
1421   //------- ITS+TPC track selection --------
1422   Double_t maxdcaxyITSTPC=0.2;
1423   Double_t maxdcazITSTPC=1.e6;
1424   AliESDtrackCuts* esdtrackCutsITSTPC = new AliESDtrackCuts("esdtrackCutsITSTPC");
1425   esdtrackCutsITSTPC->SetMaxDCAToVertexXY(maxdcaxyITSTPC);
1426   esdtrackCutsITSTPC->SetMaxDCAToVertexZ(maxdcazITSTPC);
1427   esdtrackCutsITSTPC->SetDCAToVertex2D(kFALSE);
1428   esdtrackCutsITSTPC->SetRequireSigmaToVertex(kFALSE);
1429   esdtrackCutsITSTPC->SetRequireITSRefit(kTRUE);
1430   esdtrackCutsITSTPC->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1431                                                AliESDtrackCuts::kAny);
1432   esdtrackCutsITSTPC->SetAcceptKinkDaughters(kFALSE);
1433   esdtrackCutsITSTPC->SetMinNClustersTPC(minclsTPC);
1434   esdtrackCutsITSTPC->SetMaxChi2PerClusterTPC(maxchi2perTPCcl);
1435   esdtrackCutsITSTPC->SetEtaRange(minEtaInAcc,maxEtaInAcc);
1436   SetESDtrackCutsITSTPC(esdtrackCutsITSTPC);
1437   //---------------------------------------
1438   
1439
1440   //
1441   
1442   /*  
1443   // **********  Trigger *****************
1444   ULong64_t triggerMask;
1445   ULong64_t spdFO = (1 << 14);
1446   ULong64_t v0left = (1 << 11);
1447   ULong64_t v0right = (1 << 12);
1448   
1449   triggerMask=fESD->GetTriggerMask();
1450   // MB1: SPDFO || V0L || V0R
1451   Bool_t eventTriggered = (triggerMask & spdFO || ((triggerMask & v0left) || (triggerMask & v0right))); 
1452   //MB2: GFO && V0R
1453   //triggerMask & spdFO && ((triggerMask&v0left) || (triggerMask&v0right))
1454   // ************ Trigger ******************
1455   if(!eventTriggered) return;
1456   */
1457
1458
1459   fHistNEvents->Fill(0);
1460
1461   // SPD vertex
1462   const AliESDVertex *spdv=fESD->GetPrimaryVertexSPD();
1463   // Select good SPD vertices
1464   TString spdvtitle=spdv->GetTitle();
1465   //if(!spdvtitle.Contains("3D")) return;
1466   if(spdv->GetNContributors()<mincontrSPDvtx ||
1467      TMath::Abs(spdv->GetZv())>maxzSPDvtx ||  
1468      spdv->GetXv()*spdv->GetXv()+spdv->GetYv()*spdv->GetYv()>maxrSPDvtx) {
1469     delete esdtrackCutsTPC; esdtrackCutsTPC=0;
1470     delete esdtrackCutsITSTPC; esdtrackCutsITSTPC=0;
1471     return;
1472   }
1473
1474
1475   //
1476   // Tracks vertex
1477   const AliESDVertex *vertexESD = fESD->GetPrimaryVertexTracks();
1478
1479
1480   if(spdvtitle.Contains("3D")) {
1481     fHistNEvents->Fill(1);
1482     fHistNEvents->Fill(3);
1483   } else {
1484     fHistNEvents->Fill(2);
1485     fHistNEvents->Fill(3);
1486   }
1487   if(vertexESD) {
1488     if(vertexESD->GetStatus()) fHistNEvents->Fill(4);
1489   }
1490
1491   Int_t ntracks = fESD->GetNumberOfTracks();
1492   //printf("Tracks # = %d\n",fESD->GetNumberOfTracks());
1493
1494   fHistNtracks->Fill(ntracks);
1495   // Post the data already here
1496   PostData(1, fOutput);
1497
1498   Int_t idet,status; Float_t xloc,zloc;
1499   Double_t rSPDouter=7.6,rSDDouter=23.9,rSSDouter=43.1;  
1500   Double_t zSPDouter=14.1,zSDDouter=29.7,zSSDouter=48.9;  
1501
1502   // loop on tracks
1503   for(Int_t itr=0; itr<ntracks; itr++) {
1504     AliESDtrack *track = fESD->GetTrack(itr);
1505     // remove kink daughters
1506     if(track->GetKinkIndex(0)>0) continue;
1507
1508     // remove tracks not reco in ITS or TPC
1509     if (!(track->GetStatus() & AliESDtrack::kITSin) &&
1510         !(track->GetStatus() & AliESDtrack::kTPCin)) continue;
1511
1512     Bool_t isPrimary=kTRUE,isFromMat=kFALSE,isFromStrange=kFALSE;
1513     Double_t rProdVtx=0,zProdVtx=0;
1514     Int_t pdgTrk=0,pdgMoth=0;
1515     Int_t nClsMCSPD=0;
1516   
1517     Int_t trkLabel = TMath::Abs(track->GetLabel());
1518     Bool_t isFake=(track->GetLabel()>=0 ? kFALSE : kTRUE);
1519     // check if it is primary
1520     if(fReadMC && stack) {
1521       isPrimary = stack->IsPhysicalPrimary(trkLabel);
1522       part = (TParticle*)stack->Particle(trkLabel);
1523       rProdVtx = TMath::Sqrt((part->Vx()-mcVertex[0])*(part->Vx()-mcVertex[0])+(part->Vy()-mcVertex[1])*(part->Vy()-mcVertex[1]));
1524       zProdVtx = TMath::Abs(part->Vz()-mcVertex[2]);
1525       //if(rProdVtx<2.8) isPrimary=kTRUE; // this could be tried
1526       pdgTrk = TMath::Abs(part->GetPdgCode());
1527       if(part->GetFirstMother()>=0) {
1528         TParticle* mm=stack->Particle(part->GetFirstMother());
1529         if(mm) pdgMoth = TMath::Abs(mm->GetPdgCode());
1530       }
1531       if(pdgMoth==310 || pdgMoth==321 || pdgMoth==3122 || pdgMoth==3312) isFromStrange=kTRUE;
1532       if(pdgMoth==211 || pdgMoth==22 || pdgMoth==2112 || pdgMoth==2212) isFromMat=kTRUE;
1533       nClsMCSPD = NumberOfITSClustersMC(trkLabel,240);
1534     }
1535
1536     Bool_t itsrefit=kFALSE,tpcrefit=kFALSE,itsfindable=kFALSE,itsfindableAcc=kFALSE;
1537     if ((track->GetStatus() & AliESDtrack::kITSrefit)) itsrefit=kTRUE;
1538     if ((track->GetStatus() & AliESDtrack::kTPCrefit)) tpcrefit=kTRUE;
1539     //if ((track->GetStatus() & AliESDtrack::kTPCin)) tpcrefit=kTRUE;
1540
1541     // remove tracks with kTPCin and not kTPCrefit 
1542     if ((track->GetStatus() & AliESDtrack::kTPCin) && !tpcrefit) continue;
1543
1544     AliESDtrack *trackTPC = 0;
1545     if(tpcrefit) trackTPC = AliESDtrackCuts::GetTPCOnlyTrack(fESD,itr);
1546     if(trackTPC) trackTPC->RelateToVertex(spdv,fESD->GetMagneticField(),100.); // relate it to the SPD vertex
1547    
1548
1549     Int_t nclsITS = track->GetNcls(0);
1550     Int_t nclsSDDSSD = 0;
1551     Int_t nclsokbadoutinzITS = 0;
1552     Bool_t outInZ=kFALSE;
1553     Bool_t skipTrack=kFALSE;
1554
1555     for(Int_t layer=0; layer<6; layer++) {
1556       if(layer>=2 && track->HasPointOnITSLayer(layer)) nclsSDDSSD++;
1557       if(layer==0 && !track->HasPointOnITSLayer(1)) continue;
1558       if(layer==1 && !track->HasPointOnITSLayer(0)) continue;
1559       track->GetITSModuleIndexInfo(layer,idet,status,xloc,zloc);
1560       if(status<0) continue;
1561       if(layer>=2) idet+=240; // add n SPD modules
1562       if(layer>=4) idet+=260; // add n SDD modules
1563       if(status==4) outInZ=kTRUE;
1564       
1565       if(layer==1 && tpcrefit && itsrefit) {
1566         Double_t xyz[3];
1567         track->GetXYZAt(rSPDouter,fESD->GetMagneticField(),xyz);
1568         if(status==1) {
1569           if(idet%4==0) fHistZatSPDouter0ok->Fill(xyz[2]);
1570           if(idet%4==1) fHistZatSPDouter1ok->Fill(xyz[2]);
1571           if(idet%4==2) fHistZatSPDouter2ok->Fill(xyz[2]);
1572           if(idet%4==3) fHistZatSPDouter3ok->Fill(xyz[2]);
1573         }
1574         if(status==2 || status==5) {
1575           if(idet%4==0) fHistZatSPDouter0notok->Fill(xyz[2]);
1576           if(idet%4==1) fHistZatSPDouter1notok->Fill(xyz[2]);
1577           if(idet%4==2) fHistZatSPDouter2notok->Fill(xyz[2]);
1578           if(idet%4==3) fHistZatSPDouter3notok->Fill(xyz[2]);
1579         }
1580       }
1581       // kill SDD clusters in MC
1582       if(fReadMC && (layer==2 || layer==3)) {
1583         Double_t qITS[4]; track->GetITSdEdxSamples(qITS);
1584         Double_t conv=3.34/5.43; 
1585         if(layer==2 && status==1 && qITS[0]*conv < 30.) status=5;
1586         if(layer==3 && status==1 && qITS[1]*conv < 30.) status=5;
1587       }
1588       if(tpcrefit) {
1589         if(trackTPC) if(!fESDtrackCutsTPC->AcceptTrack(trackTPC)) continue;
1590         if(status==1) fHistClusterMapITSMIok->Fill(layer);
1591         if(status==2) fHistClusterMapITSMIbad->Fill(layer);
1592         if(status==3) fHistClusterMapITSMIskipped->Fill(layer);
1593         if(status==4) fHistClusterMapITSMIoutinz->Fill(layer);
1594         if(status==5) fHistClusterMapITSMInocls->Fill(layer);
1595         if(status==6) fHistClusterMapITSMInorefit->Fill(layer);
1596         if(status==1 && !outInZ) fHistClusterMapModuleITSMIokInAcc->Fill(idet);
1597         if((status==2 || status==7) && !outInZ) fHistClusterMapModuleITSMIbadInAcc->Fill(idet);
1598         if(status==5 && !outInZ) fHistClusterMapModuleITSMInoclsInAcc->Fill(idet);
1599         if(status==1 || status==2 || status==4) {
1600           fHistClusterMapITSMIokoutinzbad->Fill(layer);
1601           nclsokbadoutinzITS++;
1602         }
1603         /*if(idet>=80 && idet<120) {
1604           Double_t xyz[3];
1605           track->GetXYZAt(6.8,fESD->GetMagneticField(),xyz);
1606           printf("det %d status %d phi %f z %f zloc %f xloc %f\n",idet,status,TMath::ATan2(xyz[1],xyz[0]),xyz[2],zloc,xloc);
1607           }*/
1608         if((layer==2 || layer==3) && status!=2 && status!=4) {
1609           //Float_t xlocCls;
1610           //Int_t nClsInMod = NumberOfITSClusters(idet,xlocCls);
1611           fHistxlocSDDall->Fill(xloc);
1612           fHistzlocSDDall->Fill(zloc);
1613           if(status==1  /*nClsInMod>0*/) {
1614             fHistxlocSDDok->Fill(xloc);
1615             fHistxlocVSmodSDDok->Fill(idet,xloc);
1616             fHistzlocSDDok->Fill(zloc);
1617           }     
1618         }
1619       } else {
1620         if(status==1) fHistClusterMapITSSAok->Fill(layer);
1621         if(status==2) fHistClusterMapITSSAbad->Fill(layer);
1622         if(status==3) fHistClusterMapITSSAskipped->Fill(layer);
1623         if(status==4) fHistClusterMapITSSAoutinz->Fill(layer);
1624         if(status==5) fHistClusterMapITSSAnocls->Fill(layer);
1625         if(status==6) fHistClusterMapITSSAnorefit->Fill(layer);
1626         if(status==1 || status==2 || status==4) fHistClusterMapITSSAokoutinzbad->Fill(layer);
1627         if(status==1 && !outInZ) {fHistClusterMapITSSAokInAcc->Fill(layer);fHistClusterMapModuleITSSAokInAcc->Fill(idet);}
1628         if((status==2 || status==7) && !outInZ) {fHistClusterMapITSSAbadInAcc->Fill(layer);fHistClusterMapModuleITSSAbadInAcc->Fill(idet);}
1629         if(status==3 && !outInZ) fHistClusterMapITSSAskippedInAcc->Fill(layer);
1630         if(status==4 && !outInZ) fHistClusterMapITSSAoutinzInAcc->Fill(layer);
1631         if(status==5 && !outInZ) {fHistClusterMapITSSAnoclsInAcc->Fill(layer);fHistClusterMapModuleITSSAnoclsInAcc->Fill(idet);}
1632         if(status==6 && !outInZ) fHistClusterMapITSSAnorefitInAcc->Fill(layer);
1633         if((status==1 || status==2 || status==4) && !outInZ) fHistClusterMapITSSAokoutinzbadInAcc->Fill(layer);
1634       }
1635       if(TESTBIT(track->GetITSClusterMap(),layer)) {
1636         if(tpcrefit) {
1637           fHistClusterMapITSMI->Fill(layer);
1638         } else {
1639           fHistClusterMapITSSA->Fill(layer);
1640           if(!outInZ) fHistClusterMapITSSAInAcc->Fill(layer);
1641         }
1642       }
1643       /*    
1644       // SKIP SDD MODULES LOW EFF
1645       if(
1646          idet==246 ||
1647          idet==247 ||
1648          idet==256 ||
1649          idet==261 ||
1650          idet==267 ||
1651          idet==333 ||
1652          idet==343 ||
1653          idet==346 ||
1654          idet==349 ||
1655          idet==376 ||
1656          idet==390 ||
1657          idet==392 ||
1658          idet==409 ||
1659          idet==411 ||
1660          idet==464 ||
1661          idet==468 ||
1662          idet==474 ||
1663          idet==469
1664          ) 
1665         skipTrack=kTRUE;
1666       */
1667          /*
1668       if(
1669          idet==245
1670          || idet==248
1671          || idet==253
1672          || idet==264
1673          || idet==276
1674          || idet==286
1675          || idet==287
1676          || idet==292
1677          || idet==295
1678          || idet==302
1679          || idet==305
1680          || idet==307
1681          || idet==315
1682          || idet==320
1683          || idet==330
1684          || idet==331
1685          || idet==341
1686          || idet==357
1687          || idet==368
1688          || idet==376
1689          || idet==377
1690          || idet==378
1691          || idet==379
1692          || idet==380
1693          || idet==381
1694          || idet==382
1695          || idet==383
1696          || idet==422
1697          || idet==444
1698          || idet==445
1699          || idet==450
1700          || idet==451
1701          || idet==452
1702          || idet==453
1703          || idet==455
1704          || idet==459
1705          || idet==469
1706          || idet==485
1707          || idet==493
1708          || idet==494
1709          || idet==495
1710          || idet==496
1711          || idet==497
1712          || idet==498
1713          || idet==499
1714          ) skipTrack=kTRUE;
1715       // SKIP SDD MODULES LOW EFF
1716       */
1717     }  
1718     if(skipTrack) {delete trackTPC; trackTPC=0; continue;}
1719
1720     // TPC track findable in ITS
1721     if(tpcrefit && trackTPC) { 
1722       if(fESDtrackCutsTPC->AcceptTrack(trackTPC)) {
1723         itsfindable=kTRUE;
1724         Double_t zAtSSDouter=100,zAtSDDouter=100,zAtSPDouter=100;
1725         track->GetZAt(rSSDouter,fESD->GetMagneticField(),zAtSSDouter);
1726         track->GetZAt(rSDDouter,fESD->GetMagneticField(),zAtSDDouter);
1727         track->GetZAt(rSPDouter,fESD->GetMagneticField(),zAtSPDouter);
1728         fHistPtTPC->Fill(track->Pt());  
1729         if(TMath::Abs(zAtSSDouter)<1.*zSSDouter &&
1730            TMath::Abs(zAtSDDouter)<1.*zSDDouter &&
1731            TMath::Abs(zAtSPDouter)<1.*zSPDouter) {
1732           itsfindableAcc=kTRUE;
1733           fHistdEdxVSPtTPCInAcc->Fill(track->Pt(),track->GetTPCsignal());
1734           fHistPtTPCInAcc->Fill(track->Pt());
1735           fHistPtVSphiTPCInAcc->Fill(track->Phi(),track->Pt());
1736           if(!(track->GetStatus()&AliESDtrack::kTRDout)) fHistPtTPCInAccNoTRDout->Fill(track->Pt()); 
1737           if(!(track->GetStatus()&AliESDtrack::kTOFout)) fHistPtTPCInAccNoTOFout->Fill(track->Pt()); 
1738           fHistPtTPCInAccWithPtTPCAtVtx->Fill(trackTPC->Pt());
1739           Double_t pTPCinnerwall[3];
1740           track->GetInnerPxPyPz(pTPCinnerwall);
1741           Double_t ptTPCinnerwall=TMath::Sqrt(pTPCinnerwall[0]*pTPCinnerwall[0]+pTPCinnerwall[1]*pTPCinnerwall[1]);
1742           fHistPtTPCInAccWithPtTPCAtInnerWall->Fill(ptTPCinnerwall);
1743           if(track->GetStatus()&AliESDtrack::kITSrefit && !(track->GetStatus()&AliESDtrack::kTOFout)) fHistDeltaPtTPC->Fill(trackTPC->P(),track->P()-trackTPC->P());
1744           fHistPhiTPCInAcc->Fill(track->Phi());  
1745           if(isPrimary) {
1746             fHistPtTPCInAccP->Fill(track->Pt());
1747             if(pdgTrk==321) fHistPtTPCInAccPfromStrange->Fill(track->Pt());
1748           } else {
1749             fHistPtTPCInAccS->Fill(track->Pt());
1750             if(isFromMat) fHistPtTPCInAccSfromMat->Fill(track->Pt());
1751             if(isFromStrange) fHistPtTPCInAccSfromStrange->Fill(track->Pt());
1752           }  
1753           if(nClsMCSPD==2) fHistPtTPCInAccMCtwoSPD->Fill(track->Pt());
1754           if(nClsMCSPD>=1) fHistPtTPCInAccMConeSPD->Fill(track->Pt());
1755           //if(isPrimary) {fHistRProdVtxInAccP->Fill(rProdVtx);} else {fHistRProdVtxInAccS->Fill(rProdVtx);}
1756         }
1757       }
1758     }
1759
1760
1761     if(useTRKvtx) {
1762       // we need the vertex to compute the impact parameters
1763       if(!vertexESD) {delete trackTPC; trackTPC=0; continue;}
1764       if(!(vertexESD->GetStatus()) || vertexESD->GetNContributors()<mincontrTRKvtx) {
1765         if(useSPDvtxifNotTRK) {
1766           vertexESD = fESD->GetPrimaryVertexSPD();
1767         } else {
1768           delete trackTPC; trackTPC=0; continue;
1769         }
1770       }
1771     }
1772
1773     // track prolonged in ITS with different conditions
1774     if(itsrefit) {
1775       if(itsfindable) {
1776         if(nclsITS==6) fHistPtITSMI6->Fill(track->Pt());
1777         if(nclsITS==5) fHistPtITSMI5->Fill(track->Pt());
1778         if(nclsITS==4) fHistPtITSMI4->Fill(track->Pt());
1779         if(nclsITS==3) fHistPtITSMI3->Fill(track->Pt());
1780         if(nclsITS==2) fHistPtITSMI2->Fill(track->Pt());
1781         if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1))
1782           fHistPtITSMISPD->Fill(track->Pt());
1783         if(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1))
1784           fHistPtITSMIoneSPD->Fill(track->Pt());
1785         if(nclsokbadoutinzITS==6) fHistPtITSMIokbadoutinz6->Fill(track->Pt());
1786       }
1787       if(itsfindableAcc) {
1788         if(nclsITS==6) {
1789           fHistPtITSMI6InAcc->Fill(track->Pt());
1790           if(isFake) fHistPtITSMI6InAccFake->Fill(track->Pt());
1791           if(isPrimary) {fHistPtITSMI6InAccP->Fill(track->Pt());} else {fHistPtITSMI6InAccS->Fill(track->Pt());}  
1792         }
1793         if(nclsITS==5) {
1794           fHistPtITSMI5InAcc->Fill(track->Pt());
1795           if(isFake) fHistPtITSMI5InAccFake->Fill(track->Pt());
1796           if(isPrimary) {fHistPtITSMI5InAccP->Fill(track->Pt());} else {fHistPtITSMI5InAccS->Fill(track->Pt());}  
1797         }
1798         if(nclsITS==4) {
1799           fHistPtITSMI4InAcc->Fill(track->Pt());
1800           if(isFake) fHistPtITSMI4InAccFake->Fill(track->Pt());
1801           if(isPrimary) {fHistPtITSMI4InAccP->Fill(track->Pt());} else {fHistPtITSMI4InAccS->Fill(track->Pt());}  
1802         }
1803         if(nclsITS==3) {
1804           fHistPtITSMI3InAcc->Fill(track->Pt());
1805           if(isFake) fHistPtITSMI3InAccFake->Fill(track->Pt());
1806           if(isPrimary) {fHistPtITSMI3InAccP->Fill(track->Pt());} else {fHistPtITSMI3InAccS->Fill(track->Pt());}  
1807         }
1808         if(nclsITS==2) {
1809           fHistPtITSMI2InAcc->Fill(track->Pt());
1810           if(isFake) fHistPtITSMI2InAccFake->Fill(track->Pt());
1811           if(isPrimary) {fHistPtITSMI2InAccP->Fill(track->Pt());} else {fHistPtITSMI2InAccS->Fill(track->Pt());}  
1812         }
1813         if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1)) {
1814           fHistPtITSMISPDInAcc->Fill(track->Pt());
1815           if(isFake) fHistPtITSMISPDInAccFake->Fill(track->Pt());
1816           if(isPrimary) {fHistPtITSMISPDInAccP->Fill(track->Pt());} else {fHistPtITSMISPDInAccS->Fill(track->Pt());}  
1817         }
1818         if(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) {
1819           fHistPtITSMIoneSPDInAcc->Fill(track->Pt());
1820           if(isFake) fHistPtITSMIoneSPDInAccFake->Fill(track->Pt());
1821           if(nclsSDDSSD>=3) fHistPtITSMIoneSPDthreeSDDSSDInAcc->Fill(track->Pt());
1822
1823           if(isPrimary) {fHistPtITSMIoneSPDInAccP->Fill(track->Pt());} else {fHistPtITSMIoneSPDInAccS->Fill(track->Pt());}  
1824         }
1825         if(nclsokbadoutinzITS==6) fHistPtITSMIokbadoutinz6InAcc->Fill(track->Pt());
1826         if(nclsokbadoutinzITS==5) fHistPtITSMIokbadoutinz5InAcc->Fill(track->Pt());
1827         if(nclsokbadoutinzITS==4) fHistPtITSMIokbadoutinz4InAcc->Fill(track->Pt());
1828         if(nclsokbadoutinzITS==6) fHistPhiITSMIokbadoutinz6InAcc->Fill(track->Phi());  
1829       }
1830     }
1831
1832     if(tpcrefit) {
1833       fHistNclsITSMI->Fill(nclsITS);
1834     } else {
1835       fHistNclsITSSA->Fill(nclsITS);
1836       if(!outInZ) fHistNclsITSSAInAcc->Fill(nclsITS);
1837     }
1838
1839     
1840     if((tpcrefit && fUseITSSAforNtuples) || // only ITS-SA for ntuples
1841        (!tpcrefit && !fUseITSSAforNtuples)) // only ITS-TPC for ntuples
1842       { delete trackTPC; trackTPC=0; continue; }
1843
1844     // impact parameter to VertexTracks
1845     Float_t d0z0[2],covd0z0[3];
1846     Double_t d0z0TPC[2],covd0z0TPC[3];
1847     if(useTRKvtx) {
1848       if(!track->RelateToVertex(vertexESD,fESD->GetMagneticField(),kVeryBig)) { delete trackTPC; trackTPC=0; continue; }
1849     } else { 
1850       //if(!track->RelateToVertex(vertexMC,fESD->GetMagneticField(),kVeryBig)) continue;
1851       if(!track->RelateToVertex(spdv,fESD->GetMagneticField(),kVeryBig)) { delete trackTPC; trackTPC=0; continue; }
1852     } 
1853     track->GetImpactParameters(d0z0,covd0z0);
1854     if(trackTPC) trackTPC->PropagateToDCA(spdv,fESD->GetMagneticField(),kVeryBig,d0z0TPC,covd0z0TPC);
1855     if(covd0z0[0]<0. || covd0z0[2]<0. || covd0z0TPC[0]<0. || covd0z0TPC[2]<0.) { delete trackTPC; trackTPC=0; continue; }
1856
1857
1858     // track that passes final ITS+TPC cuts
1859     if(itsfindableAcc && fESDtrackCutsITSTPC->AcceptTrack(track)) {
1860       fHistPtITSTPCsel->Fill(track->Pt());
1861       fHistdEdxVSPtITSTPCsel->Fill(track->Pt(),track->GetITSsignal());
1862       if(isPrimary) {
1863         fHistPtITSTPCselP->Fill(track->Pt());
1864         if(pdgTrk==321) fHistPtITSTPCselPfromStrange->Fill(track->Pt());
1865       } else {
1866         fHistPtITSTPCselS->Fill(track->Pt());
1867         if(isFromMat) fHistPtITSTPCselSfromMat->Fill(track->Pt());
1868         if(isFromStrange) fHistPtITSTPCselSfromStrange->Fill(track->Pt());
1869       }  
1870     }
1871     
1872
1873     // fill d0 histos
1874     if(((!fUseITSSAforNtuples&&itsfindableAcc) || fUseITSSAforNtuples) /*&& track->Charge()>0*/) {
1875       if(track->Pt()>0.150 && track->Pt()<0.200) {
1876         if(isPrimary) {
1877           fHistd0rphiTPCInAccP150200->Fill(d0z0TPC[0]);
1878           if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1879             fHistd0rphiITSMISPDInAccP150200->Fill(d0z0[0]);
1880           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1881             //if(((track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) || (!track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1))) && itsrefit) {
1882             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP150200->Fill(d0z0[0]);
1883             if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccP150200->Fill(d0z0[1]);
1884           }
1885         } else {
1886           fHistd0rphiTPCInAccS150200->Fill(d0z0TPC[0]);
1887           if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1888             fHistd0rphiITSMISPDInAccS150200->Fill(d0z0[0]);
1889           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1890             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
1891               fHistd0rphiITSMIoneSPDInAccS150200->Fill(d0z0[0]);
1892               if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS150200fromStrange->Fill(d0z0[0]);
1893               if(isFromMat) fHistd0rphiITSMIoneSPDInAccS150200fromMat->Fill(d0z0[0]);
1894             }
1895             if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccS150200->Fill(d0z0[1]);
1896             if(TMath::Abs(d0z0[0])<0.1) fHistPDGMoth150200->Fill(pdgMoth);
1897           }
1898         }
1899       }
1900       if(track->Pt()>0.350 && track->Pt()<0.450) {
1901         if(isPrimary) {
1902           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1903             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP350450->Fill(d0z0[0]);
1904           }
1905         } else {
1906           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1907             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
1908               fHistd0rphiITSMIoneSPDInAccS350450->Fill(d0z0[0]);
1909               if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS350450fromStrange->Fill(d0z0[0]);
1910               if(isFromMat) fHistd0rphiITSMIoneSPDInAccS350450fromMat->Fill(d0z0[0]);
1911             }
1912           }
1913         }
1914       }
1915       if(track->Pt()>0.500 && track->Pt()<0.700) {
1916         if(isPrimary) {
1917           fHistd0rphiTPCInAccP500700->Fill(d0z0TPC[0]);
1918           if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1919             fHistd0rphiITSMISPDInAccP500700->Fill(d0z0[0]);
1920           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1921             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP500700->Fill(d0z0[0]);
1922             if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccP500700->Fill(d0z0[1]);
1923           }
1924         } else {
1925           fHistd0rphiTPCInAccS500700->Fill(d0z0TPC[0]);
1926           if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1927             fHistd0rphiITSMISPDInAccS500700->Fill(d0z0[0]);
1928           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1929             fHistPDGTrk->Fill(pdgTrk);
1930             fHistPDGMoth->Fill(pdgMoth);
1931             if(TMath::Abs(d0z0[0])<0.1) fHistPDGMoth500700->Fill(pdgMoth);
1932             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
1933               fHistd0rphiITSMIoneSPDInAccS500700->Fill(d0z0[0]);
1934               if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS500700fromStrange->Fill(d0z0[0]);
1935               if(isFromMat) fHistd0rphiITSMIoneSPDInAccS500700fromMat->Fill(d0z0[0]);
1936             }
1937             if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccS500700->Fill(d0z0[1]);
1938             if(pdgMoth==310) fHistd0rphiITSMIoneSPDInAccS500700from310->Fill(d0z0[0]);
1939             if(pdgMoth==321) fHistd0rphiITSMIoneSPDInAccS500700from321->Fill(d0z0[0]);
1940             if(pdgMoth==3122) fHistd0rphiITSMIoneSPDInAccS500700from3122->Fill(d0z0[0]);
1941             if(pdgMoth==211) fHistd0rphiITSMIoneSPDInAccS500700from211->Fill(d0z0[0]);
1942             if(pdgMoth==22) fHistd0rphiITSMIoneSPDInAccS500700from22->Fill(d0z0[0]);
1943             if(pdgMoth==211 && TMath::Abs(d0z0[0])>0.5) fHistRProdVtxInAccS->Fill(rProdVtx);
1944           }
1945         }
1946       }
1947       if(track->Pt()>1.000 && track->Pt()<1.500) {
1948         if(isPrimary) {
1949           fHistd0rphiTPCInAccP10001500->Fill(d0z0TPC[0]);
1950           fHistd0zVSetaTPCInAccP10001500->Fill(d0z0TPC[1],trackTPC->Eta());
1951
1952           if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1953             fHistd0rphiITSMISPDInAccP10001500->Fill(d0z0[0]);
1954           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1955             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP10001500->Fill(d0z0[0]);
1956             if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccP10001500->Fill(d0z0[1]);
1957             fHistd0rphiVSphiITSMIoneSPDInAccP10001500->Fill(d0z0[0],track->Phi());
1958             fHistd0rphiVSetaITSMIoneSPDInAccP10001500->Fill(d0z0[0],track->Eta());
1959           }
1960         } else {
1961           fHistd0rphiTPCInAccS10001500->Fill(d0z0TPC[0]);
1962           if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1963             fHistd0rphiITSMISPDInAccS10001500->Fill(d0z0[0]);
1964           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1965             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
1966               fHistd0rphiITSMIoneSPDInAccS10001500->Fill(d0z0[0]);
1967               if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS10001500fromStrange->Fill(d0z0[0]);
1968               if(isFromMat) fHistd0rphiITSMIoneSPDInAccS10001500fromMat->Fill(d0z0[0]);
1969             }
1970             if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccS10001500->Fill(d0z0[1]);
1971             if(TMath::Abs(d0z0[0])<0.1) fHistPDGMoth10001500->Fill(pdgMoth);
1972           }
1973         }
1974       }
1975       if(track->Pt()>2.500 && track->Pt()<4.000) {
1976         if(isPrimary) {
1977           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1978             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP25004000->Fill(d0z0[0]);
1979           }
1980         } else {
1981           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1982             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
1983               fHistd0rphiITSMIoneSPDInAccS25004000->Fill(d0z0[0]);
1984               if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS25004000fromStrange->Fill(d0z0[0]);
1985               if(isFromMat) fHistd0rphiITSMIoneSPDInAccS25004000fromMat->Fill(d0z0[0]);
1986             }
1987           }
1988         }
1989       }
1990       if(track->Pt()>4.000 && track->Pt()<8.000) {
1991         if(isPrimary) {
1992           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1993             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP40008000->Fill(d0z0[0]);
1994           }
1995         } else {
1996           if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1997             if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
1998               fHistd0rphiITSMIoneSPDInAccS40008000->Fill(d0z0[0]);
1999               if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS40008000fromStrange->Fill(d0z0[0]);
2000               if(isFromMat) fHistd0rphiITSMIoneSPDInAccS40008000fromMat->Fill(d0z0[0]);
2001             }
2002           }
2003         }
2004       }
2005
2006     }
2007
2008     if(trackTPC) { delete trackTPC; trackTPC=0; }
2009
2010     // encode ITS cluster map, including MC info
2011     Int_t iITSflag=MakeITSflag(track);
2012
2013     // if MC info is available: get particle properties
2014     Float_t ptMC=-999.,pdgMC=-999.,d0MC=-999.;
2015     Double_t d0z0MCv[2]={-999.,-999.},covd0z0MCv[3]={1.,1.,1.};
2016     if(fReadMC) {
2017       part = (TParticle*)stack->Particle(trkLabel);
2018       ptMC=part->Pt();
2019       pdgMC=part->GetPdgCode();
2020       d0MC=ParticleImpParMC(part,vertexMC,0.1*fESD->GetMagneticField());
2021       track->PropagateToDCA(vertexMC,fESD->GetMagneticField(),100.,d0z0MCv,covd0z0MCv);
2022       if(covd0z0MCv[0]<0. || covd0z0MCv[2]<0.) continue;
2023     }
2024
2025     Double_t sigmad0MCv=TMath::Sqrt(covd0z0MCv[0]);
2026     if(!itsrefit) sigmad0MCv *= -1.;
2027     Float_t isPrimaryFl = (isPrimary ? 1. : 0.);
2028     Float_t isTPCSelFl  = (itsfindableAcc ? 1. : 0.);
2029
2030     // fill ntuple with track properties
2031     if(fFillNtuples && SelectPt(track->Pt())) {
2032       Float_t fillArray[22]={track->Pt(),track->Eta(),track->Phi(),d0z0[0],d0z0[1],TMath::Sqrt(covd0z0[0]),TMath::Sqrt(covd0z0[2]),ptMC,pdgMC,pdgMoth,d0MC,d0z0MCv[0],d0z0MCv[1],sigmad0MCv,TMath::Sqrt(covd0z0MCv[2]),(Float_t)iITSflag,isPrimaryFl,isTPCSelFl};
2033       fNtupleESDTracks->Fill(fillArray);
2034     }
2035
2036     //---------------------------------------------    
2037     // AliTrackPoints: alignment checks
2038     // 
2039     if(!fFillNtuples) continue;
2040
2041     const AliTrackPointArray *array = track->GetTrackPointArray();
2042     if(!array) continue;
2043     AliTrackPoint point;
2044     Int_t pointOnLayer[6]={0,0,0,0,0,0};
2045     Int_t indexAssociated[6]={-1,-1,-1,-1,-1,-1},indexExtra=-1;
2046     Bool_t extra=kFALSE;
2047     Int_t layerId,layerExtra=-1;
2048     for(Int_t ipt=0; ipt<array->GetNPoints(); ipt++) {
2049       array->GetPoint(point,ipt);
2050       Float_t r = TMath::Sqrt(point.GetX()*point.GetX()+point.GetY()*point.GetY());
2051
2052       if(r>3 && r<6) {
2053         layerId = 0;
2054       } else if(r>6 && r<8) {
2055         layerId = 1;
2056       } else if(r>8 && r<18) {
2057         layerId = 2;
2058       } else if(r>18 && r<30) {
2059         layerId = 3;
2060       } else if(r>30 && r<40) {
2061         layerId = 4;
2062       } else if(r>40 && r<50) {
2063         layerId = 5;
2064       } else {
2065         layerId=100;
2066       }
2067
2068       // only ITS points
2069       if(layerId>5) continue;
2070
2071       if(!point.IsExtra()) {
2072         pointOnLayer[layerId]++;
2073         indexAssociated[layerId]=ipt;
2074       } else {
2075         // this is an extra cluster
2076         extra=kTRUE;
2077         layerExtra=layerId;
2078         indexExtra=ipt;
2079       }
2080     } // end loop on AliTrackPoints
2081
2082     TString vtitle = spdv->GetTitle();
2083     if(!vtitle.Contains("3D")) continue; 
2084
2085     // SPD tracklet
2086     if(indexAssociated[0]>=0 && indexAssociated[1]>=0) {
2087       AliTrackPoint pointSPD1,pointSPD2;
2088       array->GetPoint(pointSPD1,indexAssociated[0]);
2089       array->GetPoint(pointSPD2,indexAssociated[1]);
2090       Float_t phi=TMath::ATan2(pointSPD2.GetY()-pointSPD1.GetY(),pointSPD2.GetX()-pointSPD1.GetX());
2091       Float_t lambda=TMath::ATan((pointSPD2.GetZ()-pointSPD1.GetZ())/TMath::Sqrt((pointSPD2.GetX()-pointSPD1.GetX())*(pointSPD2.GetX()-pointSPD1.GetX())+(pointSPD2.GetY()-pointSPD1.GetY())*(pointSPD2.GetY()-pointSPD1.GetY())));
2092       Float_t theta=0.5*TMath::Pi()-lambda;
2093       TParticle particle(211,0,0,0,0,0,TMath::Cos(phi),TMath::Sin(phi),TMath::Tan(lambda),10.,pointSPD1.GetX(),pointSPD1.GetY(),pointSPD1.GetZ(),0);
2094       AliESDtrack tracklet(&particle);
2095       Float_t dz[2];
2096       // distance to primary SPD (only if 3D and high multiplicity)
2097       if(spdv->GetNContributors()>10) { 
2098         tracklet.GetDZ(spdv->GetXv(),spdv->GetYv(),spdv->GetZv(),0,dz);
2099         //tracklet.GetDZ(-0.07,0.25,spdv->GetZv(),0,dz);
2100         fNtupleITSAlignSPDTracklets->Fill(phi,theta,0.5*(pointSPD1.GetZ()+pointSPD2.GetZ()),dz[0],dz[1],track->Pt());
2101       }
2102     }
2103
2104     // distance to extra
2105     if(extra && spdv->GetNContributors()>4 && indexAssociated[layerExtra]>-1) {
2106       AliTrackPoint pointExtra,pointAssociated;
2107       array->GetPoint(pointAssociated,indexAssociated[layerExtra]);
2108       array->GetPoint(pointExtra,indexExtra);
2109       Float_t phiExtra = TMath::ATan2(pointExtra.GetY()-spdv->GetYv(),pointExtra.GetX()-spdv->GetXv());
2110       Float_t phiAssociated = TMath::ATan2(pointAssociated.GetY()-spdv->GetYv(),pointAssociated.GetX()-spdv->GetXv());
2111       Float_t rExtra = TMath::Sqrt((pointExtra.GetX()-spdv->GetXv())*(pointExtra.GetX()-spdv->GetXv())+(pointExtra.GetY()-spdv->GetYv())*(pointExtra.GetY()-spdv->GetYv()));
2112       Float_t rAssociated = TMath::Sqrt((pointAssociated.GetX()-spdv->GetXv())*(pointAssociated.GetX()-spdv->GetXv())+(pointAssociated.GetY()-spdv->GetYv())*(pointAssociated.GetY()-spdv->GetYv()));
2113       Float_t dzExtra[2];
2114       dzExtra[0] = (phiExtra-phiAssociated)*0.5*(rExtra+rAssociated);
2115       dzExtra[1] = pointExtra.GetZ()-pointAssociated.GetZ()-(rExtra-rAssociated)*(pointAssociated.GetZ()-spdv->GetZv())/rAssociated;
2116       Float_t xlocExtra=-100.,zlocExtra=-100.;
2117       fNtupleITSAlignExtra->Fill(layerExtra,pointExtra.GetX(),pointExtra.GetY(),pointExtra.GetZ(),dzExtra[0],dzExtra[1],xlocExtra,zlocExtra,nclsITS,track->Pt());  
2118     }
2119     
2120     if(trackTPC) { delete trackTPC; trackTPC=0; }
2121   } // end loop on tracks
2122   
2123   if(vertexMC) { delete vertexMC; vertexMC=0; }
2124
2125   delete esdtrackCutsTPC;    esdtrackCutsTPC=0;
2126   delete esdtrackCutsITSTPC; esdtrackCutsITSTPC=0;
2127
2128   return;
2129 }      
2130
2131 //________________________________________________________________________
2132 void AliAnalysisTaskITSTrackingCheck::Terminate(Option_t *) 
2133 {
2134   // Draw result to the screen
2135   // Called once at the end of the query
2136   fOutput = dynamic_cast<TList*> (GetOutputData(1));
2137   if (!fOutput) {     
2138     Printf("ERROR: fOutput not available");
2139     return;
2140   }
2141   fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEvents"));
2142   fHistNEventsFrac = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEventsFrac"));
2143   if(fHistNEvents && fHistNEventsFrac) {
2144     for(Int_t ibin=2; ibin<=fHistNEvents->GetNbinsX(); ibin++) {
2145       if(fHistNEvents->GetBinContent(2)) fHistNEventsFrac->SetBinContent(ibin,fHistNEvents->GetBinContent(ibin)/fHistNEvents->GetBinContent(2)); 
2146     }
2147   }
2148
2149   return;
2150 }
2151 //---------------------------------------------------------------------------
2152 Int_t AliAnalysisTaskITSTrackingCheck::NumberOfITSClustersMC(Int_t label,Int_t nModules) const
2153 {
2154   //
2155   // Return number of ITS clusters produced by MC particle with given label
2156   //
2157   
2158   AliESDInputHandlerRP *esdHRP = dynamic_cast<AliESDInputHandlerRP*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
2159   if(!esdHRP) return -1;
2160   TTree *cTree = (TTree*)esdHRP->GetTreeR("ITS");
2161   if(!cTree) return -1;
2162   TClonesArray *clusters=0;
2163   cTree->SetBranchAddress("ITSRecPoints",&clusters);
2164   if(!clusters) return -1;
2165
2166   AliITSRecPoint *c=0;
2167   Int_t i,n,icl,lay,ilab;
2168   Int_t ncls[6]={0,0,0,0,0,0};
2169   Int_t nclstot=0;
2170
2171   for(i=0; i<nModules; i++) {
2172     cTree->GetEvent(i);
2173     n=clusters->GetEntriesFast();
2174     for (icl=0; icl<n; icl++) {
2175       c=(AliITSRecPoint*)clusters->UncheckedAt(icl);
2176       lay=c->GetLayer();
2177       //printf("mod %d lay %d xloc %f zloc %f\n",i,lay,c->GetDetLocalX(),c->GetDetLocalZ());
2178       for(ilab=0;ilab<3;ilab++) {
2179         if(c->GetLabel(ilab)==label) ncls[lay]++;
2180       }
2181     }
2182   }
2183   for(i=0;i<6;i++) { 
2184     //printf("%d\n",ncls[i]); 
2185     if(ncls[i]) nclstot++; 
2186   }
2187
2188   return nclstot;
2189 }
2190 //---------------------------------------------------------------------------
2191 Int_t AliAnalysisTaskITSTrackingCheck::NumberOfITSClusters(Int_t idet,Float_t &xloc) const
2192 {
2193   //
2194   // Return number of ITS clusters produced by MC particle with given label
2195   //
2196   
2197   AliESDInputHandlerRP *esdHRP = dynamic_cast<AliESDInputHandlerRP*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
2198   if(!esdHRP) return -1;
2199   TTree *cTree = (TTree*)esdHRP->GetTreeR("ITS");
2200   if(!cTree) return -1;
2201   TClonesArray *clusters=0;   // new TClonesArray("AliITSRecPoint",10000);
2202   cTree->SetBranchAddress("ITSRecPoints",&clusters);
2203   if(!clusters) return -1;
2204
2205   AliITSRecPoint *c=0;
2206   Int_t n,icl;
2207
2208   cTree->GetEvent(idet);
2209   n=clusters->GetEntriesFast();
2210
2211   if(n==1) {
2212     for (icl=0; icl<n; icl++) {
2213       c=(AliITSRecPoint*)clusters->UncheckedAt(icl);
2214       xloc = c->GetDetLocalX();
2215     }
2216   }
2217   return n;
2218 }
2219 //---------------------------------------------------------------------------
2220 Double_t AliAnalysisTaskITSTrackingCheck::ParticleImpParMC(TParticle *part,
2221                                                            AliESDVertex *vert,
2222                                                            Double_t bzT) const
2223 {
2224   //
2225   // Return the MC value of the impact parameter
2226   //
2227  
2228   Double_t vx=part->Vx()-vert->GetX();
2229   Double_t vy=part->Vy()-vert->GetY();
2230       
2231   Double_t pt=part->Pt();     
2232   Double_t px=part->Px();     
2233   Double_t py=part->Py();     
2234   Double_t charge = (part->GetPdgCode()>0. ? 1. : -1.);
2235   if(TMath::Abs(part->GetPdgCode())<100) charge*=-1.;
2236
2237   if(px<0.000001) px=0.000001;     
2238   Double_t rAnd=((10./2.99792458)*pt/bzT)*100.;
2239   Double_t center[3],d0;
2240   center[0]=vx-(1./charge)*rAnd*(py/pt);
2241   center[1]=vy+(1./charge)*rAnd*(px/pt);
2242   center[2]=TMath::Sqrt(center[0]*center[0]+center[1]*center[1]);
2243   d0 = -center[2]+rAnd;
2244
2245   return d0;
2246 }
2247 //---------------------------------------------------------------------------
2248 Bool_t AliAnalysisTaskITSTrackingCheck::SelectPt(Double_t pt)
2249 {
2250   //
2251   // Keep only tracks in given pt bins
2252   // 
2253   Double_t ptlower[11]={0.15,0.29,0.49,0.75,0.9,1.9,3.5,6.5, 9.,19.,27.};
2254   Double_t ptupper[11]={0.16,0.31,0.51,0.85,1.1,2.1,4.5,7.5,11.,21.,33.};
2255
2256   for(Int_t i=0; i<11; i++) {
2257     if(pt>ptlower[i] && pt<ptupper[i]) {
2258       fCountsPerPtBin[i]++;
2259       return kTRUE;
2260     }
2261   }
2262   return kFALSE;
2263   //return kTRUE;
2264 }
2265 //---------------------------------------------------------------------------
2266 Int_t AliAnalysisTaskITSTrackingCheck::MakeITSflag(AliESDtrack *track) const {
2267   //
2268   // ITSflag takes the value 0 if the track has no cluster assigned in the SPDs, 
2269   // 1 (2) if one cluster is assigned in SPD1(2), 3 if two clusters are present. 
2270   // Then the same adding 10,20 or 30 for SDD and 100,200 or 300 for SSD
2271   //
2272   Int_t iITSflag=0;
2273   if(track->HasPointOnITSLayer(0)) iITSflag+=1;
2274   if(track->HasPointOnITSLayer(1)) iITSflag+=2;
2275   if(track->HasPointOnITSLayer(2)) iITSflag+=10;
2276   if(track->HasPointOnITSLayer(3)) iITSflag+=20;
2277   if(track->HasPointOnITSLayer(4)) iITSflag+=100;
2278   if(track->HasPointOnITSLayer(5)) iITSflag+=200;
2279   
2280   if(iITSflag==333 && track->GetNcls(0)<6)
2281     printf(" ERROR %d   %d\n",track->GetNcls(0),track->GetLabel());
2282   
2283   // number of associated ITS clusters
2284   iITSflag += 1000*track->GetNcls(0);
2285   
2286   // number of associated TPC clusters
2287   iITSflag += 100000*track->GetNcls(1);
2288   
2289   // if MC info and is available
2290   // write the number of ITS clusters produced by this track
2291   Int_t nITSclsMC=0;
2292   if(fReadMC && fReadRPLabels) {
2293     nITSclsMC = NumberOfITSClustersMC(TMath::Abs(track->GetLabel()));
2294     if(nITSclsMC>=0) iITSflag += 10000*nITSclsMC;    
2295     // flag fake tracks
2296     if(track->GetLabel()<0) iITSflag *= -1;
2297   }
2298
2299   return iITSflag;
2300 }
2301
2302
2303