]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/AliAnalysisTaskQASym.cxx
Task: In order to prevent memory leaks, TPConly tracks are deleted by hand. AddTask...
[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   AliESDtrack *tpcP = 0x0;
1017
1018   for (Int_t iTrack = 0; iTrack < event->GetNumberOfTracks(); iTrack++) {
1019     
1020     //prevent mem leak for TPConly track
1021     if(fTrackType==2&&tpcP){
1022       delete tpcP;
1023       tpcP = 0;
1024     }
1025
1026     AliVParticle *track = event->GetTrack(iTrack);
1027     AliESDtrack *esdtrack =  dynamic_cast<AliESDtrack*>(track);
1028     esdtrack->PropagateToDCA(event->GetPrimaryVertex(),
1029                              event->GetMagneticField(), 10000.);
1030
1031     if (!track) {
1032       Printf("ERROR: Could not receive track %d", iTrack);
1033       continue;
1034     }
1035     //__________
1036     // run Task for global tracks or ITS tracks or TPC tracks
1037     const AliExternalTrackParam *tpcPin = 0x0;
1038     Double_t phiIn=0;
1039     if(fTrackType==0){
1040       //Fill all histograms with global tracks
1041       tpcP = esdtrack;
1042       phiIn = tpcP->Phi();
1043       if (!tpcP) continue;
1044       if (!fCuts->AcceptTrack(tpcP)) continue;
1045     }
1046     else if(fTrackType==1){
1047       //Fill all histograms with ITS tracks
1048       tpcP = esdtrack;
1049       phiIn = tpcP->Phi();
1050       if (!tpcP) continue;
1051       if (!fCuts->AcceptTrack(tpcP)) continue;
1052     }
1053     else if(fTrackType==2){     
1054       //Fill all histograms with TPC track information
1055       tpcPin = esdtrack->GetInnerParam();
1056       if (!tpcPin) continue;
1057       phiIn=tpcPin->Phi();
1058
1059       tpcP = AliESDtrackCuts::GetTPCOnlyTrack(dynamic_cast<AliESDEvent*>(event),esdtrack->GetID());
1060       if (!tpcP) continue;
1061       if (!fCuts->AcceptTrack(tpcP)) continue;
1062       if(tpcP->GetNcls(1)>160)continue;//jacek's track cut
1063       if(tpcP->GetConstrainedChi2TPC()<0)continue; // jacek's track cut
1064     }
1065     else{
1066       Printf("ERROR: wrong track type \n");
1067       continue;
1068     }
1069     //___________
1070     //
1071   
1072  
1073     if(tpcP->E()>leadingEnergy){
1074       leadingTrack=iTrack;
1075       leadingEnergy=tpcP->E();
1076       leadingPhi=phiIn;
1077     }
1078    
1079     
1080     fqRec->Fill(tpcP->Charge());
1081   
1082
1083     Double_t sigmapt = tpcP->GetSigma1Pt2();
1084     sigmapt= sqrt(sigmapt);
1085     sigmapt= sigmapt *(tpcP->Pt()*tpcP->Pt()); 
1086
1087     if(sigmapt == 0.)continue;
1088     fsigmaPt->Fill(TMath::Log10(sigmapt));
1089  
1090
1091     // hits in ITS layer
1092     Int_t cas=-1;
1093     if(tpcP->HasPointOnITSLayer(0)) 
1094       cas=0;
1095     else if(!tpcP->HasPointOnITSLayer(0)
1096             &&  tpcP->HasPointOnITSLayer(1)) 
1097       cas=1;
1098     else if(!tpcP->HasPointOnITSLayer(0)
1099             && !tpcP->HasPointOnITSLayer(1) 
1100             &&  tpcP->HasPointOnITSLayer(2)) 
1101       cas=2;
1102     else if(!tpcP->HasPointOnITSLayer(0)
1103             && !tpcP->HasPointOnITSLayer(1) 
1104             && !tpcP->HasPointOnITSLayer(2)
1105             &&  tpcP->HasPointOnITSLayer(3)) 
1106       cas=3;
1107     else if(!tpcP->HasPointOnITSLayer(0)
1108             && !tpcP->HasPointOnITSLayer(1) 
1109             && !tpcP->HasPointOnITSLayer(2)
1110             && !tpcP->HasPointOnITSLayer(3)
1111             &&  tpcP->HasPointOnITSLayer(4)) 
1112       cas=4;
1113     else if(   !tpcP->HasPointOnITSLayer(0)
1114                && !tpcP->HasPointOnITSLayer(1)
1115                && !tpcP->HasPointOnITSLayer(2)
1116                && !tpcP->HasPointOnITSLayer(3)
1117                && !tpcP->HasPointOnITSLayer(4) 
1118                &&  tpcP->HasPointOnITSLayer(5)) 
1119       cas=5;
1120     else 
1121       cas=6;
1122   
1123    
1124    
1125     //------------------- 
1126
1127     xvertexcor = tpcP->Xv() - vertex->GetX(); // coordinate corrected for vertex position
1128     yvertexcor = tpcP->Yv() - vertex->GetY(); // "
1129     sdca = (tpcP->Py()*xvertexcor - tpcP->Px()*yvertexcor)/tpcP->Pt();
1130
1131
1132     fqPtRec[cas]->Fill(tpcP->Charge()/tpcP->Pt());
1133     
1134     
1135
1136     fHistRECpt->Fill(tpcP->Pt());
1137     fEta->Fill(tpcP->Eta());
1138     fEtavPt->Fill(tpcP->Eta(), tpcP->Pt());
1139     fEtaPhi->Fill(tpcP->Eta(), phiIn);
1140     fThetaRec->Fill(tpcP->Theta());
1141     fPhiRec->Fill(phiIn);
1142     fVx->Fill(tpcP->Xv());
1143     fVy->Fill(tpcP->Yv());
1144     fVz->Fill(tpcP->Zv());
1145   
1146
1147     fEtaPt->Fill(tpcP->Eta()/tpcP->Pt());
1148     fQPt->Fill(tpcP->Charge()/tpcP->Pt());
1149     fDca->Fill(sdca);
1150     fRecQPtPhi->Fill(tpcP->Charge()/tpcP->Pt(), phiIn);
1151
1152
1153     tpcP->GetImpactParameters(xy,z);
1154     fDiffDcaD->Fill(sdca+xy);
1155
1156     if(fTrackType==2) fCompareTPCparam->Fill(z,tpcPin->GetTgl());
1157     
1158     //for positive particles
1159
1160     if(tpcP->Charge()>0){
1161       fRecPtPos->Fill(tpcP->Pt());
1162       fRecPtPosLadder[cas]->Fill(tpcP->Pt());
1163       fRecPtPosVz->Fill(TMath::Log10(tpcP->Pt()),tpcP->Zv());
1164       fRecPhiPos->Fill(TMath::RadToDeg()*phiIn);
1165     
1166      
1167       fRecPhiPosLadder[cas]->Fill(TMath::RadToDeg()*phiIn);
1168       fRecPhiPosVz->Fill(TMath::RadToDeg()*phiIn,tpcP->Zv());
1169       fSignedDcaPosVz->Fill(sdca,tpcP->Zv());
1170
1171       fRecEtaPos->Fill(tpcP->Eta());
1172       fRecEtaPosLadder[cas]->Fill(tpcP->Eta());
1173       fRecEtaPtPos->Fill(tpcP->Eta()/tpcP->Pt());
1174       fRecEtaPosVz->Fill(tpcP->Eta(),tpcP->Zv());
1175       fRecEtaPtPosVz->Fill(tpcP->Eta()/tpcP->Pt(),tpcP->Zv());
1176      
1177       fRecDcaPos->Fill(sdca);
1178       fRecDcaPosPhi->Fill(sdca, phiIn);
1179       fRecPtPosPhi->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1180       fRecEtaPtPosPhi->Fill(tpcP->Eta()/tpcP->Pt(), phiIn);
1181       fRecEtaPosPhi->Fill(tpcP->Eta(), phiIn);
1182       fRecDPos->Fill(xy);
1183       fSignDcaPos[cas]->Fill(sdca);
1184     
1185      
1186       fDcaSigmaPos[cas]->Fill(sdca, TMath::Log10(sigmapt));
1187     
1188       fPtSigmaPos[cas]->Fill(TMath::Log10(sigmapt));
1189       //pos eta
1190       if(tpcP->Eta()>0){
1191         fRecPtPosEtaPos->Fill(tpcP->Pt());
1192         fRec1PtPosEtaPos->Fill(1/tpcP->Pt());
1193         fRecPhiPosEtaPos->Fill(phiIn);
1194         fRecDcaPosPhiEtaPos->Fill(sdca, phiIn);
1195         fRecDcaPosPtEtaPos->Fill(sdca, TMath::Log10(tpcP->Pt()));
1196         fRecPtPosPhiEtaPos->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1197         fRecDcaPhiPtPosEtaPos->Fill(phiIn, tpcP->Pt(), sdca);
1198       }
1199       //neg eta
1200       else{
1201         fRecPtPosEtaNeg->Fill(tpcP->Pt());
1202         fRec1PtPosEtaNeg->Fill(1/tpcP->Pt());
1203         fRecPhiPosEtaNeg->Fill(phiIn);
1204         fRecDcaPosPhiEtaNeg->Fill(sdca, phiIn);
1205         fRecDcaPosPtEtaNeg->Fill(sdca, TMath::Log10(tpcP->Pt()));
1206         fRecPtPosPhiEtaNeg->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1207         fRecDcaPhiPtPosEtaNeg->Fill(phiIn, tpcP->Pt(), sdca);
1208       }
1209       
1210     }
1211     //and negative particles
1212     else {
1213       fRecPtNeg->Fill(tpcP->Pt());
1214       fRecPtNegLadder[cas]->Fill(tpcP->Pt());
1215       fRecPtNegVz->Fill(TMath::Log10(tpcP->Pt()),tpcP->Zv());
1216            
1217       fRecPhiNeg->Fill(TMath::RadToDeg()*phiIn);
1218       fRecPhiNegLadder[cas]->Fill(TMath::RadToDeg()*phiIn);
1219       fRecPhiNegVz->Fill(TMath::RadToDeg()*phiIn,tpcP->Zv());
1220       fSignedDcaNegVz->Fill(sdca,tpcP->Zv());
1221       fRecEtaPtNegVz->Fill(tpcP->Eta()/tpcP->Pt(),tpcP->Zv());
1222
1223       fRecEtaNeg->Fill(tpcP->Eta());
1224       fRecEtaNegLadder[cas]->Fill(tpcP->Eta());
1225       fRecEtaPtNeg->Fill(tpcP->Eta()/tpcP->Pt());
1226       fRecEtaNegVz->Fill(tpcP->Eta(),tpcP->Zv());
1227      
1228       fRecDcaNeg->Fill(sdca);
1229       fRecDcaNegInv->Fill(-sdca);
1230       fRecDcaNegPhi->Fill(sdca, phiIn);
1231       fRecPtNegPhi->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1232       fRecEtaNegPhi->Fill(tpcP->Eta(), phiIn);
1233       fRecEtaPtNegPhi->Fill(tpcP->Eta()/tpcP->Pt(), phiIn);
1234       fRecDNeg->Fill(xy);
1235       fSignDcaNeg[cas]->Fill(sdca);
1236       fSignDcaNegInv[cas]->Fill(-sdca);
1237      
1238      
1239       fDcaSigmaNeg[cas]->Fill(sdca,TMath::Log10(sigmapt));
1240    
1241       fPtSigmaNeg[cas]->Fill(TMath::Log10(sigmapt));
1242       
1243       //pos eta
1244       if(tpcP->Eta()>0){
1245         fRecPtNegEtaPos->Fill(tpcP->Pt());
1246         fRec1PtNegEtaPos->Fill(1/tpcP->Pt());
1247         fRecPhiNegEtaPos->Fill(phiIn);
1248         fRecDcaNegPhiEtaPos->Fill(sdca, phiIn);
1249         fRecDcaNegPtEtaPos->Fill(sdca, TMath::Log10(tpcP->Pt()));
1250         fRecPtNegPhiEtaPos->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1251         fRecDcaPhiPtNegEtaPos->Fill(phiIn, tpcP->Pt(), sdca);
1252       }
1253       //neg eta
1254       else{
1255         fRecPtNegEtaNeg->Fill(tpcP->Pt());
1256         fRec1PtNegEtaNeg->Fill(1/tpcP->Pt());
1257         fRecPhiNegEtaNeg->Fill(phiIn);
1258         fRecDcaNegPhiEtaNeg->Fill(sdca, phiIn);
1259         fRecDcaNegPtEtaNeg->Fill(sdca, TMath::Log10(tpcP->Pt()));
1260         fRecPtNegPhiEtaNeg->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1261         fRecDcaPhiPtNegEtaNeg->Fill(phiIn, tpcP->Pt(), sdca);
1262       }
1263
1264     }
1265     
1266
1267
1268     //all particles with positive eta
1269     if(tpcP->Eta()>0){
1270       fRecQPtPosEta->Fill(tpcP->Charge()/tpcP->Pt());
1271       fRecPtPosEta->Fill(tpcP->Pt());
1272       fRecPhiPosEta->Fill(TMath::RadToDeg()*phiIn);
1273       fRecQPtPosEtaVz->Fill(tpcP->Charge()/tpcP->Pt(),tpcP->Zv());
1274       fRecDcaPosEta->Fill(sdca);
1275       fRecDPosEta->Fill(xy);
1276     }
1277     //all particles with negative eta (and eta==0)
1278     else{
1279       fRecQPtNegEta->Fill(tpcP->Charge()/tpcP->Pt());
1280       fRecPtNegEta->Fill(tpcP->Pt());
1281       fRecPhiNegEta->Fill(TMath::RadToDeg()*phiIn);
1282       fRecQPtNegEtaVz->Fill(tpcP->Charge()/tpcP->Pt(),tpcP->Zv());
1283       fRecDcaNegEta->Fill(sdca);
1284       fRecDNegEta->Fill(xy);
1285
1286     }
1287
1288
1289     fRecPtTpcSector[Int_t(phiIn*
1290                           TMath::RadToDeg()/20)]->Fill(tpcP->Pt());
1291     fRecEtaTpcSector[Int_t(phiIn*
1292                            TMath::RadToDeg()/20)]->Fill(tpcP->Eta());
1293     fSignedDcaTpcSector[Int_t(phiIn*
1294                               TMath::RadToDeg()/20)]->Fill(sdca); 
1295     fRecQPtTpcSector[Int_t(phiIn*
1296                            TMath::RadToDeg()/20)]->Fill(tpcP->Charge()/tpcP->Pt());
1297     fRecEtaPtTpcSector[Int_t(phiIn*
1298                              TMath::RadToDeg()/20)]->Fill(tpcP->Eta()/tpcP->Pt());
1299      
1300
1301
1302 //     // another track loop
1303 //     for (Int_t iTrack2 = 0; iTrack2 < event->GetNumberOfTracks(); iTrack2++) {
1304       
1305 //       if(LeadingTrack==iTrack2) continue;
1306
1307 //       AliVParticle *track2 = event->GetTrack(iTrack2);
1308 //       AliESDtrack* esdtrack2 =  dynamic_cast<AliESDtrack*>(track2);
1309 //       if (!track2) {
1310 //      Printf("ERROR: Could not receive track %d", iTrack);
1311 //      continue;
1312 //       }
1313 //       if (!fCuts->AcceptTrack(esdtrack2)) continue;
1314 //       //propagate to dca
1315 //       esdtrack2->PropagateToDCA(event->GetPrimaryVertex(),
1316 //                              event->GetMagneticField(), 10000.);
1317  
1318 //       fDeltaPhiLeading->Fill((LeadingPhi-esdtrack2->Phi())*TMath::RadToDeg(),
1319 //                           LeadingPhi*TMath::RadToDeg() );
1320
1321      
1322
1323 //     }//second track loop
1324
1325     // if(fTrackType==2) delete tpcP; // delete in case of TPCOnlyTrack
1326
1327   }//first track loop
1328
1329   //prevent mem leak for TPConly track
1330   if(fTrackType==2&&tpcP){
1331     delete tpcP;
1332     tpcP = 0;
1333   }
1334   
1335  
1336
1337   // Post output data.
1338   // PostData(1, fHistPt);
1339   PostData(1, fHists);
1340 }      
1341
1342
1343
1344
1345
1346 //________________________________________________________________________
1347 void AliAnalysisTaskQASym::Terminate(Option_t *) 
1348 {
1349
1350
1351 }  
1352
1353
1354
1355
1356