]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG0/dNdPt/AlidNdPtCorrection.cxx
new histograms added
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtCorrection.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 // AlidNdPtCorrection class:\r
17 //\r
18 // a. functionality:\r
19 // - applies corrections on dNdPt spectra\r
20 // - fills corrected dNdPt histograms\r
21 // - fills correction control histograms \r
22 //\r
23 // b. data members:\r
24 // - dNdPt spectra before and after correction procedure\r
25 // - control histograms\r
26 // - correction matrices (must be loaded)\r
27 // \r
28 // Author: J.Otwinowski 04/11/2008 \r
29 //------------------------------------------------------------------------------\r
30 \r
31 #include "TFile.h"\r
32 #include "TH1.h"\r
33 #include "TH2.h"\r
34 \r
35 #include "AliHeader.h"  \r
36 #include "AliGenEventHeader.h"  \r
37 #include "AliStack.h"  \r
38 #include "AliESDEvent.h"  \r
39 #include "AliMCEvent.h"  \r
40 #include "AliESDtrackCuts.h"  \r
41 #include "AliLog.h" \r
42 #include "AliMultiplicity.h"\r
43 #include "AliTracker.h"\r
44 \r
45 #include "AlidNdPtEventCuts.h"\r
46 #include "AlidNdPtAcceptanceCuts.h"\r
47 #include "AliPhysicsSelection.h"\r
48 \r
49 #include "AliPWG0Helper.h"\r
50 #include "AlidNdPtHelper.h"\r
51 #include "AlidNdPtCorrection.h"\r
52 \r
53 using namespace std;\r
54 \r
55 ClassImp(AlidNdPtCorrection)\r
56 \r
57 //_____________________________________________________________________________\r
58 //AlidNdPtCorrection::AlidNdPtCorrection(): TNamed(),\r
59   AlidNdPtCorrection::AlidNdPtCorrection(): AlidNdPt(),\r
60   fCorrectionFolder(0),\r
61   fMCEventHist1(0),\r
62   fRecEventHist1(0),\r
63   fRecEventMultHist1(0),\r
64   fMCAllEventMultHist1(0),\r
65   fMCAllNDEventMultHist1(0),\r
66   fMCAllNSDEventMultHist1(0),\r
67   fMCTriggerMultHist1(0),\r
68   fMCEventMultHist1(0),\r
69   fMCAllPrimTrackMultHist1(0),\r
70   fMCNDEventAllPrimTrackMultHist1(0),\r
71   fMCNSDEventAllPrimTrackMultHist1(0),\r
72   fMCTriggerPrimTrackMultHist1(0),\r
73   fMCEventPrimTrackMultHist1(0),\r
74   fMCAllPrimTrackTrueMultHist1(0),\r
75   fMCNDEventAllPrimTrackTrueMultHist1(0),\r
76   fMCNSDEventAllPrimTrackTrueMultHist1(0),\r
77   fMCTriggerPrimTrackTrueMultHist1(0),\r
78   fMCEventPrimTrackTrueMultHist1(0),\r
79   fMCAllPrimTrackTrueMultHist2(0),\r
80   fMCNDEventAllPrimTrackTrueMultHist2(0),\r
81   fMCNSDEventAllPrimTrackTrueMultHist2(0),\r
82   fMCTriggerPrimTrackTrueMultHist2(0),\r
83   fMCEventPrimTrackTrueMultHist2(0),\r
84   fMCAllPrimTrackMeanPtMult1(0),\r
85   fMCNDEventAllPrimTrackMeanPtMult1(0),\r
86   fMCNSDEventAllPrimTrackMeanPtMult1(0),\r
87   fMCTriggerPrimTrackMeanPtMult1(0),\r
88   fMCEventPrimTrackMeanPtMult1(0),\r
89   fMCAllPrimTrackMeanPtTrueMult1(0),\r
90   fMCNDEventAllPrimTrackMeanPtTrueMult1(0),\r
91   fMCNSDEventAllPrimTrackMeanPtTrueMult1(0),\r
92   fMCTriggerPrimTrackMeanPtTrueMult1(0),\r
93   fMCEventPrimTrackMeanPtTrueMult1(0),\r
94   fEventMultCorrelationMatrix(0),\r
95   fZvNorm(0),\r
96   fZvEmptyEventsNorm(0),\r
97   fCorrTriggerMBtoInelEventMatrix(0),\r
98   fCorrTriggerMBtoNDEventMatrix(0),\r
99   fCorrTriggerMBtoNSDEventMatrix(0),\r
100   fCorrEventMatrix(0),\r
101   fCorrTriggerMBtoInelTrackEventMatrix(0),\r
102   fCorrTriggerMBtoNDTrackEventMatrix(0),\r
103   fCorrTriggerMBtoNSDTrackEventMatrix(0),\r
104   fCorrTrackEventMatrix(0),\r
105   fCorrTrackMatrix(0),\r
106   fCorrHighPtTrackMatrix(0),\r
107   fContTrackMatrix(0),\r
108   fContMultTrackMatrix(0),\r
109   fCorrMatrixFileName(""),\r
110   fCosmicsHisto(0)\r
111 {\r
112   // default constructor\r
113   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
114     fRecTrackHist1[i]=0;     \r
115   }\r
116 \r
117   for(Int_t i=0; i<8; i++) { \r
118     fCorrRecTrackMultHist1[i] = 0;\r
119     fCorrRecTrackTrueMultHist1[i] = 0;\r
120     fCorrRecTrackTrueMultHist2[i] = 0;\r
121     fCorrRecTrackMeanPtMultHist1[i] = 0;\r
122     fCorrRecTrackMeanPtTrueMultHist1[i] = 0;\r
123     fCorrRecTrackPt1[i] = 0;\r
124   }\r
125 \r
126   for(Int_t i=0; i<5; i++) { \r
127     fCorrRecEventHist1[i] = 0;\r
128     fCorrRecEventHist2[i] = 0;\r
129   }\r
130 \r
131   Init();\r
132 }\r
133 \r
134 //_____________________________________________________________________________\r
135 AlidNdPtCorrection::AlidNdPtCorrection(Char_t* name, Char_t* title, TString corrMatrixFileName): AlidNdPt(name,title),\r
136   fCorrectionFolder(0),\r
137   fMCEventHist1(0),\r
138   fRecEventHist1(0),\r
139   fRecEventMultHist1(0),\r
140   fMCAllEventMultHist1(0),\r
141   fMCAllNDEventMultHist1(0),\r
142   fMCAllNSDEventMultHist1(0),\r
143   fMCTriggerMultHist1(0),\r
144   fMCEventMultHist1(0),\r
145   fMCAllPrimTrackMultHist1(0),\r
146   fMCNDEventAllPrimTrackMultHist1(0),\r
147   fMCNSDEventAllPrimTrackMultHist1(0),\r
148   fMCTriggerPrimTrackMultHist1(0),\r
149   fMCEventPrimTrackMultHist1(0),\r
150   fMCAllPrimTrackTrueMultHist1(0),\r
151   fMCNDEventAllPrimTrackTrueMultHist1(0),\r
152   fMCNSDEventAllPrimTrackTrueMultHist1(0),\r
153   fMCTriggerPrimTrackTrueMultHist1(0),\r
154   fMCEventPrimTrackTrueMultHist1(0),\r
155   fMCAllPrimTrackTrueMultHist2(0),\r
156   fMCNDEventAllPrimTrackTrueMultHist2(0),\r
157   fMCNSDEventAllPrimTrackTrueMultHist2(0),\r
158   fMCTriggerPrimTrackTrueMultHist2(0),\r
159   fMCEventPrimTrackTrueMultHist2(0),\r
160   fMCAllPrimTrackMeanPtMult1(0),\r
161   fMCNDEventAllPrimTrackMeanPtMult1(0),\r
162   fMCNSDEventAllPrimTrackMeanPtMult1(0),\r
163   fMCTriggerPrimTrackMeanPtMult1(0),\r
164   fMCEventPrimTrackMeanPtMult1(0),\r
165   fMCAllPrimTrackMeanPtTrueMult1(0),\r
166   fMCNDEventAllPrimTrackMeanPtTrueMult1(0),\r
167   fMCNSDEventAllPrimTrackMeanPtTrueMult1(0),\r
168   fMCTriggerPrimTrackMeanPtTrueMult1(0),\r
169   fMCEventPrimTrackMeanPtTrueMult1(0),\r
170   fEventMultCorrelationMatrix(0),\r
171   fZvNorm(0),\r
172   fZvEmptyEventsNorm(0),\r
173   fCorrTriggerMBtoInelEventMatrix(0),\r
174   fCorrTriggerMBtoNDEventMatrix(0),\r
175   fCorrTriggerMBtoNSDEventMatrix(0),\r
176   fCorrEventMatrix(0),\r
177   fCorrTriggerMBtoInelTrackEventMatrix(0),\r
178   fCorrTriggerMBtoNDTrackEventMatrix(0),\r
179   fCorrTriggerMBtoNSDTrackEventMatrix(0),\r
180   fCorrTrackEventMatrix(0),\r
181   fCorrTrackMatrix(0),\r
182   fCorrHighPtTrackMatrix(0),\r
183   fContTrackMatrix(0),\r
184   fContMultTrackMatrix(0),\r
185   fCorrMatrixFileName(corrMatrixFileName),\r
186   fCosmicsHisto(0)\r
187 {\r
188   // constructor\r
189   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
190     fRecTrackHist1[i]=0;     \r
191   }\r
192 \r
193   for(Int_t i=0; i<8; i++) { \r
194     fCorrRecTrackMultHist1[i] = 0;\r
195     fCorrRecTrackTrueMultHist1[i] = 0;\r
196     fCorrRecTrackTrueMultHist2[i] = 0;\r
197     fCorrRecTrackMeanPtMultHist1[i] = 0;\r
198     fCorrRecTrackMeanPtTrueMultHist1[i] = 0;\r
199     fCorrRecTrackPt1[i] = 0;\r
200   }\r
201 \r
202   for(Int_t i=0; i<5; i++) { \r
203     fCorrRecEventHist1[i] = 0;\r
204     fCorrRecEventHist2[i] = 0;\r
205   }\r
206 \r
207   Init();\r
208 }\r
209 \r
210 //_____________________________________________________________________________\r
211 AlidNdPtCorrection::~AlidNdPtCorrection() {\r
212   // \r
213   // destructor\r
214   //\r
215   if(fMCEventHist1) delete fMCEventHist1; fMCEventHist1=0;\r
216   if(fRecEventHist1) delete fRecEventHist1; fRecEventHist1=0;\r
217   if(fRecEventMultHist1) delete fRecEventMultHist1; fRecEventMultHist1=0;\r
218 \r
219   if(fMCAllEventMultHist1) delete fMCAllEventMultHist1; fMCAllEventMultHist1=0;\r
220   if(fMCAllNDEventMultHist1) delete fMCAllNDEventMultHist1; fMCAllNDEventMultHist1=0;\r
221   if(fMCAllNSDEventMultHist1) delete fMCAllNSDEventMultHist1; fMCAllNSDEventMultHist1=0;\r
222   if(fMCTriggerMultHist1) delete fMCTriggerMultHist1; fMCTriggerMultHist1=0;\r
223   if(fMCEventMultHist1) delete fMCEventMultHist1; fMCEventMultHist1=0;\r
224 \r
225   if(fMCAllPrimTrackMultHist1) delete fMCAllPrimTrackMultHist1; fMCAllPrimTrackMultHist1=0;\r
226   if(fMCNDEventAllPrimTrackMultHist1) delete fMCNDEventAllPrimTrackMultHist1; fMCNDEventAllPrimTrackMultHist1=0;\r
227   if(fMCNSDEventAllPrimTrackMultHist1) delete fMCNSDEventAllPrimTrackMultHist1; fMCNSDEventAllPrimTrackMultHist1=0;\r
228   if(fMCTriggerPrimTrackMultHist1) delete fMCTriggerPrimTrackMultHist1; fMCTriggerPrimTrackMultHist1=0;\r
229   if(fMCEventPrimTrackMultHist1) delete fMCEventPrimTrackMultHist1; fMCEventPrimTrackMultHist1=0;\r
230 \r
231   if(fMCAllPrimTrackTrueMultHist1) delete fMCAllPrimTrackTrueMultHist1; fMCAllPrimTrackTrueMultHist1=0;\r
232   if(fMCNDEventAllPrimTrackTrueMultHist1) delete fMCNDEventAllPrimTrackTrueMultHist1; fMCNDEventAllPrimTrackTrueMultHist1=0;\r
233   if(fMCNSDEventAllPrimTrackTrueMultHist1) delete fMCNSDEventAllPrimTrackTrueMultHist1; fMCNSDEventAllPrimTrackTrueMultHist1=0;\r
234   if(fMCTriggerPrimTrackTrueMultHist1) delete fMCTriggerPrimTrackTrueMultHist1; fMCTriggerPrimTrackTrueMultHist1=0;\r
235   if(fMCEventPrimTrackTrueMultHist1) delete fMCEventPrimTrackTrueMultHist1; fMCEventPrimTrackTrueMultHist1=0;\r
236 \r
237   if(fMCAllPrimTrackTrueMultHist2) delete fMCAllPrimTrackTrueMultHist2; fMCAllPrimTrackTrueMultHist2=0;\r
238   if(fMCNDEventAllPrimTrackTrueMultHist2) delete fMCNDEventAllPrimTrackTrueMultHist2; fMCNDEventAllPrimTrackTrueMultHist2=0;\r
239   if(fMCNSDEventAllPrimTrackTrueMultHist2) delete fMCNSDEventAllPrimTrackTrueMultHist2; fMCNSDEventAllPrimTrackTrueMultHist2=0;\r
240   if(fMCTriggerPrimTrackTrueMultHist2) delete fMCTriggerPrimTrackTrueMultHist2; fMCTriggerPrimTrackTrueMultHist2=0;\r
241   if(fMCEventPrimTrackTrueMultHist2) delete fMCEventPrimTrackTrueMultHist2; fMCEventPrimTrackTrueMultHist2=0;\r
242 \r
243 \r
244 \r
245 \r
246   if(fMCAllPrimTrackMeanPtMult1) delete fMCAllPrimTrackMeanPtMult1; fMCAllPrimTrackMeanPtMult1=0;\r
247   if(fMCNDEventAllPrimTrackMeanPtMult1) delete fMCNDEventAllPrimTrackMeanPtMult1; fMCNDEventAllPrimTrackMeanPtMult1=0;\r
248   if(fMCNSDEventAllPrimTrackMeanPtMult1) delete fMCNSDEventAllPrimTrackMeanPtMult1; fMCNSDEventAllPrimTrackMeanPtMult1=0;\r
249   if(fMCTriggerPrimTrackMeanPtMult1) delete fMCTriggerPrimTrackMeanPtMult1; fMCTriggerPrimTrackMeanPtMult1=0;\r
250   if(fMCEventPrimTrackMeanPtMult1) delete fMCEventPrimTrackMeanPtMult1; fMCEventPrimTrackMeanPtMult1=0;\r
251 \r
252   if(fMCAllPrimTrackMeanPtTrueMult1) delete fMCAllPrimTrackMeanPtTrueMult1; fMCAllPrimTrackMeanPtTrueMult1=0;\r
253   if(fMCNDEventAllPrimTrackMeanPtTrueMult1) delete fMCNDEventAllPrimTrackMeanPtTrueMult1; fMCNDEventAllPrimTrackMeanPtTrueMult1=0;\r
254   if(fMCNSDEventAllPrimTrackMeanPtTrueMult1) delete fMCNSDEventAllPrimTrackMeanPtTrueMult1; fMCNSDEventAllPrimTrackMeanPtTrueMult1=0;\r
255   if(fMCTriggerPrimTrackMeanPtTrueMult1) delete fMCTriggerPrimTrackMeanPtTrueMult1; fMCTriggerPrimTrackMeanPtTrueMult1=0;\r
256   if(fMCEventPrimTrackMeanPtTrueMult1) delete fMCEventPrimTrackMeanPtTrueMult1; fMCEventPrimTrackMeanPtTrueMult1=0;\r
257 \r
258   if(fCosmicsHisto) delete fCosmicsHisto; fCosmicsHisto=0;\r
259 \r
260   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
261     if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;\r
262   }\r
263 \r
264   for(Int_t i=0; i<8; i++) { \r
265     if(fCorrRecTrackMultHist1[i]) delete fCorrRecTrackMultHist1[i]; fCorrRecTrackMultHist1[i]=0;\r
266     if(fCorrRecTrackTrueMultHist1[i]) delete fCorrRecTrackTrueMultHist1[i]; fCorrRecTrackTrueMultHist1[i]=0;\r
267     if(fCorrRecTrackTrueMultHist2[i]) delete fCorrRecTrackTrueMultHist2[i]; fCorrRecTrackTrueMultHist2[i]=0;\r
268     if(fCorrRecTrackMeanPtMultHist1[i]) delete fCorrRecTrackMeanPtMultHist1[i]; fCorrRecTrackMeanPtMultHist1[i]=0;\r
269     if(fCorrRecTrackMeanPtTrueMultHist1[i]) delete fCorrRecTrackMeanPtTrueMultHist1[i]; fCorrRecTrackMeanPtTrueMultHist1[i]=0;\r
270     if(fCorrRecTrackPt1[i]) delete fCorrRecTrackPt1[i]; fCorrRecTrackPt1[i]=0;\r
271   }\r
272 \r
273   for(Int_t i=0; i<5; i++) { \r
274     if(fCorrRecEventHist1[i]) delete fCorrRecEventHist1[i]; fCorrRecEventHist1[i]=0;\r
275     if(fCorrRecEventHist2[i]) delete fCorrRecEventHist2[i]; fCorrRecEventHist2[i]=0;\r
276   }\r
277 \r
278   if(fCorrectionFolder) delete fCorrectionFolder; fCorrectionFolder=0;\r
279 }\r
280 \r
281 //_____________________________________________________________________________\r
282 void AlidNdPtCorrection::Init(){\r
283   //\r
284   // Init histograms\r
285   //\r
286   const Int_t etaNbins = 30; \r
287   const Int_t zvNbins = 12;\r
288 \r
289   // UA1 bining\r
290   //const Int_t ptNbins = 52; \r
291   //Double_t binsPt[ptNbins+1] = { 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80, 1.90, 2.00, 2.10, 2.20, 2.30, 2.40, 2.50, 2.60, 2.70, 2.80, 2.90, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.20, 4.40, 4.60, 4.80, 5.00, 5.20, 5.40, 5.60, 5.80, 6.00, 7.00, 7.60, 8.80, 9.60 }; \r
292 \r
293   const Int_t ptNbins = 56; \r
294   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
295   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
296   Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
297 \r
298 \r
299   //\r
300   Int_t binsMCEventHist1[3]={100,100,140};\r
301   Double_t minMCEventHist1[3]={-0.1,-0.1,-35.}; \r
302   Double_t maxMCEventHist1[3]={0.1,0.1,35.}; \r
303   fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1);\r
304   fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)");\r
305   fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)");\r
306   fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)");\r
307   fMCEventHist1->Sumw2();\r
308 \r
309   //\r
310   Int_t binsRecEventHist1[3]={100,100,140};\r
311   Double_t minRecEventHist1[3]={-3.,-3.,-35.}; \r
312   Double_t maxRecEventHist1[3]={3.,3.,35.}; \r
313   fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1);\r
314   fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)");\r
315   fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)");\r
316   fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)");\r
317   fRecEventHist1->Sumw2();\r
318 \r
319   //\r
320   Int_t binsRecEventMultHist1[2]={150,150};\r
321   Double_t minRecEventMultHist1[2]={-0.5,-0.5}; \r
322   Double_t maxRecEventMultHist1[2]={149.5,149.5}; \r
323   fRecEventMultHist1 = new THnSparseF("fRecEventMultHist1","track multiplicity:tracklet multiplicity",2,binsRecEventMultHist1,minRecEventMultHist1,maxRecEventMultHist1);\r
324   fRecEventMultHist1->GetAxis(0)->SetTitle("track_mult");\r
325   fRecEventMultHist1->GetAxis(1)->SetTitle("tracklet_mult");\r
326   fRecEventMultHist1->Sumw2();\r
327 \r
328   //\r
329   char name[256];\r
330   char title[256];\r
331 \r
332   Int_t binsMCAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};\r
333   Double_t minMCAllPrimTrackMultHist1[3]={0.,-1.,-0.5}; \r
334   Double_t maxMCAllPrimTrackMultHist1[3]={20.,1.,149.5}; \r
335   sprintf(name,"fMCAllPrimTrackMultHist1");\r
336   sprintf(title,"mcPt:mcEta:multiplicity");\r
337   \r
338   fMCAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackMultHist1,minMCAllPrimTrackMultHist1,maxMCAllPrimTrackMultHist1);\r
339   fMCAllPrimTrackMultHist1->SetBinEdges(0,binsPt);\r
340   fMCAllPrimTrackMultHist1->SetBinEdges(1,binsEta);\r
341   fMCAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
342   fMCAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");\r
343   fMCAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");\r
344   fMCAllPrimTrackMultHist1->Sumw2();\r
345 \r
346   Int_t binsMCNDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};\r
347   Double_t minMCNDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5}; \r
348   Double_t maxMCNDEventAllPrimTrackMultHist1[3]={20.,1.,149.5}; \r
349   sprintf(name,"fMCNDEventAllPrimTrackMultHist1");\r
350   sprintf(title,"mcPt:mcEta:multiplicity");\r
351   \r
352   fMCNDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackMultHist1,minMCNDEventAllPrimTrackMultHist1,maxMCNDEventAllPrimTrackMultHist1);\r
353   fMCNDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt);\r
354   fMCNDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta);\r
355   fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
356   fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");\r
357   fMCNDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");\r
358   fMCNDEventAllPrimTrackMultHist1->Sumw2();\r
359 \r
360   Int_t binsMCNSDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};\r
361   Double_t minMCNSDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5}; \r
362   Double_t maxMCNSDEventAllPrimTrackMultHist1[3]={20.,1.,149.5}; \r
363   sprintf(name,"fMCNSDEventAllPrimTrackMultHist1");\r
364   sprintf(title,"mcPt:mcEta:multiplicity");\r
365   \r
366   fMCNSDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackMultHist1,minMCNSDEventAllPrimTrackMultHist1,maxMCNSDEventAllPrimTrackMultHist1);\r
367   fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt);\r
368   fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta);\r
369   fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
370   fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");\r
371   fMCNSDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");\r
372   fMCNSDEventAllPrimTrackMultHist1->Sumw2();\r
373 \r
374   Int_t binsMCEventTriggerPrimTrackMultHist1[3]={ptNbins,etaNbins,150};\r
375   Double_t minMCEventTriggerPrimTrackMultHist1[3]={0.,-1.,-0.5}; \r
376   Double_t maxMCEventTriggerPrimTrackMultHist1[3]={20.,1.,149.5}; \r
377   sprintf(name,"fMCTriggerPrimTrackMultHist1");\r
378   sprintf(title,"mcPt:mcEta:multiplicity");\r
379   \r
380   fMCTriggerPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackMultHist1,minMCEventTriggerPrimTrackMultHist1,maxMCEventTriggerPrimTrackMultHist1);\r
381   fMCTriggerPrimTrackMultHist1->SetBinEdges(0,binsPt);\r
382   fMCTriggerPrimTrackMultHist1->SetBinEdges(1,binsEta);\r
383   fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
384   fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");\r
385   fMCTriggerPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");\r
386   fMCTriggerPrimTrackMultHist1->Sumw2();\r
387 \r
388   Int_t binsMCEventPrimTrackMultHist1[3]={ptNbins,etaNbins,150};\r
389   Double_t minMCEventPrimTrackMultHist1[3]={0.,-1.,-0.5}; \r
390   Double_t maxMCEventPrimTrackMultHist1[3]={20.,1.,149.5}; \r
391   sprintf(name,"fMCEventPrimTrackMultHist1");\r
392   sprintf(title,"mcPt:mcEta:multiplicity");\r
393   \r
394   fMCEventPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackMultHist1,minMCEventPrimTrackMultHist1,maxMCEventPrimTrackMultHist1);\r
395   fMCEventPrimTrackMultHist1->SetBinEdges(0,binsPt);\r
396   fMCEventPrimTrackMultHist1->SetBinEdges(1,binsEta);\r
397   fMCEventPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
398   fMCEventPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");\r
399   fMCEventPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");\r
400   fMCEventPrimTrackMultHist1->Sumw2();\r
401 \r
402   //\r
403   // true multiplicity\r
404   //\r
405 \r
406   Int_t binsMCAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};\r
407   Double_t minMCAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; \r
408   Double_t maxMCAllPrimTrackTrueMultHist1[3]={20.,1.,149.5}; \r
409   sprintf(name,"fMCAllPrimTrackTrueMultHist1");\r
410   sprintf(title,"mcPt:mcEta:true_mult");\r
411   \r
412   fMCAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist1,minMCAllPrimTrackTrueMultHist1,maxMCAllPrimTrackTrueMultHist1);\r
413   fMCAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);\r
414   fMCAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);\r
415   fMCAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
416   fMCAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");\r
417   fMCAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");\r
418   fMCAllPrimTrackTrueMultHist1->Sumw2();\r
419 \r
420   Int_t binsMCNDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};\r
421   Double_t minMCNDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; \r
422   Double_t maxMCNDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5}; \r
423   sprintf(name,"fMCNDEventAllPrimTrackTrueMultHist1");\r
424   sprintf(title,"mcPt:mcEta:true_mult");\r
425   \r
426   fMCNDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist1,minMCNDEventAllPrimTrackTrueMultHist1,maxMCNDEventAllPrimTrackTrueMultHist1);\r
427   fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);\r
428   fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);\r
429   fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
430   fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");\r
431   fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");\r
432   fMCNDEventAllPrimTrackTrueMultHist1->Sumw2();\r
433 \r
434   Int_t binsMCNSDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};\r
435   Double_t minMCNSDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; \r
436   Double_t maxMCNSDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5}; \r
437   sprintf(name,"fMCNSDEventAllPrimTrackTrueMultHist1");\r
438   sprintf(title,"mcPt:mcEta:true_mult");\r
439   \r
440   fMCNSDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist1,minMCNSDEventAllPrimTrackTrueMultHist1,maxMCNSDEventAllPrimTrackTrueMultHist1);\r
441   fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);\r
442   fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);\r
443   fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
444   fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");\r
445   fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");\r
446   fMCNSDEventAllPrimTrackTrueMultHist1->Sumw2();\r
447 \r
448   Int_t binsMCEventTriggerPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};\r
449   Double_t minMCEventTriggerPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; \r
450   Double_t maxMCEventTriggerPrimTrackTrueMultHist1[3]={20.,1.,149.5}; \r
451   sprintf(name,"fMCTriggerPrimTrackTrueMultHist1");\r
452   sprintf(title,"mcPt:mcEta:true_mult");\r
453   \r
454   fMCTriggerPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist1,minMCEventTriggerPrimTrackTrueMultHist1,maxMCEventTriggerPrimTrackTrueMultHist1);\r
455   fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);\r
456   fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);\r
457   fMCTriggerPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
458   fMCTriggerPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");\r
459   fMCTriggerPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");\r
460   fMCTriggerPrimTrackTrueMultHist1->Sumw2();\r
461 \r
462   Int_t binsMCEventPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};\r
463   Double_t minMCEventPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; \r
464   Double_t maxMCEventPrimTrackTrueMultHist1[3]={20.,1.,149.5}; \r
465   sprintf(name,"fMCEventPrimTrackTrueMultHist1");\r
466   sprintf(title,"mcPt:mcEta:true_mult");\r
467   \r
468   fMCEventPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist1,minMCEventPrimTrackTrueMultHist1,maxMCEventPrimTrackTrueMultHist1);\r
469   fMCEventPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);\r
470   fMCEventPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);\r
471   fMCEventPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
472   fMCEventPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");\r
473   fMCEventPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");\r
474   fMCEventPrimTrackTrueMultHist1->Sumw2();\r
475 \r
476   //\r
477   // mcPT vs multiplicity vs true multiplicity\r
478   //\r
479 \r
480   Int_t binsMCAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};\r
481   Double_t minMCAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; \r
482   Double_t maxMCAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; \r
483   sprintf(name,"fMCAllPrimTrackTrueMultHist2");\r
484   sprintf(title,"mcPt:mult:true_mult");\r
485   \r
486   fMCAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist2,minMCAllPrimTrackTrueMultHist2,maxMCAllPrimTrackTrueMultHist2);\r
487   fMCAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);\r
488   fMCAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
489   fMCAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");\r
490   fMCAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");\r
491   fMCAllPrimTrackTrueMultHist2->Sumw2();\r
492 \r
493   Int_t binsMCNDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};\r
494   Double_t minMCNDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; \r
495   Double_t maxMCNDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; \r
496   sprintf(name,"fMCNDEventAllPrimTrackTrueMultHist2");\r
497   sprintf(title,"mcPt:mult:true_mult");\r
498   \r
499   fMCNDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist2,minMCNDEventAllPrimTrackTrueMultHist2,maxMCNDEventAllPrimTrackTrueMultHist2);\r
500   fMCNDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);\r
501   fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
502   fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");\r
503   fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");\r
504   fMCNDEventAllPrimTrackTrueMultHist2->Sumw2();\r
505 \r
506   Int_t binsMCNSDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};\r
507   Double_t minMCNSDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; \r
508   Double_t maxMCNSDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; \r
509   sprintf(name,"fMCNSDEventAllPrimTrackTrueMultHist2");\r
510   sprintf(title,"mcPt:mult:true_mult");\r
511   \r
512   fMCNSDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist2,minMCNSDEventAllPrimTrackTrueMultHist2,maxMCNSDEventAllPrimTrackTrueMultHist2);\r
513   fMCNSDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);\r
514   fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
515   fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");\r
516   fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");\r
517   fMCNSDEventAllPrimTrackTrueMultHist2->Sumw2();\r
518 \r
519   Int_t binsMCEventTriggerPrimTrackTrueMultHist2[3]={ptNbins,150,150};\r
520   Double_t minMCEventTriggerPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; \r
521   Double_t maxMCEventTriggerPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; \r
522   sprintf(name,"fMCTriggerPrimTrackTrueMultHist2");\r
523   sprintf(title,"mcPt:mult:true_mult");\r
524   \r
525   fMCTriggerPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist2,minMCEventTriggerPrimTrackTrueMultHist2,maxMCEventTriggerPrimTrackTrueMultHist2);\r
526   fMCTriggerPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);\r
527   fMCTriggerPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
528   fMCTriggerPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");\r
529   fMCTriggerPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");\r
530   fMCTriggerPrimTrackTrueMultHist2->Sumw2();\r
531 \r
532   Int_t binsMCEventPrimTrackTrueMultHist2[3]={ptNbins,150,150};\r
533   Double_t minMCEventPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; \r
534   Double_t maxMCEventPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; \r
535   sprintf(name,"fMCEventPrimTrackTrueMultHist2");\r
536   sprintf(title,"mcPt:mult:true_mult");\r
537   \r
538   fMCEventPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist2,minMCEventPrimTrackTrueMultHist2,maxMCEventPrimTrackTrueMultHist2);\r
539   fMCEventPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);\r
540   fMCEventPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
541   fMCEventPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");\r
542   fMCEventPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");\r
543   fMCEventPrimTrackTrueMultHist2->Sumw2();\r
544 \r
545 \r
546   //\r
547   // mean pt\r
548   //\r
549   Int_t binsMCAllPrimTrackMeanPtTrueMult1[2]={100,150};\r
550   Double_t minMCAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; \r
551   Double_t maxMCAllPrimTrackMeanPtTrueMult1[2]={10.,149.5}; \r
552   sprintf(name,"fMCAllPrimTrackMeanPtTrueMult1");\r
553   sprintf(title,"event <mcPt>:true_mult");\r
554   \r
555   fMCAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtTrueMult1,minMCAllPrimTrackMeanPtTrueMult1,maxMCAllPrimTrackMeanPtTrueMult1);\r
556   fMCAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");\r
557   fMCAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");\r
558   fMCAllPrimTrackMeanPtTrueMult1->Sumw2();\r
559 \r
560   Int_t binsMCAllPrimTrackMeanPtMult1[2]={100,150};\r
561   Double_t minMCAllPrimTrackMeanPtMult1[2]={0.,-0.5}; \r
562   Double_t maxMCAllPrimTrackMeanPtMult1[2]={10.,149.5}; \r
563   sprintf(name,"fMCAllPrimTrackMeanPtMult1");\r
564   sprintf(title,"event <mcPt>:mult");\r
565   \r
566   fMCAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtMult1,minMCAllPrimTrackMeanPtMult1,maxMCAllPrimTrackMeanPtMult1);\r
567   fMCAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");\r
568   fMCAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");\r
569   fMCAllPrimTrackMeanPtMult1->Sumw2();\r
570 \r
571   //\r
572   Int_t binsMCNDEventAllPrimTrackMeanPtTrueMult1[2]={100,150};\r
573   Double_t minMCNDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; \r
574   Double_t maxMCNDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5}; \r
575   sprintf(name,"fMCNDEventAllPrimTrackMeanPtTrueMult1");\r
576   sprintf(title,"event <mcPt>:true_mult");\r
577   \r
578   fMCNDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtTrueMult1,minMCNDEventAllPrimTrackMeanPtTrueMult1,maxMCNDEventAllPrimTrackMeanPtTrueMult1);\r
579   fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");\r
580   fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");\r
581   fMCNDEventAllPrimTrackMeanPtTrueMult1->Sumw2();\r
582 \r
583   Int_t binsMCNDEventAllPrimTrackMeanPtMult1[2]={100,150};\r
584   Double_t minMCNDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5}; \r
585   Double_t maxMCNDEventAllPrimTrackMeanPtMult1[2]={10.,149.5}; \r
586   sprintf(name,"fMCNDEventAllPrimTrackMeanPtMult1");\r
587   sprintf(title,"event <mcPt>:mult");\r
588   \r
589   fMCNDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtMult1,minMCNDEventAllPrimTrackMeanPtMult1,maxMCNDEventAllPrimTrackMeanPtMult1);\r
590   fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");\r
591   fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");\r
592   fMCNDEventAllPrimTrackMeanPtMult1->Sumw2();\r
593 \r
594   //\r
595   Int_t binsMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={100,150};\r
596   Double_t minMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; \r
597   Double_t maxMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5}; \r
598   sprintf(name,"fMCNSDEventAllPrimTrackMeanPtTrueMult1");\r
599   sprintf(title,"event <mcPt>:true_mult");\r
600   \r
601   fMCNSDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtTrueMult1,minMCNSDEventAllPrimTrackMeanPtTrueMult1,maxMCNSDEventAllPrimTrackMeanPtTrueMult1);\r
602   fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");\r
603   fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");\r
604   fMCNSDEventAllPrimTrackMeanPtTrueMult1->Sumw2();\r
605 \r
606   Int_t binsMCNSDEventAllPrimTrackMeanPtMult1[2]={100,150};\r
607   Double_t minMCNSDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5}; \r
608   Double_t maxMCNSDEventAllPrimTrackMeanPtMult1[2]={10.,149.5}; \r
609   sprintf(name,"fMCNSDEventAllPrimTrackMeanPtMult1");\r
610   sprintf(title,"event <mcPt>:mult");\r
611   \r
612   fMCNSDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtMult1,minMCNSDEventAllPrimTrackMeanPtMult1,maxMCNSDEventAllPrimTrackMeanPtMult1);\r
613   fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");\r
614   fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");\r
615   fMCNSDEventAllPrimTrackMeanPtMult1->Sumw2();\r
616 \r
617   //\r
618   Int_t binsMCTriggerPrimTrackMeanPtTrueMult1[2]={100,150};\r
619   Double_t minMCTriggerPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; \r
620   Double_t maxMCTriggerPrimTrackMeanPtTrueMult1[2]={10.,149.5}; \r
621   sprintf(name,"fMCTriggerPrimTrackMeanPtTrueMult1");\r
622   sprintf(title,"event <mcPt>:true_mult");\r
623   \r
624   fMCTriggerPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtTrueMult1,minMCTriggerPrimTrackMeanPtTrueMult1,maxMCTriggerPrimTrackMeanPtTrueMult1);\r
625   fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");\r
626   fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");\r
627   fMCTriggerPrimTrackMeanPtTrueMult1->Sumw2();\r
628 \r
629   Int_t binsMCTriggerPrimTrackMeanPtMult1[2]={100,150};\r
630   Double_t minMCTriggerPrimTrackMeanPtMult1[2]={0.,-0.5}; \r
631   Double_t maxMCTriggerPrimTrackMeanPtMult1[2]={10.,149.5}; \r
632   sprintf(name,"fMCTriggerPrimTrackMeanPtMult1");\r
633   sprintf(title,"event <mcPt>:mult");\r
634   \r
635   fMCTriggerPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtMult1,minMCTriggerPrimTrackMeanPtMult1,maxMCTriggerPrimTrackMeanPtMult1);\r
636   fMCTriggerPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");\r
637   fMCTriggerPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");\r
638   fMCTriggerPrimTrackMeanPtMult1->Sumw2();\r
639 \r
640   //\r
641   Int_t binsMCEventPrimTrackMeanPtTrueMult1[2]={100,150};\r
642   Double_t minMCEventPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; \r
643   Double_t maxMCEventPrimTrackMeanPtTrueMult1[2]={10.,149.5}; \r
644   sprintf(name,"fMCEventPrimTrackMeanPtTrueMult1");\r
645   sprintf(title,"event <mcPt>:true_mult");\r
646   \r
647   fMCEventPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtTrueMult1,minMCEventPrimTrackMeanPtTrueMult1,maxMCEventPrimTrackMeanPtTrueMult1);\r
648   fMCEventPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");\r
649   fMCEventPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");\r
650   fMCEventPrimTrackMeanPtTrueMult1->Sumw2();\r
651 \r
652   Int_t binsMCEventPrimTrackMeanPtMult1[2]={100,150};\r
653   Double_t minMCEventPrimTrackMeanPtMult1[2]={0.,-0.5}; \r
654   Double_t maxMCEventPrimTrackMeanPtMult1[2]={10.,149.5}; \r
655   sprintf(name,"fMCEventPrimTrackMeanPtMult1");\r
656   sprintf(title,"event <mcPt>:mult");\r
657   \r
658   fMCEventPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtMult1,minMCEventPrimTrackMeanPtMult1,maxMCEventPrimTrackMeanPtMult1);\r
659   fMCEventPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");\r
660   fMCEventPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");\r
661   fMCEventPrimTrackMeanPtMult1->Sumw2();\r
662 \r
663 \r
664 \r
665 \r
666 \r
667 \r
668   //\r
669   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) \r
670   {\r
671     // THnSparse track histograms\r
672     //\r
673     Int_t binsRecTrackHist1[3]={ptNbins,etaNbins,90};\r
674     Double_t minRecTrackHist1[3]={0.,-1.,0.}; \r
675     Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()};\r
676     sprintf(name,"fRecTrackHist1_%d",i);\r
677     sprintf(title,"Pt:Eta:Phi");\r
678   \r
679     fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1);\r
680     fRecTrackHist1[i]->SetBinEdges(0,binsPt);\r
681     fRecTrackHist1[i]->SetBinEdges(1,binsEta);\r
682     fRecTrackHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");\r
683     fRecTrackHist1[i]->GetAxis(1)->SetTitle("Eta");\r
684     fRecTrackHist1[i]->GetAxis(2)->SetTitle("Phi (rad)");\r
685     fRecTrackHist1[i]->Sumw2();\r
686   }\r
687 \r
688   //\r
689   Int_t binsCorrRecTrackMultHist1[3]={ptNbins,etaNbins,150};\r
690   Double_t minCorrRecTrackMultHist1[3]={0.,-1.,-0.5}; \r
691   Double_t maxCorrRecTrackMultHist1[3]={20.,1.,149.5};\r
692 \r
693   Int_t binsCorrRecTrackTrueMultHist1[3]={ptNbins,etaNbins,150};\r
694   Double_t minCorrRecTrackTrueMultHist1[3]={0.,-1.,-0.5}; \r
695   Double_t maxCorrRecTrackTrueMultHist1[3]={20.,1.,149.5};\r
696 \r
697   Int_t binsCorrRecTrackTrueMultHist2[3]={ptNbins,150,150};\r
698   Double_t minCorrRecTrackTrueMultHist2[3]={0.,-0.5,-0.5}; \r
699   Double_t maxCorrRecTrackTrueMultHist2[3]={20.,149.5,149.5};\r
700 \r
701   //\r
702   Int_t binsCorrRecTrackMeanPtMultHist1[2]={100,150};\r
703   Double_t minCorrRecTrackMeanPtMultHist1[2]={0.,-0.5}; \r
704   Double_t maxCorrRecTrackMeanPtMultHist1[2]={10.,149.5};\r
705 \r
706   Int_t binsCorrRecTrackMeanPtTrueMultHist1[2]={100,150};\r
707   Double_t minCorrRecTrackMeanPtTrueMultHist1[2]={0.,-0.5}; \r
708   Double_t maxCorrRecTrackMeanPtTrueMultHist1[2]={10.,149.5};\r
709 \r
710   Int_t binsCorrRecTrackPt1[1]={200};\r
711   Double_t minCorrRecTrackPt1[1]={0.}; \r
712   Double_t maxCorrRecTrackPt1[1]={10.};\r
713 \r
714   for(Int_t i=0; i<8; i++) \r
715   {\r
716     // THnSparse track histograms\r
717     sprintf(name,"fCorrRecTrackMultHist1_%d",i);\r
718     sprintf(title,"Pt:Eta:mult");\r
719     fCorrRecTrackMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackMultHist1,minCorrRecTrackMultHist1,maxCorrRecTrackMultHist1);\r
720     fCorrRecTrackMultHist1[i]->SetBinEdges(0,binsPt);\r
721     fCorrRecTrackMultHist1[i]->SetBinEdges(1,binsEta);\r
722     fCorrRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");\r
723     fCorrRecTrackMultHist1[i]->GetAxis(1)->SetTitle("Eta");\r
724     fCorrRecTrackMultHist1[i]->GetAxis(2)->SetTitle("multiplicity");\r
725     fCorrRecTrackMultHist1[i]->Sumw2();\r
726 \r
727     // THnSparse track histograms\r
728     sprintf(name,"fCorrRecTrackTrueMultHist1_%d",i);\r
729     sprintf(title,"Pt:Eta:true_mult");\r
730     fCorrRecTrackTrueMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist1,minCorrRecTrackTrueMultHist1,maxCorrRecTrackTrueMultHist1);\r
731     fCorrRecTrackTrueMultHist1[i]->SetBinEdges(0,binsPt);\r
732     fCorrRecTrackTrueMultHist1[i]->SetBinEdges(1,binsEta);\r
733     fCorrRecTrackTrueMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");\r
734     fCorrRecTrackTrueMultHist1[i]->GetAxis(1)->SetTitle("Eta");\r
735     fCorrRecTrackTrueMultHist1[i]->GetAxis(2)->SetTitle("true multiplicity");\r
736     fCorrRecTrackTrueMultHist1[i]->Sumw2();\r
737 \r
738     //\r
739     sprintf(name,"fCorrRecTrackTrueMultHist2_%d",i);\r
740     sprintf(title,"Pt:mult:true_mult");\r
741     fCorrRecTrackTrueMultHist2[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist2,minCorrRecTrackTrueMultHist2,maxCorrRecTrackTrueMultHist2);\r
742     fCorrRecTrackTrueMultHist2[i]->SetBinEdges(0,binsPt);\r
743     fCorrRecTrackTrueMultHist2[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");\r
744     fCorrRecTrackTrueMultHist2[i]->GetAxis(1)->SetTitle("multiplicity");\r
745     fCorrRecTrackTrueMultHist2[i]->GetAxis(2)->SetTitle("true multiplicity");\r
746     fCorrRecTrackTrueMultHist2[i]->Sumw2();\r
747 \r
748     // THnSparse track histograms\r
749     sprintf(name,"fCorrRecTrackMeanPtMultHist1_%d",i);\r
750     sprintf(title,"<Pt>:mult");\r
751     fCorrRecTrackMeanPtMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtMultHist1,minCorrRecTrackMeanPtMultHist1,maxCorrRecTrackMeanPtMultHist1);\r
752     fCorrRecTrackMeanPtMultHist1[i]->GetAxis(0)->SetTitle("<Pt> (GeV/c)");\r
753     fCorrRecTrackMeanPtMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");\r
754     fCorrRecTrackMeanPtMultHist1[i]->Sumw2();\r
755 \r
756     // THnSparse track histograms\r
757     sprintf(name,"fCorrRecTrackMeanPtTrueMultHist1_%d",i);\r
758     sprintf(title,"<Pt>:true_mult");\r
759     fCorrRecTrackMeanPtTrueMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtTrueMultHist1,minCorrRecTrackMeanPtTrueMultHist1,maxCorrRecTrackMeanPtTrueMultHist1);\r
760     fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(0)->SetTitle("<Pt> (GeV/c)");\r
761     fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(1)->SetTitle("true multiplicity");\r
762     fCorrRecTrackMeanPtTrueMultHist1[i]->Sumw2();\r
763 \r
764     sprintf(name,"fCorrRecTrackPt1_%d",i);\r
765     sprintf(title,"pt small bining");\r
766     fCorrRecTrackPt1[i] = new THnSparseF(name,title,1,binsCorrRecTrackPt1,minCorrRecTrackPt1,maxCorrRecTrackPt1);\r
767     fCorrRecTrackPt1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");\r
768     fCorrRecTrackPt1[i]->Sumw2();\r
769 \r
770   }\r
771 \r
772   Int_t binsEventMatrix[2]={zvNbins,150};\r
773   Double_t minEventMatrix[2]={-25.,-0.5};\r
774   Double_t maxEventMatrix[2]={25.,149.5};\r
775 \r
776   fMCAllEventMultHist1 = new THnSparseF("fMCAllEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
777   fMCAllEventMultHist1->SetBinEdges(0,binsZv);\r
778   fMCAllEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");\r
779   fMCAllEventMultHist1->GetAxis(1)->SetTitle("multiplicity");\r
780   fMCAllEventMultHist1->Sumw2();\r
781 \r
782   fMCAllNDEventMultHist1 = new THnSparseF("fMCAllNDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
783   fMCAllNDEventMultHist1->SetBinEdges(0,binsZv);\r
784   fMCAllNDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");\r
785   fMCAllNDEventMultHist1->GetAxis(1)->SetTitle("multiplicity");\r
786   fMCAllNDEventMultHist1->Sumw2();\r
787 \r
788   fMCAllNSDEventMultHist1 = new THnSparseF("fMCAllNSDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
789   fMCAllNSDEventMultHist1->SetBinEdges(0,binsZv);\r
790   fMCAllNSDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");\r
791   fMCAllNSDEventMultHist1->GetAxis(1)->SetTitle("multiplicity");\r
792   fMCAllNSDEventMultHist1->Sumw2();\r
793 \r
794   fMCTriggerMultHist1 = new THnSparseF("fMCTriggerMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
795   fMCTriggerMultHist1->SetBinEdges(0,binsZv);\r
796   fMCTriggerMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");\r
797   fMCTriggerMultHist1->GetAxis(1)->SetTitle("multiplicity");\r
798   fMCTriggerMultHist1->Sumw2();\r
799 \r
800   fMCEventMultHist1 = new THnSparseF("fMCEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
801   fMCEventMultHist1->SetBinEdges(0,binsZv);\r
802   fMCEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");\r
803   fMCEventMultHist1->GetAxis(1)->SetTitle("multiplicity");\r
804   fMCEventMultHist1->Sumw2();\r
805 \r
806   for(Int_t i=0; i<5; i++) \r
807   {\r
808     // event corrected histograms\r
809     sprintf(name,"fCorrRecEventHist1_%d",i);\r
810     sprintf(title,"mcZv:mult");\r
811     fCorrRecEventHist1[i] = new THnSparseF("fCorrRecEventHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
812     fCorrRecEventHist1[i]->SetBinEdges(0,binsZv);\r
813     fCorrRecEventHist1[i]->GetAxis(0)->SetTitle("Zv (cm)");\r
814     fCorrRecEventHist1[i]->GetAxis(1)->SetTitle("multiplicity");\r
815     fCorrRecEventHist1[i]->Sumw2();\r
816 \r
817     // empty event corrected histograms\r
818     sprintf(name,"fCorrRecEventHist2_%d",i);\r
819     sprintf(title,"mcZv:mult");\r
820     fCorrRecEventHist2[i] = new THnSparseF("fCorrRecEventHist2","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
821     fCorrRecEventHist2[i]->SetBinEdges(0,binsZv);\r
822     fCorrRecEventHist2[i]->GetAxis(0)->SetTitle("Zv (cm)");\r
823     fCorrRecEventHist2[i]->GetAxis(1)->SetTitle("multiplicity");\r
824     fCorrRecEventHist2[i]->Sumw2();\r
825   }\r
826   \r
827   //\r
828   // cosmics histo\r
829   //\r
830   Int_t binsCosmicsHisto[3]=  {151, 300, ptNbins};\r
831   Double_t minCosmicsHisto[3]={-1.5, -2.*TMath::Pi(), 0.0}; \r
832   Double_t maxCosmicsHisto[3]={ 1.5, 2.*TMath::Pi(), 16.0}; \r
833   sprintf(name,"fCosmicsHisto");\r
834   sprintf(title,"deta:dphi:pt");\r
835   \r
836   fCosmicsHisto = new THnSparseF(name,title,3,binsCosmicsHisto,minCosmicsHisto,maxCosmicsHisto);\r
837   fCosmicsHisto->SetBinEdges(2,binsPt);\r
838   fCosmicsHisto->GetAxis(0)->SetTitle("#Delta#eta");\r
839   fCosmicsHisto->GetAxis(1)->SetTitle("#Delta#phi (rad)");\r
840   fCosmicsHisto->GetAxis(2)->SetTitle("pt (GV/c)");\r
841   fCosmicsHisto->Sumw2();\r
842 \r
843   // init output folder\r
844   fCorrectionFolder = CreateFolder("folderdNdPt","Correction dNdPt Folder");\r
845 \r
846   // init correction matrices\r
847   TFile *file = (TFile *)TFile::Open(fCorrMatrixFileName.Data()); \r
848   if(!file) { \r
849     AliDebug(AliLog::kError, "file with efficiency matrices not available");\r
850     printf("file with efficiency matrices not available \n");\r
851   } else {\r
852     TFolder *folder = (TFolder *)file->FindObjectAny("folderdNdPt");\r
853     if(!folder) { \r
854       AliDebug(AliLog::kError, "file without folderdNdPt");\r
855       printf("file without folderdNdPt \n");\r
856     } else {\r
857       // rec. event mult vs true multiplicity \r
858       fEventMultCorrelationMatrix = (THnSparseF*)folder->FindObject("event_mult_correlation_matrix");\r
859       if(!fEventMultCorrelationMatrix) {\r
860          Printf("No %s matrix \n", "event_mult_correlation_matrix");\r
861       }\r
862 \r
863       //\r
864       // event level corrections (zv,mult_MB)\r
865       //\r
866  \r
867       // trigger bias correction (MBtoND) \r
868       fCorrTriggerMBtoNDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoND_corr_matrix");\r
869       if(!fCorrTriggerMBtoNDEventMatrix) {\r
870          Printf("No %s matrix \n", "zv_mult_trig_MBtoND_corr_matrix");\r
871       }\r
872 \r
873       // trigger bias correction (MBtoNSD)\r
874       fCorrTriggerMBtoNSDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoNSD_corr_matrix");\r
875       if(!fCorrTriggerMBtoNSDEventMatrix) {\r
876          Printf("No %s matrix \n", "zv_mult_trig_MBtoNSD_corr_matrix");\r
877       }\r
878 \r
879       // trigger bias correction (MBtoInel)\r
880       fCorrTriggerMBtoInelEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoInel_corr_matrix");\r
881       if(!fCorrTriggerMBtoInelEventMatrix) {\r
882          Printf("No %s matrix \n", "zv_mult_trig_MBtoInel_corr_matrix"); \r
883       }\r
884      \r
885       // vertex reconstruction efficiency correction\r
886       fCorrEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_event_corr_matrix");\r
887       if(!fCorrEventMatrix) {\r
888          Printf("No %s matrix \n", "zv_mult_event_corr_matrix");\r
889       }\r
890 \r
891       //\r
892       // histogram needed for empty events corrections\r
893       //\r
894       fZvNorm = (TH1D*)folder->FindObject("zv_distribution_norm");\r
895       if(!fZvNorm) {\r
896          Printf("No %s matrix \n", "fZvNorm");\r
897       }\r
898 \r
899       fZvEmptyEventsNorm = (TH1D*)folder->FindObject("zv_empty_events_norm");\r
900       if(!fZvEmptyEventsNorm) {\r
901          Printf("No %s matrix \n", "fZvEmptyEventsNorm");\r
902       }\r
903 \r
904       //\r
905       // track-event level corrections (zv,pt,eta)\r
906       //\r
907 \r
908       // trigger bias correction (MBtoND) \r
909       fCorrTriggerMBtoNDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoND_corr_matrix");\r
910       if(!fCorrTriggerMBtoNDTrackEventMatrix) {\r
911          Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoND_corr_matrix");\r
912       }\r
913 \r
914       // trigger bias correction (MBtoNSD)\r
915       fCorrTriggerMBtoNSDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoNSD_corr_matrix");\r
916       if(!fCorrTriggerMBtoNSDTrackEventMatrix) {\r
917          Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoNSD_corr_matrix");\r
918       }\r
919 \r
920       // trigger bias correction (MBtoInel) \r
921       fCorrTriggerMBtoInelTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoInel_corr_matrix");\r
922       if(!fCorrTriggerMBtoInelTrackEventMatrix) {\r
923          Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoInel_corr_matrix");\r
924       }\r
925     \r
926       // vertex reconstruction efficiency correction (zv,pt,eta)\r
927       fCorrTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_event_corr_matrix");\r
928       if(!fCorrTrackEventMatrix) {\r
929          Printf("No %s matrix \n", "zv_pt_eta_track_event_corr_matrix");\r
930       }\r
931 \r
932       // track reconstruction efficiency correction (zv,pt,eta)\r
933       fCorrTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_corr_matrix");\r
934       if(!fCorrTrackMatrix) {\r
935          Printf("No %s matrix \n", "zv_pt_eta_track_corr_matrix");\r
936       }\r
937 \r
938       // high pt track reconstruction efficiency correction (zv,pt,eta)\r
939       fCorrHighPtTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_highPt_track_corr_matrix");\r
940       if(!fCorrHighPtTrackMatrix) {\r
941          Printf("No %s matrix \n", "zv_pt_eta_highPt_track_corr_matrix");\r
942       }\r
943 \r
944       // secondary tracks contamination correction (zv,pt,eta)\r
945       fContTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_cont_matrix");\r
946       if(!fContTrackMatrix) {\r
947          Printf("No %s matrix \n", "zv_pt_eta_track_cont_matrix");\r
948       }\r
949 \r
950       // multiply reconstructed tracks correction\r
951       fContMultTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_mult_track_cont_matrix");\r
952       if(!fContMultTrackMatrix) {\r
953          Printf("No %s matrix \n", "zv_pt_eta_mult_track_cont_matrix");\r
954       }\r
955     }\r
956   }\r
957 \r
958 }\r
959 \r
960 //_____________________________________________________________________________\r
961 void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)\r
962 {\r
963   //\r
964   // Process real and/or simulated events\r
965   //\r
966   if(!esdEvent) {\r
967     AliDebug(AliLog::kError, "esdEvent not available");\r
968     return;\r
969   }\r
970 \r
971   // get selection cuts\r
972   AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
973   AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
974   AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
975 \r
976   if(!evtCuts || !accCuts  || !esdTrackCuts) {\r
977     AliDebug(AliLog::kError, "cuts not available");\r
978     return;\r
979   }\r
980 \r
981   // trigger selection\r
982   Bool_t isEventTriggered = kTRUE;\r
983   if(evtCuts->IsTriggerRequired())  \r
984   {\r
985     AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();\r
986     if(!trigSel) {\r
987       AliDebug(AliLog::kError, "cannot get trigSel");\r
988       return;\r
989     }\r
990 \r
991     if(IsUseMCInfo()) { \r
992       //static AliTriggerAnalysis* triggerAnalysis = new AliTriggerAnalysis;\r
993       //isEventTriggered = triggerAnalysis->IsTriggerFired(esdEvent, GetTrigger());\r
994       trigSel->SetAnalyzeMC();\r
995       isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
996     }\r
997     else {\r
998       isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
999     }\r
1000   }\r
1001   \r
1002   // use MC information\r
1003   AliHeader* header = 0;\r
1004   AliGenEventHeader* genHeader = 0;\r
1005   AliStack* stack = 0;\r
1006   TArrayF vtxMC(3);\r
1007   AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;\r
1008   Int_t multMCTrueTracks = 0;\r
1009 \r
1010   if(IsUseMCInfo())\r
1011   {\r
1012     if(!mcEvent) {\r
1013       AliDebug(AliLog::kError, "mcEvent not available");\r
1014       return;\r
1015     }\r
1016 \r
1017     // get MC event header\r
1018     header = mcEvent->Header();\r
1019     if (!header) {\r
1020       AliDebug(AliLog::kError, "Header not available");\r
1021       return;\r
1022     }\r
1023     // MC particle stack\r
1024     stack = mcEvent->Stack();\r
1025     if (!stack) {\r
1026       AliDebug(AliLog::kError, "Stack not available");\r
1027       return;\r
1028     }\r
1029 \r
1030     // get event type (ND=0x1, DD=0x2, SD=0x4)\r
1031     evtType = AliPWG0Helper::GetEventProcessType(header);\r
1032     //Printf("evtType %d \n", evtType);\r
1033     AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));\r
1034 \r
1035     // get MC vertex\r
1036     genHeader = header->GenEventHeader();\r
1037     if (!genHeader) {\r
1038       AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");\r
1039       return;\r
1040     }\r
1041     genHeader->PrimaryVertex(vtxMC);\r
1042 \r
1043     // Fill MC event histogram\r
1044     Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};\r
1045     fMCEventHist1->Fill(vMCEventHist1);\r
1046 \r
1047     // multipliticy of all MC primary tracks\r
1048     // in Zvtx, pt and eta ranges\r
1049     multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);\r
1050 \r
1051   } // end bUseMC\r
1052 \r
1053   // get reconstructed vertex  \r
1054   const AliESDVertex* vtxESD = 0; \r
1055   Bool_t isRecVertex = kFALSE;\r
1056   if(evtCuts->IsRecVertexRequired()) \r
1057   {\r
1058     Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();\r
1059     Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();\r
1060     vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); \r
1061     isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, GetAnalysisMode(), kFALSE); \r
1062   }\r
1063   if( IsUseMCInfo() &&  !evtCuts->IsRecVertexRequired() ) {\r
1064     vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced());\r
1065     isRecVertex = kTRUE;\r
1066   }\r
1067   Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; \r
1068   //printf("isEventOK %d, isRecVertex %d, nContributors %d, Zv %f\n",isEventOK, isRecVertex, vtxESD->GetNContributors(), vtxESD->GetZv());\r
1069 \r
1070   //\r
1071   // get multiplicity vertex contributors\r
1072   //\r
1073   Int_t multMBTracks = 0; \r
1074   if(GetAnalysisMode() == AlidNdPtHelper::kTPC || GetAnalysisMode() == AlidNdPtHelper::kMCRec) {  \r
1075     multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
1076   } \r
1077   else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || \r
1078           GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode() == AlidNdPtHelper::kMCRec || \r
1079           GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid) {\r
1080     //if(vtxESD->GetStatus())\r
1081     //   multMBTracks = vtxESD->GetNContributors();\r
1082 \r
1083     // origin Jan Fiete GO\r
1084     const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
1085     if (mult) {\r
1086       Int_t trackletCount = 0;\r
1087 \r
1088       for(Int_t i=0; i<mult->GetNumberOfTracklets(); ++i) {\r
1089         Float_t deltaPhi = mult->GetDeltaPhi(i);\r
1090         // prevent values to be shifted by 2 Pi()\r
1091         if (deltaPhi < -TMath::Pi())\r
1092           deltaPhi += TMath::Pi() * 2;\r
1093         if (deltaPhi > TMath::Pi())\r
1094           deltaPhi -= TMath::Pi() * 2;\r
1095 \r
1096          //if (fDeltaPhiCut > 0 && TMath::Abs(deltaPhi) > fDeltaPhiCut)\r
1097          // continue;\r
1098 \r
1099        trackletCount++;\r
1100        }\r
1101        //multMBTracks = mult->GetNumberOfTracklets();\r
1102        multMBTracks = trackletCount;\r
1103        //printf("trackletCount %d \n", trackletCount);\r
1104      }\r
1105      else {\r
1106        AliDebug(AliLog::kError, Form("Multiplicty %p", mult));\r
1107        return; \r
1108      }\r
1109   } \r
1110   else {\r
1111     AliDebug(AliLog::kError, Form("Found analysis type %s", GetAnalysisMode()));\r
1112     return; \r
1113   }\r
1114 \r
1115   //\r
1116   // correct event and track histograms\r
1117   //\r
1118   TObjArray *allChargedTracks=0;\r
1119   Int_t multRec=0, multRecTemp=0;\r
1120   Int_t *labelsRec=0;\r
1121   Bool_t isCosmic = kFALSE;\r
1122 \r
1123   if(isEventOK && isEventTriggered)\r
1124   {\r
1125     // get all charged tracks\r
1126     allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
1127     if(!allChargedTracks) return;\r
1128 \r
1129     Int_t entries = allChargedTracks->GetEntries();\r
1130     labelsRec = new Int_t[entries];\r
1131 \r
1132     // calculate mult of reconstructed tracks\r
1133 \r
1134     for(Int_t i=0; i<entries;++i) \r
1135     {\r
1136       AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);\r
1137       if(!track) continue;\r
1138       if(track->Charge()==0) continue;\r
1139 \r
1140 \r
1141       // only postive charged \r
1142       if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) \r
1143         continue;\r
1144       \r
1145       // only negative charged \r
1146       if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) \r
1147         continue;\r
1148 \r
1149       // cosmics analysis\r
1150       isCosmic = kFALSE;\r
1151       if( GetParticleMode()==AlidNdPtHelper::kCosmic )\r
1152       {\r
1153           for(Int_t j=0; j<entries;++j) \r
1154           {\r
1155             AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);\r
1156             if(!track1) continue;\r
1157             if(track1->Charge()==0) continue;\r
1158 \r
1159             if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && \r
1160                 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) \r
1161             { \r
1162               isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);\r
1163             }\r
1164             if(isCosmic) \r
1165             {\r
1166               Double_t vCosmicsHisto[3] = { track->Eta()+track1->Eta(), track->Phi()-track1->Phi(), track1->Pt() };\r
1167               fCosmicsHisto->Fill(vCosmicsHisto);\r
1168             }\r
1169           }\r
1170          \r
1171         if(!isCosmic) continue;\r
1172       }\r
1173 \r
1174       if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track)) \r
1175         multRecTemp++;\r
1176     }  \r
1177 \r
1178     //\r
1179     for(Int_t i=0; i<entries;++i) \r
1180     {\r
1181       AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);\r
1182       if(!track) continue;\r
1183       if(track->Charge()==0) continue;\r
1184 \r
1185 \r
1186       // only postive charged \r
1187       if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) \r
1188       continue;\r
1189       \r
1190       // only negative charged \r
1191       if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) \r
1192       continue;\r
1193         \r
1194       // track-level corrections\r
1195       if(esdTrackCuts->AcceptTrack(track)) \r
1196       {\r
1197         // cosmics analysis\r
1198         isCosmic = kFALSE;\r
1199         if( GetParticleMode()==AlidNdPtHelper::kCosmic )\r
1200         {\r
1201           for(Int_t j=0; j<entries;++j) \r
1202           {\r
1203             AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);\r
1204             if(!track1) continue;\r
1205             if(track1->Charge()==0) continue;\r
1206 \r
1207             if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && \r
1208                 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) \r
1209             { \r
1210               isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);\r
1211             }\r
1212           }\r
1213           if(!isCosmic) continue;\r
1214         }\r
1215 \r
1216         Bool_t isOK = kFALSE;\r
1217         Double_t x[3]; track->GetXYZ(x);\r
1218         Double_t b[3]; AliTracker::GetBxByBz(x,b);\r
1219 \r
1220         //\r
1221         // if TPC-ITS hybrid tracking (kTPCITSHybrid)\r
1222         // replace track parameters with TPC-ony track parameters\r
1223         //\r
1224         if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid ) \r
1225         {\r
1226           // Relate TPC-only tracks to SPD vertex\r
1227           isOK = track->RelateToVertexTPCBxByBz(esdEvent->GetPrimaryVertexSPD(), b, kVeryBig);\r
1228           if(!isOK) continue;\r
1229 \r
1230           // replace esd track parameters with TPCinner\r
1231           AliExternalTrackParam  *tpcTrack  = new AliExternalTrackParam(*(track->GetTPCInnerParam()));\r
1232           if (!tpcTrack) return;\r
1233           track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());\r
1234 \r
1235           if(tpcTrack) delete tpcTrack; \r
1236         } \r
1237 \r
1238         //\r
1239         if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate) \r
1240         {\r
1241            //\r
1242            // update track parameters\r
1243            //\r
1244            AliExternalTrackParam cParam;\r
1245            isOK = track->RelateToVertexTPC(esdEvent->GetPrimaryVertexSPD(),esdEvent->GetMagneticField(),kVeryBig,&cParam);\r
1246            if(!isOK) continue;\r
1247            track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());\r
1248 \r
1249            if(accCuts->AcceptTrack(track)) { \r
1250              FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp,multMCTrueTracks); \r
1251              labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
1252              multRec++;\r
1253            }\r
1254          }\r
1255          else if (GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) \r
1256          { \r
1257            //\r
1258            // Replace rec with MC\r
1259            //\r
1260            if(accCuts->AcceptTrack(track)) { \r
1261              FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxMC[2],multRecTemp, multMCTrueTracks); \r
1262              labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
1263              multRec++;\r
1264            }\r
1265          } \r
1266          else  {\r
1267            //\r
1268            // all the rest tracking scenarios\r
1269            //\r
1270            if(accCuts->AcceptTrack(track)) { \r
1271              FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp, multMCTrueTracks); \r
1272              labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
1273              multRec++;\r
1274            }\r
1275          }\r
1276        }\r
1277     }\r
1278     // event-level corrections\r
1279     if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) { \r
1280       FillHistograms(AlidNdPtHelper::kRecEvents,vtxMC[2],multMBTracks);\r
1281     }\r
1282     else {\r
1283       FillHistograms(AlidNdPtHelper::kRecEvents,vtxESD->GetZv(),multMBTracks);\r
1284     }\r
1285 \r
1286     // calculate meanPt from the event\r
1287     Double_t meanPtMult[8] = {0};  \r
1288     Double_t meanPtTrueMult[8] = {0};  \r
1289     for (Int_t i = 0; i<8; i++) {\r
1290       if(!fCorrRecTrackMultHist1[i]) continue;\r
1291       meanPtMult[i] = fCorrRecTrackPt1[i]->Projection(0)->GetMean();    \r
1292       Double_t vCorrRecTrackMeanPtMultHist1[2] = {meanPtMult[i],multRecTemp};\r
1293       fCorrRecTrackMeanPtMultHist1[i]->Fill(vCorrRecTrackMeanPtMultHist1); \r
1294       \r
1295       if( IsUseMCInfo() ) {\r
1296         if(!fCorrRecTrackPt1[i]) continue;\r
1297         meanPtTrueMult[i] = fCorrRecTrackPt1[i]->Projection(0)->GetMean();    \r
1298         Double_t vCorrRecTrackMeanPtTrueMultHist1[2] = {meanPtMult[i],multMCTrueTracks};\r
1299         fCorrRecTrackMeanPtTrueMultHist1[i]->Fill(vCorrRecTrackMeanPtTrueMultHist1); \r
1300       }\r
1301 \r
1302       // reset pt histo for the next event\r
1303       if(fCorrRecTrackPt1[i])  fCorrRecTrackPt1[i]->Reset();\r
1304     }\r
1305 \r
1306     // control event histograms\r
1307     Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};\r
1308     fRecEventHist1->Fill(vRecEventHist1);\r
1309 \r
1310     // correlation track multiplicity vs tracklet multiplicity\r
1311     Double_t vRecEventMultHist1[3] = {multRecTemp, multMBTracks};\r
1312     fRecEventMultHist1->Fill(vRecEventMultHist1);\r
1313 \r
1314   } \r
1315 \r
1316   // empty events corrections\r
1317   // no reconstructed zv\r
1318   if(isEventTriggered && multMBTracks==0) {\r
1319     if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) {\r
1320       FillHistograms(AlidNdPtHelper::kTriggeredEvents,vtxMC[2],multMBTracks);\r
1321     }\r
1322     else {\r
1323       Double_t zv = fZvNorm->GetRandom();\r
1324       FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks);\r
1325     }\r
1326   }\r
1327 \r
1328   if(IsUseMCInfo())  \r
1329   {\r
1330     // select MC events \r
1331     if(evtCuts->AcceptMCEvent(mcEvent))\r
1332     {\r
1333       //\r
1334       // event histograms\r
1335       //\r
1336       Double_t vMCEventMatrix[2] = {vtxMC[2],multMBTracks};\r
1337       fMCAllEventMultHist1->Fill(vMCEventMatrix);\r
1338       if(evtType == AliPWG0Helper::kND) {\r
1339         fMCAllNDEventMultHist1->Fill(vMCEventMatrix);\r
1340       }\r
1341       if(evtType != AliPWG0Helper::kSD) {\r
1342         fMCAllNSDEventMultHist1->Fill(vMCEventMatrix);\r
1343       }\r
1344       if(isEventTriggered) fMCTriggerMultHist1->Fill(vMCEventMatrix);\r
1345       if(isEventTriggered && isEventOK) fMCEventMultHist1->Fill(vMCEventMatrix);\r
1346 \r
1347       //\r
1348       // MC histograms for efficiency studies\r
1349       //\r
1350       Double_t sumPtMC = 0;\r
1351       Int_t nPart  = stack->GetNtrack();\r
1352       for (Int_t iMc = 0; iMc < nPart; ++iMc) \r
1353       {\r
1354         // print MC stack info\r
1355         //AlidNdPtHelper::PrintMCInfo(stack,iMc);\r
1356 \r
1357         TParticle* particle = stack->Particle(iMc);\r
1358         if (!particle)\r
1359         continue;\r
1360 \r
1361         // only charged particles\r
1362         Double_t charge = particle->GetPDG()->Charge()/3.;\r
1363         if (TMath::Abs(charge) < 0.001)\r
1364           continue;\r
1365 \r
1366         // only postive charged \r
1367         if(GetParticleMode() == AlidNdPtHelper::kPlus && charge  < 0.) \r
1368         continue;\r
1369       \r
1370         // only negative charged \r
1371         if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) \r
1372         continue;\r
1373       \r
1374         // physical primary\r
1375         Bool_t prim = stack->IsPhysicalPrimary(iMc);\r
1376         if(!prim) continue;\r
1377 \r
1378         // all primaries in acceptance\r
1379         if(!accCuts->AcceptTrack(particle)) continue;\r
1380 \r
1381         Double_t gpt = particle->Pt();\r
1382         Double_t geta = particle->Eta();\r
1383 \r
1384         // sum up pt in the event\r
1385         sumPtMC +=gpt; \r
1386 \r
1387         Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRec};          \r
1388         Double_t valMCAllTrackTrueMultHist1[3] = {gpt,geta,multMCTrueTracks};     \r
1389         Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRec,multMCTrueTracks};          \r
1390 \r
1391         fMCAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
1392         fMCAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
1393         fMCAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);\r
1394 \r
1395         if(evtType == AliPWG0Helper::kND) {\r
1396           fMCNDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
1397           fMCNDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
1398           fMCNDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);\r
1399         }\r
1400         if(evtType != AliPWG0Helper::kSD) {\r
1401           fMCNSDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
1402           fMCNSDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
1403           fMCNSDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);\r
1404         }\r
1405         if(isEventTriggered) { \r
1406           fMCTriggerPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
1407           fMCTriggerPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
1408           fMCTriggerPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);\r
1409         }\r
1410         if(isEventTriggered && isEventOK) { \r
1411           fMCEventPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
1412           fMCEventPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
1413           fMCEventPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);\r
1414         }\r
1415       }\r
1416 \r
1417       //\r
1418       // calculate <pt> in the event\r
1419       //\r
1420       Double_t meanPtMCMult = 0;\r
1421       Double_t meanPtMCTrueMult = 0;\r
1422       if(multRec) meanPtMCMult = sumPtMC/multRec; \r
1423       if(multMCTrueTracks) meanPtMCTrueMult = sumPtMC/multMCTrueTracks; \r
1424 \r
1425       Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRec};       \r
1426       Double_t valMCMeanPtTrueMult[2] = {meanPtMCTrueMult,multMCTrueTracks};      \r
1427 \r
1428       fMCAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
1429       fMCAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
1430 \r
1431       if(evtType == AliPWG0Helper::kND) {\r
1432           fMCNDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
1433           fMCNDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
1434       }\r
1435       if(evtType != AliPWG0Helper::kSD) {\r
1436           fMCNSDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
1437           fMCNSDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
1438       }\r
1439       if(isEventTriggered) { \r
1440           fMCTriggerPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
1441           fMCTriggerPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
1442       }\r
1443       if(isEventTriggered && isEventOK) { \r
1444           fMCEventPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
1445           fMCEventPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
1446       }\r
1447 \r
1448     }\r
1449   } // end bUseMC\r
1450 \r
1451   if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;\r
1452   if(labelsRec) delete [] labelsRec; labelsRec = 0;\r
1453 \r
1454   if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;\r
1455 }\r
1456 \r
1457 //_____________________________________________________________________________\r
1458 void AlidNdPtCorrection::FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBTracks) const\r
1459 {\r
1460   //\r
1461   // Fill corrected histograms\r
1462   //\r
1463 \r
1464   Double_t vEventMatrix[2] = {zv,multMBTracks};\r
1465   //\r
1466   // Correct for efficiency \r
1467   //\r
1468   if(eventObj == AlidNdPtHelper::kRecEvents && multMBTracks>0)  \r
1469   {\r
1470     Double_t corrToMBF = GetCorrFactZvMult(fCorrEventMatrix,zv,multMBTracks);\r
1471     Double_t corrToInelF = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);\r
1472     Double_t corrToNDF = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);\r
1473     Double_t corrToNSDF = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);\r
1474     //printf("corrToMBF %f, corrToInelF %f, corrToNDF %f corrToNSDF %f \n",corrToMBF,corrToInelF,corrToNDF,corrToNSDF);\r
1475 \r
1476     fCorrRecEventHist1[0]->Fill(vEventMatrix);\r
1477     fCorrRecEventHist1[1]->Fill(vEventMatrix,corrToMBF);\r
1478     fCorrRecEventHist1[2]->Fill(vEventMatrix,corrToMBF*corrToInelF);\r
1479     fCorrRecEventHist1[3]->Fill(vEventMatrix,corrToMBF*corrToNDF);\r
1480     fCorrRecEventHist1[4]->Fill(vEventMatrix,corrToMBF*corrToNSDF);\r
1481   }\r
1482 \r
1483   if(eventObj==AlidNdPtHelper::kTriggeredEvents && multMBTracks==0) // empty triggered events\r
1484   {\r
1485     Int_t bin = fZvEmptyEventsNorm->FindBin(zv);\r
1486     Double_t factZ = fZvEmptyEventsNorm->GetBinContent(bin);\r
1487     Double_t corrToInelF0 = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);\r
1488     Double_t corrToNDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);\r
1489     Double_t corrToNSDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);\r
1490     //printf("factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factZ,corrToInelF0,corrToNDF0,corrToNSDF0);\r
1491 \r
1492     fCorrRecEventHist2[0]->Fill(vEventMatrix);\r
1493     fCorrRecEventHist2[1]->Fill(vEventMatrix,factZ);\r
1494     fCorrRecEventHist2[2]->Fill(vEventMatrix,factZ*corrToInelF0);\r
1495     fCorrRecEventHist2[3]->Fill(vEventMatrix,factZ*corrToNDF0);\r
1496     fCorrRecEventHist2[4]->Fill(vEventMatrix,factZ*corrToNSDF0);\r
1497   }\r
1498 }\r
1499 \r
1500 //_____________________________________________________________________________\r
1501 void AlidNdPtCorrection::FillHistograms(AliESDtrack * const esdTrack, AliStack * const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t mult, Int_t trueMult) const\r
1502 {\r
1503   //\r
1504   // Fill ESD track and MC histograms \r
1505   //\r
1506   if(!esdTrack) return;\r
1507 \r
1508   //Float_t q = esdTrack->Charge();\r
1509   Float_t pt = esdTrack->Pt();\r
1510   Float_t eta = esdTrack->Eta();\r
1511   Float_t phi = esdTrack->Phi();\r
1512 \r
1513   if(stack && GetAnalysisMode() == AlidNdPtHelper::kMCRec) \r
1514   {\r
1515     Int_t label = TMath::Abs(esdTrack->GetLabel());\r
1516    \r
1517     TParticle* particle = stack->Particle(label);\r
1518     if(!particle) return;\r
1519    \r
1520     Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3\r
1521     if(TMath::Abs(gq)<0.001) return;\r
1522     Float_t gpt = particle->Pt();\r
1523     Float_t geta = particle->Eta();\r
1524     Float_t gphi = particle->Phi();\r
1525 \r
1526     // replace reconstructed values with MC\r
1527     pt = gpt;\r
1528     eta = geta;\r
1529     phi = gphi;\r
1530   }\r
1531 \r
1532   //\r
1533   // Fill histograms\r
1534   //\r
1535   Double_t values[3] = {pt,eta,phi};      \r
1536   fRecTrackHist1[trackObj]->Fill(values);\r
1537 \r
1538   //\r
1539   // Correct for contamination and efficiency \r
1540   //\r
1541   if(trackObj == AlidNdPtHelper::kRecTracks || GetAnalysisMode() == AlidNdPtHelper::kMCRec)  \r
1542   {\r
1543     // track level corrections\r
1544     Double_t trackEffF = 1.0;  \r
1545     if(pt < 2.5) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta);\r
1546     else trackEffF = GetCorrFactZvPtEta(fCorrHighPtTrackMatrix,zv,pt,eta);\r
1547 \r
1548     Double_t trackContF = GetContFactZvPtEta(fContTrackMatrix,zv,pt,eta);\r
1549     Double_t multTrackContF = GetContFactZvPtEta(fContMultTrackMatrix,zv,pt,eta);\r
1550     //printf("zv %f, pt %f, eta %f \n",zv,pt,eta);\r
1551     //printf("trackEffF %f, trackContF %f, multTrackContF %f \n", trackEffF, trackContF, multTrackContF);\r
1552    \r
1553     // track-event level corrections\r
1554     Double_t vertexEffF = GetCorrFactZvPtEta(fCorrTrackEventMatrix,zv,pt,eta);\r
1555     Double_t trigMBToInel = GetCorrFactZvPtEta(fCorrTriggerMBtoInelTrackEventMatrix,zv,pt,eta);  \r
1556     Double_t trigMBToND = GetCorrFactZvPtEta(fCorrTriggerMBtoNDTrackEventMatrix,zv,pt,eta);\r
1557     Double_t trigMBToNSD = GetCorrFactZvPtEta(fCorrTriggerMBtoNSDTrackEventMatrix,zv,pt,eta);\r
1558     //printf("vertexEffF %f, trigMBToInel %f, trigMBToNSD %f \n", vertexEffF, trigMBToInel, trigMBToNSD);\r
1559     \r
1560     Double_t corrF[8] = { 1.0, \r
1561                           trackContF,\r
1562                           trackContF*trackEffF,\r
1563                           trackContF*trackEffF*multTrackContF,\r
1564                           trackContF*trackEffF*multTrackContF*vertexEffF,\r
1565                           trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToInel,\r
1566                           trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToND,\r
1567                           trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToNSD\r
1568                          }; \r
1569  \r
1570     // Fill histograms\r
1571     Double_t valCorrRecTrackMultHist1[3] = {pt,eta,mult};         \r
1572     Double_t valCorrRecTrackPt1[1] = {pt};        \r
1573     for(Int_t i=0; i<8; i++) {\r
1574       fCorrRecTrackMultHist1[i]->Fill(valCorrRecTrackMultHist1,corrF[i]);\r
1575       fCorrRecTrackPt1[i]->Fill(valCorrRecTrackPt1,corrF[i]);\r
1576 \r
1577       if( IsUseMCInfo() ) {\r
1578         Double_t valCorrRecTrackTrueMultHist1[3] = {pt,eta,trueMult};     \r
1579         Double_t valCorrRecTrackTrueMultHist2[3] = {pt,mult,trueMult};    \r
1580 \r
1581         fCorrRecTrackTrueMultHist1[i]->Fill(valCorrRecTrackTrueMultHist1,corrF[i]);\r
1582         fCorrRecTrackTrueMultHist2[i]->Fill(valCorrRecTrackTrueMultHist2,corrF[i]);\r
1583       } \r
1584     }\r
1585   }\r
1586 }\r
1587 \r
1588 void AlidNdPtCorrection::FillHistograms(AliStack * const stack, Int_t /*label*/, AlidNdPtHelper::TrackObject /*trackObj*/, Int_t /*mult*/) const\r
1589 {\r
1590   // Fill MC histograms\r
1591   if(!stack) return;\r
1592 \r
1593   /*\r
1594   TParticle* particle = stack->Particle(label);\r
1595   if(!particle) return;\r
1596 \r
1597   Int_t mother_pdg = -1;\r
1598   TParticle* mother = 0;\r
1599 \r
1600   //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);\r
1601   Int_t motherLabel = particle->GetMother(0); \r
1602   if(motherLabel>0) mother = stack->Particle(motherLabel);\r
1603   if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
1604   Int_t mech = particle->GetUniqueID(); // production mechanism\r
1605 \r
1606   Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 \r
1607   Float_t gpt = particle->Pt();\r
1608   Float_t qgpt = particle->Pt() * gq;\r
1609   Float_t geta = particle->Eta();\r
1610   Float_t gphi = particle->Phi();\r
1611   Float_t gpz = particle->Pz();\r
1612 \r
1613   Bool_t prim = stack->IsPhysicalPrimary(label);\r
1614   Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();\r
1615 \r
1616   Int_t pid=-1;\r
1617   if (TMath::Abs(particle->GetPdgCode()) == kElectron)         { pid = 0; }\r
1618     else if (TMath::Abs(particle->GetPdgCode()) == kMuonMinus) { pid = 1; }\r
1619     else if (TMath::Abs(particle->GetPdgCode()) == kPiPlus)    { pid = 2; }\r
1620     else if (TMath::Abs(particle->GetPdgCode()) == kKPlus)     { pid = 3; }\r
1621     else if (TMath::Abs(particle->GetPdgCode()) == kProton)    { pid = 4; }\r
1622     else                                                       { pid = 5; }\r
1623     */\r
1624 \r
1625   //if(!prim) printf("prim_mother %d, mother %d, particle %d, production mech %d\n",prim_mother->GetPdgCode(),mother->GetPdgCode(), particle->GetPdgCode(),mech);\r
1626   \r
1627 }\r
1628 \r
1629 //_____________________________________________________________________________\r
1630 Double_t AlidNdPtCorrection::GetCorrFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {\r
1631 // return correction factor F(zv,pt,eta)\r
1632 \r
1633  if(!hist) return 1.;\r
1634 \r
1635  //\r
1636  TAxis *ax = hist->GetAxis(0);\r
1637  TAxis *ay = hist->GetAxis(1);\r
1638  TAxis *az = hist->GetAxis(2);\r
1639 \r
1640  Int_t binx = ax->FindBin(zv);\r
1641  Int_t biny = ay->FindBin(pt);\r
1642  Int_t binz = az->FindBin(eta);\r
1643  Int_t dim[3] = {binx,biny,binz};\r
1644 \r
1645  Double_t fact  = hist->GetBinContent(dim);  \r
1646 \r
1647 return fact;\r
1648 }\r
1649 \r
1650 //_____________________________________________________________________________\r
1651 Double_t AlidNdPtCorrection::GetContFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {\r
1652 // return contamination correction factor F(zv,pt,eta)\r
1653 \r
1654  if(!hist) return 1.0;\r
1655 \r
1656  //\r
1657  TAxis *ax = hist->GetAxis(0);\r
1658  TAxis *ay = hist->GetAxis(1);\r
1659  TAxis *az = hist->GetAxis(2);\r
1660 \r
1661  Int_t binx = ax->FindBin(zv);\r
1662  Int_t biny = ay->FindBin(pt);\r
1663  Int_t binz = az->FindBin(eta);\r
1664  Int_t dim[3] = {binx,biny,binz};\r
1665 \r
1666  Double_t fact  = 1.0-hist->GetBinContent(dim);  \r
1667  //Double_t fact  = hist->GetBinContent(dim);  \r
1668 \r
1669 return fact;\r
1670 }\r
1671 \r
1672 //_____________________________________________________________________________\r
1673 Double_t AlidNdPtCorrection::GetCorrFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {\r
1674 // return correction factor F(zv,mult)\r
1675 \r
1676  if(!hist) return 1.;\r
1677 \r
1678  TAxis *ax = hist->GetAxis(0);\r
1679  TAxis *ay = hist->GetAxis(1);\r
1680  Int_t binx = ax->FindBin(zv);\r
1681  Int_t biny = ay->FindBin(mult);\r
1682  Int_t dim[2] = {binx,biny};\r
1683 \r
1684  Double_t fact  = hist->GetBinContent(dim);  \r
1685 \r
1686 \r
1687 return fact;\r
1688 }\r
1689 \r
1690 //_____________________________________________________________________________\r
1691 Double_t AlidNdPtCorrection::GetContFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {\r
1692 // return contamination correction factor F(zv,mult)\r
1693 \r
1694  if(!hist) return 1.;\r
1695 \r
1696  TAxis *ax = hist->GetAxis(0);\r
1697  TAxis *ay = hist->GetAxis(1);\r
1698  Int_t binx = ax->FindBin(zv);\r
1699  Int_t biny = ay->FindBin(mult);\r
1700  Int_t dim[2] = {binx,biny};\r
1701  Double_t fact  = 1.0-hist->GetBinContent(dim);  \r
1702 \r
1703 return fact;\r
1704 }\r
1705 \r
1706 //_____________________________________________________________________________\r
1707 Long64_t AlidNdPtCorrection::Merge(TCollection* const list) \r
1708 {\r
1709   // Merge list of objects (needed by PROOF)\r
1710 \r
1711   if (!list)\r
1712   return 0;\r
1713 \r
1714   if (list->IsEmpty())\r
1715   return 1;\r
1716 \r
1717   TIterator* iter = list->MakeIterator();\r
1718   TObject* obj = 0;\r
1719 \r
1720   // collection of generated histograms\r
1721 \r
1722   Int_t count=0;\r
1723   while((obj = iter->Next()) != 0) {\r
1724     AlidNdPtCorrection* entry = dynamic_cast<AlidNdPtCorrection*>(obj);\r
1725     if (entry == 0) continue; \r
1726   \r
1727     fMCEventHist1->Add(entry->fMCEventHist1);\r
1728     fRecEventHist1->Add(entry->fRecEventHist1);\r
1729     fRecEventMultHist1->Add(entry->fRecEventMultHist1);\r
1730 \r
1731     fMCAllEventMultHist1->Add(entry->fMCAllEventMultHist1);\r
1732     fMCAllNDEventMultHist1->Add(entry->fMCAllNDEventMultHist1);\r
1733     fMCAllNSDEventMultHist1->Add(entry->fMCAllNSDEventMultHist1);\r
1734     fMCTriggerMultHist1->Add(entry->fMCTriggerMultHist1);\r
1735     fMCEventMultHist1->Add(entry->fMCEventMultHist1);\r
1736 \r
1737     fMCAllPrimTrackMultHist1->Add(entry->fMCAllPrimTrackMultHist1);\r
1738     fMCNDEventAllPrimTrackMultHist1->Add(entry->fMCNDEventAllPrimTrackMultHist1);\r
1739     fMCNSDEventAllPrimTrackMultHist1->Add(entry->fMCNSDEventAllPrimTrackMultHist1);\r
1740     fMCTriggerPrimTrackMultHist1->Add(entry->fMCTriggerPrimTrackMultHist1);\r
1741     fMCEventPrimTrackMultHist1->Add(entry->fMCEventPrimTrackMultHist1);\r
1742 \r
1743     fMCAllPrimTrackTrueMultHist1->Add(entry->fMCAllPrimTrackTrueMultHist1);\r
1744     fMCNDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNDEventAllPrimTrackTrueMultHist1);\r
1745     fMCNSDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist1);\r
1746     fMCTriggerPrimTrackTrueMultHist1->Add(entry->fMCTriggerPrimTrackTrueMultHist1);\r
1747     fMCEventPrimTrackTrueMultHist1->Add(entry->fMCEventPrimTrackTrueMultHist1);\r
1748 \r
1749     fMCAllPrimTrackTrueMultHist2->Add(entry->fMCAllPrimTrackTrueMultHist2);\r
1750     fMCNDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNDEventAllPrimTrackTrueMultHist2);\r
1751     fMCNSDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist2);\r
1752     fMCTriggerPrimTrackTrueMultHist2->Add(entry->fMCTriggerPrimTrackTrueMultHist2);\r
1753     fMCEventPrimTrackTrueMultHist2->Add(entry->fMCEventPrimTrackTrueMultHist2);\r
1754 \r
1755     fMCAllPrimTrackMeanPtMult1->Add(entry->fMCAllPrimTrackMeanPtMult1);\r
1756     fMCNDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtMult1);\r
1757     fMCNSDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtMult1);\r
1758     fMCTriggerPrimTrackMeanPtMult1->Add(entry->fMCTriggerPrimTrackMeanPtMult1);\r
1759     fMCEventPrimTrackMeanPtMult1->Add(entry->fMCEventPrimTrackMeanPtMult1);\r
1760 \r
1761     fMCAllPrimTrackMeanPtTrueMult1->Add(entry->fMCAllPrimTrackMeanPtTrueMult1);\r
1762     fMCNDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtTrueMult1);\r
1763     fMCNSDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtTrueMult1);\r
1764     fMCTriggerPrimTrackMeanPtTrueMult1->Add(entry->fMCTriggerPrimTrackMeanPtTrueMult1);\r
1765     fMCEventPrimTrackMeanPtTrueMult1->Add(entry->fMCEventPrimTrackMeanPtTrueMult1);\r
1766 \r
1767     fCosmicsHisto->Add(entry->fCosmicsHisto);\r
1768 \r
1769     for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {\r
1770       fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);\r
1771     }\r
1772 \r
1773     for(Int_t i=0; i<8; i++) {\r
1774       fCorrRecTrackMultHist1[i]->Add(entry->fCorrRecTrackMultHist1[i]);\r
1775       fCorrRecTrackTrueMultHist1[i]->Add(entry->fCorrRecTrackTrueMultHist1[i]);\r
1776       fCorrRecTrackTrueMultHist2[i]->Add(entry->fCorrRecTrackTrueMultHist2[i]);\r
1777 \r
1778       fCorrRecTrackMeanPtMultHist1[i]->Add(entry->fCorrRecTrackMeanPtMultHist1[i]);\r
1779       fCorrRecTrackMeanPtTrueMultHist1[i]->Add(entry->fCorrRecTrackMeanPtTrueMultHist1[i]);\r
1780 \r
1781       fCorrRecTrackPt1[i]->Add(entry->fCorrRecTrackPt1[i]);\r
1782     }\r
1783 \r
1784     for(Int_t i=0; i<5; i++) {\r
1785       fCorrRecEventHist1[i]->Add(entry->fCorrRecEventHist1[i]);\r
1786       fCorrRecEventHist2[i]->Add(entry->fCorrRecEventHist2[i]);\r
1787     }\r
1788 \r
1789   count++;\r
1790   }\r
1791 \r
1792 return count;\r
1793 }\r
1794  \r
1795 //____________________________________________________________________________\r
1796 Int_t AlidNdPtCorrection::GetTrueMult(THnSparse * const hist, Int_t mult) const\r
1797 {\r
1798 //\r
1799 // get multiplicity of primary particles\r
1800 //\r
1801  if(!hist) return 0;\r
1802  Int_t trueMult = 0;\r
1803 \r
1804  // 0 bins exluded\r
1805  TAxis *ax = hist->GetAxis(0);\r
1806  TAxis *ay = hist->GetAxis(1);\r
1807  ax->SetRange(1,ax->GetNbins());\r
1808  ay->SetRange(1,ay->GetNbins());\r
1809 \r
1810  // measured mult\r
1811  ax->SetRangeUser((Float_t)mult,(Float_t)mult); \r
1812 \r
1813  // get true multiplicity\r
1814  TH1D *h1 = (TH1D *)hist->Projection(1);\r
1815  trueMult = (Int_t)h1->GetMean();\r
1816 \r
1817  return trueMult;\r
1818 }\r
1819 \r
1820 //_____________________________________________________________________________\r
1821 void AlidNdPtCorrection::Analyse() \r
1822 {\r
1823   // Analyse histograms\r
1824   //\r
1825   TH1::AddDirectory(kFALSE);\r
1826   TH1 *h = 0, *hs=0, *hsc=0; \r
1827   TH2 *h2D = 0; \r
1828 \r
1829   TObjArray *aFolderObj = new TObjArray;\r
1830 \r
1831   //\r
1832   // get cuts\r
1833   //\r
1834   AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
1835   AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
1836   AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
1837 \r
1838   if(!evtCuts || !accCuts || !esdTrackCuts) {\r
1839     Error("AlidNdPtCutAnalysis::Analyse()", "cuts not available");\r
1840     return;\r
1841   }\r
1842 \r
1843   //\r
1844   // set min and max values\r
1845   //\r
1846   //Double_t minPt = accCuts->GetMinPt();\r
1847   //Double_t maxPt = accCuts->GetMaxPt();\r
1848   Double_t minEta = accCuts->GetMinEta();\r
1849   Double_t maxEta = accCuts->GetMaxEta()-0.00001;\r
1850  \r
1851   printf("minEta %f, maxEta %f \n",minEta, maxEta);\r
1852 \r
1853   //\r
1854   // cosmics background histo\r
1855   //\r
1856   h2D = fCosmicsHisto->Projection(0,1);\r
1857   h2D->SetName("deta_vs_dphi_cosmics");\r
1858   aFolderObj->Add(h2D);\r
1859 \r
1860   //\r
1861   // event level \r
1862   //\r
1863   h = fCorrRecEventHist1[0]->Projection(1);\r
1864   h->SetName("mult_event_not_corrected");\r
1865   aFolderObj->Add(h);\r
1866 \r
1867   h = fCorrRecEventHist1[1]->Projection(1);\r
1868   h->SetName("mult_event_vertex_corrected");\r
1869   aFolderObj->Add(h);\r
1870 \r
1871   h = fCorrRecEventHist1[2]->Projection(1);\r
1872   h->SetName("mult_trigger_vertex_corrected");\r
1873   aFolderObj->Add(h);\r
1874 \r
1875   h = fCorrRecEventHist1[3]->Projection(1);\r
1876   h->SetName("mult_ND_trigger_vertex_corrected");\r
1877   aFolderObj->Add(h);\r
1878 \r
1879   h = fCorrRecEventHist1[4]->Projection(1);\r
1880   h->SetName("mult_NSD_trigger_vertex_corrected");\r
1881   aFolderObj->Add(h);\r
1882 \r
1883   // empty events\r
1884   h = fCorrRecEventHist2[0]->Projection(1);\r
1885   h->SetName("mult_empty_event_not_corrected");\r
1886   aFolderObj->Add(h);\r
1887 \r
1888   h = fCorrRecEventHist2[1]->Projection(1);\r
1889   h->SetName("mult_empty_event_vertex_corrected");\r
1890   aFolderObj->Add(h);\r
1891 \r
1892   h = fCorrRecEventHist2[2]->Projection(1);\r
1893   h->SetName("mult_empty_trigger_vertex_corrected");\r
1894   aFolderObj->Add(h);\r
1895 \r
1896   h = fCorrRecEventHist2[3]->Projection(1);\r
1897   h->SetName("mult_empty_ND_trigger_vertex_corrected");\r
1898   aFolderObj->Add(h);\r
1899 \r
1900   h = fCorrRecEventHist2[4]->Projection(1);\r
1901   h->SetName("mult_empty_NSD_trigger_vertex_corrected");\r
1902   aFolderObj->Add(h);\r
1903  \r
1904   //\r
1905   // MC available\r
1906   //\r
1907   if(IsUseMCInfo()) {\r
1908 \r
1909   // mc \r
1910   h = fMCAllEventMultHist1->Projection(1);\r
1911   h->SetName("mc_mult_event_acc_prim");\r
1912   aFolderObj->Add(h);\r
1913 \r
1914   h = fMCAllNDEventMultHist1->Projection(1);\r
1915   h->SetName("mc_mult_ND_event_acc_prim");\r
1916   aFolderObj->Add(h);\r
1917 \r
1918   h = fMCAllNSDEventMultHist1->Projection(1);\r
1919   h->SetName("mc_mult_NSD_event_acc_prim");\r
1920   aFolderObj->Add(h);\r
1921 \r
1922   h = fMCTriggerMultHist1->Projection(1);\r
1923   h->SetName("mc_mult_trigger_acc_prim");\r
1924   aFolderObj->Add(h);\r
1925 \r
1926   h = fMCEventMultHist1->Projection(1);\r
1927   h->SetName("mc_mult_trigger_event_acc_prim");\r
1928   aFolderObj->Add(h);\r
1929 \r
1930 \r
1931   //\r
1932   // track level\r
1933   //\r
1934   \r
1935   // limit eta range\r
1936   for(Int_t i=0;i<8;i++) { \r
1937       //fCorrRecTrackMultHist1[i]->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
1938       //fCorrRecTrackMultHist1[i]->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
1939   }\r
1940   //fMCAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
1941   //fMCAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
1942 \r
1943   //fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
1944   //fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
1945 \r
1946   //fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
1947   //fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
1948 \r
1949   //fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
1950   //fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
1951 \r
1952   //fMCEventPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
1953   //fMCEventPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
1954 \r
1955   } // end use MC info \r
1956   \r
1957   //\r
1958   h2D = fCorrRecTrackMultHist1[3]->Projection(1,0);\r
1959   h2D->SetName("pt_eta_rec_track_mult_eff_cont_corrected");\r
1960   aFolderObj->Add(h2D);\r
1961 \r
1962   h2D = fCorrRecTrackMultHist1[4]->Projection(1,0);\r
1963   h2D->SetName("pt_eta_rec_event_track_mult_eff_cont_corrected");\r
1964   aFolderObj->Add(h2D);\r
1965 \r
1966   h2D = fCorrRecTrackMultHist1[5]->Projection(1,0);\r
1967   h2D->SetName("pt_eta_rec_trig_event_track_mult_eff_cont_corrected");\r
1968   aFolderObj->Add(h2D);\r
1969 \r
1970   h2D = fCorrRecTrackMultHist1[6]->Projection(1,0);\r
1971   h2D->SetName("pt_eta_rec_ND_trig_event_track_mult_eff_cont_corrected");\r
1972   aFolderObj->Add(h2D);\r
1973 \r
1974   h2D = fCorrRecTrackMultHist1[7]->Projection(1,0);\r
1975   h2D->SetName("pt_eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");\r
1976   aFolderObj->Add(h2D);\r
1977 \r
1978 \r
1979   //\r
1980   h2D = fCorrRecTrackMultHist1[3]->Projection(2,0);\r
1981   h2D->SetName("pt_mult_rec_track_mult_eff_cont_corrected");\r
1982   aFolderObj->Add(h2D);\r
1983 \r
1984   h2D = fCorrRecTrackMultHist1[4]->Projection(2,0);\r
1985   h2D->SetName("pt_mult_rec_event_track_mult_eff_cont_corrected");\r
1986   aFolderObj->Add(h2D);\r
1987 \r
1988   h2D = fCorrRecTrackMultHist1[5]->Projection(2,0);\r
1989   h2D->SetName("pt_mult_rec_trig_event_track_mult_eff_cont_corrected");\r
1990   aFolderObj->Add(h2D);\r
1991 \r
1992   h2D = fCorrRecTrackMultHist1[6]->Projection(2,0);\r
1993   h2D->SetName("pt_mult_rec_ND_trig_event_track_mult_eff_cont_corrected");\r
1994   aFolderObj->Add(h2D);\r
1995 \r
1996   h2D = fCorrRecTrackMultHist1[7]->Projection(2,0);\r
1997   h2D->SetName("pt_mult_rec_NSD_trig_event_track_mult_eff_cont_corrected");\r
1998   aFolderObj->Add(h2D);\r
1999 \r
2000   // pt axis\r
2001 \r
2002   h = fCorrRecTrackMultHist1[0]->Projection(0);\r
2003   h->SetName("pt_rec_track_not_corrected");\r
2004   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2005   hs->SetName("pt_rec_track_not_corrected_s");\r
2006   aFolderObj->Add(hs);\r
2007 \r
2008   //\r
2009   h = fCorrRecTrackMultHist1[1]->Projection(0);\r
2010   h->SetName("pt_rec_track_cont_corrected");\r
2011   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2012   hs->SetName("pt_rec_track_cont_corrected_s");\r
2013   aFolderObj->Add(hs);\r
2014 \r
2015   hsc = (TH1D*)hs->Clone("pt_rec_track_cont_corr_fact");\r
2016   hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));\r
2017   aFolderObj->Add(hsc);\r
2018 \r
2019   //\r
2020   h = fCorrRecTrackMultHist1[2]->Projection(0);\r
2021   h->SetName("pt_rec_track_eff_cont_corrected");\r
2022   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2023   hs->SetName("pt_rec_track_eff_cont_corrected_s");\r
2024   aFolderObj->Add(hs);\r
2025 \r
2026   hsc = (TH1D*)hs->Clone("pt_rec_track_eff_corr_fact");\r
2027   hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_cont_corrected_s"));\r
2028   aFolderObj->Add(hsc);\r
2029 \r
2030   //\r
2031   h = fCorrRecTrackMultHist1[3]->Projection(0);\r
2032   h->SetName("pt_rec_track_mult_eff_cont_corrected");\r
2033   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2034   hs->SetName("pt_rec_track_mult_eff_cont_corrected_s");\r
2035   aFolderObj->Add(hs);\r
2036 \r
2037   hsc = (TH1D*)hs->Clone("pt_rec_track_mult_corr_fact");\r
2038   hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_eff_cont_corrected_s"));\r
2039   aFolderObj->Add(hsc);\r
2040 \r
2041   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2042   hsc = (TH1D*)hs->Clone("pt_rec_track_mult_eff_cont_corr_fact");\r
2043   hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));\r
2044   aFolderObj->Add(hsc);\r
2045 \r
2046   hsc = (TH1D*)hs->Clone();\r
2047   hsc->SetName("pt_rec_track_mult_eff_cont_corrected_s_norm");\r
2048   hsc->Scale(1./(fCorrRecEventHist1[0]->Projection(1)->Integral()));\r
2049   aFolderObj->Add(hsc);\r
2050 \r
2051   //\r
2052   h = fCorrRecTrackMultHist1[4]->Projection(0);\r
2053   h->SetName("pt_rec_event_track_mult_eff_cont_corrected");\r
2054   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2055   hs->SetName("pt_rec_event_track_mult_eff_cont_corrected_s");\r
2056   aFolderObj->Add(hs);\r
2057 \r
2058   hsc = (TH1D*)hs->Clone();\r
2059   hsc->SetName("pt_rec_event_track_mult_eff_cont_corrected_s_norm");\r
2060   hsc->Scale(1./(fCorrRecEventHist1[1]->Projection(1)->Integral()+fCorrRecEventHist2[1]->Projection(1)->Integral()));\r
2061   aFolderObj->Add(hsc);\r
2062 \r
2063   //\r
2064   h = fCorrRecTrackMultHist1[5]->Projection(0);\r
2065   h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected");\r
2066   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2067   hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s");\r
2068   aFolderObj->Add(hs);\r
2069 \r
2070   hsc = (TH1D*)hs->Clone();\r
2071   hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");\r
2072   hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral() + fCorrRecEventHist2[2]->Projection(1)->Integral()));\r
2073   aFolderObj->Add(hsc);\r
2074 \r
2075    // positive eta\r
2076   fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(0., maxEta);\r
2077 \r
2078   h = fCorrRecTrackMultHist1[5]->Projection(0);\r
2079   h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_posEta");\r
2080   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2081   hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_posEta");\r
2082   aFolderObj->Add(hs);\r
2083 \r
2084   hsc = (TH1D*)hs->Clone();\r
2085   hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");\r
2086   hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));\r
2087   aFolderObj->Add(hsc);\r
2088 \r
2089   // negative eta\r
2090   fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(minEta, -0.00001);\r
2091 \r
2092   h = fCorrRecTrackMultHist1[5]->Projection(0);\r
2093   h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_negEta");\r
2094   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2095   hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_negEta");\r
2096   aFolderObj->Add(hs);\r
2097 \r
2098   hsc = (TH1D*)hs->Clone();\r
2099   hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");\r
2100   hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));\r
2101   aFolderObj->Add(hsc);\r
2102 \r
2103   fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[5]->GetAxis(1)->GetNbins());\r
2104 \r
2105   //\r
2106   h = fCorrRecTrackMultHist1[6]->Projection(0);\r
2107   h->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected");\r
2108   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2109   hs->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s");\r
2110   aFolderObj->Add(hs);\r
2111 \r
2112   hsc = (TH1D*)hs->Clone();\r
2113   hsc->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");\r
2114   hsc->Scale(1./(fCorrRecEventHist1[3]->Projection(1)->Integral()+fCorrRecEventHist2[3]->Projection(1)->Integral()));\r
2115   aFolderObj->Add(hsc);\r
2116 \r
2117   //\r
2118   h = fCorrRecTrackMultHist1[7]->Projection(0);\r
2119   h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected");\r
2120   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2121   hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s");\r
2122   aFolderObj->Add(hs);\r
2123 \r
2124   hsc = (TH1D*)hs->Clone();\r
2125   hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");\r
2126   hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral() + fCorrRecEventHist2[4]->Projection(1)->Integral()));\r
2127   aFolderObj->Add(hsc);\r
2128 \r
2129   //\r
2130   // positive eta\r
2131   //\r
2132   fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(0., maxEta);\r
2133 \r
2134   h = fCorrRecTrackMultHist1[7]->Projection(0);\r
2135   h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_posEta");\r
2136   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2137   hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_posEta");\r
2138   aFolderObj->Add(hs);\r
2139 \r
2140   hsc = (TH1D*)hs->Clone();\r
2141   hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");\r
2142   hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));\r
2143   aFolderObj->Add(hsc);\r
2144 \r
2145   //\r
2146   // negative eta\r
2147   //\r
2148   fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(minEta, -0.00001);\r
2149 \r
2150   h = fCorrRecTrackMultHist1[7]->Projection(0);\r
2151   h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_negEta");\r
2152   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2153   hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_negEta");\r
2154   aFolderObj->Add(hs);\r
2155 \r
2156   hsc = (TH1D*)hs->Clone();\r
2157   hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");\r
2158   hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));\r
2159   aFolderObj->Add(hsc);\r
2160 \r
2161   fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[7]->GetAxis(1)->GetNbins());\r
2162 \r
2163   // eta axis\r
2164   h = fCorrRecTrackMultHist1[0]->Projection(1);\r
2165   h->SetName("eta_rec_track_not_corrected");\r
2166   aFolderObj->Add(h);\r
2167   \r
2168   h = fCorrRecTrackMultHist1[1]->Projection(1);\r
2169   h->SetName("eta_rec_track_cont_corrected");\r
2170   aFolderObj->Add(h);\r
2171 \r
2172   h = fCorrRecTrackMultHist1[2]->Projection(1);\r
2173   h->SetName("eta_rec_track_eff_cont_corrected");\r
2174   aFolderObj->Add(h);\r
2175 \r
2176   h = fCorrRecTrackMultHist1[3]->Projection(1);\r
2177   h->SetName("eta_rec_track_mult_eff_cont_corrected");\r
2178   aFolderObj->Add(h);\r
2179 \r
2180   h = fCorrRecTrackMultHist1[4]->Projection(1);\r
2181   h->SetName("eta_rec_event_track_mult_eff_cont_corrected");\r
2182   aFolderObj->Add(h);\r
2183 \r
2184   h = fCorrRecTrackMultHist1[5]->Projection(1);\r
2185   h->SetName("eta_rec_trig_event_track_mult_eff_cont_corrected");\r
2186   aFolderObj->Add(h);\r
2187 \r
2188   h = fCorrRecTrackMultHist1[6]->Projection(1);\r
2189   h->SetName("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");\r
2190   aFolderObj->Add(h);\r
2191 \r
2192   h = fCorrRecTrackMultHist1[7]->Projection(1);\r
2193   h->SetName("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");\r
2194   aFolderObj->Add(h);\r
2195 \r
2196 \r
2197   //\r
2198   // MC available\r
2199   //\r
2200   if(IsUseMCInfo()) {\r
2201 \r
2202   //\r
2203   h2D = fMCAllPrimTrackMultHist1->Projection(2,0);\r
2204   h2D->SetName("mc_all_pt_mult_acc_prim");\r
2205   aFolderObj->Add(h2D);\r
2206 \r
2207   h2D = fMCAllPrimTrackMultHist1->Projection(1,0);\r
2208   h2D->SetName("mc_all_eta_pt_acc_prim");\r
2209   aFolderObj->Add(h2D);\r
2210 \r
2211   h2D = fMCNDEventAllPrimTrackMultHist1->Projection(2,0);\r
2212   h2D->SetName("mc_ND_all_pt_mult_acc_prim");\r
2213   aFolderObj->Add(h2D);\r
2214 \r
2215   h2D = fMCNDEventAllPrimTrackMultHist1->Projection(1,0);\r
2216   h2D->SetName("mc_ND_all_eta_pt_acc_prim");\r
2217   aFolderObj->Add(h2D);\r
2218 \r
2219   h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(2,0);\r
2220   h2D->SetName("mc_NSD_all_pt_mult_acc_prim");\r
2221   aFolderObj->Add(h2D);\r
2222 \r
2223   h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(1,0);\r
2224   h2D->SetName("mc_NSD_all_eta_pt_acc_prim");\r
2225   aFolderObj->Add(h2D);\r
2226 \r
2227   //\r
2228 \r
2229   h = fMCAllPrimTrackMultHist1->Projection(0);\r
2230   h->SetName("mc_all_pt_acc_prim");\r
2231   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2232   hs->SetName("mc_all_pt_acc_prim_s");\r
2233   aFolderObj->Add(hs);\r
2234 \r
2235   hsc = (TH1D*)hs->Clone();\r
2236   hsc->SetName("mc_all_pt_acc_prim_s_norm");\r
2237   hsc->Scale(1./fMCAllEventMultHist1->Projection(1)->Integral());\r
2238   aFolderObj->Add(hsc);\r
2239 \r
2240   h = fMCNDEventAllPrimTrackMultHist1->Projection(0);\r
2241   h->SetName("mc_ND_all_pt_acc_prim");\r
2242   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2243   hs->SetName("mc_ND_all_pt_acc_prim_s");\r
2244   aFolderObj->Add(hs);\r
2245 \r
2246   hsc = (TH1D*)hs->Clone();\r
2247   hsc->SetName("mc_ND_all_pt_acc_prim_s_norm");\r
2248   hsc->Scale(1./fMCAllNDEventMultHist1->Projection(1)->Integral());\r
2249   aFolderObj->Add(hsc);\r
2250 \r
2251   h = fMCNSDEventAllPrimTrackMultHist1->Projection(0);\r
2252   h->SetName("mc_NSD_all_pt_acc_prim");\r
2253   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2254   hs->SetName("mc_NSD_all_pt_acc_prim_s");\r
2255   aFolderObj->Add(hs);\r
2256 \r
2257   hsc = (TH1D*)hs->Clone();\r
2258   hsc->SetName("mc_NSD_all_pt_acc_prim_s_norm");\r
2259   hsc->Scale(1./fMCAllNSDEventMultHist1->Projection(1)->Integral());\r
2260   aFolderObj->Add(hsc);\r
2261 \r
2262   h = fMCTriggerPrimTrackMultHist1->Projection(0);\r
2263   h->SetName("mc_trigger_all_pt_acc_prim");\r
2264   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2265   hs->SetName("mc_trigger_all_pt_acc_prim_s");\r
2266   aFolderObj->Add(hs);\r
2267 \r
2268   hsc = (TH1D*)hs->Clone();\r
2269   hsc->SetName("mc_trigger_all_pt_acc_prim_s_norm");\r
2270   hsc->Scale(1./fMCTriggerMultHist1->Projection(1)->Integral());\r
2271   aFolderObj->Add(hsc);\r
2272 \r
2273   h = fMCEventPrimTrackMultHist1->Projection(0);\r
2274   h->SetName("mc_all_pt_acc_trig_event_prim");\r
2275   hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2276   hs->SetName("mc_all_pt_acc_trig_event_prim_s");\r
2277   aFolderObj->Add(hs);\r
2278 \r
2279   hsc = (TH1D*)hs->Clone();\r
2280   hsc->SetName("mc_all_pt_acc_trig_event_prim_s_norm");\r
2281   hsc->Scale(1./fMCEventMultHist1->Projection(1)->Integral());\r
2282   aFolderObj->Add(hsc);\r
2283 \r
2284   //\r
2285 \r
2286   h = fMCAllPrimTrackMultHist1->Projection(1);\r
2287   h->SetName("mc_all_eta_acc_prim");\r
2288   aFolderObj->Add(h);\r
2289 \r
2290   h = fMCNDEventAllPrimTrackMultHist1->Projection(1);\r
2291   h->SetName("mc_ND_all_eta_acc_prim");\r
2292   aFolderObj->Add(h);\r
2293 \r
2294   h = fMCNSDEventAllPrimTrackMultHist1->Projection(1);\r
2295   h->SetName("mc_NSD_all_eta_acc_prim");\r
2296   aFolderObj->Add(h);\r
2297 \r
2298   h = fMCTriggerPrimTrackMultHist1->Projection(1);\r
2299   h->SetName("mc_trigger_all_eta_acc_prim");\r
2300   aFolderObj->Add(h);\r
2301 \r
2302   h = fMCEventPrimTrackMultHist1->Projection(1);\r
2303   h->SetName("mc_all_eta_acc_trig_event_prim");\r
2304   aFolderObj->Add(h);\r
2305 \r
2306   //\r
2307   // calculate ratios (rec / mc)\r
2308   //\r
2309   \r
2310   hs = (TH1*)aFolderObj->FindObject("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");\r
2311   hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_trig_event_track_mult_eff_cont_corrected"); \r
2312   hsc->Sumw2();\r
2313   hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_prim_s_norm"));\r
2314   aFolderObj->Add(hsc);\r
2315 \r
2316   hs = (TH1*)aFolderObj->FindObject("eta_rec_trig_event_track_mult_eff_cont_corrected");\r
2317   hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_trig_event_track_mult_eff_cont_corrected"); \r
2318   hsc->Sumw2();\r
2319   hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_prim"));\r
2320   aFolderObj->Add(hsc);\r
2321 \r
2322   //\r
2323   hs = (TH1*)aFolderObj->FindObject("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");\r
2324   hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected"); \r
2325   hsc->Sumw2();\r
2326   hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_pt_acc_prim_s_norm"));\r
2327   aFolderObj->Add(hsc);\r
2328 \r
2329   hs = (TH1*)aFolderObj->FindObject("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");\r
2330   hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected"); \r
2331   hsc->Sumw2();\r
2332   hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_eta_acc_prim"));\r
2333   aFolderObj->Add(hsc);\r
2334 \r
2335   //\r
2336   hs = (TH1*)aFolderObj->FindObject("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");\r
2337   hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected"); \r
2338   hsc->Sumw2();\r
2339   hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_pt_acc_prim_s_norm"));\r
2340   aFolderObj->Add(hsc);\r
2341 \r
2342   hs = (TH1*)aFolderObj->FindObject("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");\r
2343   hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected"); \r
2344   hsc->Sumw2();\r
2345   hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_eta_acc_prim"));\r
2346   aFolderObj->Add(hsc);\r
2347 \r
2348   //\r
2349   hs = (TH1*)aFolderObj->FindObject("pt_rec_event_track_mult_eff_cont_corrected_s_norm");\r
2350   hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_event_track_mult_eff_cont_corrected"); \r
2351   hsc->Sumw2();\r
2352   hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_pt_acc_prim_s_norm"));\r
2353   aFolderObj->Add(hsc);\r
2354 \r
2355   hs = (TH1*)aFolderObj->FindObject("eta_rec_event_track_mult_eff_cont_corrected");\r
2356   hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_event_track_mult_eff_cont_corrected"); \r
2357   hsc->Sumw2();\r
2358   hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_eta_acc_prim"));\r
2359   aFolderObj->Add(hsc);\r
2360 \r
2361   // track level\r
2362   hs = (TH1*)aFolderObj->FindObject("pt_rec_track_mult_eff_cont_corrected_s_norm");\r
2363   hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_track_mult_eff_cont_corrected"); \r
2364   hsc->Sumw2();\r
2365   hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_trig_event_prim_s_norm"));\r
2366   aFolderObj->Add(hsc);\r
2367 \r
2368   hs = (TH1*)aFolderObj->FindObject("eta_rec_track_mult_eff_cont_corrected");\r
2369   hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_track_mult_eff_cont_corrected"); \r
2370   hsc->Sumw2();\r
2371   hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_trig_event_prim"));\r
2372   aFolderObj->Add(hsc);\r
2373 \r
2374   } // end MC infor available\r
2375 \r
2376   // export objects to analysis folder\r
2377   fCorrectionFolder = ExportToFolder(aFolderObj);\r
2378 \r
2379   // delete only TObjArray\r
2380   if(aFolderObj) delete aFolderObj;\r
2381 }\r
2382 \r
2383 //_____________________________________________________________________________\r
2384 TFolder* AlidNdPtCorrection::ExportToFolder(TObjArray * const array) \r
2385 {\r
2386   // recreate folder avery time and export objects to new one\r
2387   //\r
2388   AlidNdPtCorrection * comp=this;\r
2389   TFolder *folder = comp->GetCorrectionFolder();\r
2390 \r
2391   TString name, title;\r
2392   TFolder *newFolder = 0;\r
2393   Int_t i = 0;\r
2394   Int_t size = array->GetSize();\r
2395 \r
2396   if(folder) { \r
2397      // get name and title from old folder\r
2398      name = folder->GetName();  \r
2399      title = folder->GetTitle();  \r
2400 \r
2401          // delete old one\r
2402      delete folder;\r
2403 \r
2404          // create new one\r
2405      newFolder = CreateFolder(name.Data(),title.Data());\r
2406      newFolder->SetOwner();\r
2407 \r
2408          // add objects to folder\r
2409      while(i < size) {\r
2410            newFolder->Add(array->At(i));\r
2411            i++;\r
2412          }\r
2413   }\r
2414 \r
2415 return newFolder;\r
2416 }\r
2417 \r
2418 //_____________________________________________________________________________\r
2419 TFolder* AlidNdPtCorrection::CreateFolder(TString name,TString title) { \r
2420 // create folder for analysed histograms\r
2421 //\r
2422 TFolder *folder = 0;\r
2423   folder = new TFolder(name.Data(),title.Data());\r
2424 \r
2425   return folder;\r
2426 }\r