]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG0/dNdPt/AlidNdPtAnalysis.cxx
Events with TPConly vertex rejected; Reject events without reconstructed Vtx at event...
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtAnalysis.cxx
1 /**************************************************************************\r
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
3  *                                                                        *\r
4  * Author: The ALICE Off-line Project.                                    *\r
5  * Contributors are mentioned in the code where appropriate.              *\r
6  *                                                                        *\r
7  * Permission to use, copy, modify and distribute this software and its   *\r
8  * documentation strictly for non-commercial purposes is hereby granted   *\r
9  * without fee, provided that the above copyright notice appears in all   *\r
10  * copies and that both the copyright notice and this permission notice   *\r
11  * appear in the supporting documentation. The authors make no claims     *\r
12  * about the suitability of this software for any purpose. It is          *\r
13  * provided "as is" without express or implied warranty.                  *\r
14  **************************************************************************/\r
15 //------------------------------------------------------------------------------\r
16 // AlidNdPtAnalysis class. \r
17 // \r
18 // a. functionality:\r
19 // - fills analysis control histograms\r
20 // - fills generic correction matrices \r
21 // - generates correction matrices \r
22 //\r
23 // b. data members:\r
24 // - generic correction matrices\r
25 // - control histograms\r
26 //\r
27 // Author: J.Otwinowski 04/11/2008 \r
28 //------------------------------------------------------------------------------\r
29 \r
30 #include "TH1.h"\r
31 #include "TH2.h"\r
32 #include "TCanvas.h"\r
33 #include "THnSparse.h"\r
34 \r
35 #include "AliHeader.h"  \r
36 #include "AliGenEventHeader.h"  \r
37 #include "AliStack.h"  \r
38 #include "AliESDEvent.h"  \r
39 #include "AliMCEvent.h"  \r
40 #include "AliESDtrackCuts.h"  \r
41 #include "AliLog.h" \r
42 #include "AliMultiplicity.h"\r
43 #include "AliTracker.h"\r
44 \r
45 #include "AlidNdPtEventCuts.h"\r
46 #include "AlidNdPtAcceptanceCuts.h"\r
47 #include "AliPhysicsSelection.h"\r
48 #include "AliTriggerAnalysis.h"\r
49 \r
50 #include "AliPWG0Helper.h"\r
51 #include "AlidNdPtHelper.h"\r
52 #include "AlidNdPtAnalysis.h"\r
53 \r
54 using namespace std;\r
55 \r
56 ClassImp(AlidNdPtAnalysis)\r
57 \r
58 //_____________________________________________________________________________\r
59   AlidNdPtAnalysis::AlidNdPtAnalysis(): AlidNdPt(),\r
60   fAnalysisFolder(0),\r
61   fHistogramsOn(kFALSE),\r
62 \r
63   // event multiplicity correlation matrix \r
64   fEventMultCorrelationMatrix(0),\r
65 \r
66   // rec. track pt vs true track pt correlation matrix \r
67   fTrackPtCorrelationMatrix(0),\r
68 \r
69   // event level correction\r
70   fGenEventMatrix(0),\r
71   fGenSDEventMatrix(0),\r
72   fGenDDEventMatrix(0),\r
73   fGenNDEventMatrix(0),\r
74   fGenNSDEventMatrix(0),\r
75 \r
76   fTriggerEventMatrix(0),\r
77   fTriggerSDEventMatrix(0),\r
78   fTriggerDDEventMatrix(0),\r
79   fTriggerNDEventMatrix(0),\r
80   fTriggerNSDEventMatrix(0),\r
81 \r
82   fRecEventMatrix(0),\r
83   fRecSDEventMatrix(0),\r
84   fRecDDEventMatrix(0),\r
85   fRecNDEventMatrix(0),\r
86   fRecNSDEventMatrix(0),\r
87 \r
88   //\r
89   // track-event level correction \r
90   //\r
91   fGenTrackEventMatrix(0),\r
92   fGenTrackSDEventMatrix(0),\r
93   fGenTrackDDEventMatrix(0),\r
94   fGenTrackNDEventMatrix(0),\r
95   fGenTrackNSDEventMatrix(0),\r
96 \r
97   fTriggerTrackEventMatrix(0),\r
98   fTriggerTrackSDEventMatrix(0),\r
99   fTriggerTrackDDEventMatrix(0),\r
100   fTriggerTrackNDEventMatrix(0),\r
101   fTriggerTrackNSDEventMatrix(0),\r
102 \r
103   fRecTrackEventMatrix(0),\r
104   fRecTrackSDEventMatrix(0),\r
105   fRecTrackDDEventMatrix(0),\r
106   fRecTrackNDEventMatrix(0),\r
107   fRecTrackNSDEventMatrix(0),\r
108 \r
109   // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)\r
110   fGenTrackMatrix(0),\r
111   fGenPrimTrackMatrix(0),\r
112   fRecPrimTrackMatrix(0),\r
113 \r
114   // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)\r
115   fRecTrackMatrix(0),\r
116   fRecSecTrackMatrix(0),\r
117 \r
118   // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix)\r
119   fRecMultTrackMatrix(0),\r
120 \r
121   // event control histograms\r
122   fMCEventHist1(0),\r
123   fRecEventHist1(0),\r
124   fRecEventHist2(0),\r
125   fRecMCEventHist1(0),\r
126   fRecMCEventHist2(0),\r
127   fRecMCEventHist3(0),\r
128 \r
129   // rec. pt and eta resolution w.r.t MC\r
130   fRecMCTrackHist1(0),\r
131 \r
132   //multple reconstructed tracks\r
133   fMCMultRecTrackHist1(0), \r
134 \r
135   // rec. track control histograms\r
136   fRecTrackHist2(0)\r
137 {\r
138   // default constructor\r
139   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
140     fMCTrackHist1[i]=0;     \r
141     fMCPrimTrackHist1[i]=0;     \r
142     fMCPrimTrackHist2[i]=0;     \r
143     fMCSecTrackHist1[i]=0;     \r
144     fRecTrackHist1[i]=0;     \r
145     fRecTrackMultHist1[i]=0;     \r
146   }\r
147   Init();\r
148 }\r
149 \r
150 //_____________________________________________________________________________\r
151 AlidNdPtAnalysis::AlidNdPtAnalysis(Char_t* name, Char_t* title): AlidNdPt(name,title),\r
152   fAnalysisFolder(0),\r
153   fHistogramsOn(kFALSE),\r
154 \r
155   // event multiplicity correlation matrix \r
156   fEventMultCorrelationMatrix(0),\r
157 \r
158   // rec. track pt vs true track pt correlation matrix \r
159   fTrackPtCorrelationMatrix(0),\r
160 \r
161   // event level correction\r
162   fGenEventMatrix(0),\r
163   fGenSDEventMatrix(0),\r
164   fGenDDEventMatrix(0),\r
165   fGenNDEventMatrix(0),\r
166   fGenNSDEventMatrix(0),\r
167 \r
168   fTriggerEventMatrix(0),\r
169   fTriggerSDEventMatrix(0),\r
170   fTriggerDDEventMatrix(0),\r
171   fTriggerNDEventMatrix(0),\r
172   fTriggerNSDEventMatrix(0),\r
173 \r
174   fRecEventMatrix(0),\r
175   fRecSDEventMatrix(0),\r
176   fRecDDEventMatrix(0),\r
177   fRecNDEventMatrix(0),\r
178   fRecNSDEventMatrix(0),\r
179 \r
180   //\r
181   // track-event level correction \r
182   //\r
183   fGenTrackEventMatrix(0),\r
184   fGenTrackSDEventMatrix(0),\r
185   fGenTrackDDEventMatrix(0),\r
186   fGenTrackNDEventMatrix(0),\r
187   fGenTrackNSDEventMatrix(0),\r
188 \r
189   fTriggerTrackEventMatrix(0),\r
190   fTriggerTrackSDEventMatrix(0),\r
191   fTriggerTrackDDEventMatrix(0),\r
192   fTriggerTrackNDEventMatrix(0),\r
193   fTriggerTrackNSDEventMatrix(0),\r
194 \r
195   fRecTrackEventMatrix(0),\r
196   fRecTrackSDEventMatrix(0),\r
197   fRecTrackDDEventMatrix(0),\r
198   fRecTrackNDEventMatrix(0),\r
199   fRecTrackNSDEventMatrix(0),\r
200 \r
201   // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)\r
202   fGenTrackMatrix(0),\r
203   fGenPrimTrackMatrix(0),\r
204   fRecPrimTrackMatrix(0),\r
205 \r
206   // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)\r
207   fRecTrackMatrix(0),\r
208   fRecSecTrackMatrix(0),\r
209 \r
210   // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix)\r
211   fRecMultTrackMatrix(0),\r
212 \r
213   // event control histograms\r
214   fMCEventHist1(0),\r
215   fRecEventHist1(0),\r
216   fRecEventHist2(0),\r
217   fRecMCEventHist1(0),\r
218   fRecMCEventHist2(0),\r
219   fRecMCEventHist3(0),\r
220  \r
221   // rec. pt and eta resolution w.r.t MC\r
222   fRecMCTrackHist1(0),\r
223 \r
224   //multple reconstructed tracks\r
225   fMCMultRecTrackHist1(0), \r
226 \r
227   // rec. track control histograms\r
228   fRecTrackHist2(0)\r
229 {\r
230   //\r
231   // constructor\r
232   //\r
233   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
234     fMCTrackHist1[i]=0;     \r
235     fMCPrimTrackHist1[i]=0;     \r
236     fMCPrimTrackHist2[i]=0;     \r
237     fMCSecTrackHist1[i]=0;     \r
238     fRecTrackHist1[i]=0;     \r
239     fRecTrackMultHist1[i]=0; \r
240   }\r
241 \r
242   Init();\r
243 }\r
244 \r
245 //_____________________________________________________________________________\r
246 AlidNdPtAnalysis::~AlidNdPtAnalysis() {\r
247   //\r
248   // destructor\r
249   //\r
250   if(fEventMultCorrelationMatrix) delete fEventMultCorrelationMatrix; fEventMultCorrelationMatrix=0;\r
251   //\r
252   if(fTrackPtCorrelationMatrix) delete fTrackPtCorrelationMatrix; fTrackPtCorrelationMatrix=0;\r
253   //\r
254   if(fGenEventMatrix) delete fGenEventMatrix; fGenEventMatrix=0;\r
255   if(fGenSDEventMatrix) delete fGenSDEventMatrix; fGenSDEventMatrix=0;\r
256   if(fGenDDEventMatrix) delete fGenDDEventMatrix; fGenDDEventMatrix=0;\r
257   if(fGenNDEventMatrix) delete fGenNDEventMatrix; fGenNDEventMatrix=0;\r
258   if(fGenNSDEventMatrix) delete fGenNSDEventMatrix; fGenNSDEventMatrix=0;\r
259 \r
260   if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;\r
261   if(fTriggerSDEventMatrix) delete fTriggerSDEventMatrix; fTriggerSDEventMatrix=0;\r
262   if(fTriggerDDEventMatrix) delete fTriggerDDEventMatrix; fTriggerDDEventMatrix=0;\r
263   if(fTriggerNDEventMatrix) delete fTriggerNDEventMatrix; fTriggerNDEventMatrix=0;\r
264   if(fTriggerNSDEventMatrix) delete fTriggerNSDEventMatrix; fTriggerNSDEventMatrix=0;\r
265 \r
266   if(fRecEventMatrix) delete fRecEventMatrix; fRecEventMatrix=0;\r
267   if(fRecSDEventMatrix) delete fRecSDEventMatrix; fRecSDEventMatrix=0;\r
268   if(fRecDDEventMatrix) delete fRecDDEventMatrix; fRecDDEventMatrix=0;\r
269   if(fRecNDEventMatrix) delete fRecNDEventMatrix; fRecNDEventMatrix=0;\r
270   if(fRecNSDEventMatrix) delete fRecNSDEventMatrix; fRecNSDEventMatrix=0;\r
271 \r
272   //\r
273   if(fGenTrackEventMatrix) delete fGenTrackEventMatrix; fGenTrackEventMatrix=0;\r
274   if(fGenTrackSDEventMatrix) delete fGenTrackSDEventMatrix; fGenTrackSDEventMatrix=0;\r
275   if(fGenTrackDDEventMatrix) delete fGenTrackDDEventMatrix; fGenTrackDDEventMatrix=0;\r
276   if(fGenTrackNDEventMatrix) delete fGenTrackNDEventMatrix; fGenTrackNDEventMatrix=0;\r
277   if(fGenTrackNSDEventMatrix) delete fGenTrackNSDEventMatrix; fGenTrackNSDEventMatrix=0;\r
278 \r
279   if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;\r
280   if(fTriggerTrackSDEventMatrix) delete fTriggerTrackSDEventMatrix; fTriggerTrackSDEventMatrix=0;\r
281   if(fTriggerTrackDDEventMatrix) delete fTriggerTrackDDEventMatrix; fTriggerTrackDDEventMatrix=0;\r
282   if(fTriggerTrackNDEventMatrix) delete fTriggerTrackNDEventMatrix; fTriggerTrackNDEventMatrix=0;\r
283   if(fTriggerTrackNSDEventMatrix) delete fTriggerTrackNSDEventMatrix; fTriggerTrackNSDEventMatrix=0;\r
284 \r
285   if(fRecTrackEventMatrix) delete fRecTrackEventMatrix; fRecTrackEventMatrix=0;\r
286   if(fRecTrackSDEventMatrix) delete fRecTrackSDEventMatrix; fRecTrackSDEventMatrix=0;\r
287   if(fRecTrackDDEventMatrix) delete fRecTrackDDEventMatrix; fRecTrackDDEventMatrix=0;\r
288   if(fRecTrackNDEventMatrix) delete fRecTrackNDEventMatrix; fRecTrackNDEventMatrix=0;\r
289   if(fRecTrackNSDEventMatrix) delete fRecTrackNSDEventMatrix; fRecTrackNSDEventMatrix=0;\r
290 \r
291   //\r
292   if(fGenTrackMatrix) delete fGenTrackMatrix; fGenTrackMatrix=0;\r
293   if(fGenPrimTrackMatrix) delete fGenPrimTrackMatrix; fGenPrimTrackMatrix=0;\r
294   if(fRecPrimTrackMatrix) delete fRecPrimTrackMatrix; fRecPrimTrackMatrix=0;\r
295   //\r
296   if(fRecTrackMatrix) delete fRecTrackMatrix; fRecTrackMatrix=0;\r
297   if(fRecSecTrackMatrix) delete fRecSecTrackMatrix; fRecSecTrackMatrix=0;\r
298   // \r
299   if(fRecMultTrackMatrix) delete fRecMultTrackMatrix; fRecMultTrackMatrix=0;\r
300   //\r
301   // Control histograms\r
302   //\r
303   if(fMCEventHist1) delete fMCEventHist1; fMCEventHist1=0;\r
304   if(fRecEventHist1) delete fRecEventHist1; fRecEventHist1=0;\r
305   if(fRecEventHist2) delete fRecEventHist2; fRecEventHist2=0;\r
306   if(fRecMCEventHist1) delete fRecMCEventHist1; fRecMCEventHist1=0;\r
307   if(fRecMCEventHist2) delete fRecMCEventHist2; fRecMCEventHist2=0;\r
308   if(fRecMCEventHist3) delete fRecMCEventHist3; fRecMCEventHist3=0;\r
309   //\r
310   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
311     if(fMCTrackHist1[i]) delete fMCTrackHist1[i]; fMCTrackHist1[i]=0;\r
312     if(fMCPrimTrackHist1[i]) delete fMCPrimTrackHist1[i]; fMCPrimTrackHist1[i]=0;\r
313     if(fMCPrimTrackHist2[i]) delete fMCPrimTrackHist2[i]; fMCPrimTrackHist2[i]=0;\r
314     if(fMCSecTrackHist1[i]) delete fMCSecTrackHist1[i]; fMCSecTrackHist1[i]=0;\r
315     if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;\r
316     if(fRecTrackMultHist1[i]) delete fRecTrackMultHist1[i]; fRecTrackMultHist1[i]=0;\r
317   }\r
318   if(fRecMCTrackHist1) delete fRecMCTrackHist1; fRecMCTrackHist1=0;\r
319   if(fMCMultRecTrackHist1) delete fMCMultRecTrackHist1; fMCMultRecTrackHist1=0; \r
320   if(fRecTrackHist2) delete fRecTrackHist2; fRecTrackHist2=0; \r
321   //\r
322   if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;\r
323 }\r
324 \r
325 //_____________________________________________________________________________\r
326 void AlidNdPtAnalysis::Init(){\r
327   //\r
328   // Init histograms\r
329   //\r
330 \r
331   const Int_t multNbins = 27;\r
332   const Int_t ptNbinsTrackEventCorr = 38;\r
333   //const Int_t ptNbins = 56;\r
334   const Int_t ptNbins = 55;\r
335   const Int_t etaNbins = 30;\r
336   const Int_t zvNbins = 12;\r
337 \r
338   Double_t binsMult[multNbins+1] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,\r
339                                      9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,\r
340                                      19.5,20.5, 21.5, 22.5, 23.5, 24.5, 29.5, 149.5};\r
341 \r
342   Double_t binsPtTrackEventCorr[ptNbinsTrackEventCorr+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,6.0,10.0,16.0};\r
343 \r
344   Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0};\r
345 \r
346   Double_t binsEta[etaNbins+1] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};\r
347 \r
348   Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
349   //Double_t binsMult[multNbins+1] = {0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,12.,14.,16.,18.,20.,30.,40.,50.,70.,90.,110.,150.};\r
350 \r
351   //Int_t binsTrackMatrix[3]={zvNbins,ptNbins,etaNbins};\r
352   Int_t binsTrackEventCorrMatrix[3]={zvNbins,ptNbinsTrackEventCorr,etaNbins};\r
353 \r
354   //\r
355   // rec. vs MC correlation matrices\r
356   //\r
357   Int_t binsMultTrueEventMatrix[2]={150,150};\r
358   Double_t minMultTrueEventMatrix[2]={-0.5,-0.5}; \r
359   Double_t maxMultTrueEventMatrix[2]={149.5,149.5}; \r
360   fEventMultCorrelationMatrix = new THnSparseF("fEventMultCorrelationMatrix","mult:true_mult",2,binsMultTrueEventMatrix,minMultTrueEventMatrix,maxMultTrueEventMatrix);\r
361   fEventMultCorrelationMatrix->GetAxis(0)->SetTitle("track multiplicity");\r
362   fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("true multiplicity");\r
363   fEventMultCorrelationMatrix->Sumw2();\r
364   \r
365   Int_t binsTrackPtCorrelationMatrix[3]={ptNbins,ptNbins,etaNbins};\r
366   fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta",3,binsTrackPtCorrelationMatrix);\r
367   fTrackPtCorrelationMatrix->SetBinEdges(0,binsPt);\r
368   fTrackPtCorrelationMatrix->SetBinEdges(1,binsPt);\r
369   fTrackPtCorrelationMatrix->SetBinEdges(2,binsEta);\r
370   fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)");\r
371   fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
372   fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta");\r
373   fTrackPtCorrelationMatrix->Sumw2();\r
374 \r
375   //\r
376   // Efficiency and contamination correction matrices\r
377   //\r
378   Int_t binsEventMatrix[2]={zvNbins,multNbins};\r
379   Double_t minEventMatrix[2]={-25.,-0.5}; \r
380   Double_t maxEventMatrix[2]={25.,149.5}; \r
381 \r
382   fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
383   fGenEventMatrix->SetBinEdges(0,binsZv);\r
384   fGenEventMatrix->SetBinEdges(1,binsMult);\r
385   fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
386   fGenEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
387   fGenEventMatrix->Sumw2();\r
388   \r
389   fGenSDEventMatrix = new THnSparseF("fGenSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
390   fGenSDEventMatrix->SetBinEdges(0,binsZv);\r
391   fGenSDEventMatrix->SetBinEdges(1,binsMult);\r
392   fGenSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
393   fGenSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
394   fGenSDEventMatrix->Sumw2();\r
395   \r
396   fGenDDEventMatrix = new THnSparseF("fGenDDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
397   fGenDDEventMatrix->SetBinEdges(0,binsZv);\r
398   fGenDDEventMatrix->SetBinEdges(1,binsMult);\r
399   fGenDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
400   fGenDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
401   fGenDDEventMatrix->Sumw2();\r
402   \r
403   fGenNDEventMatrix = new THnSparseF("fGenNDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
404   fGenNDEventMatrix->SetBinEdges(0,binsZv);\r
405   fGenNDEventMatrix->SetBinEdges(1,binsMult);\r
406   fGenNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
407   fGenNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
408   fGenNDEventMatrix->Sumw2();\r
409 \r
410   fGenNSDEventMatrix = new THnSparseF("fGenNSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
411   fGenNSDEventMatrix->SetBinEdges(0,binsZv);\r
412   fGenNSDEventMatrix->SetBinEdges(1,binsMult);\r
413   fGenNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
414   fGenNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
415   fGenNSDEventMatrix->Sumw2();\r
416 \r
417   //\r
418   fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
419   fTriggerEventMatrix->SetBinEdges(0,binsZv);\r
420   fTriggerEventMatrix->SetBinEdges(1,binsMult);\r
421   fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
422   fTriggerEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
423   fTriggerEventMatrix->Sumw2();\r
424 \r
425   fTriggerSDEventMatrix = new THnSparseF("fTriggerSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
426   fTriggerSDEventMatrix->SetBinEdges(0,binsZv);\r
427   fTriggerSDEventMatrix->SetBinEdges(1,binsMult);\r
428   fTriggerSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
429   fTriggerSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
430   fTriggerSDEventMatrix->Sumw2();\r
431   \r
432   fTriggerDDEventMatrix = new THnSparseF("fTriggerDDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
433   fTriggerDDEventMatrix->SetBinEdges(0,binsZv);\r
434   fTriggerDDEventMatrix->SetBinEdges(1,binsMult);\r
435   fTriggerDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
436   fTriggerDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
437   fTriggerDDEventMatrix->Sumw2();\r
438   \r
439   fTriggerNDEventMatrix = new THnSparseF("fTriggerNDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
440   fTriggerNDEventMatrix->SetBinEdges(0,binsZv);\r
441   fTriggerNDEventMatrix->SetBinEdges(1,binsMult);\r
442   fTriggerNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
443   fTriggerNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
444   fTriggerNDEventMatrix->Sumw2();\r
445  \r
446   fTriggerNSDEventMatrix = new THnSparseF("fTriggerNSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
447   fTriggerNSDEventMatrix->SetBinEdges(0,binsZv);\r
448   fTriggerNSDEventMatrix->SetBinEdges(1,binsMult);\r
449   fTriggerNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
450   fTriggerNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
451   fTriggerNSDEventMatrix->Sumw2();\r
452  \r
453   //\r
454   fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
455   fRecEventMatrix->SetBinEdges(0,binsZv);\r
456   fRecEventMatrix->SetBinEdges(1,binsMult);\r
457   fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
458   fRecEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
459   fRecEventMatrix->Sumw2();\r
460 \r
461   fRecSDEventMatrix = new THnSparseF("fRecSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
462   fRecSDEventMatrix->SetBinEdges(0,binsZv);\r
463   fRecSDEventMatrix->SetBinEdges(1,binsMult);\r
464   fRecSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
465   fRecSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
466   fRecSDEventMatrix->Sumw2();\r
467   \r
468   fRecDDEventMatrix = new THnSparseF("fRecDDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
469   fRecDDEventMatrix->SetBinEdges(0,binsZv);\r
470   fRecDDEventMatrix->SetBinEdges(1,binsMult);\r
471   fRecDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
472   fRecDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
473   fRecDDEventMatrix->Sumw2();\r
474   \r
475   fRecNDEventMatrix = new THnSparseF("fRecNDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
476   fRecNDEventMatrix->SetBinEdges(0,binsZv);\r
477   fRecNDEventMatrix->SetBinEdges(1,binsMult);\r
478   fRecNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
479   fRecNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
480   fRecNDEventMatrix->Sumw2();\r
481  \r
482   fRecNSDEventMatrix = new THnSparseF("fRecNSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
483   fRecNSDEventMatrix->SetBinEdges(0,binsZv);\r
484   fRecNSDEventMatrix->SetBinEdges(1,binsMult);\r
485   fRecNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
486   fRecNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
487   fRecNSDEventMatrix->Sumw2();\r
488 \r
489   // \r
490   // track to event corrections\r
491   //\r
492 \r
493   fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
494   fGenTrackEventMatrix->SetBinEdges(0,binsZv);\r
495   fGenTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
496   fGenTrackEventMatrix->SetBinEdges(2,binsEta);\r
497   fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
498   fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
499   fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
500   fGenTrackEventMatrix->Sumw2();\r
501 \r
502   fGenTrackSDEventMatrix = new THnSparseF("fGenTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
503   fGenTrackSDEventMatrix->SetBinEdges(0,binsZv);\r
504   fGenTrackSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
505   fGenTrackSDEventMatrix->SetBinEdges(2,binsEta);\r
506   fGenTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
507   fGenTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
508   fGenTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
509   fGenTrackSDEventMatrix->Sumw2();\r
510 \r
511   fGenTrackDDEventMatrix = new THnSparseF("fGenTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
512   fGenTrackDDEventMatrix->SetBinEdges(0,binsZv);\r
513   fGenTrackDDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
514   fGenTrackDDEventMatrix->SetBinEdges(2,binsEta);\r
515   fGenTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
516   fGenTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
517   fGenTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
518   fGenTrackDDEventMatrix->Sumw2();\r
519 \r
520   fGenTrackNDEventMatrix = new THnSparseF("fGenTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
521   fGenTrackNDEventMatrix->SetBinEdges(0,binsZv);\r
522   fGenTrackNDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
523   fGenTrackNDEventMatrix->SetBinEdges(2,binsEta);\r
524   fGenTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
525   fGenTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
526   fGenTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
527   fGenTrackNDEventMatrix->Sumw2();\r
528 \r
529   fGenTrackNSDEventMatrix = new THnSparseF("fGenTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
530   fGenTrackNSDEventMatrix->SetBinEdges(0,binsZv);\r
531   fGenTrackNSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
532   fGenTrackNSDEventMatrix->SetBinEdges(2,binsEta);\r
533   fGenTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
534   fGenTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
535   fGenTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
536   fGenTrackNSDEventMatrix->Sumw2();\r
537 \r
538 \r
539   //\r
540   fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
541   fTriggerTrackEventMatrix->SetBinEdges(0,binsZv);\r
542   fTriggerTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
543   fTriggerTrackEventMatrix->SetBinEdges(2,binsEta);\r
544   fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
545   fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
546   fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
547   fTriggerTrackEventMatrix->Sumw2();\r
548 \r
549   fTriggerTrackSDEventMatrix = new THnSparseF("fTriggerTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
550   fTriggerTrackSDEventMatrix->SetBinEdges(0,binsZv);\r
551   fTriggerTrackSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
552   fTriggerTrackSDEventMatrix->SetBinEdges(2,binsEta);\r
553   fTriggerTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
554   fTriggerTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
555   fTriggerTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
556   fTriggerTrackSDEventMatrix->Sumw2();\r
557 \r
558   fTriggerTrackDDEventMatrix = new THnSparseF("fTriggerTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
559   fTriggerTrackDDEventMatrix->SetBinEdges(0,binsZv);\r
560   fTriggerTrackDDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
561   fTriggerTrackDDEventMatrix->SetBinEdges(2,binsEta);\r
562   fTriggerTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
563   fTriggerTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
564   fTriggerTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
565   fTriggerTrackDDEventMatrix->Sumw2();\r
566 \r
567   fTriggerTrackNDEventMatrix = new THnSparseF("fTriggerTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
568   fTriggerTrackNDEventMatrix->SetBinEdges(0,binsZv);\r
569   fTriggerTrackNDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
570   fTriggerTrackNDEventMatrix->SetBinEdges(2,binsEta);\r
571   fTriggerTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
572   fTriggerTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
573   fTriggerTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
574   fTriggerTrackNDEventMatrix->Sumw2();\r
575 \r
576   fTriggerTrackNSDEventMatrix = new THnSparseF("fTriggerTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
577   fTriggerTrackNSDEventMatrix->SetBinEdges(0,binsZv);\r
578   fTriggerTrackNSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
579   fTriggerTrackNSDEventMatrix->SetBinEdges(2,binsEta);\r
580   fTriggerTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
581   fTriggerTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
582   fTriggerTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
583   fTriggerTrackNSDEventMatrix->Sumw2();\r
584 \r
585   //\r
586   fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
587   fRecTrackEventMatrix->SetBinEdges(0,binsZv);\r
588   fRecTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
589   fRecTrackEventMatrix->SetBinEdges(2,binsEta);\r
590   fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
591   fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
592   fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
593   fRecTrackEventMatrix->Sumw2();\r
594 \r
595   fRecTrackSDEventMatrix = new THnSparseF("fRecTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
596   fRecTrackSDEventMatrix->SetBinEdges(0,binsZv);\r
597   fRecTrackSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
598   fRecTrackSDEventMatrix->SetBinEdges(2,binsEta);\r
599   fRecTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
600   fRecTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
601   fRecTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
602   fRecTrackSDEventMatrix->Sumw2();\r
603 \r
604   fRecTrackDDEventMatrix = new THnSparseF("fRecTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
605   fRecTrackDDEventMatrix->SetBinEdges(0,binsZv);\r
606   fRecTrackDDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
607   fRecTrackDDEventMatrix->SetBinEdges(2,binsEta);\r
608   fRecTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
609   fRecTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
610   fRecTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
611   fRecTrackDDEventMatrix->Sumw2();\r
612 \r
613   fRecTrackNDEventMatrix = new THnSparseF("fRecTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
614   fRecTrackNDEventMatrix->SetBinEdges(0,binsZv);\r
615   fRecTrackNDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
616   fRecTrackNDEventMatrix->SetBinEdges(2,binsEta);\r
617   fRecTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
618   fRecTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
619   fRecTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
620   fRecTrackNDEventMatrix->Sumw2();\r
621 \r
622   fRecTrackNSDEventMatrix = new THnSparseF("fRecTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
623   fRecTrackNSDEventMatrix->SetBinEdges(0,binsZv);\r
624   fRecTrackNSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
625   fRecTrackNSDEventMatrix->SetBinEdges(2,binsEta);\r
626   fRecTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
627   fRecTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
628   fRecTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
629   fRecTrackNSDEventMatrix->Sumw2();\r
630 \r
631   //\r
632   // tracks correction matrices\r
633   //\r
634   //fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
635   fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
636   fGenTrackMatrix->SetBinEdges(0,binsZv);\r
637   //fGenTrackMatrix->SetBinEdges(1,binsPt);\r
638   fGenTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
639   fGenTrackMatrix->SetBinEdges(2,binsEta);\r
640   fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
641   fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
642   fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta");\r
643   fGenTrackMatrix->Sumw2();\r
644 \r
645   //fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
646   fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
647   fGenPrimTrackMatrix->SetBinEdges(0,binsZv);\r
648   //fGenPrimTrackMatrix->SetBinEdges(1,binsPt);\r
649   fGenPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
650   fGenPrimTrackMatrix->SetBinEdges(2,binsEta);\r
651   fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
652   fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
653   fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");\r
654   fGenPrimTrackMatrix->Sumw2();\r
655 \r
656   //fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
657   fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
658   fRecPrimTrackMatrix->SetBinEdges(0,binsZv);\r
659   //fRecPrimTrackMatrix->SetBinEdges(1,binsPt);\r
660   fRecPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
661   fRecPrimTrackMatrix->SetBinEdges(2,binsEta);\r
662   fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
663   fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
664   fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");\r
665   fRecPrimTrackMatrix->Sumw2();\r
666 \r
667   //\r
668   //fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
669   fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
670   fRecTrackMatrix->SetBinEdges(0,binsZv);\r
671   //fRecTrackMatrix->SetBinEdges(1,binsPt);\r
672   fRecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
673   fRecTrackMatrix->SetBinEdges(2,binsEta);\r
674   fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
675   fRecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");\r
676   fRecTrackMatrix->GetAxis(2)->SetTitle("Eta");\r
677   fRecTrackMatrix->Sumw2();\r
678 \r
679   //fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
680   fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
681   fRecSecTrackMatrix->SetBinEdges(0,binsZv);\r
682   //fRecSecTrackMatrix->SetBinEdges(1,binsPt);\r
683   fRecSecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
684   fRecSecTrackMatrix->SetBinEdges(2,binsEta);\r
685   fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
686   fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");\r
687   fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta");\r
688   fRecSecTrackMatrix->Sumw2();\r
689 \r
690   //\r
691   //fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
692   fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
693   fRecMultTrackMatrix->SetBinEdges(0,binsZv);\r
694   //fRecMultTrackMatrix->SetBinEdges(1,binsPt);\r
695   fRecMultTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
696   fRecMultTrackMatrix->SetBinEdges(2,binsEta);\r
697   fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
698   fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
699   fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta");\r
700   fRecMultTrackMatrix->Sumw2();\r
701 \r
702   //\r
703   // Control analysis histograms\r
704   //\r
705 \r
706   Int_t binsMCEventHist1[3]={100,100,140};\r
707   Double_t minMCEventHist1[3]={-0.1,-0.1,-35.}; \r
708   Double_t maxMCEventHist1[3]={0.1,0.1,35.}; \r
709   fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1);\r
710   fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)");\r
711   fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)");\r
712   fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)");\r
713   fMCEventHist1->Sumw2();\r
714 \r
715   //\r
716   Int_t binsRecEventHist1[3]={100,100,140};\r
717   Double_t minRecEventHist1[3]={-3.,-3.,-35.}; \r
718   Double_t maxRecEventHist1[3]={3.,3.,35.}; \r
719   \r
720   fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1);\r
721   fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)");\r
722   fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)");\r
723   fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)");\r
724   fRecEventHist1->Sumw2();\r
725 \r
726   //\r
727   Int_t binsRecEventHist2[3]={zvNbins,150,150};\r
728   Double_t minRecEventHist2[3]={-25.,-0.5,-0.5}; \r
729   Double_t maxRecEventHist2[3]={25.,149.5,149.5}; \r
730   \r
731   fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB:mult",3,binsRecEventHist2,minRecEventHist2,maxRecEventHist2);\r
732   fRecEventHist2->SetBinEdges(0,binsZv);\r
733   fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)");\r
734   fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB");\r
735   fRecEventHist2->GetAxis(2)->SetTitle("multiplicity");\r
736   fRecEventHist2->Sumw2();\r
737 \r
738   //\r
739   Double_t kFact = 0.1;\r
740   Int_t binsRecMCEventHist1[3]={100,100,100};\r
741   Double_t minRecMCEventHist1[3]={-10.0*kFact,-10.0*kFact,-10.0*kFact}; \r
742   Double_t maxRecMCEventHist1[3]={10.0*kFact,10.0*kFact,10.0*kFact}; \r
743    \r
744   fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv",3,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1);\r
745   fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)");\r
746   fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)");\r
747   fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)");\r
748   fRecMCEventHist1->Sumw2();\r
749 \r
750   //\r
751   Int_t binsRecMCEventHist2[3]={100,100,150};\r
752   Double_t minRecMCEventHist2[3]={-10.0*kFact,-10.0*kFact,0.0}; \r
753   Double_t maxRecMCEventHist2[3]={10.0*kFact,10.0*kFact,149.50}; \r
754 \r
755   fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:mult",3,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2);\r
756   fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)");\r
757   fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)");\r
758   fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity");\r
759   fRecMCEventHist2->Sumw2();\r
760 \r
761   Int_t binsRecMCEventHist3[2]={150,5};\r
762   Double_t minRecMCEventHist3[2]={-0.5,0.0}; \r
763   Double_t maxRecMCEventHist3[2]={149.50,5.0}; \r
764   fRecMCEventHist3 = new THnSparseF("fRecMCEventHist3","mult:EventType (ND, DD, SD)",2,binsRecMCEventHist3,minRecMCEventHist3,maxRecMCEventHist3);\r
765   fRecMCEventHist3->GetAxis(0)->SetTitle("multiplicity");\r
766   fRecMCEventHist3->GetAxis(1)->SetTitle("EventType");\r
767   fRecMCEventHist3->Sumw2();\r
768 \r
769   //\r
770   char name[256];\r
771   char title[256];\r
772   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) \r
773   {\r
774   // THnSparse track histograms\r
775  \r
776   Int_t binsMCTrackHist1[3]=  {ptNbins, etaNbins, 90};\r
777   Double_t minMCTrackHist1[3]={0.,-1.,0.}; \r
778   Double_t maxMCTrackHist1[3]={10.,1.,2.*TMath::Pi()}; \r
779   sprintf(name,"fMCTrackHist1_%d",i);\r
780   sprintf(title,"mcPt:mcEta:mcPhi");\r
781   \r
782   fMCTrackHist1[i] = new THnSparseF(name,title,3,binsMCTrackHist1,minMCTrackHist1,maxMCTrackHist1);\r
783   fMCTrackHist1[i]->SetBinEdges(0,binsPt);\r
784   fMCTrackHist1[i]->SetBinEdges(1,binsEta);\r
785   fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
786   fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");\r
787   fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)");\r
788   fMCTrackHist1[i]->Sumw2();\r
789 \r
790   Int_t binsMCPrimTrackHist1[5]=  {ptNbins,etaNbins,6,20,4000};\r
791   Double_t minMCPrimTrackHist1[5]={0.,-1.,0.,0.,0.}; \r
792   Double_t maxMCPrimTrackHist1[5]={10.,1.,6.,20.,4000.}; \r
793   sprintf(name,"fMCPrimTrackHist1_%d",i);\r
794   sprintf(title,"mcPt:mcEta:pid:mech:mother");\r
795   \r
796   fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1);\r
797   fMCPrimTrackHist1[i]->SetBinEdges(0,binsPt);\r
798   fMCPrimTrackHist1[i]->SetBinEdges(1,binsEta);\r
799   fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
800   fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");\r
801   fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid");\r
802   fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech");\r
803   fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother");\r
804   fMCPrimTrackHist1[i]->Sumw2();\r
805 \r
806   Int_t binsMCPrimTrackHist2[5]=  {4000,20,4000};\r
807   Double_t minMCPrimTrackHist2[5]={0.,0.,0.}; \r
808   Double_t maxMCPrimTrackHist2[5]={4000.,20.,4000.}; \r
809   sprintf(name,"fMCPrimTrackHist2_%d",i);\r
810   sprintf(title,"pdg:mech:mother");\r
811   \r
812   fMCPrimTrackHist2[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2);\r
813   fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg");\r
814   fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech");\r
815   fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother");\r
816   fMCPrimTrackHist2[i]->Sumw2();\r
817 \r
818   Int_t binsMCSecTrackHist1[5]=  {ptNbins,etaNbins,6,20,4000};\r
819   Double_t minMCSecTrackHist1[5]={0.,-1.,0.,0.,0.}; \r
820   Double_t maxMCSecTrackHist1[5]={10.,1.,6.,20.,4000.}; \r
821   sprintf(name,"fMCSecTrackHist1_%d",i);\r
822   sprintf(title,"mcPt:mcEta:mcPhi:pid:mech:mother");\r
823   \r
824   fMCSecTrackHist1[i] = new THnSparseF(name,title,5,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1);\r
825   fMCSecTrackHist1[i]->SetBinEdges(0,binsPt);\r
826   fMCSecTrackHist1[i]->SetBinEdges(1,binsEta);\r
827   fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
828   fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");\r
829   fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid");\r
830   fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech");\r
831   fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother");\r
832   fMCSecTrackHist1[i]->Sumw2();\r
833 \r
834   //\r
835 \r
836   // \r
837   \r
838   Int_t binsRecTrackHist1[3]={ptNbins,etaNbins,90};\r
839   Double_t minRecTrackHist1[3]={0.,-1.,0.}; \r
840   Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()};\r
841   sprintf(name,"fRecTrackHist1_%d",i);\r
842   sprintf(title,"Pt:Eta:Phi");\r
843   fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1);\r
844   fRecTrackHist1[i]->SetBinEdges(0,binsPt);\r
845   fRecTrackHist1[i]->SetBinEdges(1,binsEta);\r
846   fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)");\r
847   fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta");\r
848   fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)");\r
849   fRecTrackHist1[i]->Sumw2();\r
850 \r
851   // \r
852   Int_t binsRecTrackMultHist1[2]={ptNbins,150};\r
853   Double_t minRecTrackMultHist1[2]={0.,-0.5}; \r
854   Double_t maxRecTrackMultHist1[2]={10.,149.5};\r
855   sprintf(name,"fRecTrackMultHist_%d",i);\r
856   sprintf(title,"Pt:Mult");\r
857   fRecTrackMultHist1[i] = new THnSparseF(name,title,2,binsRecTrackMultHist1,minRecTrackMultHist1,maxRecTrackMultHist1);\r
858   fRecTrackMultHist1[i]->SetBinEdges(0,binsPt);\r
859   fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");\r
860   fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");\r
861   fRecTrackMultHist1[i]->Sumw2();\r
862   }\r
863 \r
864   Int_t binsRecMCTrackHist1[4] = {ptNbins,etaNbins,100,100};\r
865   Double_t minRecMCTrackHist1[4]={0.,-1.,-0.5,-0.5}; \r
866   Double_t maxRecMCTrackHist1[4]={20.,1.,0.5,0.5}; \r
867   sprintf(name,"fRecMCTrackHist1");\r
868   sprintf(title,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)");\r
869   fRecMCTrackHist1 = new THnSparseF(name,title,4,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1);\r
870   fRecMCTrackHist1->SetBinEdges(0,binsPt);\r
871   fRecMCTrackHist1->SetBinEdges(1,binsEta);\r
872   fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
873   fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta");\r
874   fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt");\r
875   fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta");\r
876 \r
877   Int_t binsMCMultRecTrackHist1[3] = {ptNbins,etaNbins,6};\r
878   Double_t minMCMultRecTrackHist1[3]={0.,-1.,0.}; \r
879   Double_t maxMCMultRecTrackHist1[3]={20.,1.,6.}; \r
880   sprintf(name,"fMCMultRecTrackHist1");\r
881   sprintf(title,"mcPt:mcEta:pid");\r
882   fMCMultRecTrackHist1 = new THnSparseF(name,title,3,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1);\r
883   fMCMultRecTrackHist1->SetBinEdges(0,binsPt);\r
884   fMCMultRecTrackHist1->SetBinEdges(1,binsEta);\r
885   fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
886   fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta");\r
887   fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid");\r
888 \r
889   //nClust:chi2PerClust:pt:eta:phi\r
890   Int_t binsRecTrackHist2[5]={160,100,ptNbins,etaNbins,90};\r
891   Double_t minRecTrackHist2[5]={0., 0., 0, -1.5, 0.};\r
892   Double_t maxRecRecTrackHist2[5]={160.,10., 16, 1.5, 2.*TMath::Pi()};\r
893 \r
894   fRecTrackHist2 = new THnSparseF("fRecTrackHist2","nClust:chi2PerClust:pt:eta:phi",5,binsRecTrackHist2,minRecTrackHist2,maxRecRecTrackHist2);\r
895   fRecTrackHist2->SetBinEdges(2,binsPt);\r
896   fRecTrackHist2->SetBinEdges(3,binsEta);\r
897   fRecTrackHist2->GetAxis(0)->SetTitle("nClust");\r
898   fRecTrackHist2->GetAxis(1)->SetTitle("chi2PerClust");\r
899   fRecTrackHist2->GetAxis(2)->SetTitle("p_{T} (GeV/c)");\r
900   fRecTrackHist2->GetAxis(3)->SetTitle("#eta");\r
901   fRecTrackHist2->GetAxis(4)->SetTitle("#phi (rad)");\r
902   fRecTrackHist2->Sumw2();\r
903 \r
904   // init folder\r
905   fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder");\r
906 }\r
907 \r
908 //_____________________________________________________________________________\r
909 void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent)\r
910 {\r
911   //\r
912   // Process real and/or simulated events\r
913   //\r
914   if(!esdEvent) {\r
915     AliDebug(AliLog::kError, "esdEvent not available");\r
916     return;\r
917   }\r
918 \r
919   // get selection cuts\r
920   AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
921   AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
922   AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
923 \r
924   if(!evtCuts || !accCuts  || !esdTrackCuts) {\r
925     AliDebug(AliLog::kError, "cuts not available");\r
926     return;\r
927   }\r
928 \r
929   // trigger selection\r
930   Bool_t isEventTriggered = kTRUE;\r
931   AliPhysicsSelection *trigSel = NULL;\r
932   AliTriggerAnalysis *trigAna = NULL;\r
933 \r
934   if(evtCuts->IsTriggerRequired())  \r
935   {\r
936     //\r
937     trigSel = GetPhysicsTriggerSelection();\r
938     if(!trigSel) {\r
939       printf("cannot get trigSel \n");\r
940       return;\r
941     }\r
942 \r
943     //\r
944     if(IsUseMCInfo()) \r
945     { \r
946       trigSel->SetAnalyzeMC();\r
947 \r
948       if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)\r
949       {\r
950         // check V0 systematics (case1)\r
951         // Initialization done in the macro\r
952         trigAna = trigSel->GetTriggerAnalysis();\r
953         if(!trigAna) \r
954           return;\r
955 \r
956         //trigAna->SetV0HwPars(15, 61.5, 86.5);\r
957         //trigAna->SetV0AdcThr(15);\r
958 \r
959         isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
960         //printf("MB1 & kVZEROCase1  %d \n",isEventTriggered);\r
961         //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
962         \r
963         if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
964         {\r
965           isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
966           //printf("V0AND %d \n",isEventTriggered);\r
967         }\r
968       }\r
969       else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2)\r
970       {\r
971         // check V0 systematics (case2 only in MC)\r
972         // Initialization done in the macro\r
973 \r
974         trigAna = trigSel->GetTriggerAnalysis();\r
975         if(!trigAna) \r
976          return;\r
977 \r
978         //trigAna->SetV0HwPars(0, 0, 125);\r
979         //trigAna->SetV0AdcThr(0);\r
980 \r
981         isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
982         //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
983         \r
984         if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
985         {\r
986           isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
987           //printf("V0AND %d \n",isEventTriggered);\r
988         }\r
989       }\r
990       else {\r
991         isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
992         //printf("MB1 %d \n",isEventTriggered);\r
993         \r
994         if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
995         {\r
996           trigAna = trigSel->GetTriggerAnalysis();\r
997           if(!trigAna) \r
998             return;\r
999 \r
1000           isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1001           //printf("V0AND %d \n",isEventTriggered);\r
1002         }\r
1003       }\r
1004     }\r
1005     else {\r
1006       //\r
1007       // 0-multiplicity bin for LHC background correction\r
1008       //\r
1009       if(GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
1010          GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx  || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ||\r
1011          GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx\r
1012         ) \r
1013       {\r
1014         trigSel->SetBin0CallbackViaPointer(&IsBinZeroTrackSPDvtx);\r
1015       } else {\r
1016         trigSel->SetBin0CallbackViaPointer(&IsBinZeroSPDvtx);\r
1017       }\r
1018 \r
1019       if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)\r
1020       {\r
1021         // check V0 systematics (case1)\r
1022         // Initialization done in the macro\r
1023         trigAna = trigSel->GetTriggerAnalysis();\r
1024         if(!trigAna) \r
1025           return;\r
1026 \r
1027         //trigAna->SetV0HwPars(15, 61.5, 86.5);\r
1028         //trigAna->SetV0AdcThr(15);\r
1029 \r
1030         isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
1031         //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1032         \r
1033         if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
1034         {\r
1035           isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1036           //printf("V0AND %d \n",isEventTriggered);\r
1037         }\r
1038       }\r
1039       else {\r
1040         isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
1041         //printf("MB1 %d \n",isEventTriggered);\r
1042         \r
1043         if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
1044         {\r
1045           trigAna = trigSel->GetTriggerAnalysis();\r
1046           if(!trigAna) \r
1047             return;\r
1048 \r
1049           isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1050           //printf("V0AND %d \n",isEventTriggered);\r
1051         }\r
1052       }\r
1053     }\r
1054   }\r
1055 \r
1056   // use MC information\r
1057   AliHeader* header = 0;\r
1058   AliGenEventHeader* genHeader = 0;\r
1059   AliStack* stack = 0;\r
1060   TArrayF vtxMC(3);\r
1061   AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;\r
1062 \r
1063   Int_t multMCTrueTracks = 0;\r
1064   if(IsUseMCInfo())\r
1065   {\r
1066     //\r
1067     if(!mcEvent) {\r
1068       AliDebug(AliLog::kError, "mcEvent not available");\r
1069       return;\r
1070     }\r
1071     // get MC event header\r
1072     header = mcEvent->Header();\r
1073     if (!header) {\r
1074       AliDebug(AliLog::kError, "Header not available");\r
1075       return;\r
1076     }\r
1077     // MC particle stack\r
1078     stack = mcEvent->Stack();\r
1079     if (!stack) {\r
1080       AliDebug(AliLog::kError, "Stack not available");\r
1081       return;\r
1082     }\r
1083     // get event type (ND=0x1, DD=0x2, SD=0x4)\r
1084     evtType = AliPWG0Helper::GetEventProcessType(header);\r
1085     AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));\r
1086 \r
1087     // get MC vertex\r
1088     genHeader = header->GenEventHeader();\r
1089     if (!genHeader) {\r
1090       AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");\r
1091       return;\r
1092     }\r
1093     genHeader->PrimaryVertex(vtxMC);\r
1094 \r
1095     Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};\r
1096     fMCEventHist1->Fill(vMCEventHist1);\r
1097 \r
1098     // multipliticy of all MC primary tracks\r
1099     // in Zv, pt and eta ranges)\r
1100     multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);\r
1101 \r
1102   } // end bUseMC\r
1103 \r
1104   // get reconstructed vertex  \r
1105   const AliESDVertex* vtxESD = 0; \r
1106   Bool_t isRecVertex = kFALSE;\r
1107   if(evtCuts->IsRecVertexRequired()) \r
1108   {\r
1109     Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();\r
1110     Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();\r
1111     vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); \r
1112     isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE);\r
1113   }\r
1114 \r
1115   if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {\r
1116     vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");\r
1117     isRecVertex = kTRUE;\r
1118   }\r
1119 \r
1120   Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; \r
1121   //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);\r
1122   //printf("GetAnalysisMode() %d \n",GetAnalysisMode());\r
1123 \r
1124   // vertex contributors\r
1125   Int_t multMBTracks = 0; \r
1126   if(GetAnalysisMode() == AlidNdPtHelper::kTPC) \r
1127   {  \r
1128      if(vtxESD->GetStatus() && isRecVertex)\r
1129        multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
1130   } \r
1131   else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS ||  GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || \r
1132            GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid ) \r
1133   {\r
1134      const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
1135      //if(mult && vtxESD->GetStatus() && isRecVertex)\r
1136      //if(mult)\r
1137      if(mult && vtxESD->GetStatus() && isRecVertex)\r
1138        multMBTracks = mult->GetNumberOfTracklets();\r
1139   } \r
1140   else if( GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
1141            GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt\r
1142            || GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx\r
1143            )\r
1144   {\r
1145      if(vtxESD->GetStatus() && isRecVertex)\r
1146        multMBTracks = vtxESD->GetNContributors();\r
1147   }\r
1148   else {\r
1149     AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));\r
1150     return; \r
1151   }\r
1152 \r
1153   TObjArray *allChargedTracks=0;\r
1154   Int_t multAll=0, multAcc=0, multRec=0;\r
1155   Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0;\r
1156 \r
1157   // cosmics analysis\r
1158   Int_t cosmicCount = 0;\r
1159   // high-pt tracks\r
1160   Int_t highPtCount = 0;\r
1161 \r
1162   // check event cuts\r
1163   if(isEventOK && isEventTriggered)\r
1164   {\r
1165     // get all charged tracks\r
1166     allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
1167     if(!allChargedTracks) return;\r
1168 \r
1169     Int_t entries = allChargedTracks->GetEntries();\r
1170     //printf("entries %d \n",entries);\r
1171 \r
1172     labelsAll = new Int_t[entries];\r
1173     labelsAcc = new Int_t[entries];\r
1174     labelsRec = new Int_t[entries];\r
1175     for(Int_t i=0; i<entries;++i) \r
1176     {\r
1177       AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);\r
1178       if(!track) continue;\r
1179       if(track->Charge()==0) continue;\r
1180 \r
1181       // only postive charged \r
1182       if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) \r
1183         continue;\r
1184       \r
1185       // only negative charged \r
1186       if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) \r
1187         continue;\r
1188 \r
1189 \r
1190       // esd track selection \r
1191       // ITS stand alone\r
1192       if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx) \r
1193       {\r
1194         if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;\r
1195         if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;\r
1196         if(track->GetNcls(0)<4) continue;\r
1197         if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;\r
1198       } \r
1199       else if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx) \r
1200       {\r
1201         //\r
1202         // ITS and TPC stand alone tracks\r
1203         //\r
1204         if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;\r
1205         if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;\r
1206         if(track->GetNcls(0)<4) continue;\r
1207         if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;\r
1208 \r
1209         // Check matching with TPC only track\r
1210         Bool_t hasMatch = kFALSE;\r
1211         for(Int_t j=0; j<entries;++j) \r
1212         {\r
1213           if(i==j) continue;\r
1214           AliESDtrack *track2 = (AliESDtrack*)allChargedTracks->At(j);\r
1215           if(!track2) continue;\r
1216           if(track2->Charge()==0) continue;\r
1217           if (!track2->GetTPCInnerParam()) continue;\r
1218 \r
1219           // check loose cuts for TPC tracks\r
1220           if(!esdTrackCuts->AcceptTrack(track2)) continue; \r
1221 \r
1222           AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(track2->GetTPCInnerParam()));\r
1223           if(!innerTPC) continue;\r
1224           Double_t x2[3]; track2->GetXYZ(x2);\r
1225           Double_t b2[3]; AliTracker::GetBxByBz(x2,b2);\r
1226           Double_t dz[2],cov[3];\r
1227           Bool_t isPropOK = innerTPC->PropagateToDCABxByBz(vtxESD,b2,kVeryBig,dz,cov);\r
1228           if(!isPropOK && innerTPC) {delete innerTPC; continue;}\r
1229 \r
1230           // check matching\r
1231           if (TMath::Abs(track->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; }\r
1232           if (TMath::Abs(track->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; }\r
1233           if (TMath::Abs(track->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; }\r
1234 \r
1235           hasMatch = kTRUE;\r
1236           if(innerTPC) delete innerTPC;\r
1237         }\r
1238 \r
1239         if(!hasMatch) continue;\r
1240       }\r
1241       else {\r
1242         if(!esdTrackCuts->AcceptTrack(track)) \r
1243           continue;\r
1244       }\r
1245 \r
1246       /*\r
1247       if(GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) {\r
1248         if(!AlidNdPtHelper::IsGoodImpPar(track)) continue;\r
1249       }\r
1250       */\r
1251 \r
1252       //\r
1253       Bool_t isOK = kFALSE;\r
1254       Double_t x[3]; track->GetXYZ(x);\r
1255       Double_t b[3]; AliTracker::GetBxByBz(x,b);\r
1256 \r
1257       //\r
1258       // if TPC-ITS hybrid tracking (kTPCITSHybrid)\r
1259       // replace track parameters with TPC-ony track parameters\r
1260       //\r
1261       if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || \r
1262           GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
1263           GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) \r
1264       {\r
1265         // Relate TPC-only tracks to Track or SPD vertex\r
1266         isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);\r
1267         if(!isOK) continue;\r
1268 \r
1269         // replace esd track parameters with TPCinner\r
1270         AliExternalTrackParam  *tpcTrack  = new AliExternalTrackParam(*(track->GetTPCInnerParam()));\r
1271         if (!tpcTrack) return;\r
1272         track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());\r
1273 \r
1274         if(tpcTrack) delete tpcTrack; \r
1275       } \r
1276 \r
1277       FillHistograms(track,stack,AlidNdPtHelper::kAllTracks); \r
1278       labelsAll[multAll] = TMath::Abs(track->GetLabel());\r
1279       multAll++;\r
1280 \r
1281          //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks); \r
1282          //labelsAcc[multAcc] = TMath::Abs(track->GetLabel());\r
1283          //multAcc++;\r
1284       \r
1285          // check high-pt tracks\r
1286          if(accCuts->AcceptTrack(track) && track->Pt() > 6.)\r
1287          {\r
1288              //printf(" high pt: pt %f \n",track->Pt());\r
1289              highPtCount++;\r
1290          }\r
1291 \r
1292          // check cosmics tracks\r
1293          if( GetParticleMode()==AlidNdPtHelper::kCosmic )\r
1294          {\r
1295            if(accCuts->AcceptTrack(track)) \r
1296            { \r
1297              for(Int_t j=0; j<entries;++j) \r
1298              {\r
1299                AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);\r
1300                if(!track1) continue;\r
1301                if(track1->Charge()==0) continue;\r
1302 \r
1303                if( esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) \r
1304                { \r
1305                  if ( AlidNdPtHelper::IsCosmicTrack(track,track1) ) { \r
1306                    cosmicCount++;\r
1307                    break;\r
1308                  }\r
1309                }\r
1310              }\r
1311            }\r
1312           // if(!isCosmic) continue;\r
1313          }\r
1314 \r
1315          // update track parameters using vertex point \r
1316          if(GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate) {\r
1317            // update track parameters\r
1318              AliExternalTrackParam cParam;\r
1319              isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam);\r
1320              if(!isOK) continue;\r
1321              track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());\r
1322 \r
1323              if(accCuts->AcceptTrack(track)) {\r
1324 \r
1325                FillHistograms(track,stack,AlidNdPtHelper::kRecTracks); \r
1326                labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
1327                multRec++;\r
1328              }  \r
1329           }\r
1330           else {\r
1331              if(accCuts->AcceptTrack(track)) \r
1332              {\r
1333                //\r
1334                //if(track->GetKinkIndex(0) < 0) continue;\r
1335 \r
1336                FillHistograms(track,stack,AlidNdPtHelper::kRecTracks); \r
1337                labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
1338                multRec++;\r
1339 \r
1340                /*\r
1341                if(!multMCTrueTracks && IsUseMCInfo()) \r
1342                {\r
1343                  Int_t label = TMath::Abs(track->GetLabel()); \r
1344                  TParticle* particle = stack->Particle(label);\r
1345                  if(!particle) return;\r
1346 \r
1347                  Bool_t prim = stack->IsPhysicalPrimary(label);\r
1348                  if(!particle->GetPDG()) continue;\r
1349                  if((particle->GetPDG()->Charge()/3.) != 0 && multRec > 3) \r
1350                  {\r
1351                    printf("zero true mult event: %d \n", esdEvent->GetEventNumberInFile());\r
1352                    printf("mcVtx %f,  label %d, prim %d, mcpt %f, mceta %f, mcphi %f \n", vtxMC[2], label, prim, particle->Pt(), particle->Eta(), particle->Phi());\r
1353                    printf("zv %f, multRec %d, pt %f, eta %f, phi %f \n", vtxESD->GetZv(), multRec, track->Pt(), track->Eta(), track->Phi());\r
1354                  }\r
1355                }\r
1356                */\r
1357              }\r
1358           }\r
1359      }\r
1360      if(cosmicCount) \r
1361        //printf("COSMIC EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec);\r
1362 \r
1363      if(highPtCount) \r
1364        //printf("HIGH PT EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec);\r
1365 \r
1366      if(multRec > 30) \r
1367        //printf("HIGH MULT EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec);\r
1368 \r
1369      // fill track multiplicity histograms\r
1370      FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec);\r
1371 \r
1372      Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};\r
1373      fRecEventHist1->Fill(vRecEventHist1);\r
1374 \r
1375      Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,multRec};\r
1376      fRecEventHist2->Fill(vRecEventHist2);\r
1377    } \r
1378 \r
1379    if(IsUseMCInfo())  \r
1380    {\r
1381      /*\r
1382      //\r
1383      // multiplicity correlation matrix\r
1384      //\r
1385      // check multiplicity\r
1386      const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
1387      Int_t trackletMult = 0;\r
1388      if (mult) {\r
1389          for(Int_t i=0; i<mult->GetNumberOfTracklets(); i++) {\r
1390             if( TMath::Abs(mult->GetEta(i)) < accCuts->GetMaxEta() )\r
1391               trackletMult++;\r
1392          }\r
1393      }\r
1394      Double_t vMultTrueEventMatrix[2] = { trackletMult,multMCTrueTracks };\r
1395      */\r
1396      Double_t vMultTrueEventMatrix[2] = { multRec, multMCTrueTracks };\r
1397 \r
1398      if(isEventOK && isEventTriggered) {   \r
1399        if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted\r
1400          fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix);\r
1401      }\r
1402 \r
1403      // \r
1404      // event level corrections (zv,N_MB)\r
1405      //\r
1406 \r
1407      // all inelastic\r
1408      Double_t vEventMatrix[2] = {vtxMC[2],multMBTracks};\r
1409      fGenEventMatrix->Fill(vEventMatrix); \r
1410      if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix);\r
1411      if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix);\r
1412 \r
1413      // single diffractive\r
1414      if(evtType == AliPWG0Helper::kSD) {\r
1415        fGenSDEventMatrix->Fill(vEventMatrix); \r
1416        if(isEventTriggered) fTriggerSDEventMatrix->Fill(vEventMatrix);\r
1417        if(isEventOK && isEventTriggered) fRecSDEventMatrix->Fill(vEventMatrix);\r
1418      }\r
1419 \r
1420      // double diffractive\r
1421      if(evtType == AliPWG0Helper::kDD) {\r
1422        fGenDDEventMatrix->Fill(vEventMatrix); \r
1423        if(isEventTriggered) fTriggerDDEventMatrix->Fill(vEventMatrix);\r
1424        if(isEventOK && isEventTriggered)  fRecDDEventMatrix->Fill(vEventMatrix);\r
1425      }\r
1426 \r
1427      // non diffractive\r
1428      if(evtType == AliPWG0Helper::kND) {\r
1429        fGenNDEventMatrix->Fill(vEventMatrix); \r
1430        if(isEventTriggered) fTriggerNDEventMatrix->Fill(vEventMatrix);\r
1431        if(isEventOK && isEventTriggered) fRecNDEventMatrix->Fill(vEventMatrix);\r
1432      }\r
1433 \r
1434      // non single diffractive\r
1435      if(evtType != AliPWG0Helper::kSD) {\r
1436        fGenNSDEventMatrix->Fill(vEventMatrix); \r
1437        if(isEventTriggered) fTriggerNSDEventMatrix->Fill(vEventMatrix);\r
1438        if(isEventOK && isEventTriggered) fRecNSDEventMatrix->Fill(vEventMatrix);\r
1439      }\r
1440 \r
1441      //\r
1442      // track-event level corrections (zv,pt,eta)\r
1443      //\r
1444      for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) \r
1445      {\r
1446        TParticle* particle = stack->Particle(iMc);\r
1447        if (!particle)\r
1448        continue;\r
1449 \r
1450        // only charged particles\r
1451        if(!particle->GetPDG()) continue;\r
1452        Double_t charge = particle->GetPDG()->Charge()/3.;\r
1453        if ( TMath::Abs(charge) < 0.001 )\r
1454         continue;\r
1455 \r
1456        // only postive charged \r
1457        if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) \r
1458         continue;\r
1459        \r
1460        // only negative charged \r
1461        if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) \r
1462        continue;\r
1463       \r
1464        // physical primary\r
1465        Bool_t prim = stack->IsPhysicalPrimary(iMc);\r
1466        if(!prim) continue;\r
1467 \r
1468        // checked accepted\r
1469        if(accCuts->AcceptTrack(particle)) \r
1470        {\r
1471          Double_t vTrackEventMatrix[3] = {vtxMC[2], particle->Pt(), particle->Eta()}; \r
1472          fGenTrackEventMatrix->Fill(vTrackEventMatrix);\r
1473 \r
1474          if(evtType == AliPWG0Helper::kSD) {\r
1475            fGenTrackSDEventMatrix->Fill(vTrackEventMatrix);\r
1476          }\r
1477          if(evtType == AliPWG0Helper::kDD) {\r
1478            fGenTrackDDEventMatrix->Fill(vTrackEventMatrix);\r
1479          }\r
1480          if(evtType == AliPWG0Helper::kND) {\r
1481            fGenTrackNDEventMatrix->Fill(vTrackEventMatrix);\r
1482          }\r
1483          if(evtType != AliPWG0Helper::kSD) {\r
1484            fGenTrackNSDEventMatrix->Fill(vTrackEventMatrix);\r
1485          }\r
1486 \r
1487          //\r
1488          if(!isEventTriggered) continue;  \r
1489 \r
1490          fTriggerTrackEventMatrix->Fill(vTrackEventMatrix);\r
1491          if(evtType == AliPWG0Helper::kSD) {\r
1492            fTriggerTrackSDEventMatrix->Fill(vTrackEventMatrix);\r
1493          }\r
1494          if(evtType == AliPWG0Helper::kDD) {\r
1495            fTriggerTrackDDEventMatrix->Fill(vTrackEventMatrix);\r
1496          }\r
1497          if(evtType == AliPWG0Helper::kND) {\r
1498            fTriggerTrackNDEventMatrix->Fill(vTrackEventMatrix);\r
1499          }\r
1500          if(evtType != AliPWG0Helper::kSD) {\r
1501            fTriggerTrackNSDEventMatrix->Fill(vTrackEventMatrix);\r
1502          }\r
1503 \r
1504          //\r
1505          if(!isEventOK) continue;  \r
1506 \r
1507          fRecTrackEventMatrix->Fill(vTrackEventMatrix);\r
1508          if(evtType == AliPWG0Helper::kSD) {\r
1509            fRecTrackSDEventMatrix->Fill(vTrackEventMatrix);\r
1510          }\r
1511          if(evtType == AliPWG0Helper::kDD) {\r
1512            fRecTrackDDEventMatrix->Fill(vTrackEventMatrix);\r
1513          }\r
1514          if(evtType == AliPWG0Helper::kND) {\r
1515            fRecTrackNDEventMatrix->Fill(vTrackEventMatrix);\r
1516          }\r
1517          if(evtType != AliPWG0Helper::kSD) {\r
1518            fRecTrackNSDEventMatrix->Fill(vTrackEventMatrix);\r
1519          }\r
1520        }\r
1521      }\r
1522 \r
1523      // \r
1524      // track-level corrections (zv,pt,eta)\r
1525      //\r
1526      if(isEventOK && isEventTriggered)\r
1527      {\r
1528 \r
1529        // fill MC and rec event control histograms\r
1530        if(fHistogramsOn) {\r
1531          Double_t vRecMCEventHist1[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2]};\r
1532          fRecMCEventHist1->Fill(vRecMCEventHist1);\r
1533 \r
1534          Double_t vRecMCEventHist2[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks};\r
1535          fRecMCEventHist2->Fill(vRecMCEventHist2);\r
1536 \r
1537          Double_t vRecMCEventHist3[2] = {multRec,evtType};\r
1538          fRecMCEventHist3->Fill(vRecMCEventHist3);\r
1539        }\r
1540 \r
1541        //\r
1542        // MC histograms for track efficiency studies\r
1543        //\r
1544        for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) \r
1545        {\r
1546          TParticle* particle = stack->Particle(iMc);\r
1547          if (!particle)\r
1548          continue;\r
1549 \r
1550          Double_t vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()}; \r
1551 \r
1552          // all genertated primaries including neutral\r
1553          if( iMc < stack->GetNprimary() ) {\r
1554            //fGenTrackMatrix->Fill(vTrackMatrix);\r
1555          }\r
1556 \r
1557          // only charged particles\r
1558          if(!particle->GetPDG()) continue;\r
1559          Double_t charge = particle->GetPDG()->Charge()/3.;\r
1560          if (TMath::Abs(charge) < 0.001)\r
1561          continue;\r
1562 \r
1563          // only postive charged \r
1564          if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) \r
1565          continue;\r
1566        \r
1567          // only negative charged \r
1568          if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) \r
1569          continue;\r
1570       \r
1571          // physical primary\r
1572          Bool_t prim = stack->IsPhysicalPrimary(iMc);\r
1573 \r
1574          // check accepted\r
1575          if(accCuts->AcceptTrack(particle)) \r
1576          {\r
1577 \r
1578            if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) \r
1579              fGenPrimTrackMatrix->Fill(vTrackMatrix);\r
1580 \r
1581            // fill control histograms\r
1582            if(fHistogramsOn) \r
1583              FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks); \r
1584 \r
1585            // check multiple found tracks\r
1586            Int_t multCount = 0;\r
1587            for(Int_t iRec=0; iRec<multRec; ++iRec)\r
1588            {\r
1589              if(iMc == labelsRec[iRec]) \r
1590              {\r
1591                multCount++;\r
1592                if(multCount>1)\r
1593                {  \r
1594                  fRecMultTrackMatrix->Fill(vTrackMatrix);\r
1595 \r
1596                  // fill control histogram\r
1597                  if(fHistogramsOn) {\r
1598                    Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);\r
1599                    Double_t vMCMultRecTrackHist1[3] = {particle->Pt(), particle->Eta(), pid};\r
1600                    fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1);\r
1601                  }\r
1602                }\r
1603              }\r
1604            }\r
1605 \r
1606            // check reconstructed\r
1607            for(Int_t iRec=0; iRec<multRec; ++iRec)\r
1608            {\r
1609              if(iMc == labelsRec[iRec]) \r
1610              {\r
1611                fRecTrackMatrix->Fill(vTrackMatrix);\r
1612 \r
1613                if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) {\r
1614                  fRecPrimTrackMatrix->Fill(vTrackMatrix);\r
1615                  //AliESDtrack *track = esdEvent->GetTrack(iRec);\r
1616                  //if(track && track->GetKinkIndex(0) < 0) \r
1617                  //  printf("prim kink \n");\r
1618                }\r
1619 \r
1620                if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix);\r
1621 \r
1622                // fill control histograms\r
1623                if(fHistogramsOn) \r
1624                  FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks); \r
1625               \r
1626                break;\r
1627              }\r
1628            }\r
1629          }\r
1630        }\r
1631      }\r
1632    } // end bUseMC\r
1633 \r
1634   if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;\r
1635   if(labelsAll) delete [] labelsAll; labelsAll = 0;\r
1636   if(labelsAcc) delete [] labelsAcc; labelsAcc = 0;\r
1637   if(labelsRec) delete [] labelsRec; labelsRec = 0;\r
1638 \r
1639   if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;\r
1640   //if(trigAna) delete trigAna;\r
1641 \r
1642 }\r
1643 \r
1644 //_____________________________________________________________________________\r
1645 void AlidNdPtAnalysis::FillHistograms(TObjArray *const allChargedTracks,Int_t *const labelsAll,Int_t multAll,Int_t *const labelsAcc,Int_t multAcc,Int_t *const labelsRec,Int_t multRec) {\r
1646  // multiplicity  histograms\r
1647  \r
1648   if(!allChargedTracks) return;\r
1649   if(!labelsAll) return;\r
1650   if(!labelsAcc) return;\r
1651   if(!labelsRec) return;\r
1652 \r
1653   Int_t entries = allChargedTracks->GetEntries();\r
1654   for(Int_t i=0; i<entries; ++i)\r
1655   {\r
1656      AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);\r
1657      if(!track) continue;\r
1658      if(track->Charge() == 0) continue;\r
1659 \r
1660      Int_t label = TMath::Abs(track->GetLabel());\r
1661      for(Int_t iAll=0; iAll<multAll; ++iAll) {\r
1662        if(label == labelsAll[iAll]) {\r
1663          Double_t v1[2] = {track->Pt(), multAll}; \r
1664          fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1);\r
1665        }\r
1666      }\r
1667      for(Int_t iAcc=0; iAcc<multAcc; ++iAcc) {\r
1668        if(label == labelsAcc[iAcc]) {\r
1669          Double_t v2[2] = {track->Pt(), multAcc}; \r
1670          fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2);\r
1671        }\r
1672      }\r
1673      for(Int_t iRec=0; iRec<multRec; ++iRec) {\r
1674        if(label == labelsRec[iRec]) {\r
1675          Double_t v3[2] = {track->Pt(), multRec}; \r
1676          fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3);\r
1677        }\r
1678      }\r
1679   }\r
1680 }\r
1681 \r
1682 //_____________________________________________________________________________\r
1683 void AlidNdPtAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, AlidNdPtHelper::TrackObject trackObj)\r
1684 {\r
1685   //\r
1686   // Fill ESD track and MC histograms \r
1687   //\r
1688   if(!esdTrack) return;\r
1689 \r
1690   Float_t q = esdTrack->Charge();\r
1691   if(TMath::Abs(q) < 0.001) return;\r
1692 \r
1693   Float_t pt = esdTrack->Pt();\r
1694   //Float_t qpt = esdTrack->Pt() * q;\r
1695   Float_t eta = esdTrack->Eta();\r
1696   Float_t phi = esdTrack->Phi();\r
1697 \r
1698   Float_t dca[2], bCov[3];\r
1699   esdTrack->GetImpactParameters(dca,bCov);\r
1700 \r
1701   Int_t nClust = esdTrack->GetTPCclusters(0);\r
1702   Float_t chi2PerCluster = 0.;\r
1703   if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust);\r
1704 \r
1705 \r
1706   // fill histograms\r
1707   Double_t values[3] = {pt,eta,phi};      \r
1708   fRecTrackHist1[trackObj]->Fill(values);\r
1709 \r
1710   /*\r
1711   Double_t values1[5] = {nClust,chi2PerCluster,pt,eta,phi};       \r
1712   if(trackObj == AlidNdPtHelper::kRecTracks)  \r
1713   {\r
1714     if(fHistogramsOn)\r
1715       fRecTrackHist2->Fill(values1);\r
1716   }\r
1717   */\r
1718  \r
1719   //\r
1720   // Fill rec vs MC information\r
1721   //\r
1722   if(!stack) return;\r
1723 \r
1724   Int_t label = TMath::Abs(esdTrack->GetLabel()); \r
1725   //if(label == 0) return;\r
1726 \r
1727   TParticle* particle = stack->Particle(label);\r
1728   if(!particle) return;\r
1729 \r
1730   //Bool_t prim = stack->IsPhysicalPrimary(label);\r
1731   //Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);\r
1732 \r
1733   Int_t motherPdg = -1;\r
1734   TParticle* mother = 0;\r
1735 \r
1736   //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);\r
1737   Int_t motherLabel = particle->GetMother(0); \r
1738   if(motherLabel>0) mother = stack->Particle(motherLabel);\r
1739   if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
1740   //Int_t mech = particle->GetUniqueID(); // production mechanism\r
1741 \r
1742   if(!particle->GetPDG()) return;\r
1743   Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 \r
1744   if(TMath::Abs(gq)<0.001) return;\r
1745   Float_t gpt = particle->Pt();\r
1746   Float_t geta = particle->Eta();\r
1747   //Float_t qgpt = particle->Pt() * gq;\r
1748   //Float_t gphi = particle->Phi();\r
1749 \r
1750   Double_t dpt=0;\r
1751   //printf("pt %f, gpt %f \n",pt,gpt);\r
1752   if(gpt) dpt = (pt-gpt)/gpt;\r
1753   Double_t deta = (eta-geta);\r
1754  \r
1755   // fill histograms\r
1756   if(trackObj == AlidNdPtHelper::kRecTracks)  \r
1757   {\r
1758     Double_t vTrackPtCorrelationMatrix[3]={pt,gpt,geta};\r
1759     fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix);\r
1760 \r
1761     Double_t vRecMCTrackHist1[4]={gpt,geta,dpt,deta};\r
1762     fRecMCTrackHist1->Fill(vRecMCTrackHist1);\r
1763   }\r
1764 }\r
1765 \r
1766 //_____________________________________________________________________________\r
1767 void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj)\r
1768 {\r
1769   // Fill MC histograms\r
1770   if(!stack) return;\r
1771 \r
1772   TParticle* particle = stack->Particle(label);\r
1773   if(!particle) return;\r
1774 \r
1775   Int_t motherPdg = -1;\r
1776   TParticle* mother = 0;\r
1777 \r
1778   //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);\r
1779   Int_t motherLabel = particle->GetMother(0); \r
1780   if(motherLabel>0) mother = stack->Particle(motherLabel);\r
1781   if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
1782   Int_t mech = particle->GetUniqueID(); // production mechanism\r
1783 \r
1784   if(!particle->GetPDG()) return;\r
1785   Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 \r
1786   if(TMath::Abs(gq) < 0.001) return;\r
1787 \r
1788   Float_t gpt = particle->Pt();\r
1789   //Float_t qgpt = particle->Pt() * gq;\r
1790   Float_t geta = particle->Eta();\r
1791   Float_t gphi = particle->Phi();\r
1792   //Float_t gpz = particle->Pz();\r
1793 \r
1794   Bool_t prim = stack->IsPhysicalPrimary(label);\r
1795   //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();\r
1796 \r
1797   Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);\r
1798 \r
1799   //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech);\r
1800   //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech);\r
1801   \r
1802   //\r
1803   // fill histogram\r
1804   //\r
1805   Double_t vMCTrackHist1[3] = {gpt,geta,gphi};\r
1806   fMCTrackHist1[trackObj]->Fill(vMCTrackHist1);\r
1807 \r
1808   Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg};\r
1809   Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg};\r
1810   //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
1811   if(prim) { \r
1812     fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
1813     if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2);\r
1814   }\r
1815   else { \r
1816     fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
1817   }\r
1818 \r
1819 }\r
1820 \r
1821 //_____________________________________________________________________________\r
1822 Long64_t AlidNdPtAnalysis::Merge(TCollection* const list) \r
1823 {\r
1824   // Merge list of objects (needed by PROOF)\r
1825 \r
1826   if (!list)\r
1827   return 0;\r
1828 \r
1829   if (list->IsEmpty())\r
1830   return 1;\r
1831 \r
1832   TIterator* iter = list->MakeIterator();\r
1833   TObject* obj = 0;\r
1834 \r
1835   //\r
1836   TList *collPhysSelection = new TList;\r
1837 \r
1838   // collection of generated histograms\r
1839 \r
1840   Int_t count=0;\r
1841   while((obj = iter->Next()) != 0) {\r
1842     AlidNdPtAnalysis* entry = dynamic_cast<AlidNdPtAnalysis*>(obj);\r
1843     if (entry == 0) continue; \r
1844 \r
1845     // physics selection\r
1846     //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection());\r
1847     collPhysSelection->Add(entry->GetPhysicsTriggerSelection());\r
1848     \r
1849     //\r
1850     fEventMultCorrelationMatrix->Add(entry->fEventMultCorrelationMatrix);\r
1851     fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix);\r
1852 \r
1853     //\r
1854     fGenEventMatrix->Add(entry->fGenEventMatrix);\r
1855     fGenSDEventMatrix->Add(entry->fGenSDEventMatrix);\r
1856     fGenDDEventMatrix->Add(entry->fGenDDEventMatrix);\r
1857     fGenNDEventMatrix->Add(entry->fGenNDEventMatrix);\r
1858     fGenNSDEventMatrix->Add(entry->fGenNSDEventMatrix);\r
1859 \r
1860     fTriggerEventMatrix->Add(entry->fTriggerEventMatrix);\r
1861     fTriggerSDEventMatrix->Add(entry->fTriggerSDEventMatrix);\r
1862     fTriggerDDEventMatrix->Add(entry->fTriggerDDEventMatrix);\r
1863     fTriggerNDEventMatrix->Add(entry->fTriggerNDEventMatrix);\r
1864     fTriggerNSDEventMatrix->Add(entry->fTriggerNSDEventMatrix);\r
1865 \r
1866     fRecEventMatrix->Add(entry->fRecEventMatrix);\r
1867     fRecSDEventMatrix->Add(entry->fRecSDEventMatrix);\r
1868     fRecDDEventMatrix->Add(entry->fRecDDEventMatrix);\r
1869     fRecNDEventMatrix->Add(entry->fRecNDEventMatrix);\r
1870     fRecNSDEventMatrix->Add(entry->fRecNSDEventMatrix);\r
1871 \r
1872     //\r
1873     fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix);\r
1874     fGenTrackSDEventMatrix->Add(entry->fGenTrackSDEventMatrix);\r
1875     fGenTrackDDEventMatrix->Add(entry->fGenTrackDDEventMatrix);\r
1876     fGenTrackNDEventMatrix->Add(entry->fGenTrackNDEventMatrix);\r
1877     fGenTrackNSDEventMatrix->Add(entry->fGenTrackNSDEventMatrix);\r
1878 \r
1879     fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix);\r
1880     fTriggerTrackSDEventMatrix->Add(entry->fTriggerTrackSDEventMatrix);\r
1881     fTriggerTrackDDEventMatrix->Add(entry->fTriggerTrackDDEventMatrix);\r
1882     fTriggerTrackNDEventMatrix->Add(entry->fTriggerTrackNDEventMatrix);\r
1883     fTriggerTrackNSDEventMatrix->Add(entry->fTriggerTrackNSDEventMatrix);\r
1884 \r
1885     fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix);\r
1886     fRecTrackSDEventMatrix->Add(entry->fRecTrackSDEventMatrix);\r
1887     fRecTrackDDEventMatrix->Add(entry->fRecTrackDDEventMatrix);\r
1888     fRecTrackNDEventMatrix->Add(entry->fRecTrackNDEventMatrix);\r
1889     fRecTrackNSDEventMatrix->Add(entry->fRecTrackNSDEventMatrix);\r
1890 \r
1891     //\r
1892     fGenTrackMatrix->Add(entry->fGenTrackMatrix);\r
1893     fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix);\r
1894     fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix);\r
1895     //\r
1896     fRecTrackMatrix->Add(entry->fRecTrackMatrix);\r
1897     fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix);\r
1898     //\r
1899     fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix);\r
1900 \r
1901     //\r
1902     // control analysis histograms\r
1903     //\r
1904     fMCEventHist1->Add(entry->fMCEventHist1);\r
1905     fRecEventHist1->Add(entry->fRecEventHist1);\r
1906     fRecEventHist2->Add(entry->fRecEventHist2);\r
1907     fRecMCEventHist1->Add(entry->fRecMCEventHist1);\r
1908     fRecMCEventHist2->Add(entry->fRecMCEventHist2);\r
1909     fRecMCEventHist3->Add(entry->fRecMCEventHist3);\r
1910 \r
1911     for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {\r
1912       fMCTrackHist1[i]->Add(entry->fMCTrackHist1[i]);\r
1913 \r
1914       fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]);\r
1915       fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]);\r
1916       fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]);\r
1917 \r
1918       fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);\r
1919       fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]);\r
1920     }\r
1921     fRecMCTrackHist1->Add(entry->fRecMCTrackHist1);\r
1922     fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1);\r
1923     fRecTrackHist2->Add(entry->fRecTrackHist2);\r
1924 \r
1925   count++;\r
1926   }\r
1927 \r
1928   AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();\r
1929   trigSelection->Merge(collPhysSelection);\r
1930   if(collPhysSelection) delete collPhysSelection;\r
1931 \r
1932 return count;\r
1933 }\r
1934 \r
1935 //____________________________________________________________________\r
1936 Bool_t AlidNdPtAnalysis::IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent) {\r
1937 //\r
1938 // check 0-bin\r
1939 // for LHC background calculation\r
1940 // return kTRUE if vertex not reconstructed or\r
1941 // track multiplicity == 0\r
1942 //\r
1943 if(!esdEvent) return kFALSE;\r
1944 \r
1945   // check vertex\r
1946   const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks();\r
1947   if(!vertex) return kTRUE;\r
1948 \r
1949   if(vertex->GetNContributors() < 1) {\r
1950     // SPD vertex\r
1951     vertex = esdEvent->GetPrimaryVertexSPD();\r
1952     if(!vertex) return kTRUE;\r
1953   }\r
1954   if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; \r
1955   if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCITSHybridTrackSPDvtx) ) \r
1956     return kTRUE;\r
1957  \r
1958 return kFALSE;\r
1959 }\r
1960 \r
1961 //____________________________________________________________________\r
1962 Bool_t AlidNdPtAnalysis::IsBinZeroSPDvtx(const AliESDEvent* esdEvent) {\r
1963 //\r
1964 // check 0-bin\r
1965 // for LHC background calculation\r
1966 // return kTRUE if vertex not reconstructed or\r
1967 // tracklet multiplicity == 0\r
1968 //\r
1969 if(!esdEvent) return kFALSE;\r
1970 \r
1971   // check vertex\r
1972   const AliESDVertex* vertex = esdEvent->GetPrimaryVertexSPD();\r
1973   if(!vertex) return kTRUE;\r
1974   if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; \r
1975   if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCSPDvtx) ) return kTRUE;\r
1976  \r
1977 return kFALSE;\r
1978 }\r
1979 \r
1980 //_____________________________________________________________________________\r
1981 void AlidNdPtAnalysis::Analyse() \r
1982 {\r
1983   // Analyse histograms\r
1984   //\r
1985   TH1::AddDirectory(kFALSE);\r
1986   TH1 *h=0, *h1=0, *h2=0, *h2c = 0; \r
1987   THnSparse *hs=0; \r
1988   TH2 *h2D=0; \r
1989 \r
1990   char name[256];\r
1991   TObjArray *aFolderObj = new TObjArray;\r
1992   \r
1993   //\r
1994   // LHC backgraund in all and 0-bins\r
1995   //\r
1996   AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();\r
1997   trigSel->SaveHistograms("physics_selection");\r
1998 \r
1999   //\r
2000   // Reconstructed event vertex\r
2001   //\r
2002   h = fRecEventHist1->Projection(0);\r
2003   h->SetName("Xv");\r
2004   aFolderObj->Add(h);\r
2005 \r
2006   h = fRecEventHist1->Projection(1);\r
2007   h->SetName("Yv");\r
2008   aFolderObj->Add(h);\r
2009 \r
2010   h = fRecEventHist1->Projection(2);\r
2011   h->SetName("Zv");\r
2012   aFolderObj->Add(h);\r
2013 \r
2014   //\r
2015   // multiplicity\r
2016   //\r
2017   h = fRecEventHist2->Projection(1);\r
2018   h->SetName("multMB");\r
2019   aFolderObj->Add(h);\r
2020 \r
2021   h = fRecEventHist2->Projection(2);\r
2022   h->SetName("multiplicity");\r
2023   aFolderObj->Add(h);\r
2024 \r
2025   h2D = fRecEventHist2->Projection(0,1); \r
2026   h2D->SetName("Zv_vs_multiplicity_MB");\r
2027   aFolderObj->Add(h2D);\r
2028 \r
2029   //\r
2030   // reconstructed pt histograms\r
2031   //\r
2032   h = fRecTrackHist1[0]->Projection(0);\r
2033   h->Scale(1.,"width");\r
2034   h->SetName("pt_all_ch");\r
2035   aFolderObj->Add(h);\r
2036 \r
2037   h = fRecTrackHist1[1]->Projection(0);\r
2038   h->Scale(1.,"width");\r
2039   h->SetName("pt_acc");\r
2040   aFolderObj->Add(h);\r
2041 \r
2042   h = fRecTrackHist1[2]->Projection(0);\r
2043   h->Scale(1.,"width");\r
2044   h->SetName("pt_rec");\r
2045   aFolderObj->Add(h);\r
2046 \r
2047   //\r
2048   // reconstructed eta histograms\r
2049   //\r
2050   h = fRecTrackHist1[0]->Projection(1);\r
2051   h->SetName("eta_all_ch");\r
2052   aFolderObj->Add(h);\r
2053 \r
2054   h = fRecTrackHist1[1]->Projection(1);\r
2055   h->SetName("eta_acc");\r
2056   aFolderObj->Add(h);\r
2057 \r
2058   h = fRecTrackHist1[2]->Projection(1);\r
2059   h->SetName("eta_rec");\r
2060   aFolderObj->Add(h);\r
2061 \r
2062   //\r
2063   // reconstructed phi histograms\r
2064   //\r
2065   h = fRecTrackHist1[0]->Projection(2);\r
2066   h->SetName("phi_all_ch");\r
2067   aFolderObj->Add(h);\r
2068 \r
2069   h = fRecTrackHist1[1]->Projection(2);\r
2070   h->SetName("phi_acc");\r
2071   aFolderObj->Add(h);\r
2072 \r
2073   h = fRecTrackHist1[2]->Projection(2);\r
2074   h->SetName("phi_rec");\r
2075   aFolderObj->Add(h);\r
2076 \r
2077   //\r
2078   // reconstructed eta:pt histograms\r
2079   //\r
2080   h2D = fRecTrackHist1[0]->Projection(1,0);\r
2081   h2D->SetName("pt_eta_all_ch");\r
2082   aFolderObj->Add(h2D);\r
2083 \r
2084   h2D = fRecTrackHist1[1]->Projection(1,0);\r
2085   h2D->SetName("pt_eta_acc");\r
2086   aFolderObj->Add(h2D);\r
2087 \r
2088   h2D = fRecTrackHist1[2]->Projection(1,0);\r
2089   h2D->SetName("pt_eta_rec");\r
2090   aFolderObj->Add(h2D);\r
2091 \r
2092   //\r
2093   // reconstructed phi:pt histograms\r
2094   //\r
2095   h2D = fRecTrackHist1[0]->Projection(2,0);\r
2096   h2D->SetName("pt_phi_all_ch");\r
2097   aFolderObj->Add(h2D);\r
2098 \r
2099   h2D = fRecTrackHist1[1]->Projection(2,0);\r
2100   h2D->SetName("pt_phi_acc");\r
2101   aFolderObj->Add(h2D);\r
2102 \r
2103   h2D = fRecTrackHist1[2]->Projection(2,0);\r
2104   h2D->SetName("pt_phi_rec");\r
2105   aFolderObj->Add(h2D);\r
2106 \r
2107   //\r
2108   // reconstructed phi:eta histograms\r
2109   //\r
2110   h2D = fRecTrackHist1[0]->Projection(2,1);\r
2111   h2D->SetName("eta_phi_all_ch");\r
2112   aFolderObj->Add(h2D);\r
2113 \r
2114   h2D = fRecTrackHist1[1]->Projection(2,1);\r
2115   h2D->SetName("eta_phi_acc");\r
2116   aFolderObj->Add(h2D);\r
2117 \r
2118   h2D = fRecTrackHist1[2]->Projection(2,1);\r
2119   h2D->SetName("eta_phi_rec");\r
2120   aFolderObj->Add(h2D);\r
2121 \r
2122   //\r
2123   // reconstructed nClust, chi2 vs pt, eta, phi\r
2124   //\r
2125   if(fHistogramsOn) {\r
2126 \r
2127     h2D = fRecTrackHist2->Projection(0,1);\r
2128     h2D->SetName("nClust_chi2_rec");\r
2129     aFolderObj->Add(h2D);\r
2130 \r
2131     h2D = fRecTrackHist2->Projection(0,2);\r
2132     h2D->SetName("nClust_pt_rec");\r
2133     aFolderObj->Add(h2D);\r
2134 \r
2135     h2D = fRecTrackHist2->Projection(0,3);\r
2136     h2D->SetName("nClust_eta_rec");\r
2137     aFolderObj->Add(h2D);\r
2138 \r
2139     h2D = fRecTrackHist2->Projection(0,4);\r
2140     h2D->SetName("nClust_phi_rec");\r
2141     aFolderObj->Add(h2D);\r
2142 \r
2143     h2D = fRecTrackHist2->Projection(1,2);\r
2144     h2D->SetName("chi2_pt_rec");\r
2145     aFolderObj->Add(h2D);\r
2146 \r
2147     h2D = fRecTrackHist2->Projection(1,3);\r
2148     h2D->SetName("chi2_eta_rec");\r
2149     aFolderObj->Add(h2D);\r
2150 \r
2151     h2D = fRecTrackHist2->Projection(1,4);\r
2152     h2D->SetName("chi2_phi_rec");\r
2153     aFolderObj->Add(h2D);\r
2154 \r
2155   }\r
2156 \r
2157   //\r
2158   // calculate corrections for empty events\r
2159   // with multMB==0 \r
2160   //\r
2161 \r
2162   //\r
2163   // normalised zv to generate zv for triggered events\r
2164   //\r
2165   h = fRecEventHist2->Projection(0);\r
2166   if( h->Integral() ) h->Scale(1./h->Integral());\r
2167   h->SetName("zv_distribution_norm");\r
2168   aFolderObj->Add(h);\r
2169  \r
2170   //\r
2171   // MC available\r
2172   //\r
2173   if(IsUseMCInfo()) {\r
2174 \r
2175   //\r
2176   // Event vertex resolution\r
2177   //\r
2178   h2D = fRecMCEventHist2->Projection(0,2);\r
2179   h2D->SetName("DeltaXv_vs_mult");\r
2180   aFolderObj->Add(h2D);\r
2181 \r
2182   h2D = fRecMCEventHist2->Projection(1,2);\r
2183   h2D->SetName("DeltaZv_vs_mult");\r
2184   aFolderObj->Add(h2D);\r
2185 \r
2186   //\r
2187   // normalised zv to get trigger/trigger+vertex event differences\r
2188   // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv)\r
2189   //\r
2190   fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.);\r
2191   h = fTriggerEventMatrix->Projection(0);\r
2192   h2D = fTriggerEventMatrix->Projection(0,1);\r
2193   if(h2D->Integral()) h->Scale(1./h2D->Integral());\r
2194 \r
2195   h1 = fRecEventMatrix->Projection(0);\r
2196   h2D = fRecEventMatrix->Projection(0,1);\r
2197   if(h2D->Integral()) h1->Scale(1./h2D->Integral());\r
2198 \r
2199   h->Divide(h1);\r
2200   h->SetName("zv_empty_events_norm");\r
2201   aFolderObj->Add(h);\r
2202   \r
2203   fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins());\r
2204 \r
2205   //\r
2206   // rec. vs true multiplicity correlation matrix\r
2207   //\r
2208   hs = (THnSparse*)fEventMultCorrelationMatrix->Clone("event_mult_correlation_matrix");\r
2209   aFolderObj->Add(hs);\r
2210  \r
2211   //\r
2212   // rec. vs true track pt correlation matrix\r
2213   //\r
2214   hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix");\r
2215   aFolderObj->Add(hs);\r
2216 \r
2217   //\r
2218   // trigger efficiency for INEL\r
2219   //\r
2220   h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix");\r
2221   aFolderObj->Add(h);\r
2222 \r
2223   //\r
2224   // trigger efficiency for NSD\r
2225   //\r
2226   h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerNSDEventMatrix->Projection(0),fGenNSDEventMatrix->Projection(0),"zv_trig_NSD_eff_matrix");\r
2227   aFolderObj->Add(h);\r
2228 \r
2229   //\r
2230   // trigger bias correction (MB to ND)\r
2231   //\r
2232   hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoND_corr_matrix");\r
2233   aFolderObj->Add(hs);\r
2234 \r
2235   h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoND_corr_matrix");\r
2236   aFolderObj->Add(h);\r
2237 \r
2238 \r
2239   h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoND_corr_matrix");\r
2240 \r
2241   aFolderObj->Add(h);\r
2242 \r
2243   //\r
2244   // trigger bias correction (MB to NSD)\r
2245   //\r
2246   hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoNSD_corr_matrix");\r
2247   aFolderObj->Add(hs);\r
2248 \r
2249   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoNSD_corr_matrix_2D");\r
2250   aFolderObj->Add(h2D);\r
2251 \r
2252   h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoNSD_corr_matrix");\r
2253   aFolderObj->Add(h);\r
2254 \r
2255 \r
2256   h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoNSD_corr_matrix");\r
2257   aFolderObj->Add(h);\r
2258 \r
2259 \r
2260   //\r
2261   // trigger bias correction (MB to INEL)\r
2262   //\r
2263   hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix");\r
2264   aFolderObj->Add(hs);\r
2265 \r
2266   h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix");\r
2267   aFolderObj->Add(h);\r
2268 \r
2269   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D");\r
2270   aFolderObj->Add(h2D);\r
2271 \r
2272 \r
2273   h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix");\r
2274   aFolderObj->Add(h);\r
2275 \r
2276 \r
2277   //\r
2278   // event vertex reconstruction correction (MB)\r
2279   //\r
2280   hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix");\r
2281   aFolderObj->Add(hs);\r
2282 \r
2283   h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D");\r
2284   aFolderObj->Add(h2D);\r
2285 \r
2286 \r
2287   h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix");\r
2288   aFolderObj->Add(h);\r
2289 \r
2290 \r
2291   h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix");\r
2292   aFolderObj->Add(h);\r
2293 \r
2294   //\r
2295   // track-event trigger bias correction (MB to ND)\r
2296   //\r
2297 \r
2298   hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoND_corr_matrix");\r
2299   aFolderObj->Add(hs);\r
2300 \r
2301   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoND_corr_matrix");\r
2302   aFolderObj->Add(h2D);\r
2303 \r
2304   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoND_corr_matrix");\r
2305   aFolderObj->Add(h2D);\r
2306 \r
2307   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoND_corr_matrix");\r
2308   aFolderObj->Add(h2D);\r
2309 \r
2310   //\r
2311   // track-event trigger bias correction (MB to NSD)\r
2312   //\r
2313   hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoNSD_corr_matrix");\r
2314   aFolderObj->Add(hs);\r
2315 \r
2316   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoNSD_corr_matrix");\r
2317   aFolderObj->Add(h2D);\r
2318 \r
2319   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoNSD_corr_matrix");\r
2320   aFolderObj->Add(h2D);\r
2321 \r
2322   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoNSD_corr_matrix");\r
2323   aFolderObj->Add(h2D);\r
2324 \r
2325 \r
2326   //\r
2327   // track-event trigger bias correction (MB to INEL)\r
2328   //\r
2329   hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix");\r
2330   aFolderObj->Add(hs);\r
2331 \r
2332   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix");\r
2333   aFolderObj->Add(h2D);\r
2334 \r
2335   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix");\r
2336   aFolderObj->Add(h2D);\r
2337 \r
2338   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix");\r
2339   aFolderObj->Add(h2D);\r
2340 \r
2341   // efficiency\r
2342 \r
2343   h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix");\r
2344   aFolderObj->Add(h);\r
2345 \r
2346 \r
2347   //\r
2348   // track-event vertex reconstruction correction (MB)\r
2349   //\r
2350   hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix");\r
2351   aFolderObj->Add(hs);\r
2352 \r
2353   h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix");\r
2354   aFolderObj->Add(h2D);\r
2355 \r
2356   h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix");\r
2357   aFolderObj->Add(h2D);\r
2358 \r
2359   h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix");\r
2360   aFolderObj->Add(h2D);\r
2361   \r
2362   // efficiency\r
2363 \r
2364   h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix");\r
2365   aFolderObj->Add(h);\r
2366 \r
2367 \r
2368   //\r
2369   // track rec. efficiency correction\r
2370   //\r
2371   hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix");\r
2372   aFolderObj->Add(hs);\r
2373 \r
2374   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix");\r
2375   aFolderObj->Add(h2D);\r
2376 \r
2377   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix");\r
2378   aFolderObj->Add(h2D);\r
2379 \r
2380   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix");\r
2381   aFolderObj->Add(h2D);\r
2382 \r
2383   \r
2384   h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix");\r
2385   aFolderObj->Add(h);\r
2386 \r
2387   h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix");\r
2388   aFolderObj->Add(h);\r
2389 \r
2390   // efficiency\r
2391 \r
2392   h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix");\r
2393   aFolderObj->Add(h);\r
2394 \r
2395   h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix");\r
2396   aFolderObj->Add(h);\r
2397 \r
2398   //\r
2399   // secondary track contamination correction\r
2400   //\r
2401   //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");\r
2402   hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");\r
2403   aFolderObj->Add(hs);\r
2404 \r
2405   h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix");\r
2406   aFolderObj->Add(h2D);\r
2407 \r
2408   h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix");\r
2409   aFolderObj->Add(h2D);\r
2410 \r
2411   h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix");\r
2412   aFolderObj->Add(h2D);\r
2413 \r
2414   h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix");\r
2415   aFolderObj->Add(h);\r
2416 \r
2417 \r
2418   h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix");\r
2419   aFolderObj->Add(h);\r
2420 \r
2421   h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix");\r
2422   aFolderObj->Add(h);\r
2423 \r
2424   //\r
2425   // multiple track reconstruction correction\r
2426   //\r
2427   //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");\r
2428   hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");\r
2429   aFolderObj->Add(hs);\r
2430 \r
2431   h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix");\r
2432   aFolderObj->Add(h2D);\r
2433 \r
2434   h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix");\r
2435   aFolderObj->Add(h2D);\r
2436 \r
2437   h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix");\r
2438   aFolderObj->Add(h2D);\r
2439 \r
2440   h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix");\r
2441   aFolderObj->Add(h);\r
2442 \r
2443   h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix");\r
2444   aFolderObj->Add(h);\r
2445 \r
2446   h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix");\r
2447   aFolderObj->Add(h);\r
2448 \r
2449   //\r
2450   // Control histograms\r
2451   //\r
2452   \r
2453   if(fHistogramsOn) {\r
2454 \r
2455   // Efficiency electrons, muons, pions, kaons, protons, all\r
2456   fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1); \r
2457   fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1); \r
2458   h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2459   h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2460   h2c = (TH1D *)h2->Clone();\r
2461   h2c->Divide(h1);\r
2462   h2c->SetName("eff_pt_electrons");\r
2463   aFolderObj->Add(h2c);\r
2464 \r
2465   fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2); \r
2466   fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2); \r
2467   h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2468   h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2469   h2c = (TH1D *)h2->Clone();\r
2470   h2c->Divide(h1);\r
2471   h2c->SetName("eff_pt_muons");\r
2472   aFolderObj->Add(h2c);\r
2473 \r
2474   fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3); \r
2475   fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3); \r
2476   h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2477   h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2478   h2c = (TH1D *)h2->Clone();\r
2479   h2c->Divide(h1);\r
2480   h2c->SetName("eff_pt_pions");\r
2481   aFolderObj->Add(h2c);\r
2482 \r
2483   fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4); \r
2484   fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4); \r
2485   h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2486   h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2487   h2c = (TH1D *)h2->Clone();\r
2488   h2c->Divide(h1);\r
2489   h2c->SetName("eff_pt_kaons");\r
2490   aFolderObj->Add(h2c);\r
2491 \r
2492   fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5); \r
2493   fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5); \r
2494   h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2495   h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2496   h2c = (TH1D *)h2->Clone();\r
2497   h2c->Divide(h1);\r
2498   h2c->SetName("eff_pt_protons");\r
2499   aFolderObj->Add(h2c);\r
2500 \r
2501   fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5); \r
2502   fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5); \r
2503   h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2504   h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2505   h2c = (TH1D *)h2->Clone();\r
2506   h2c->Divide(h1);\r
2507   h2c->SetName("eff_pt_selected");\r
2508   aFolderObj->Add(h2c);\r
2509 \r
2510   fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6); \r
2511   fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6); \r
2512   h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2513   h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2514   h2c = (TH1D *)h2->Clone();\r
2515   h2c->Divide(h1);\r
2516   h2c->SetName("eff_pt_all");\r
2517   aFolderObj->Add(h2c);\r
2518 \r
2519   fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins()); \r
2520   fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins());\r
2521 \r
2522   //  pt spetra\r
2523   // - rec, primaries, secondaries\r
2524   // - primaries (pid) \r
2525   // - secondaries (pid)\r
2526   // - secondaries (mech)\r
2527   // - secondaries (mother)\r
2528   //\r
2529 \r
2530   TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0);\r
2531   mcPtAccall->SetName("mc_pt_acc_all");\r
2532   aFolderObj->Add(mcPtAccall);\r
2533 \r
2534   TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0);\r
2535   mcPtAccprim->SetName("mc_pt_acc_prim");\r
2536   aFolderObj->Add(mcPtAccprim);\r
2537 \r
2538   TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0);\r
2539   mcPtRecall->SetName("mc_pt_rec_all");\r
2540   aFolderObj->Add(mcPtRecall);\r
2541 \r
2542   TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0);\r
2543   mcPtRecprim->SetName("mc_pt_rec_prim");\r
2544   aFolderObj->Add(mcPtRecprim);\r
2545 \r
2546   TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0);\r
2547   mcPtRecsec->SetName("mc_pt_rec_sec");\r
2548   aFolderObj->Add(mcPtRecsec);\r
2549 \r
2550   for(Int_t i = 0; i<6; i++) \r
2551   { \r
2552     sprintf(name,"mc_pt_rec_prim_pid_%d",i); \r
2553     fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);\r
2554     h = fMCPrimTrackHist1[2]->Projection(0);\r
2555     h->SetName(name);\r
2556     aFolderObj->Add(h);\r
2557 \r
2558     sprintf(name,"mc_pt_rec_sec_pid_%d",i); \r
2559     fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);\r
2560     h = fMCSecTrackHist1[2]->Projection(0);\r
2561     h->SetName(name);\r
2562     aFolderObj->Add(h);\r
2563 \r
2564     // production mechanisms for given pid\r
2565     fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);\r
2566 \r
2567     for(Int_t j=0; j<20; j++) {\r
2568       if(j == 4) {\r
2569         // decay\r
2570         \r
2571         sprintf(name,"mc_pt_rec_sec_pid_%d_decay",i); \r
2572         fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2573         h = fMCSecTrackHist1[2]->Projection(0);\r
2574         h->SetName(name);\r
2575         aFolderObj->Add(h);\r
2576 \r
2577         sprintf(name,"mc_eta_rec_sec_pid_%d_decay",i); \r
2578         fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2579         h = fMCSecTrackHist1[2]->Projection(1);\r
2580         h->SetName(name);\r
2581         aFolderObj->Add(h);\r
2582 \r
2583         sprintf(name,"mc_mother_rec_sec_pid_%d_decay",i); \r
2584         fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2585         h = fMCSecTrackHist1[2]->Projection(4);\r
2586         h->SetName(name);\r
2587         aFolderObj->Add(h);\r
2588 \r
2589       } else if (j == 5) {\r
2590        // conversion\r
2591 \r
2592         sprintf(name,"mc_pt_rec_sec_pid_%d_conv",i); \r
2593         fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2594         h = fMCSecTrackHist1[2]->Projection(0);\r
2595         h->SetName(name);\r
2596         aFolderObj->Add(h);\r
2597 \r
2598         sprintf(name,"mc_eta_rec_sec_pid_%d_conv",i); \r
2599         fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2600         h = fMCSecTrackHist1[2]->Projection(1);\r
2601         h->SetName(name);\r
2602         aFolderObj->Add(h);\r
2603 \r
2604         sprintf(name,"mc_mother_rec_sec_pid_%d_conv",i); \r
2605         fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2606         h = fMCSecTrackHist1[2]->Projection(4);\r
2607         h->SetName(name);\r
2608         aFolderObj->Add(h);\r
2609 \r
2610      } else if (j == 13) {\r
2611        // mat\r
2612        \r
2613         sprintf(name,"mc_pt_rec_sec_pid_%d_mat",i); \r
2614         fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2615         h = fMCSecTrackHist1[2]->Projection(0);\r
2616         h->SetName(name);\r
2617         aFolderObj->Add(h);\r
2618 \r
2619         sprintf(name,"mc_eta_rec_sec_pid_%d_mat",i); \r
2620         fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2621         h = fMCSecTrackHist1[2]->Projection(1);\r
2622         h->SetName(name);\r
2623         aFolderObj->Add(h);\r
2624 \r
2625         sprintf(name,"mc_eta_mother_rec_sec_pid_%d_mat",i); \r
2626         fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2627         h = fMCSecTrackHist1[2]->Projection(4,1);\r
2628         h->SetName(name);\r
2629         aFolderObj->Add(h);\r
2630 \r
2631         sprintf(name,"mc_mother_rec_sec_pid_%d_mat",i); \r
2632         fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2633         h = fMCSecTrackHist1[2]->Projection(4);\r
2634         h->SetName(name);\r
2635         aFolderObj->Add(h);\r
2636 \r
2637         sprintf(name,"mc_pt_mother_rec_sec_pid_%d_mat",i); \r
2638         fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2639         h = fMCSecTrackHist1[2]->Projection(4,0);\r
2640         h->SetName(name);\r
2641         aFolderObj->Add(h);\r
2642 \r
2643      } else {\r
2644        continue;\r
2645      }\r
2646    }\r
2647 \r
2648   }\r
2649   } // end fHistogramOn\r
2650 \r
2651   //\r
2652   //  resolution histograms\r
2653   //  only for reconstructed tracks\r
2654   //\r
2655 \r
2656   TH2F *h2F=0;\r
2657   TCanvas * c = new TCanvas("resol","resol");\r
2658   c->cd();\r
2659 \r
2660   //\r
2661   fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79); \r
2662 \r
2663   h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);\r
2664   h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);\r
2665   h->SetXTitle("p_{tmc} (GeV/c)");\r
2666   h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");\r
2667   h->Draw();\r
2668   h->SetName("pt_resolution_vs_mcpt");\r
2669   aFolderObj->Add(h);\r
2670 \r
2671   h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);\r
2672   h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);\r
2673   h->SetXTitle("p_{tmc} (GeV/c)");\r
2674   h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");\r
2675   h->Draw();\r
2676   h->SetName("dpt_mean_vs_mcpt");\r
2677   aFolderObj->Add(h);\r
2678 \r
2679   //\r
2680   h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);\r
2681   h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);\r
2682   h->SetXTitle("p_{tmc} (GeV/c)");\r
2683   h->SetYTitle("(#eta-#eta_{mc}) resolution");\r
2684   h->Draw();\r
2685   h->SetName("eta_resolution_vs_mcpt");\r
2686   aFolderObj->Add(h);\r
2687 \r
2688   h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);\r
2689   h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);\r
2690   h->SetXTitle("p_{tmc} (GeV/c)");\r
2691   h->SetYTitle("(#eta-mc#eta) mean");\r
2692   h->Draw();\r
2693   h->SetName("deta_mean_vs_mcpt");\r
2694   aFolderObj->Add(h);\r
2695   \r
2696   // \r
2697   fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins()); \r
2698 \r
2699   h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);\r
2700   h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);\r
2701   h->SetXTitle("#eta_{mc}");\r
2702   h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");\r
2703   h->Draw();\r
2704   h->SetName("pt_resolution_vs_mceta");\r
2705   aFolderObj->Add(h);\r
2706 \r
2707   h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);\r
2708   h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);\r
2709   h->SetXTitle("#eta_{mc}");\r
2710   h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");\r
2711   h->Draw();\r
2712   h->SetName("dpt_mean_vs_mceta");\r
2713   aFolderObj->Add(h);\r
2714 \r
2715   //\r
2716   h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);\r
2717   h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);\r
2718   h->SetXTitle("#eta_{mc}");\r
2719   h->SetYTitle("(#eta-#eta_{mc}) resolution");\r
2720   h->Draw();\r
2721   h->SetName("eta_resolution_vs_mceta");\r
2722   aFolderObj->Add(h);\r
2723 \r
2724   h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);\r
2725   h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);\r
2726   h->SetXTitle("#eta_{mc}");\r
2727   h->SetYTitle("(#eta-mc#eta) mean");\r
2728   h->Draw();\r
2729   h->SetName("deta_mean_vs_mceta");\r
2730   aFolderObj->Add(h);\r
2731 \r
2732   fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins()); \r
2733 \r
2734   } // end use MC info\r
2735 \r
2736   // export objects to analysis folder\r
2737   fAnalysisFolder = ExportToFolder(aFolderObj);\r
2738 \r
2739   // delete only TObjArray\r
2740   if(aFolderObj) delete aFolderObj;\r
2741 }\r
2742 \r
2743 //_____________________________________________________________________________\r
2744 TFolder* AlidNdPtAnalysis::ExportToFolder(TObjArray * const array) \r
2745 {\r
2746   // recreate folder avery time and export objects to new one\r
2747   //\r
2748   AlidNdPtAnalysis * comp=this;\r
2749   TFolder *folder = comp->GetAnalysisFolder();\r
2750 \r
2751   TString name, title;\r
2752   TFolder *newFolder = 0;\r
2753   Int_t i = 0;\r
2754   Int_t size = array->GetSize();\r
2755 \r
2756   if(folder) { \r
2757      // get name and title from old folder\r
2758      name = folder->GetName();  \r
2759      title = folder->GetTitle();  \r
2760 \r
2761          // delete old one\r
2762      delete folder;\r
2763 \r
2764          // create new one\r
2765      newFolder = CreateFolder(name.Data(),title.Data());\r
2766      newFolder->SetOwner();\r
2767 \r
2768          // add objects to folder\r
2769      while(i < size) {\r
2770            newFolder->Add(array->At(i));\r
2771            i++;\r
2772          }\r
2773   }\r
2774 \r
2775 return newFolder;\r
2776 }\r
2777 \r
2778 //_____________________________________________________________________________\r
2779 TFolder* AlidNdPtAnalysis::CreateFolder(TString name,TString title) { \r
2780 // create folder for analysed histograms\r
2781 //\r
2782 TFolder *folder = 0;\r
2783   folder = new TFolder(name.Data(),title.Data());\r
2784 \r
2785   return folder;\r
2786 }\r