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