]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/AliAnalysisTaskQASym.cxx
Quick fix for bug 71658
[u/mrichter/AliRoot.git] / PWG1 / AliAnalysisTaskQASym.cxx
1 #include "TChain.h"
2 #include "TTree.h"
3 #include "TH1F.h"
4 #include "TH2F.h"
5 #include "TH3F.h"
6 #include "TCanvas.h"
7 #include "TList.h"
8 #include "TParticle.h"
9 #include "TParticlePDG.h"
10 #include "TProfile.h"
11
12 #include "AliAnalysisTask.h"
13 #include "AliAnalysisManager.h"
14
15 #include "AliESDEvent.h"
16 #include "AliLog.h"
17 #include "AliESDVertex.h"
18 #include "AliESDInputHandler.h"
19 #include "AliESDtrackCuts.h"
20 #include "AliMultiplicity.h"
21
22 #include "AliAnalysisTaskQASym.h"
23 #include "AliExternalTrackParam.h"
24 #include "AliTrackReference.h"
25 #include "AliHeader.h"
26 #include "AliGenEventHeader.h"
27 #include "AliGenDPMjetEventHeader.h"
28
29 // Analysis Task for basic QA on the ESD
30
31 // Authors: Jan Fiete Grosse-Oetringhaus, Christian Klein-Boesing,
32 //          Andreas Morsch, Eva Sicking
33
34 ClassImp(AliAnalysisTaskQASym)
35
36   //________________________________________________________________________
37   AliAnalysisTaskQASym::AliAnalysisTaskQASym(const char *name) 
38     : AliAnalysisTaskSE(name) 
39     ,fTrackType(0)
40     ,fStandAlone(0)
41     ,fFieldOn(kTRUE)
42     ,fHists(0)
43     ,fHistRECpt(0)
44     ,fEta(0)
45     ,fEtaPhi(0)
46     ,fEtaPt(0)
47     ,fQPt(0)
48     ,fDca(0)
49     ,fqRec(0)
50     ,fSigmaPtHist(0)
51     
52     ,fRecPtPos(0)
53     ,fRecPtNeg(0)
54     ,fRecPhiPos(0)
55     ,fRecPhiNeg(0)
56     ,fRecEtaPos(0)
57     ,fRecEtaNeg(0)
58     ,fRecEtaPtPos(0)
59     ,fRecEtaPtNeg(0)
60     ,fRecDcaPos(0)
61     ,fRecDcaNeg(0)
62     ,fRecDcaNegInv(0)
63     ,fRecDPos(0)
64     ,fRecDNeg(0)
65     
66     
67     ,fRecQPtPosEta(0)
68     ,fRecQPtNegEta(0)
69     ,fRecPtPosEta(0)
70     ,fRecPtNegEta(0)
71     ,fRecPhiPosEta(0)
72     ,fRecPhiNegEta(0)
73     ,fRecDcaPosEta(0)
74     ,fRecDcaNegEta(0)
75     ,fRecDPosEta(0)
76     ,fRecDNegEta(0)
77     
78     ,fRecPtPosVz(0)
79     ,fRecPtNegVz(0)
80     ,fRecEtaPosVz(0)
81     ,fRecEtaNegVz(0)
82     ,fRecPhiPosVz(0)
83     ,fRecPhiNegVz(0)
84     ,fSignedDcaPosVz(0)
85     ,fSignedDcaNegVz(0)
86     ,fRecQPtPosEtaVz(0)
87     ,fRecQPtNegEtaVz(0)
88     ,fRecEtaPtPosVz(0)
89     ,fRecEtaPtNegVz(0)
90     
91     
92     ,fDeltaPhiAll(0)
93     ,fDeltaPhiLeading(0) 
94     ,fDiffDcaD(0)
95     
96     ,fPhiRec(0)
97     ,fThetaRec(0)
98     ,fNumber(0)
99     ,fNumberAfterCut(0)
100     ,fVx(0)
101     ,fVy(0)
102     ,fVz(0)
103     ,fVertexX(0)
104     ,fVertexY(0)
105     ,fVertexZ(0)
106     ,fNVertexSPD(0)
107     ,fNVertexTracks(0)
108     ,fRecDcaPosPhi(0)
109     ,fRecDcaNegPhi(0)
110     ,fRecPtPosPhi(0)
111     ,fRecPtNegPhi(0)
112     ,fRecEtaPosPhi(0)
113     ,fRecEtaNegPhi(0)
114     ,fRecQPtPhi(0)
115     ,fRecEtaPtPosPhi(0)
116     ,fRecEtaPtNegPhi(0)
117
118     ,fRecPtPosEtaPos(0)
119     ,fRecPtNegEtaPos(0)
120     ,fRecPtPosEtaNeg(0)
121     ,fRecPtNegEtaNeg(0)
122
123     ,fRec1PtPosEtaPos(0)
124     ,fRec1PtNegEtaPos(0)
125     ,fRec1PtPosEtaNeg(0)
126     ,fRec1PtNegEtaNeg(0)
127
128     ,fRecPhiPosEtaPos(0)
129     ,fRecPhiNegEtaPos(0)
130     ,fRecPhiPosEtaNeg(0)
131     ,fRecPhiNegEtaNeg(0)
132
133     ,fRecDcaPosPhiEtaPos(0)
134     ,fRecDcaNegPhiEtaPos(0) 
135     ,fRecDcaPosPhiEtaNeg(0)  
136     ,fRecDcaNegPhiEtaNeg(0)  
137
138     ,fRecDcaPosPtEtaPos(0)
139     ,fRecDcaNegPtEtaPos(0) 
140     ,fRecDcaPosPtEtaNeg(0)  
141     ,fRecDcaNegPtEtaNeg(0)  
142   
143     ,fRecPtPosPhiEtaPos(0)  
144     ,fRecPtNegPhiEtaPos(0)  
145     ,fRecPtPosPhiEtaNeg(0) 
146     ,fRecPtNegPhiEtaNeg(0) 
147
148
149 //    ,fRecDcaPhiPtPosEtaPos(0)
150 //    ,fRecDcaPhiPtNegEtaPos(0)
151 //    ,fRecDcaPhiPtPosEtaNeg(0)  
152 //    ,fRecDcaPhiPtNegEtaNeg(0)  
153
154     ,fEtavPt(0)  
155     ,fPhivPt(0) 
156  
157     ,fCompareTPCparam(0)
158
159     ,fITSlayer(0)
160     ,fITSlayerEta(0)
161     ,fITSlayerPhi(0)
162
163     ,fCuts(0)
164
165 {
166   // Constructor
167   for(Int_t i = 0;i<18;++i){
168     fRecPtTpcSector[i] = 0;
169     fRecEtaTpcSector[i] = 0;
170     fSignedDcaTpcSector[i] = 0;
171     fRecQPtTpcSector[i] = 0;
172     fRecEtaPtTpcSector[i] = 0;
173   }
174
175   for(Int_t i = 0;i< 7;++i){
176     fRecPtPosLadder[i] = 0;
177     fRecPtNegLadder[i] = 0;
178     fRecPhiPosLadder[i] = 0;
179     fRecPhiNegLadder[i] = 0;
180     fRecEtaPosLadder[i] = 0;
181     fRecEtaNegLadder[i] = 0;
182     fSignDcaPos[i] = 0;
183     fSignDcaNeg[i] = 0;
184     fSignDcaNegInv[i] = 0;
185     fPtSigmaPos[i] =0;
186     fPtSigmaNeg[i] =0;
187     fqPtRec[i] =0;
188     fDcaSigmaPos[i] =0;
189     fDcaSigmaNeg[i] =0;
190   }
191
192   DefineOutput(1,  TList::Class()); 
193
194   
195   
196 }
197
198
199 //________________________________________________________________________
200 void AliAnalysisTaskQASym::UserCreateOutputObjects()
201 {
202   // Create histograms
203   // Called once
204
205   Bool_t oldStatus = TH1::AddDirectoryStatus();
206   TH1::AddDirectory(kFALSE);
207
208   Double_t range = 0.3;
209   Double_t pt = 20.;
210
211   fHists = new TList();
212
213   fHistRECpt   = new TH1F("fHistRECpt", 
214                           " p_{T}",
215                           200, 0., pt);
216   fEta   = new TH1F("fEta", 
217                     " #eta",
218                     200, -2., 2.);
219   fEtavPt   = new TH2F("fEtavPt", 
220                        " #eta -p_{T}",
221                        200, -2., 2.,
222                        100, -3, 4);
223   fPhivPt   = new TH2F("fPhivPt", 
224                        " #phi -p_{T}",
225                        200, 0, 2*TMath::Pi(),
226                        100, -3, 5);
227   fCompareTPCparam   = new TH2F("fCompareTPCparam", 
228                                 "fCompareTPCparam",
229                                 100, -1., 1.,100,-5, 5);
230
231   fITSlayer   = new TH1F("fITSlayer", 
232                          "fITSlayer",
233                          8, -1.5, 6.5);
234   fITSlayerEta   = new TH2F("fITSlayerEta", 
235                          "fITSlayerEta",
236                             8, -1.5, 6.5, 200, -2.,2.);
237   fITSlayerPhi   = new TH2F("fITSlayerPhi", 
238                             "fITSlayerPhi",
239                             8, -1.5, 6.5, 200, 0,2*TMath::Pi());
240   
241   fEtaPhi   = new TH2F("fEtaPhi", 
242                        " #eta - #phi",
243                        200, -2., 2., 128, 0., 2. * TMath::Pi());
244   
245   fThetaRec   = new TH1F("fThetaRec", 
246                          " #theta",
247                          180, 0., TMath::Pi());
248   fPhiRec   = new TH1F("fPhiRec", 
249                        " #phi",
250                        180, 0., 2*TMath::Pi());
251   fNumber   = new TH1F("fNumber", 
252                        "number of tracks per event",
253                        300, -0.5, 299.5);
254   fNumberAfterCut   = new TH1F("fNumberAfterCut", 
255                                "number of tracks per event after cuts",
256                                300, -0.5, 299.5);
257   fVx   = new TH1F("fVx", 
258                    "X of first track point",
259                    100, -1., 1.);
260   fVy   = new TH1F("fVy", 
261                    "Y of first track point",
262                    100, -1., 1.);
263   fVz   = new TH1F("fVz", 
264                    "Z of first track point",
265                    200, -50., 50.);
266   fVertexX   = new TH1F("fVertexX", 
267                         "X of vertex",
268                         100, -1., 1.);
269   fVertexY   = new TH1F("fVertexY", 
270                         "Y of vertex",
271                         100, -1., 1.);
272   fVertexZ   = new TH1F("fVertexZ", 
273                         "Z of vertex",
274                         200, -50., 50.);
275   fNVertexSPD   = new TH1F("fNVertexSPD", 
276                         "Number of SPD vertices",
277                         10, -0.5, 9.5);
278   fNVertexTracks   = new TH1F("fNVertexTracks", 
279                               "Number of track vertices",
280                               10, -0.5, 9.5);
281   
282   fEtaPt   = new TH1F("fEtaPt", 
283                       " #eta/p_{T} ",
284                       100, -1., 1.);
285
286   fQPt   = new TH1F("fQPt", 
287                     " charge/p_{T} ",
288                     100, -1., 1.);
289
290   fDca   = new TH1F("fDca", 
291                     " dca ",
292                     200,  -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
293
294
295   fqRec    = new TH1F("fqRec",   
296                       " charge all reconstructed particle",
297                       21, -9.5, 10.5);
298   
299   fSigmaPtHist    = new TH1F("fSigmaPtHist",   
300                          "Log_{10}(#sigma_{p_{T}})",
301                          200, -4., 8.);
302
303
304
305
306   //------------
307   for(Int_t ITSlayer_case=0;ITSlayer_case<7;ITSlayer_case++){
308
309     fSignDcaPos[ITSlayer_case]   = new TH1F(Form("fSignDcaPos%d", ITSlayer_case),  
310                                             " Signed dca", 
311                                             200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
312     fSignDcaPos[ITSlayer_case]->GetXaxis()->SetTitle("dca");
313     fSignDcaPos[ITSlayer_case]->GetYaxis()->SetTitle("");
314    
315  
316     fSignDcaNeg[ITSlayer_case]   = new TH1F(Form("fSignDcaNeg%d", ITSlayer_case),  
317                                             " Signed dcas",
318                                             200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
319     fSignDcaNeg[ITSlayer_case]->GetXaxis()->SetTitle("dca");
320     fSignDcaNeg[ITSlayer_case]->GetYaxis()->SetTitle("");
321
322     fSignDcaNegInv[ITSlayer_case]   = new TH1F(Form("fSignDcaNegInv%d", ITSlayer_case),  
323                                                " inverse Signed dca ",
324                                                200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
325     fSignDcaNegInv[ITSlayer_case]->GetXaxis()->SetTitle("-dca");
326     fSignDcaNegInv[ITSlayer_case]->GetYaxis()->SetTitle("");
327
328
329
330
331     fPtSigmaPos[ITSlayer_case]   = new TH1F(Form("fPtSigmaPos%d", ITSlayer_case),  
332                                             " #sigma_{pT} ",
333                                             208, -4., 8.);
334     fPtSigmaPos[ITSlayer_case]->GetXaxis()->SetTitle("Log_{10}(#sigma_{pT})");
335     fPtSigmaPos[ITSlayer_case]->GetYaxis()->SetTitle("");
336     
337     
338     fPtSigmaNeg[ITSlayer_case]   = new TH1F(Form("fPtSigmaNeg%d",ITSlayer_case),  
339                                             " #sigma_{pT}",
340                                             208, -4., 8.);
341     fPtSigmaNeg[ITSlayer_case]->GetXaxis()->SetTitle("Log_{10}(#sigma_{pT})");
342     fPtSigmaNeg[ITSlayer_case]->GetYaxis()->SetTitle("");
343
344
345
346
347
348     fqPtRec[ITSlayer_case]   = new TH1F(Form("fqPtRec%d",ITSlayer_case),  
349                                         "q/ p_{T}",
350                                         200, -100., 100.);
351     fqPtRec[ITSlayer_case]->GetXaxis()->SetTitle("q_{tr}/p_{T, tr} (GeV/c)");
352     fqPtRec[ITSlayer_case]->GetYaxis()->SetTitle("");
353
354   
355    
356
357
358     fDcaSigmaPos[ITSlayer_case]   = new TH2F(Form("fDcaSigmaPos%d", ITSlayer_case),  
359                                              " p_{T} shift vs #sigma_{pT} ",
360                                              200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9),200, -4., 4. );
361     fDcaSigmaPos[ITSlayer_case]->GetXaxis()->SetTitle("signed DCA)");
362     fDcaSigmaPos[ITSlayer_case]->GetYaxis()->SetTitle("log_{10}(#sigma_{pT})");
363     
364     
365     fDcaSigmaNeg[ITSlayer_case]   = new TH2F(Form("fDcaSigmaNeg%d", ITSlayer_case),  
366                                              " p_{T} shift vs #sigma_{pT} ",
367                                              200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9),200, -4., 4. );
368     fDcaSigmaNeg[ITSlayer_case]->GetXaxis()->SetTitle("signed DCA");
369     fDcaSigmaNeg[ITSlayer_case]->GetYaxis()->SetTitle("log_{10}(#sigma_{pT})");
370
371
372   }
373     
374  
375     
376   // YIELDs---------- positive and negative particles
377     
378   fRecPtPos   = new TH1F("fRecPtPos", 
379                          " p_{T}",
380                          100, 0.,pt);
381   fRecPtPos->GetXaxis()->SetTitle("p_{T} (GeV/c)");
382   fRecPtNeg   = new TH1F("fRecPtNeg", 
383                          " p_{T} ",
384                          100, 0., pt);
385   fRecPtNeg->GetXaxis()->SetTitle("p_{T} (GeV/c)");
386
387     
388   fRecPhiPos   = new TH1F("fRecPhiPos", 
389                           "#phi",
390                           361, 0., 360.);
391   fRecPhiPos->GetXaxis()->SetTitle("#phi (deg)");
392   
393   fRecPhiNeg   = new TH1F("fRecPhiNeg", 
394                           "#phi ",
395                           361, 0., 360.);
396   fRecPhiNeg->GetXaxis()->SetTitle("#phi (deg)");
397     
398   fRecEtaPos   = new TH1F("fRecEtaPos", 
399                           "#eta",
400                           200, -2., 2.);
401   fRecEtaPos->GetXaxis()->SetTitle("#eta");
402
403   fRecEtaNeg   = new TH1F("fRecEtaNeg", 
404                           "#eta",
405                           200, -2., 2.);
406   fRecEtaNeg->GetXaxis()->SetTitle("#eta");
407     
408   fRecEtaPtPos   = new TH1F("fRecEtaPtPos", 
409                             "#eta/p_{T}",
410                             200, -0.1, .1);
411   fRecEtaPtPos->GetXaxis()->SetTitle("#eta/p_{T}");
412
413   fRecEtaPtNeg   = new TH1F("fRecEtaPtNeg", 
414                             "#eta/p_{T}",
415                             200, -.1, .1);
416   fRecEtaPtNeg->GetXaxis()->SetTitle("#eta/p_{T}");
417
418   fRecDcaPos   = new TH1F("fRecDcaPos", 
419                           " dca",
420                           100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
421   fRecDcaPos->GetXaxis()->SetTitle("dca (cm)");
422   fRecDcaNeg   = new TH1F("fRecDcaNeg", 
423                           " dca",
424                           100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
425   fRecDcaNeg->GetXaxis()->SetTitle("dca (cm)");
426
427   fRecDcaNegInv   = new TH1F("fRecDcaNegInv", 
428                              " dca",
429                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
430   fRecDcaNegInv->GetXaxis()->SetTitle("dca (cm)");
431
432
433   fRecDPos   = new TH1F("fRecDPos", 
434                         " d",
435                         100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
436   fRecDPos->GetXaxis()->SetTitle("d (cm)");
437   fRecDNeg   = new TH1F("fRecDNeg", 
438                         "d",
439                         100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
440   fRecDNeg->GetXaxis()->SetTitle("d (cm)");
441
442
443   //  YIELDs ---------------- positive and negative eta
444     
445     
446   fRecQPtPosEta   = new TH1F("fRecQPtPosEta", 
447                              "q/p_{T}",
448                              200, -0.5, 0.5);
449   fRecQPtPosEta->GetXaxis()->SetTitle("q/p_{T} ");
450
451   fRecQPtNegEta   = new TH1F("fRecQPtNegEta", 
452                              "q/p_{T}",
453                              200, -0.5, 0.5);
454   fRecQPtNegEta->GetXaxis()->SetTitle("q/p_{T}");
455     
456   fRecPtPosEta   = new TH1F("fRecPtPosEta", 
457                             " p_{T} ",
458                             100, 0., pt);
459   fRecPtPosEta->GetXaxis()->SetTitle("p_{T} (GeV/c)");
460
461   fRecPtNegEta   = new TH1F("fRecPtNegEta", 
462                             " p_{T}",
463                             100, 0., pt);
464   fRecPtNegEta->GetXaxis()->SetTitle("p_{T} (GeV/c)");
465     
466   fRecPhiPosEta   = new TH1F("fRecPhiPosEta", 
467                              "#phi",
468                              361, 0., 360);
469   fRecPhiPosEta->GetXaxis()->SetTitle("#phi (deg)");
470
471   fRecPhiNegEta   = new TH1F("fRecPhiNegEta", 
472                              "#phi ",
473                              361, 0, 360);
474   fRecPhiNegEta->GetXaxis()->SetTitle("#phi (deg)");
475
476   fRecDcaPosEta   = new TH1F("fRecDcaPosEta", 
477                              " dca ",
478                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
479   fRecDcaPosEta->GetXaxis()->SetTitle("dca (cm)");
480   fRecDcaNegEta   = new TH1F("fRecDcaNegEta", 
481                              " dca",
482                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
483   fRecDcaNegEta->GetXaxis()->SetTitle("dca (cm)");
484
485   fRecDPosEta   = new TH1F("fRecDPosEta", 
486                            " d",
487                            100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
488   fRecDPosEta->GetXaxis()->SetTitle("d (cm)");
489   fRecDNegEta   = new TH1F("fRecDNegEta", 
490                            "d",
491                            100, -5., 5.);
492   fRecDNegEta->GetXaxis()->SetTitle("d (cm)");
493
494   fRecDcaPosPhi   = new TH2F("fRecDcaPosPhi", 
495                              " dca vs. phi",
496                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
497   fRecDcaPosPhi->GetXaxis()->SetTitle("dca (cm)");
498   fRecDcaPosPhi->GetYaxis()->SetTitle("#phi (rad.)");
499   fRecDcaNegPhi   = new TH2F("fRecDcaNegPhi", 
500                              " dca vs. phi",
501                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
502   fRecDcaNegPhi->GetXaxis()->SetTitle("dca (cm)");
503   fRecDcaNegPhi->GetYaxis()->SetTitle("#phi (rad.)");
504
505   fRecPtPosPhi   = new TH2F("fRecPtPosPhi", 
506                              " log(p_T) vs. phi",
507                              100, -2.5, 2., 180, 0, TMath::Pi()*2);
508   fRecPtPosPhi->GetXaxis()->SetTitle("log_{10}(p_{T})");
509   fRecPtPosPhi->GetYaxis()->SetTitle("#phi (rad.)");
510   fRecPtNegPhi   = new TH2F("fRecPtNegPhi", 
511                              " log(p_T) vs. phi",
512                              100,-2.5 , 2., 180, 0, TMath::Pi()*2);
513   fRecPtNegPhi->GetXaxis()->SetTitle("log_{10}(p_{T})");
514   fRecPtNegPhi->GetYaxis()->SetTitle("#phi (rad.)");
515
516   fRecEtaPosPhi   = new TH2F("fRecEtaPosPhi", 
517                              " eta vs. phi",
518                              100, -1.5, 1.5, 180, 0, TMath::Pi()*2);
519   fRecEtaPosPhi->GetXaxis()->SetTitle("#eta");
520   fRecEtaPosPhi->GetYaxis()->SetTitle("#phi (rad.)");
521   fRecEtaNegPhi   = new TH2F("fRecEtaNegPhi", 
522                              " eta vs. phi",
523                              100, -1.5, 1.5, 180, 0, TMath::Pi()*2);
524   fRecEtaNegPhi->GetXaxis()->SetTitle("#eta");
525   fRecEtaNegPhi->GetYaxis()->SetTitle("#phi (rad.)");
526
527   fRecQPtPhi   = new TH2F("fRecQPtPhi", 
528                              " charge/p_T vs. phi",
529                              100,-1. , 1., 180, 0, TMath::Pi()*2);
530   fRecQPtPhi->GetXaxis()->SetTitle("charge/p_{T}");
531   fRecQPtPhi->GetYaxis()->SetTitle("#phi (rad.)");
532
533   fRecEtaPtPosPhi   = new TH2F("fRecEtaPtPosPhi", 
534                              " eta/p_T vs. phi",
535                              100, -5, 5., 180, 0, TMath::Pi()*2);
536   fRecEtaPtPosPhi->GetXaxis()->SetTitle("#eta/p_{T}");
537   fRecEtaPtPosPhi->GetYaxis()->SetTitle("#phi (rad.)");
538   fRecEtaPtNegPhi   = new TH2F("fRecEtaPtNegPhi", 
539                              " eta/p_T vs. phi",
540                              100,-5 , 5., 180, 0, TMath::Pi()*2);
541   fRecEtaPtNegPhi->GetXaxis()->SetTitle("#eta/p_{T}");
542   fRecEtaPtNegPhi->GetYaxis()->SetTitle("#phi (rad.)");
543
544
545
546
547
548   fRecDcaPosPhiEtaPos   = new TH2F("fRecDcaPosPhiEtaPos", 
549                              " dca vs. phi",
550                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
551   fRecDcaPosPhiEtaPos->GetXaxis()->SetTitle("dca (cm)");
552   fRecDcaPosPhiEtaPos->GetYaxis()->SetTitle("#phi (rad.)");
553   fRecDcaNegPhiEtaPos   = new TH2F("fRecDcaNegPhiEtaPos", 
554                              " dca vs. phi",
555                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
556   fRecDcaNegPhiEtaPos->GetXaxis()->SetTitle("dca (cm)");
557   fRecDcaNegPhiEtaPos->GetYaxis()->SetTitle("#phi (rad.)");
558
559   fRecPtPosPhiEtaPos   = new TH2F("fRecPtPosPhiEtaPos", 
560                              " log(p_T) vs. phi",
561                              100, -2.5, 2., 180, 0, TMath::Pi()*2);
562   fRecPtPosPhiEtaPos->GetXaxis()->SetTitle("log_{10}(p_{T})");
563   fRecPtPosPhiEtaPos->GetYaxis()->SetTitle("#phi (rad.)");
564   fRecPtNegPhiEtaPos   = new TH2F("fRecPtNegPhiEtaPos", 
565                              " log(p_T) vs. phi",
566                              100,-2.5 , 2., 180, 0, TMath::Pi()*2);
567   fRecPtNegPhiEtaPos->GetXaxis()->SetTitle("log_{10}(p_{T})");
568   fRecPtNegPhiEtaPos->GetYaxis()->SetTitle("#phi (rad.)");
569
570
571   fRecDcaPosPhiEtaNeg   = new TH2F("fRecDcaPosPhiEtaNeg", 
572                              " dca vs. phi",
573                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
574   fRecDcaPosPhiEtaNeg->GetXaxis()->SetTitle("dca (cm)");
575   fRecDcaPosPhiEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
576   fRecDcaNegPhiEtaNeg   = new TH2F("fRecDcaNegPhiEtaNeg", 
577                              " dca vs. phi",
578                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
579   fRecDcaNegPhiEtaNeg->GetXaxis()->SetTitle("dca (cm)");
580   fRecDcaNegPhiEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
581
582   fRecPtPosPhiEtaNeg   = new TH2F("fRecPtPosPhiEtaNeg", 
583                              " log(p_T) vs. phi",
584                              100, -2.5, 2., 180, 0, TMath::Pi()*2);
585   fRecPtPosPhiEtaNeg->GetXaxis()->SetTitle("log_{10}(p_{T})");
586   fRecPtPosPhiEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
587   fRecPtNegPhiEtaNeg   = new TH2F("fRecPtNegPhiEtaNeg", 
588                              " log(p_T) vs. phi",
589                              100,-2.5 , 2., 180, 0, TMath::Pi()*2);
590   fRecPtNegPhiEtaNeg->GetXaxis()->SetTitle("log_{10}(p_{T})");
591   fRecPtNegPhiEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
592   
593   //new
594   fRecDcaPosPtEtaPos   = new TH2F("fRecDcaPosPtEtaPos", 
595                              " dca vs. pt",
596                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
597   fRecDcaPosPtEtaPos->GetXaxis()->SetTitle("dca (cm)");
598   fRecDcaPosPtEtaPos->GetYaxis()->SetTitle("log_{10}(p_{T})");
599
600   fRecDcaPosPtEtaNeg   = new TH2F("fRecDcaPosPtEtaNeg", 
601                              " dca vs. pt",
602                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
603   fRecDcaPosPtEtaNeg->GetXaxis()->SetTitle("dca (cm)");
604   fRecDcaPosPtEtaNeg->GetYaxis()->SetTitle("log_{10}(p_{T})");
605
606   fRecDcaNegPtEtaPos   = new TH2F("fRecDcaNegPtEtaPos", 
607                              " dca vs. pt",
608                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
609   fRecDcaNegPtEtaPos->GetXaxis()->SetTitle("dca (cm)");
610   fRecDcaNegPtEtaPos->GetYaxis()->SetTitle("log_{10}(p_{T})");
611
612   fRecDcaNegPtEtaNeg   = new TH2F("fRecDcaNegPtEtaNeg", 
613                              " dca vs. pt",
614                              100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
615   fRecDcaNegPtEtaNeg->GetXaxis()->SetTitle("dca (cm)");
616   fRecDcaNegPtEtaNeg->GetYaxis()->SetTitle("log_{10}(p_{T})");
617     
618
619
620   //  YIELDs ---------------- for TPC sectors
621   for(Int_t sector=0; sector<18;sector++){
622       
623
624     fRecPtTpcSector[sector]   = new TH1F(Form("fRecPtTpcSector%02d",sector), 
625                                          Form("p_{T} distribution: TPC sector %d",
626                                               sector),100, 0., pt);
627     fRecPtTpcSector[sector]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
628
629     fRecEtaTpcSector[sector]   = new TH1F(Form("fRecEtaTpcSector%02d",sector), 
630                                           Form("#eta distribution: TPC sector %d",
631                                                sector),200, -2., 2.);
632     fRecEtaTpcSector[sector]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
633      
634
635     fSignedDcaTpcSector[sector]   = new TH1F(Form("fSignedDcaTpcSector%02d",sector), 
636                                              Form("dca distribution: TPC sector %d",
637                                                   sector),200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9) );
638     fSignedDcaTpcSector[sector]->GetXaxis()->SetTitle("dca");
639
640     fRecQPtTpcSector[sector]   = new TH1F(Form("fRecQPtTpcSector%02d",sector), 
641                                           Form("Q/ p_{T} distribution: TPC sector %d",
642                                                sector),100, -1., 1.);
643     fRecQPtTpcSector[sector]->GetXaxis()->SetTitle("Q/p_{T} (GeV/c)");
644
645     fRecEtaPtTpcSector[sector]   = new TH1F(Form("fRecEtaPtTpcSector%02d",sector), 
646                                             Form("#eta/ p_{T} distribution: TPC sector %d",
647                                                  sector),100, -1., 1.);
648     fRecEtaPtTpcSector[sector]->GetXaxis()->SetTitle("#eta/p_{T} (GeV/c)");
649  
650   }
651   // YIELDS ITS ladder
652   for(Int_t i=0;i<7;i++){
653     fRecPtPosLadder[i]   = new TH1F(Form("fRecPtPosLadder%d", i), 
654                                     " p_{T} distribution",
655                                     100, 0., pt);
656     fRecPtPosLadder[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
657     fRecPtNegLadder[i]   = new TH1F(Form("fRecPtNegLadder%d",i), 
658                                     " p_{T} distribution ",
659                                     100, 0., pt);
660     fRecPtNegLadder[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
661
662
663     fRecPhiPosLadder[i]   = new TH1F(Form("fRecPhiPosLadder%d",i), 
664                                      "#phi distribution: all pos eta",
665                                      361, 0., 360);
666     fRecPhiPosLadder[i]->GetXaxis()->SetTitle("#phi (deg)");
667       
668     fRecPhiNegLadder[i]   = new TH1F(Form("fRecPhiNegLadder%d", i),
669                                      "#phi distribution: all neg eta",
670                                      361, 0, 360);
671     fRecPhiNegLadder[i]->GetXaxis()->SetTitle("#phi (deg)");
672
673
674
675     fRecEtaPosLadder[i]   = new TH1F(Form("fRecEtaPosLadder%d",i), 
676                                      "#eta distribution",
677                                      200, -2., 2.);
678     fRecEtaPosLadder[i]->GetXaxis()->SetTitle("#eta)");
679       
680     fRecEtaNegLadder[i]   = new TH1F(Form("fRecEtaNegLadder%d", i),
681                                      "#eta distribution",
682                                      200, -2., 2.);
683     fRecEtaNegLadder[i]->GetXaxis()->SetTitle("#eta");
684   }
685
686   Double_t vzmax = 15;
687
688   fRecPtPosVz = new TH2F("fRecPtPosVz", 
689                          "p_{T} distribution vs Vz()",
690                          100, -1., 2., 200,-vzmax,vzmax);
691   fRecPtPosVz->GetXaxis()->SetTitle("log_{10}(p_{T})");
692     
693   fRecPtNegVz = new TH2F("fRecPtNegVz",
694                          "p_{T} distribution vs Vz()",
695                          100, -1., 2.,200,-vzmax,vzmax);
696   fRecPtNegVz->GetXaxis()->SetTitle("Log_{10}(p_{T})");
697     
698    
699   fRecEtaPosVz= new TH2F("fRecEtaPosVz", 
700                          "#eta distribution vs Vz()",
701                          100, -2., 2., 200,-vzmax,vzmax);
702   fRecEtaPosVz->GetXaxis()->SetTitle("#eta");
703   fRecEtaNegVz = new TH2F("fRecEtaNegVz",
704                           "#eta distribution vs Vz()",
705                           100, -2., 2.,200,-vzmax,vzmax);
706   fRecEtaNegVz->GetXaxis()->SetTitle("#eta");
707
708   fRecPhiPosVz= new TH2F("fRecPhiPosVz", 
709                          "#eta distribution vs Vz()",
710                          361, 0., 360., 200,-vzmax,vzmax);
711   fRecPhiPosVz->GetXaxis()->SetTitle("#phi (deg)");
712   fRecPhiNegVz = new TH2F("fRecPhiNegVz",
713                           "dca vs Vz()",
714                           361, 0., 360.,200,-vzmax,vzmax);
715   fRecPhiNegVz->GetXaxis()->SetTitle("#phi (deg)");
716
717   fSignedDcaPosVz= new TH2F("fSignedDcaPosVz", 
718                             "#eta distribution vs Vz()",
719                             200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200,-vzmax,vzmax);
720   fSignedDcaPosVz->GetXaxis()->SetTitle("dca (cm)");
721   fSignedDcaNegVz = new TH2F("fSignedDcaNegVz",
722                              "dca vs Vz()",
723                              200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9),200,-vzmax,vzmax);
724   fSignedDcaNegVz->GetXaxis()->SetTitle("dca (cm)");
725
726   fRecQPtPosEtaVz= new TH2F("fRecQPtPosEtaVz",
727                             " Q/p_{T} distribution vs Vz()",
728                             100, -1., 1., 200,-vzmax,vzmax);
729   fRecQPtPosEtaVz->GetXaxis()->SetTitle("Q/p_{T}");
730   fRecQPtNegEtaVz = new TH2F("fRecQPtNegEtaVz",
731                              " Q/p_{T} distribution vs Vz()",
732                              100, -1., 1.,200,-vzmax,vzmax);
733   fRecQPtNegEtaVz->GetXaxis()->SetTitle("Q/p_{T}");
734
735  
736   fRecEtaPtPosVz= new TH2F("fRecEtaPtPosVz",
737                            " #eta/p_{T} distribution vs Vz()",
738                            100, -1., 1., 200,-vzmax,vzmax);
739   fRecEtaPtPosVz->GetXaxis()->SetTitle("#eta/p_{T");
740   fRecEtaPtNegVz = new TH2F("fRecEtaPtNegVz",
741                             " #eta/p_{T} distribution vs Vz()",
742                             100, -1., 1.,200,-vzmax,vzmax);
743   fRecEtaPtNegVz->GetXaxis()->SetTitle("#eta/p_{T}");
744
745   //new
746   fDeltaPhiAll = new TH1F("fDeltaPhiAll",
747                           " #Delta #phi",200,-360,360);
748   fDeltaPhiAll->GetXaxis()->SetTitle("#Delta #phi");
749
750
751   fDeltaPhiLeading = new TH2F("fDeltaPhiLeading",
752                               " #Delta #phi",361,-360,360, 361,0, 360);
753   fDeltaPhiLeading->GetXaxis()->SetTitle("#Delta #phi (deg.)");
754   fDeltaPhiLeading->GetYaxis()->SetTitle("#phi_{leading particle} (deg.)");
755
756   fDiffDcaD    = new TH1F("fDiffDcaD",   
757                           "dca-d",
758                           200, -1., 1.);
759
760   
761   fRecPtPosEtaPos = new TH1F("fRecPtPosEtaPos",
762                              "p_{T} distribution",100,0,pt);
763   fRecPtPosEtaPos->GetXaxis()->SetTitle("p_{T} (GeV/c)");
764
765   fRecPtNegEtaPos = new TH1F("fRecPtNegEtaPos",
766                              "p_{T} distribution",100,0,pt);
767   fRecPtNegEtaPos->GetXaxis()->SetTitle("p_{T} (GeV/c)");
768
769   fRecPtPosEtaNeg = new TH1F("fRecPtPosEtaNeg",
770                              "p_{T} distribution",100,0,pt);
771   fRecPtPosEtaNeg->GetXaxis()->SetTitle("p_{T} (GeV/c)");
772
773   fRecPtNegEtaNeg = new TH1F("fRecPtNegEtaNeg",
774                              "p_{T} distribution",100,0,pt);
775   fRecPtNegEtaNeg->GetXaxis()->SetTitle("p_{T} (GeV/c)");
776
777
778
779   fRec1PtPosEtaPos = new TH1F("fRec1PtPosEtaPos",
780                              "1/p_{T} distribution",100,0,0.5);
781   fRec1PtPosEtaPos->GetXaxis()->SetTitle("p_{T} (c/GeV)");
782
783   fRec1PtNegEtaPos = new TH1F("fRec1PtNegEtaPos",
784                              "1/p_{T} distribution",100,0,0.5);
785   fRec1PtNegEtaPos->GetXaxis()->SetTitle("p_{T} (c/GeV)");
786
787   fRec1PtPosEtaNeg = new TH1F("fRec1PtPosEtaNeg",
788                              "1/p_{T} distribution",100,0,0.5);
789   fRec1PtPosEtaNeg->GetXaxis()->SetTitle("p_{T} (c/GeV)");
790
791   fRec1PtNegEtaNeg = new TH1F("fRec1PtNegEtaNeg",
792                              "1/p_{T} distribution",100,0,0.5);
793   fRec1PtNegEtaNeg->GetXaxis()->SetTitle("1/p_{T} (c/GeV)");
794
795
796  
797   fRecPhiPosEtaPos = new TH1F("fRecPhiPosEtaPos",
798                              "#phi",180,0,2*TMath::Pi());
799   fRecPhiPosEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
800
801   fRecPhiNegEtaPos = new TH1F("fRecPhiNegEtaPos",
802                              "#phi",180,0,2*TMath::Pi());
803   fRecPhiNegEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
804
805   fRecPhiPosEtaNeg = new TH1F("fRecPhiPosEtaNeg",
806                              "#phi",180,0,2*TMath::Pi());
807   fRecPhiPosEtaNeg->GetXaxis()->SetTitle("#phi (rad.)");
808
809   fRecPhiNegEtaNeg = new TH1F("fRecPhiNegEtaNeg",
810                              "#phi",180,0,2*TMath::Pi());
811   fRecPhiNegEtaNeg->GetXaxis()->SetTitle("#phi (rad.)");
812
813
814
815 //   fRecDcaPhiPtPosEtaPos = new TH3F("fRecDcaPhiPtPosEtaPos",
816 //                                 "#phi- p_{T} - DCA",
817 //                                 180,0,2*TMath::Pi(),
818 //                                 100,0,pt,
819 //                                 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
820 //   fRecDcaPhiPtPosEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
821 //   fRecDcaPhiPtPosEtaPos->GetYaxis()->SetTitle("p_{T} (GeV/c)");
822 //   fRecDcaPhiPtPosEtaPos->GetZaxis()->SetTitle("dca (cm)");
823
824 //   fRecDcaPhiPtPosEtaNeg = new TH3F("fRecDcaPhiPtPosEtaNeg",
825 //                                 "#phi- p_{T} - DCA",
826 //                                 180,0,2*TMath::Pi(),
827 //                                 100,0,pt,
828 //                                 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
829 //   fRecDcaPhiPtPosEtaNeg->GetZaxis()->SetTitle("dca (cm)");
830 //   fRecDcaPhiPtPosEtaNeg->GetXaxis()->SetTitle("#phi (rad.)");
831 //   fRecDcaPhiPtPosEtaNeg->GetYaxis()->SetTitle("p_{T} (GeV/c)");
832
833 //   fRecDcaPhiPtNegEtaPos = new TH3F("fRecDcaPhiPtNegEtaPos",
834 //                                 "#phi- p_{T} - DCA",
835 //                                 180,0,2*TMath::Pi(),
836 //                                 100,0,pt,
837 //                                 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
838 //   fRecDcaPhiPtNegEtaPos->GetZaxis()->SetTitle("dca (cm)");
839 //   fRecDcaPhiPtNegEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
840 //   fRecDcaPhiPtNegEtaPos->GetYaxis()->SetTitle("p_{T} (GeV/c)");
841
842 //   fRecDcaPhiPtNegEtaNeg = new TH3F("fRecDcaPhiPtNegEtaNeg",
843 //                                 "#phi- p_{T} - DCA",
844 //                                 180,0,2*TMath::Pi(),
845 //                                 100,0,pt,
846 //                                 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
847 //   fRecDcaPhiPtNegEtaNeg->GetZaxis()->SetTitle("dca (cm)");
848 //   fRecDcaPhiPtNegEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
849 //   fRecDcaPhiPtNegEtaNeg->GetXaxis()->SetTitle("p_{T} (GeV/c)");
850
851
852
853
854   fHists->SetOwner();
855
856   fHists->Add(fHistRECpt);
857   fHists->Add(fEta);
858   fHists->Add(fEtavPt);
859   fHists->Add(fPhivPt);
860   fHists->Add(fCompareTPCparam);
861   fHists->Add(fITSlayer);
862   fHists->Add(fITSlayerEta);
863   fHists->Add(fITSlayerPhi);
864   fHists->Add(fEtaPhi);
865   fHists->Add(fThetaRec);
866   fHists->Add(fPhiRec);
867   fHists->Add(fNumber);
868   fHists->Add(fNumberAfterCut);
869   fHists->Add(fVx);
870   fHists->Add(fVy);
871   fHists->Add(fVz);
872   fHists->Add(fVertexX);
873   fHists->Add(fVertexY);
874   fHists->Add(fVertexZ);
875   fHists->Add(fNVertexSPD);
876   fHists->Add(fNVertexTracks);
877
878   fHists->Add(fEtaPt);
879   fHists->Add(fQPt);
880   fHists->Add(fDca);
881
882   fHists->Add(fDeltaPhiAll);
883   fHists->Add(fDeltaPhiLeading);
884   fHists->Add(fDiffDcaD);
885
886   fHists->Add(fqRec);
887   fHists->Add(fSigmaPtHist);
888
889   fHists->Add(fRecPtPos);
890   fHists->Add(fRecPtNeg);
891   fHists->Add(fRecPhiPos);
892   fHists->Add(fRecPhiNeg);
893   fHists->Add(fRecEtaPos);
894   fHists->Add(fRecEtaNeg);
895   fHists->Add(fRecEtaPtPos);
896   fHists->Add(fRecEtaPtNeg);
897   fHists->Add(fRecDcaPos);
898   fHists->Add(fRecDcaNeg);
899   fHists->Add(fRecDcaNegInv);
900   fHists->Add(fRecDPos);
901   fHists->Add(fRecDNeg);
902
903
904   fHists->Add(fRecQPtPosEta);
905   fHists->Add(fRecQPtNegEta);
906   fHists->Add(fRecPtPosEta);
907   fHists->Add(fRecPtNegEta);
908   fHists->Add(fRecPhiPosEta);
909   fHists->Add(fRecPhiNegEta);
910   fHists->Add(fRecDcaPosEta);
911   fHists->Add(fRecDcaNegEta);
912   fHists->Add(fRecDPosEta);
913   fHists->Add(fRecDNegEta);
914
915
916   for(Int_t i=0;i<18;i++){
917     fHists->Add(fRecPtTpcSector[i]);
918     fHists->Add(fRecEtaTpcSector[i]);
919     fHists->Add(fSignedDcaTpcSector[i]);
920     fHists->Add(fRecQPtTpcSector[i]);
921     fHists->Add(fRecEtaPtTpcSector[i]);
922   }
923
924   for(Int_t i=0;i<7;i++){
925     fHists->Add(fRecPtPosLadder[i]);
926     fHists->Add(fRecPtNegLadder[i]);
927     fHists->Add(fRecPhiPosLadder[i]);
928     fHists->Add(fRecPhiNegLadder[i]);
929     fHists->Add(fRecEtaPosLadder[i]);
930     fHists->Add(fRecEtaNegLadder[i]);
931   }
932
933   fHists->Add(fRecPtPosVz);
934   fHists->Add(fRecPtNegVz);
935   fHists->Add(fRecEtaPosVz);
936   fHists->Add(fRecEtaNegVz);
937   fHists->Add(fRecPhiPosVz);
938   fHists->Add(fRecPhiNegVz);
939   fHists->Add(fSignedDcaPosVz);
940   fHists->Add(fSignedDcaNegVz);
941   fHists->Add(fRecQPtPosEtaVz);
942   fHists->Add(fRecQPtNegEtaVz);
943   fHists->Add(fRecEtaPtPosVz);
944   fHists->Add(fRecEtaPtNegVz);
945
946
947   for(Int_t i=0;i<7;i++){
948     fHists->Add(fSignDcaPos[i]);
949     fHists->Add(fSignDcaNeg[i]);
950     fHists->Add(fSignDcaNegInv[i]);
951  
952     fHists->Add(fPtSigmaPos[i]);
953     fHists->Add(fPtSigmaNeg[i]);
954     fHists->Add(fqPtRec[i]);
955   
956     fHists->Add(fDcaSigmaPos[i]);
957     fHists->Add(fDcaSigmaNeg[i]);
958  
959
960   } 
961   
962   fHists->Add(fRecDcaPosPhi);
963   fHists->Add(fRecDcaNegPhi);   
964   fHists->Add(fRecPtPosPhi);
965   fHists->Add(fRecPtNegPhi);   
966   fHists->Add(fRecEtaPosPhi);
967   fHists->Add(fRecEtaNegPhi);  
968   fHists->Add(fRecQPtPhi);   
969   fHists->Add(fRecEtaPtPosPhi);
970   fHists->Add(fRecEtaPtNegPhi);   
971
972   fHists->Add(fRecPtPosEtaPos);   
973   fHists->Add(fRecPtNegEtaPos);   
974   fHists->Add(fRecPtPosEtaNeg);   
975   fHists->Add(fRecPtNegEtaNeg); 
976
977   fHists->Add(fRec1PtPosEtaPos);   
978   fHists->Add(fRec1PtNegEtaPos);   
979   fHists->Add(fRec1PtPosEtaNeg);   
980   fHists->Add(fRec1PtNegEtaNeg);   
981  
982
983   fHists->Add(fRecPhiPosEtaPos);   
984   fHists->Add(fRecPhiNegEtaPos);   
985   fHists->Add(fRecPhiPosEtaNeg);   
986   fHists->Add(fRecPhiNegEtaNeg);   
987
988   fHists->Add(fRecDcaPosPhiEtaPos);
989   fHists->Add(fRecDcaNegPhiEtaPos);   
990   fHists->Add(fRecPtPosPhiEtaPos);
991   fHists->Add(fRecPtNegPhiEtaPos);  
992   fHists->Add(fRecDcaPosPhiEtaNeg);
993   fHists->Add(fRecDcaNegPhiEtaNeg);   
994   fHists->Add(fRecPtPosPhiEtaNeg);
995   fHists->Add(fRecPtNegPhiEtaNeg); 
996
997   fHists->Add(fRecDcaPosPtEtaPos);
998   fHists->Add(fRecDcaNegPtEtaPos);
999   fHists->Add(fRecDcaPosPtEtaNeg);
1000   fHists->Add(fRecDcaNegPtEtaNeg);
1001
1002   //  fHists->Add(fRecDcaPhiPtPosEtaPos); 
1003   //  fHists->Add(fRecDcaPhiPtPosEtaNeg); 
1004   //  fHists->Add(fRecDcaPhiPtNegEtaPos); 
1005   //  fHists->Add(fRecDcaPhiPtNegEtaNeg); 
1006
1007
1008
1009
1010     
1011 //   for (Int_t i=0; i<fHists->GetEntries(); ++i) {
1012 //     TH1 *h1 = dynamic_cast<TH1*>(fHists->At(i));
1013 //     if (h1){
1014 //     //  Printf("%s ",h1->GetName());
1015 //       h1->Sumw2();
1016 //     }
1017 //   }
1018
1019   TH1::AddDirectory(oldStatus);
1020 }
1021
1022 //__________________________________________________________
1023
1024 void AliAnalysisTaskQASym::UserExec(Option_t *) 
1025 {
1026   // QA of global, TPC, ITS and ITS stand alone tracks
1027   // exploiting basic symmetries
1028
1029   AliVEvent *event = InputEvent();
1030   if (!event) {
1031     Printf("ERROR: Could not retrieve event");
1032     return;
1033   }
1034
1035
1036   if(Entry()==0){
1037     AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
1038     if(esd){
1039       Printf("We are reading from ESD");
1040     }
1041    
1042   }
1043
1044
1045
1046   if(fDebug>1)Printf("There are %d tracks in this event", event->GetNumberOfTracks());
1047
1048   
1049   Int_t   leadingTrack  =   0;
1050   Float_t leadingEnergy = -20.;
1051   Float_t leadingPhi    =   0;//TMath::Pi();
1052
1053
1054   //check vertices
1055   AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
1056   Int_t nPileSPDVertices=1+esd->GetNumberOfPileupVerticesSPD(); // also SPD main vertex
1057   Int_t nPileTrkVertices=esd->GetNumberOfPileupVerticesTracks();
1058   fNVertexSPD->Fill(nPileSPDVertices);
1059   fNVertexTracks->Fill(nPileTrkVertices);
1060
1061   
1062   //check primary vertex
1063   const AliVVertex* vertex = event->GetPrimaryVertex();
1064   if(vertex->GetNContributors()==0) return;
1065   Float_t vx = vertex->GetX();
1066   Float_t vy = vertex->GetY();
1067   Float_t vz = vertex->GetZ();
1068   
1069   fVertexX->Fill(vx);
1070   fVertexY->Fill(vy);
1071   fVertexZ->Fill(vz);
1072
1073   if (TMath::Abs(vz) > 10.) return;
1074
1075   fNumber->Fill(event->GetNumberOfTracks());
1076
1077   AliESDtrack *tpcP = 0x0;
1078   Int_t fNTracksAccepted=0;
1079
1080   for (Int_t iTrack = 0; iTrack < event->GetNumberOfTracks(); iTrack++) {
1081     
1082     //prevent mem leak for TPConly track
1083     if(fTrackType==2&&tpcP){
1084       delete tpcP;
1085       tpcP = 0;
1086     }
1087
1088     AliVParticle *track = event->GetTrack(iTrack);
1089     AliESDtrack *esdtrack =  dynamic_cast<AliESDtrack*>(track);
1090     esdtrack->PropagateToDCA(event->GetPrimaryVertex(),
1091                              event->GetMagneticField(), 10000.);
1092
1093     if (!track) {
1094       Printf("ERROR: Could not receive track %d", iTrack);
1095       continue;
1096     }
1097     //__________
1098     // run Task for global tracks or ITS tracks or TPC tracks
1099     const AliExternalTrackParam *tpcPin = 0x0;
1100     Double_t phiIn=0;
1101
1102     if(fTrackType==0){
1103       //Fill all histograms with global tracks
1104       tpcP = esdtrack;
1105       phiIn = tpcP->Phi();
1106       if (!tpcP) continue;
1107       if (!fCuts->AcceptTrack(tpcP)) continue;
1108     }
1109     else if(fTrackType==1){
1110       //Fill all histograms with ITS tracks
1111       tpcP = esdtrack;
1112       phiIn = tpcP->Phi();
1113       if (!tpcP) continue;
1114       if (!fCuts->AcceptTrack(tpcP)) continue;
1115       if(fStandAlone==kTRUE) {
1116         if(!(tpcP->GetStatus()&AliESDtrack::kITSpureSA))continue;
1117       }
1118     }
1119     else if(fTrackType==2){     
1120       //Fill all histograms with TPC track information
1121       tpcPin = esdtrack->GetInnerParam();
1122       if (!tpcPin) continue;
1123       phiIn=tpcPin->Phi();
1124
1125       tpcP = AliESDtrackCuts::GetTPCOnlyTrack(dynamic_cast<AliESDEvent*>(event),esdtrack->GetID());
1126       if (!tpcP) continue;
1127       if (!fCuts->AcceptTrack(tpcP)) continue;
1128       if(tpcP->GetNcls(1)>160)continue;//jacek's track cut
1129       if(tpcP->GetConstrainedChi2TPC()<0)continue; // jacek's track cut
1130     }
1131     else{
1132       Printf("ERROR: wrong track type \n");
1133       continue;
1134     }
1135     //___________
1136     //
1137   
1138
1139     fNTracksAccepted++;
1140  
1141     if(tpcP->E()>leadingEnergy){
1142       leadingTrack=iTrack;
1143       leadingEnergy=tpcP->E();
1144       leadingPhi=phiIn;
1145     }
1146    
1147     
1148     fqRec->Fill(tpcP->Charge());
1149   
1150
1151     Double_t fSigmaPt = tpcP->GetSigma1Pt2();
1152     fSigmaPt= sqrt(fSigmaPt);
1153     fSigmaPt= fSigmaPt *(tpcP->Pt()*tpcP->Pt()); 
1154
1155     if(TMath::Abs(fSigmaPt) < 1.e-10) continue;
1156
1157     fSigmaPtHist->Fill(TMath::Log10(fSigmaPt));
1158  
1159
1160     // hits in ITS layer
1161     Int_t cas=-1;
1162     if(tpcP->HasPointOnITSLayer(0)) 
1163       cas=0;
1164     else if(!tpcP->HasPointOnITSLayer(0)
1165             &&  tpcP->HasPointOnITSLayer(1)) 
1166       cas=1;
1167     else if(!tpcP->HasPointOnITSLayer(0)
1168             && !tpcP->HasPointOnITSLayer(1) 
1169             &&  tpcP->HasPointOnITSLayer(2)) 
1170       cas=2;
1171     else if(!tpcP->HasPointOnITSLayer(0)
1172             && !tpcP->HasPointOnITSLayer(1) 
1173             && !tpcP->HasPointOnITSLayer(2)
1174             &&  tpcP->HasPointOnITSLayer(3)) 
1175       cas=3;
1176     else if(!tpcP->HasPointOnITSLayer(0)
1177             && !tpcP->HasPointOnITSLayer(1) 
1178             && !tpcP->HasPointOnITSLayer(2)
1179             && !tpcP->HasPointOnITSLayer(3)
1180             &&  tpcP->HasPointOnITSLayer(4)) 
1181       cas=4;
1182     else if(   !tpcP->HasPointOnITSLayer(0)
1183                && !tpcP->HasPointOnITSLayer(1)
1184                && !tpcP->HasPointOnITSLayer(2)
1185                && !tpcP->HasPointOnITSLayer(3)
1186                && !tpcP->HasPointOnITSLayer(4) 
1187                &&  tpcP->HasPointOnITSLayer(5)) 
1188       cas=5;
1189     else 
1190       cas=6;
1191   
1192    
1193    
1194     //------------------- 
1195     Float_t fXVertexCor = 0.;
1196     Float_t fYVertexCor = 0.;
1197
1198     fXVertexCor = tpcP->Xv() - vertex->GetX(); // coordinate corrected for vertex position
1199     fYVertexCor = tpcP->Yv() - vertex->GetY(); // "
1200     Double_t fSignedDca = (tpcP->Py()*fXVertexCor - tpcP->Px()*fYVertexCor)/tpcP->Pt();
1201
1202
1203     fqPtRec[cas]->Fill(tpcP->Charge()/tpcP->Pt());
1204     
1205     
1206
1207     fHistRECpt->Fill(tpcP->Pt());
1208     fEta->Fill(tpcP->Eta());
1209     fEtavPt->Fill(tpcP->Eta(), TMath::Log(tpcP->Pt()));
1210     fPhivPt->Fill(tpcP->Phi(), TMath::Log(tpcP->Pt()));
1211     fEtaPhi->Fill(tpcP->Eta(), phiIn);
1212     fThetaRec->Fill(tpcP->Theta());
1213     fPhiRec->Fill(phiIn);
1214     fVx->Fill(tpcP->Xv());
1215     fVy->Fill(tpcP->Yv());
1216     fVz->Fill(tpcP->Zv());
1217   
1218
1219     fEtaPt->Fill(tpcP->Eta()/tpcP->Pt());
1220     fQPt->Fill(tpcP->Charge()/tpcP->Pt());
1221     fDca->Fill(fSignedDca);
1222     fRecQPtPhi->Fill(tpcP->Charge()/tpcP->Pt(), phiIn);
1223
1224     Float_t fXY = 0.;
1225     Float_t  fZ = 0.;
1226
1227     tpcP->GetImpactParameters(fXY,fZ);
1228     fDiffDcaD->Fill(fSignedDca+fXY);
1229
1230     if(fTrackType==2) fCompareTPCparam->Fill(fZ,tpcPin->GetTgl());
1231
1232     if(fTrackType!=2){//for global and ITS tracks
1233       for(Int_t itsLayer=0;itsLayer<6;itsLayer++){
1234         if(tpcP->HasPointOnITSLayer(itsLayer)){
1235           fITSlayer->Fill(itsLayer);
1236           fITSlayerEta->Fill(itsLayer, tpcP->Eta());
1237           fITSlayerPhi->Fill(itsLayer, tpcP->Phi());
1238         }
1239       }    
1240     }
1241
1242     //for positive particles
1243     
1244     if(tpcP->Charge()>0){
1245       fRecPtPos->Fill(tpcP->Pt());
1246       fRecPtPosLadder[cas]->Fill(tpcP->Pt());
1247       fRecPtPosVz->Fill(TMath::Log10(tpcP->Pt()),tpcP->Zv());
1248       fRecPhiPos->Fill(TMath::RadToDeg()*phiIn);
1249       
1250       
1251       fRecPhiPosLadder[cas]->Fill(TMath::RadToDeg()*phiIn);
1252       fRecPhiPosVz->Fill(TMath::RadToDeg()*phiIn,tpcP->Zv());
1253       fSignedDcaPosVz->Fill(fSignedDca,tpcP->Zv());
1254
1255       fRecEtaPos->Fill(tpcP->Eta());
1256       fRecEtaPosLadder[cas]->Fill(tpcP->Eta());
1257       fRecEtaPtPos->Fill(tpcP->Eta()/tpcP->Pt());
1258       fRecEtaPosVz->Fill(tpcP->Eta(),tpcP->Zv());
1259       fRecEtaPtPosVz->Fill(tpcP->Eta()/tpcP->Pt(),tpcP->Zv());
1260      
1261       fRecDcaPos->Fill(fSignedDca);
1262       fRecDcaPosPhi->Fill(fSignedDca, phiIn);
1263       fRecPtPosPhi->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1264       fRecEtaPtPosPhi->Fill(tpcP->Eta()/tpcP->Pt(), phiIn);
1265       fRecEtaPosPhi->Fill(tpcP->Eta(), phiIn);
1266       fRecDPos->Fill(fXY);
1267       fSignDcaPos[cas]->Fill(fSignedDca);
1268     
1269      
1270       fDcaSigmaPos[cas]->Fill(fSignedDca, TMath::Log10(fSigmaPt));
1271     
1272       fPtSigmaPos[cas]->Fill(TMath::Log10(fSigmaPt));
1273       //pos eta
1274       if(tpcP->Eta()>0){
1275         fRecPtPosEtaPos->Fill(tpcP->Pt());
1276         fRec1PtPosEtaPos->Fill(1/tpcP->Pt());
1277         fRecPhiPosEtaPos->Fill(phiIn);
1278         fRecDcaPosPhiEtaPos->Fill(fSignedDca, phiIn);
1279         fRecDcaPosPtEtaPos->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
1280         fRecPtPosPhiEtaPos->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1281         //fRecDcaPhiPtPosEtaPos->Fill(phiIn, tpcP->Pt(), fSignedDca);
1282       }
1283       //neg eta
1284       else{
1285         fRecPtPosEtaNeg->Fill(tpcP->Pt());
1286         fRec1PtPosEtaNeg->Fill(1/tpcP->Pt());
1287         fRecPhiPosEtaNeg->Fill(phiIn);
1288         fRecDcaPosPhiEtaNeg->Fill(fSignedDca, phiIn);
1289         fRecDcaPosPtEtaNeg->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
1290         fRecPtPosPhiEtaNeg->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1291         //fRecDcaPhiPtPosEtaNeg->Fill(phiIn, tpcP->Pt(), fSignedDca);
1292       }
1293       
1294     }
1295     //and negative particles
1296     else {
1297       fRecPtNeg->Fill(tpcP->Pt());
1298       fRecPtNegLadder[cas]->Fill(tpcP->Pt());
1299       fRecPtNegVz->Fill(TMath::Log10(tpcP->Pt()),tpcP->Zv());
1300            
1301       fRecPhiNeg->Fill(TMath::RadToDeg()*phiIn);
1302       fRecPhiNegLadder[cas]->Fill(TMath::RadToDeg()*phiIn);
1303       fRecPhiNegVz->Fill(TMath::RadToDeg()*phiIn,tpcP->Zv());
1304       fSignedDcaNegVz->Fill(fSignedDca,tpcP->Zv());
1305       fRecEtaPtNegVz->Fill(tpcP->Eta()/tpcP->Pt(),tpcP->Zv());
1306
1307       fRecEtaNeg->Fill(tpcP->Eta());
1308       fRecEtaNegLadder[cas]->Fill(tpcP->Eta());
1309       fRecEtaPtNeg->Fill(tpcP->Eta()/tpcP->Pt());
1310       fRecEtaNegVz->Fill(tpcP->Eta(),tpcP->Zv());
1311      
1312       fRecDcaNeg->Fill(fSignedDca);
1313       fRecDcaNegInv->Fill(-fSignedDca);
1314       fRecDcaNegPhi->Fill(fSignedDca, phiIn);
1315       fRecPtNegPhi->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1316       fRecEtaNegPhi->Fill(tpcP->Eta(), phiIn);
1317       fRecEtaPtNegPhi->Fill(tpcP->Eta()/tpcP->Pt(), phiIn);
1318       fRecDNeg->Fill(fXY);
1319       fSignDcaNeg[cas]->Fill(fSignedDca);
1320       fSignDcaNegInv[cas]->Fill(-fSignedDca);
1321      
1322      
1323       fDcaSigmaNeg[cas]->Fill(fSignedDca,TMath::Log10(fSigmaPt));
1324    
1325       fPtSigmaNeg[cas]->Fill(TMath::Log10(fSigmaPt));
1326       
1327       //pos eta
1328       if(tpcP->Eta()>0){
1329         fRecPtNegEtaPos->Fill(tpcP->Pt());
1330         fRec1PtNegEtaPos->Fill(1/tpcP->Pt());
1331         fRecPhiNegEtaPos->Fill(phiIn);
1332         fRecDcaNegPhiEtaPos->Fill(fSignedDca, phiIn);
1333         fRecDcaNegPtEtaPos->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
1334         fRecPtNegPhiEtaPos->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1335         //fRecDcaPhiPtNegEtaPos->Fill(phiIn, tpcP->Pt(), fSignedDca);
1336       }
1337       //neg eta
1338       else{
1339         fRecPtNegEtaNeg->Fill(tpcP->Pt());
1340         fRec1PtNegEtaNeg->Fill(1/tpcP->Pt());
1341         fRecPhiNegEtaNeg->Fill(phiIn);
1342         fRecDcaNegPhiEtaNeg->Fill(fSignedDca, phiIn);
1343         fRecDcaNegPtEtaNeg->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
1344         fRecPtNegPhiEtaNeg->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1345         //fRecDcaPhiPtNegEtaNeg->Fill(phiIn, tpcP->Pt(), fSignedDca);
1346       }
1347
1348     }
1349     
1350
1351
1352     //all particles with positive eta
1353     if(tpcP->Eta()>0){
1354       fRecQPtPosEta->Fill(tpcP->Charge()/tpcP->Pt());
1355       fRecPtPosEta->Fill(tpcP->Pt());
1356       fRecPhiPosEta->Fill(TMath::RadToDeg()*phiIn);
1357       fRecQPtPosEtaVz->Fill(tpcP->Charge()/tpcP->Pt(),tpcP->Zv());
1358       fRecDcaPosEta->Fill(fSignedDca);
1359       fRecDPosEta->Fill(fXY);
1360     }
1361     //all particles with negative eta (and eta==0)
1362     else{
1363       fRecQPtNegEta->Fill(tpcP->Charge()/tpcP->Pt());
1364       fRecPtNegEta->Fill(tpcP->Pt());
1365       fRecPhiNegEta->Fill(TMath::RadToDeg()*phiIn);
1366       fRecQPtNegEtaVz->Fill(tpcP->Charge()/tpcP->Pt(),tpcP->Zv());
1367       fRecDcaNegEta->Fill(fSignedDca);
1368       fRecDNegEta->Fill(fXY);
1369
1370     }
1371
1372
1373     fRecPtTpcSector[Int_t(phiIn*
1374                           TMath::RadToDeg()/20)]->Fill(tpcP->Pt());
1375     fRecEtaTpcSector[Int_t(phiIn*
1376                            TMath::RadToDeg()/20)]->Fill(tpcP->Eta());
1377     fSignedDcaTpcSector[Int_t(phiIn*
1378                               TMath::RadToDeg()/20)]->Fill(fSignedDca); 
1379     fRecQPtTpcSector[Int_t(phiIn*
1380                            TMath::RadToDeg()/20)]->Fill(tpcP->Charge()/tpcP->Pt());
1381     fRecEtaPtTpcSector[Int_t(phiIn*
1382                              TMath::RadToDeg()/20)]->Fill(tpcP->Eta()/tpcP->Pt());
1383      
1384
1385
1386 //     // another track loop
1387 //     for (Int_t iTrack2 = 0; iTrack2 < event->GetNumberOfTracks(); iTrack2++) {
1388       
1389 //       if(LeadingTrack==iTrack2) continue;
1390
1391 //       AliVParticle *track2 = event->GetTrack(iTrack2);
1392 //       AliESDtrack* esdtrack2 =  dynamic_cast<AliESDtrack*>(track2);
1393 //       if (!track2) {
1394 //      Printf("ERROR: Could not receive track %d", iTrack);
1395 //      continue;
1396 //       }
1397 //       if (!fCuts->AcceptTrack(esdtrack2)) continue;
1398 //       //propagate to dca
1399 //       esdtrack2->PropagateToDCA(event->GetPrimaryVertex(),
1400 //                              event->GetMagneticField(), 10000.);
1401  
1402 //       fDeltaPhiLeading->Fill((LeadingPhi-esdtrack2->Phi())*TMath::RadToDeg(),
1403 //                           LeadingPhi*TMath::RadToDeg() );
1404
1405      
1406
1407 //     }//second track loop
1408
1409     // if(fTrackType==2) delete tpcP; // delete in case of TPCOnlyTrack
1410
1411   }//first track loop
1412
1413   fNumberAfterCut->Fill(fNTracksAccepted);
1414
1415   //prevent mem leak for TPConly track
1416   if(fTrackType==2&&tpcP){
1417     delete tpcP;
1418     tpcP = 0;
1419   }
1420   
1421
1422   // Post output data.
1423   // PostData(1, fHistPt);
1424   PostData(1, fHists);
1425 }      
1426
1427
1428
1429
1430
1431 //________________________________________________________________________
1432 void AliAnalysisTaskQASym::Terminate(Option_t *) 
1433 {
1434
1435
1436 }  
1437
1438
1439
1440
1441