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