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