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