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