modified histo ranges
[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
335 //\r
3f87610e 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
344 //\r
0aaa8b91 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
492 //\r
3f87610e 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
562 //\r
15b7cc05 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
860 Int_t binsEventCount[2]={2,2};\r
861 Double_t minEventCount[2]={0,0}; \r
862 Double_t maxEventCount[2]={2,2}; \r
863 fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",2,binsEventCount,minEventCount,maxEventCount);\r
864 fEventCount->GetAxis(0)->SetTitle("trig");\r
865 fEventCount->GetAxis(1)->SetTitle("trig+vert");\r
866 fEventCount->Sumw2();\r
867\r
868\r
0aaa8b91 869 // init output folder\r
870 fCorrectionFolder = CreateFolder("folderdNdPt","Correction dNdPt Folder");\r
871\r
872 // init correction matrices\r
873 TFile *file = (TFile *)TFile::Open(fCorrMatrixFileName.Data()); \r
874 if(!file) { \r
875 AliDebug(AliLog::kError, "file with efficiency matrices not available");\r
876 printf("file with efficiency matrices not available \n");\r
877 } else {\r
878 TFolder *folder = (TFolder *)file->FindObjectAny("folderdNdPt");\r
879 if(!folder) { \r
880 AliDebug(AliLog::kError, "file without folderdNdPt");\r
881 printf("file without folderdNdPt \n");\r
882 } else {\r
883 // rec. event mult vs true multiplicity \r
884 fEventMultCorrelationMatrix = (THnSparseF*)folder->FindObject("event_mult_correlation_matrix");\r
885 if(!fEventMultCorrelationMatrix) {\r
886 Printf("No %s matrix \n", "event_mult_correlation_matrix");\r
17e8c701 887 return;\r
0aaa8b91 888 }\r
889\r
890 //\r
891 // event level corrections (zv,mult_MB)\r
892 //\r
893 \r
894 // trigger bias correction (MBtoND) \r
895 fCorrTriggerMBtoNDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoND_corr_matrix");\r
896 if(!fCorrTriggerMBtoNDEventMatrix) {\r
897 Printf("No %s matrix \n", "zv_mult_trig_MBtoND_corr_matrix");\r
17e8c701 898 return;\r
0aaa8b91 899 }\r
900\r
901 // trigger bias correction (MBtoNSD)\r
902 fCorrTriggerMBtoNSDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoNSD_corr_matrix");\r
903 if(!fCorrTriggerMBtoNSDEventMatrix) {\r
904 Printf("No %s matrix \n", "zv_mult_trig_MBtoNSD_corr_matrix");\r
17e8c701 905 return;\r
0aaa8b91 906 }\r
907\r
908 // trigger bias correction (MBtoInel)\r
909 fCorrTriggerMBtoInelEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoInel_corr_matrix");\r
910 if(!fCorrTriggerMBtoInelEventMatrix) {\r
911 Printf("No %s matrix \n", "zv_mult_trig_MBtoInel_corr_matrix"); \r
17e8c701 912 return;\r
0aaa8b91 913 }\r
914 \r
915 // vertex reconstruction efficiency correction\r
916 fCorrEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_event_corr_matrix");\r
917 if(!fCorrEventMatrix) {\r
918 Printf("No %s matrix \n", "zv_mult_event_corr_matrix");\r
17e8c701 919 return;\r
0aaa8b91 920 }\r
921\r
922 //\r
923 // histogram needed for empty events corrections\r
924 //\r
925 fZvNorm = (TH1D*)folder->FindObject("zv_distribution_norm");\r
926 if(!fZvNorm) {\r
927 Printf("No %s matrix \n", "fZvNorm");\r
17e8c701 928 return;\r
0aaa8b91 929 }\r
930\r
931 fZvEmptyEventsNorm = (TH1D*)folder->FindObject("zv_empty_events_norm");\r
932 if(!fZvEmptyEventsNorm) {\r
933 Printf("No %s matrix \n", "fZvEmptyEventsNorm");\r
17e8c701 934 return;\r
0aaa8b91 935 }\r
936\r
791aaf54 937 fLHCBin0Background = (TH1D*)folder->FindObject("hLHCBin0Background");\r
938 if(!fLHCBin0Background) {\r
939 Printf("No %s matrix \n", "fLHCBin0Background");\r
17e8c701 940 return;\r
791aaf54 941 }\r
942\r
0aaa8b91 943 //\r
944 // track-event level corrections (zv,pt,eta)\r
945 //\r
946\r
947 // trigger bias correction (MBtoND) \r
948 fCorrTriggerMBtoNDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoND_corr_matrix");\r
949 if(!fCorrTriggerMBtoNDTrackEventMatrix) {\r
950 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoND_corr_matrix");\r
17e8c701 951 return;\r
0aaa8b91 952 }\r
953\r
954 // trigger bias correction (MBtoNSD)\r
955 fCorrTriggerMBtoNSDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoNSD_corr_matrix");\r
956 if(!fCorrTriggerMBtoNSDTrackEventMatrix) {\r
957 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoNSD_corr_matrix");\r
17e8c701 958 return;\r
0aaa8b91 959 }\r
960\r
961 // trigger bias correction (MBtoInel) \r
962 fCorrTriggerMBtoInelTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoInel_corr_matrix");\r
963 if(!fCorrTriggerMBtoInelTrackEventMatrix) {\r
964 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoInel_corr_matrix");\r
17e8c701 965 return;\r
0aaa8b91 966 }\r
967 \r
968 // vertex reconstruction efficiency correction (zv,pt,eta)\r
969 fCorrTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_event_corr_matrix");\r
970 if(!fCorrTrackEventMatrix) {\r
971 Printf("No %s matrix \n", "zv_pt_eta_track_event_corr_matrix");\r
17e8c701 972 return;\r
0aaa8b91 973 }\r
974\r
975 // track reconstruction efficiency correction (zv,pt,eta)\r
976 fCorrTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_corr_matrix");\r
977 if(!fCorrTrackMatrix) {\r
978 Printf("No %s matrix \n", "zv_pt_eta_track_corr_matrix");\r
17e8c701 979 return;\r
0aaa8b91 980 }\r
981\r
15b7cc05 982 // high pt track reconstruction efficiency correction (zv,pt,eta)\r
983 fCorrHighPtTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_highPt_track_corr_matrix");\r
984 if(!fCorrHighPtTrackMatrix) {\r
985 Printf("No %s matrix \n", "zv_pt_eta_highPt_track_corr_matrix");\r
17e8c701 986 return;\r
15b7cc05 987 }\r
988\r
0aaa8b91 989 // secondary tracks contamination correction (zv,pt,eta)\r
990 fContTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_cont_matrix");\r
991 if(!fContTrackMatrix) {\r
992 Printf("No %s matrix \n", "zv_pt_eta_track_cont_matrix");\r
17e8c701 993 return;\r
0aaa8b91 994 }\r
995\r
996 // multiply reconstructed tracks correction\r
997 fContMultTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_mult_track_cont_matrix");\r
998 if(!fContMultTrackMatrix) {\r
999 Printf("No %s matrix \n", "zv_pt_eta_mult_track_cont_matrix");\r
17e8c701 1000 return;\r
0aaa8b91 1001 }\r
1002 }\r
1003 }\r
1004\r
1005}\r
1006\r
1007//_____________________________________________________________________________\r
1008void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)\r
1009{\r
1010 //\r
1011 // Process real and/or simulated events\r
1012 //\r
1013 if(!esdEvent) {\r
1014 AliDebug(AliLog::kError, "esdEvent not available");\r
1015 return;\r
1016 }\r
1017\r
bad4ba69 1018 // get selection cuts\r
0aaa8b91 1019 AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
1020 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
1021 AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
1022\r
bad4ba69 1023 if(!evtCuts || !accCuts || !esdTrackCuts) {\r
0aaa8b91 1024 AliDebug(AliLog::kError, "cuts not available");\r
1025 return;\r
1026 }\r
1027\r
bad4ba69 1028 // trigger selection\r
1029 Bool_t isEventTriggered = kTRUE;\r
17e8c701 1030 AliPhysicsSelection *trigSel = NULL;\r
1031 AliTriggerAnalysis *trigAna = NULL; // needed for andV0\r
695facdf 1032\r
15b7cc05 1033 if(evtCuts->IsTriggerRequired()) \r
1034 {\r
17e8c701 1035 //\r
1036 trigSel = GetPhysicsTriggerSelection();\r
15b7cc05 1037 if(!trigSel) {\r
1038 AliDebug(AliLog::kError, "cannot get trigSel");\r
1039 return;\r
1040 }\r
17e8c701 1041 \r
695facdf 1042 if(IsUseMCInfo()) \r
1043 { \r
d269b0e6 1044 trigSel->SetAnalyzeMC();\r
17e8c701 1045\r
695facdf 1046 if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)\r
1047 {\r
1048 // check V0 systematics (case1)\r
1049 // Initialization done in the macro\r
1050 trigAna = trigSel->GetTriggerAnalysis();\r
1051 if(!trigAna) \r
1052 return;\r
1053\r
1054 //trigAna->SetV0HwPars(15, 61.5, 86.5);\r
1055 //trigAna->SetV0AdcThr(15);\r
1056\r
1057 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
1058 //printf("MB1 & kVZEROCase1 %d \n",isEventTriggered);\r
1059 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1060 \r
1061 if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
1062 {\r
1063 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1064 //printf("V0AND %d \n",isEventTriggered);\r
1065 }\r
1066 }\r
1067 else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2)\r
1068 {\r
1069 // check V0 systematics (case2 only in MC)\r
1070 // Initialization done in the macro\r
1071\r
1072 trigAna = trigSel->GetTriggerAnalysis();\r
1073 if(!trigAna) \r
1074 return;\r
1075\r
1076 //trigAna->SetV0HwPars(0, 0, 125);\r
1077 //trigAna->SetV0AdcThr(0);\r
1078\r
1079 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
1080 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1081 \r
1082 if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
1083 {\r
1084 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1085 //printf("V0AND %d \n",isEventTriggered);\r
1086 }\r
1087 }\r
1088 else {\r
1089 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
1090 //printf("MB1 %d \n",isEventTriggered);\r
1091 \r
1092 if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
1093 {\r
1094 trigAna = trigSel->GetTriggerAnalysis();\r
1095 if(!trigAna) \r
1096 return;\r
1097\r
1098 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1099 //printf("V0AND %d \n",isEventTriggered);\r
1100 }\r
1101 }\r
f537848a 1102 }\r
1103 else {\r
17e8c701 1104 //\r
1105 // 0-multiplicity bin for LHC background correction\r
1106 //\r
ecab7b3d 1107 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
1108 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
1109 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
1110 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
1111 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) \r
17e8c701 1112 {\r
1113 trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx);\r
1114 } else {\r
1115 trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx);\r
1116 }\r
1117\r
695facdf 1118 if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)\r
1119 {\r
1120 // check V0 systematics (case1)\r
1121 // Initialization done in the macro\r
1122 trigAna = trigSel->GetTriggerAnalysis();\r
1123 if(!trigAna) \r
1124 return;\r
1125\r
1126 //trigAna->SetV0HwPars(15, 61.5, 86.5);\r
1127 //trigAna->SetV0AdcThr(15);\r
1128\r
1129 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
1130 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1131 \r
1132 if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
1133 {\r
1134 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1135 //printf("V0AND %d \n",isEventTriggered);\r
1136 }\r
1137 }\r
1138 else {\r
1139 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
1140 //printf("MB1 %d \n",isEventTriggered);\r
1141 \r
1142 if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
1143 {\r
1144 trigAna = trigSel->GetTriggerAnalysis();\r
1145 if(!trigAna) \r
1146 return;\r
1147\r
1148 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1149 //printf("V0AND %d \n",isEventTriggered);\r
1150 }\r
1151 }\r
f537848a 1152 }\r
bad4ba69 1153 }\r
695facdf 1154\r
bad4ba69 1155 // use MC information\r
0aaa8b91 1156 AliHeader* header = 0;\r
1157 AliGenEventHeader* genHeader = 0;\r
1158 AliStack* stack = 0;\r
1159 TArrayF vtxMC(3);\r
bad4ba69 1160 AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;\r
0aaa8b91 1161 Int_t multMCTrueTracks = 0;\r
1162\r
1163 if(IsUseMCInfo())\r
1164 {\r
1165 if(!mcEvent) {\r
1166 AliDebug(AliLog::kError, "mcEvent not available");\r
1167 return;\r
1168 }\r
1169\r
1170 // get MC event header\r
1171 header = mcEvent->Header();\r
1172 if (!header) {\r
1173 AliDebug(AliLog::kError, "Header not available");\r
1174 return;\r
1175 }\r
1176 // MC particle stack\r
1177 stack = mcEvent->Stack();\r
1178 if (!stack) {\r
1179 AliDebug(AliLog::kError, "Stack not available");\r
1180 return;\r
1181 }\r
1182\r
1183 // get event type (ND=0x1, DD=0x2, SD=0x4)\r
bad4ba69 1184 evtType = AliPWG0Helper::GetEventProcessType(header);\r
0aaa8b91 1185 //Printf("evtType %d \n", evtType);\r
1186 AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));\r
1187\r
1188 // get MC vertex\r
1189 genHeader = header->GenEventHeader();\r
1190 if (!genHeader) {\r
1191 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");\r
1192 return;\r
1193 }\r
1194 genHeader->PrimaryVertex(vtxMC);\r
1195\r
1196 // Fill MC event histogram\r
1197 Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};\r
1198 fMCEventHist1->Fill(vMCEventHist1);\r
1199\r
1200 // multipliticy of all MC primary tracks\r
791aaf54 1201 // in Zvtx, eta ranges\r
0aaa8b91 1202 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);\r
1203\r
1204 } // end bUseMC\r
1205\r
1206 // get reconstructed vertex \r
1207 const AliESDVertex* vtxESD = 0; \r
1208 Bool_t isRecVertex = kFALSE;\r
1209 if(evtCuts->IsRecVertexRequired()) \r
1210 {\r
bad4ba69 1211 Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();\r
1212 Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();\r
1213 vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); \r
791aaf54 1214 isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE);\r
0aaa8b91 1215 }\r
791aaf54 1216\r
1217 if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {\r
1218 vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");\r
0aaa8b91 1219 isRecVertex = kTRUE;\r
1220 }\r
791aaf54 1221\r
0aaa8b91 1222 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; \r
791aaf54 1223 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);\r
1224 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());\r
0aaa8b91 1225\r
791aaf54 1226 // vertex contributors\r
0aaa8b91 1227 Int_t multMBTracks = 0; \r
791aaf54 1228 if(GetAnalysisMode() == AlidNdPtHelper::kTPC) \r
1229 { \r
1230 if(vtxESD->GetStatus() && isRecVertex)\r
1231 multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
0aaa8b91 1232 } \r
791aaf54 1233 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || \r
1234 GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid ) \r
1235 {\r
1236 const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
1237 //if(mult && vtxESD->GetStatus() && isRecVertex)\r
1238 if(mult)\r
1239 multMBTracks = mult->GetNumberOfTracklets();\r
1240 \r
0aaa8b91 1241 } \r
ecab7b3d 1242 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
1243 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
1244 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
1245 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
1246 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt )\r
791aaf54 1247 {\r
1248 if(vtxESD->GetStatus() && isRecVertex)\r
1249 multMBTracks = vtxESD->GetNContributors();\r
1250\r
1251 }\r
0aaa8b91 1252 else {\r
d0d90851 1253 AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));\r
0aaa8b91 1254 return; \r
1255 }\r
1256\r
17e8c701 1257 Bool_t isTrigAndVertex = isEventTriggered && isEventOK;\r
1258 Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex};\r
1259 fEventCount->Fill(vEventCount);\r
791aaf54 1260\r
0aaa8b91 1261 //\r
1262 // correct event and track histograms\r
1263 //\r
1264 TObjArray *allChargedTracks=0;\r
1265 Int_t multRec=0, multRecTemp=0;\r
1266 Int_t *labelsRec=0;\r
a8ac5525 1267 Bool_t isCosmic = kFALSE;\r
0aaa8b91 1268\r
17e8c701 1269\r
0aaa8b91 1270 if(isEventOK && isEventTriggered)\r
1271 {\r
1272 // get all charged tracks\r
bad4ba69 1273 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
0aaa8b91 1274 if(!allChargedTracks) return;\r
1275\r
1276 Int_t entries = allChargedTracks->GetEntries();\r
1277 labelsRec = new Int_t[entries];\r
1278\r
1279 // calculate mult of reconstructed tracks\r
15b7cc05 1280\r
0aaa8b91 1281 for(Int_t i=0; i<entries;++i) \r
1282 {\r
1283 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);\r
1284 if(!track) continue;\r
847e74b2 1285 if(track->Charge()==0) continue;\r
1286\r
15b7cc05 1287\r
847e74b2 1288 // only postive charged \r
1289 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) \r
1290 continue;\r
1291 \r
1292 // only negative charged \r
1293 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) \r
1294 continue;\r
1295\r
d269b0e6 1296 // cosmics analysis\r
a8ac5525 1297 isCosmic = kFALSE;\r
15b7cc05 1298 if( GetParticleMode()==AlidNdPtHelper::kCosmic )\r
d269b0e6 1299 {\r
1300 for(Int_t j=0; j<entries;++j) \r
1301 {\r
1302 AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);\r
1303 if(!track1) continue;\r
1304 if(track1->Charge()==0) continue;\r
1305\r
1306 if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && \r
1307 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) \r
1308 { \r
a8ac5525 1309 isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);\r
d269b0e6 1310 }\r
1311 if(isCosmic) \r
1312 {\r
a8ac5525 1313 Double_t vCosmicsHisto[3] = { track->Eta()+track1->Eta(), track->Phi()-track1->Phi(), track1->Pt() };\r
d269b0e6 1314 fCosmicsHisto->Fill(vCosmicsHisto);\r
1315 }\r
1316 }\r
1317 \r
1318 if(!isCosmic) continue;\r
1319 }\r
1320\r
791aaf54 1321 if(esdTrackCuts->AcceptTrack(track)) \r
1322 {\r
695facdf 1323 if(accCuts->AcceptTrack(track)) multRecTemp++;\r
791aaf54 1324 } \r
1325 }\r
1326\r
847e74b2 1327 //\r
0aaa8b91 1328 for(Int_t i=0; i<entries;++i) \r
1329 {\r
1330 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);\r
1331 if(!track) continue;\r
847e74b2 1332 if(track->Charge()==0) continue;\r
1333\r
1334 // only postive charged \r
1335 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) \r
1336 continue;\r
1337 \r
1338 // only negative charged \r
1339 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) \r
1340 continue;\r
0aaa8b91 1341 \r
847e74b2 1342 // track-level corrections\r
791aaf54 1343 if(!esdTrackCuts->AcceptTrack(track)) continue;\r
695facdf 1344 //if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue;\r
791aaf54 1345\r
a8ac5525 1346 // cosmics analysis\r
1347 isCosmic = kFALSE;\r
15b7cc05 1348 if( GetParticleMode()==AlidNdPtHelper::kCosmic )\r
a8ac5525 1349 {\r
1350 for(Int_t j=0; j<entries;++j) \r
1351 {\r
1352 AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);\r
1353 if(!track1) continue;\r
1354 if(track1->Charge()==0) continue;\r
1355\r
1356 if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && \r
1357 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) \r
1358 { \r
1359 isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);\r
1360 }\r
1361 }\r
1362 if(!isCosmic) continue;\r
1363 }\r
1364\r
15b7cc05 1365 Bool_t isOK = kFALSE;\r
1366 Double_t x[3]; track->GetXYZ(x);\r
1367 Double_t b[3]; AliTracker::GetBxByBz(x,b);\r
1368\r
1369 //\r
1370 // if TPC-ITS hybrid tracking (kTPCITSHybrid)\r
1371 // replace track parameters with TPC-ony track parameters\r
1372 //\r
791aaf54 1373 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) \r
15b7cc05 1374 {\r
791aaf54 1375 // Relate TPC-only tracks to Tracks or SPD vertex\r
1376 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);\r
15b7cc05 1377 if(!isOK) continue;\r
1378\r
1379 // replace esd track parameters with TPCinner\r
1380 AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam()));\r
1381 if (!tpcTrack) return;\r
1382 track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());\r
1383\r
1384 if(tpcTrack) delete tpcTrack; \r
1385 } \r
1386\r
1387 //\r
791aaf54 1388 if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCTrackSPDvtxUpdate) \r
15b7cc05 1389 {\r
847e74b2 1390 //\r
1391 // update track parameters\r
1392 //\r
1393 AliExternalTrackParam cParam;\r
791aaf54 1394 isOK = track->RelateToVertexTPC(vtxESD,esdEvent->GetMagneticField(),kVeryBig,&cParam);\r
15b7cc05 1395 if(!isOK) continue;\r
847e74b2 1396 track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());\r
1397\r
1398 if(accCuts->AcceptTrack(track)) { \r
15b7cc05 1399 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp,multMCTrueTracks); \r
847e74b2 1400 labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
1401 multRec++;\r
1402 }\r
1403 }\r
1404 else if (GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) \r
1405 { \r
1406 //\r
1407 // Replace rec with MC\r
1408 //\r
1409 if(accCuts->AcceptTrack(track)) { \r
15b7cc05 1410 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxMC[2],multRecTemp, multMCTrueTracks); \r
847e74b2 1411 labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
1412 multRec++;\r
1413 }\r
1414 } \r
1415 else {\r
1416 //\r
1417 // all the rest tracking scenarios\r
1418 //\r
1419 if(accCuts->AcceptTrack(track)) { \r
15b7cc05 1420 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp, multMCTrueTracks); \r
847e74b2 1421 labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
1422 multRec++;\r
1423 }\r
1424 }\r
791aaf54 1425 }\r
1426\r
0aaa8b91 1427 // event-level corrections\r
791aaf54 1428 if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) \r
1429 { \r
0aaa8b91 1430 FillHistograms(AlidNdPtHelper::kRecEvents,vtxMC[2],multMBTracks);\r
1431 }\r
1432 else {\r
1433 FillHistograms(AlidNdPtHelper::kRecEvents,vtxESD->GetZv(),multMBTracks);\r
1434 }\r
1435\r
15b7cc05 1436 // calculate meanPt from the event\r
1437 Double_t meanPtMult[8] = {0}; \r
15b7cc05 1438 for (Int_t i = 0; i<8; i++) {\r
1439 if(!fCorrRecTrackMultHist1[i]) continue;\r
791aaf54 1440 TH1D *hp = (TH1D *)fCorrRecTrackPt1[i]->Projection(0);\r
1441 if(!hp) continue;\r
1442 meanPtMult[i] = hp->GetMean(); \r
15b7cc05 1443 Double_t vCorrRecTrackMeanPtMultHist1[2] = {meanPtMult[i],multRecTemp};\r
1444 fCorrRecTrackMeanPtMultHist1[i]->Fill(vCorrRecTrackMeanPtMultHist1); \r
1445 \r
1446 if( IsUseMCInfo() ) {\r
15b7cc05 1447 Double_t vCorrRecTrackMeanPtTrueMultHist1[2] = {meanPtMult[i],multMCTrueTracks};\r
1448 fCorrRecTrackMeanPtTrueMultHist1[i]->Fill(vCorrRecTrackMeanPtTrueMultHist1); \r
1449 }\r
1450\r
1451 // reset pt histo for the next event\r
1452 if(fCorrRecTrackPt1[i]) fCorrRecTrackPt1[i]->Reset();\r
791aaf54 1453 if(hp) delete hp;\r
15b7cc05 1454 }\r
1455\r
0aaa8b91 1456 // control event histograms\r
1457 Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};\r
1458 fRecEventHist1->Fill(vRecEventHist1);\r
3f87610e 1459\r
17e8c701 1460 // correlation track multiplicity vs MB track multiplicity\r
791aaf54 1461 Double_t vRecEventMultHist1[3] = {multRec, multMBTracks};\r
3f87610e 1462 fRecEventMultHist1->Fill(vRecEventMultHist1);\r
791aaf54 1463 }\r
0aaa8b91 1464\r
1465 // empty events corrections\r
1466 // no reconstructed zv\r
791aaf54 1467 if( isEventTriggered && multMBTracks==0 ) \r
1468 {\r
1469 if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) \r
1470 {\r
0aaa8b91 1471 FillHistograms(AlidNdPtHelper::kTriggeredEvents,vtxMC[2],multMBTracks);\r
1472 }\r
1473 else {\r
1474 Double_t zv = fZvNorm->GetRandom();\r
791aaf54 1475 if(zv>evtCuts->GetMinZv() && zv<evtCuts->GetMaxZv())\r
1476 FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks);\r
0aaa8b91 1477 }\r
1478 }\r
1479\r
1480 if(IsUseMCInfo()) \r
1481 {\r
1482 // select MC events \r
1483 if(evtCuts->AcceptMCEvent(mcEvent))\r
1484 {\r
1485 //\r
1486 // event histograms\r
1487 //\r
1488 Double_t vMCEventMatrix[2] = {vtxMC[2],multMBTracks};\r
1489 fMCAllEventMultHist1->Fill(vMCEventMatrix);\r
791aaf54 1490\r
bad4ba69 1491 if(evtType == AliPWG0Helper::kND) {\r
0aaa8b91 1492 fMCAllNDEventMultHist1->Fill(vMCEventMatrix);\r
1493 }\r
bad4ba69 1494 if(evtType != AliPWG0Helper::kSD) {\r
0aaa8b91 1495 fMCAllNSDEventMultHist1->Fill(vMCEventMatrix);\r
1496 }\r
791aaf54 1497 if(isEventTriggered) {\r
1498 fMCTriggerMultHist1->Fill(vMCEventMatrix);\r
1499 }\r
1500 if(isEventTriggered && isEventOK) {\r
1501 fMCEventMultHist1->Fill(vMCEventMatrix);\r
1502 }\r
0aaa8b91 1503\r
1504 //\r
1505 // MC histograms for efficiency studies\r
1506 //\r
15b7cc05 1507 Double_t sumPtMC = 0;\r
0aaa8b91 1508 Int_t nPart = stack->GetNtrack();\r
1509 for (Int_t iMc = 0; iMc < nPart; ++iMc) \r
1510 {\r
1511 // print MC stack info\r
1512 //AlidNdPtHelper::PrintMCInfo(stack,iMc);\r
1513\r
1514 TParticle* particle = stack->Particle(iMc);\r
1515 if (!particle)\r
1516 continue;\r
1517\r
1518 // only charged particles\r
09abaebb 1519 \r
1520 if(!particle->GetPDG()) continue;\r
0aaa8b91 1521 Double_t charge = particle->GetPDG()->Charge()/3.;\r
00b81913 1522 if (TMath::Abs(charge) < 0.001)\r
0aaa8b91 1523 continue;\r
847e74b2 1524\r
1525 // only postive charged \r
1526 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) \r
1527 continue;\r
1528 \r
1529 // only negative charged \r
1530 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) \r
1531 continue;\r
0aaa8b91 1532 \r
1533 // physical primary\r
1534 Bool_t prim = stack->IsPhysicalPrimary(iMc);\r
15b7cc05 1535 if(!prim) continue;\r
0aaa8b91 1536\r
1537 // all primaries in acceptance\r
1538 if(!accCuts->AcceptTrack(particle)) continue;\r
0aaa8b91 1539\r
1540 Double_t gpt = particle->Pt();\r
1541 Double_t geta = particle->Eta();\r
1542\r
15b7cc05 1543 // sum up pt in the event\r
1544 sumPtMC +=gpt; \r
1545\r
791aaf54 1546 Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRecTemp}; \r
15b7cc05 1547 Double_t valMCAllTrackTrueMultHist1[3] = {gpt,geta,multMCTrueTracks}; \r
791aaf54 1548 Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRecTemp,multMCTrueTracks}; \r
15b7cc05 1549\r
0aaa8b91 1550 fMCAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
15b7cc05 1551 fMCAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
3f87610e 1552 fMCAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);\r
15b7cc05 1553\r
bad4ba69 1554 if(evtType == AliPWG0Helper::kND) {\r
0aaa8b91 1555 fMCNDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
15b7cc05 1556 fMCNDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
3f87610e 1557 fMCNDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);\r
0aaa8b91 1558 }\r
bad4ba69 1559 if(evtType != AliPWG0Helper::kSD) {\r
0aaa8b91 1560 fMCNSDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
15b7cc05 1561 fMCNSDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
3f87610e 1562 fMCNSDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);\r
0aaa8b91 1563 }\r
15b7cc05 1564 if(isEventTriggered) { \r
1565 fMCTriggerPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
1566 fMCTriggerPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
3f87610e 1567 fMCTriggerPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);\r
15b7cc05 1568 }\r
1569 if(isEventTriggered && isEventOK) { \r
1570 fMCEventPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
1571 fMCEventPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
3f87610e 1572 fMCEventPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);\r
15b7cc05 1573 }\r
0aaa8b91 1574 }\r
15b7cc05 1575\r
1576 //\r
1577 // calculate <pt> in the event\r
1578 //\r
1579 Double_t meanPtMCMult = 0;\r
1580 Double_t meanPtMCTrueMult = 0;\r
791aaf54 1581 if(multRecTemp) { \r
1582 meanPtMCMult = sumPtMC/multRecTemp; \r
1583 }\r
1584 if(multMCTrueTracks) { \r
1585 meanPtMCTrueMult = sumPtMC/multMCTrueTracks; \r
1586 }\r
15b7cc05 1587\r
791aaf54 1588 Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRecTemp}; \r
15b7cc05 1589 Double_t valMCMeanPtTrueMult[2] = {meanPtMCTrueMult,multMCTrueTracks}; \r
1590\r
1591 fMCAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
1592 fMCAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
1593\r
1594 if(evtType == AliPWG0Helper::kND) {\r
1595 fMCNDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
1596 fMCNDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
1597 }\r
1598 if(evtType != AliPWG0Helper::kSD) {\r
1599 fMCNSDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
1600 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
1601 }\r
1602 if(isEventTriggered) { \r
1603 fMCTriggerPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
1604 fMCTriggerPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
1605 }\r
1606 if(isEventTriggered && isEventOK) { \r
1607 fMCEventPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
1608 fMCEventPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
1609 }\r
0aaa8b91 1610 }\r
1611 } // end bUseMC\r
1612\r
1613 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;\r
1614 if(labelsRec) delete [] labelsRec; labelsRec = 0;\r
1615\r
f537848a 1616 if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;\r
0aaa8b91 1617}\r
1618\r
1619//_____________________________________________________________________________\r
00b81913 1620void AlidNdPtCorrection::FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBTracks) const\r
0aaa8b91 1621{\r
1622 //\r
1623 // Fill corrected histograms\r
1624 //\r
1625\r
1626 Double_t vEventMatrix[2] = {zv,multMBTracks};\r
1627 //\r
1628 // Correct for efficiency \r
1629 //\r
1630 if(eventObj == AlidNdPtHelper::kRecEvents && multMBTracks>0) \r
1631 {\r
1632 Double_t corrToMBF = GetCorrFactZvMult(fCorrEventMatrix,zv,multMBTracks);\r
1633 Double_t corrToInelF = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);\r
1634 Double_t corrToNDF = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);\r
1635 Double_t corrToNSDF = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);\r
1636 //printf("corrToMBF %f, corrToInelF %f, corrToNDF %f corrToNSDF %f \n",corrToMBF,corrToInelF,corrToNDF,corrToNSDF);\r
1637\r
1638 fCorrRecEventHist1[0]->Fill(vEventMatrix);\r
1639 fCorrRecEventHist1[1]->Fill(vEventMatrix,corrToMBF);\r
1640 fCorrRecEventHist1[2]->Fill(vEventMatrix,corrToMBF*corrToInelF);\r
1641 fCorrRecEventHist1[3]->Fill(vEventMatrix,corrToMBF*corrToNDF);\r
1642 fCorrRecEventHist1[4]->Fill(vEventMatrix,corrToMBF*corrToNSDF);\r
1643 }\r
1644\r
1645 if(eventObj==AlidNdPtHelper::kTriggeredEvents && multMBTracks==0) // empty triggered events\r
1646 {\r
791aaf54 1647 Double_t factLHCBack = 1.;\r
1648 if(!IsUseMCInfo()) factLHCBack = fLHCBin0Background->GetBinContent(1); \r
1649\r
1650\r
0aaa8b91 1651 Int_t bin = fZvEmptyEventsNorm->FindBin(zv);\r
00b81913 1652 Double_t factZ = fZvEmptyEventsNorm->GetBinContent(bin);\r
791aaf54 1653\r
0aaa8b91 1654 Double_t corrToInelF0 = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);\r
1655 Double_t corrToNDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);\r
1656 Double_t corrToNSDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);\r
17e8c701 1657 //printf("factLHCBack %f, factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factLHCBack,factZ,corrToInelF0,corrToNDF0,corrToNSDF0);\r
0aaa8b91 1658\r
1659 fCorrRecEventHist2[0]->Fill(vEventMatrix);\r
791aaf54 1660 fCorrRecEventHist2[1]->Fill(vEventMatrix,factLHCBack*factZ);\r
1661 fCorrRecEventHist2[2]->Fill(vEventMatrix,factLHCBack*factZ*corrToInelF0);\r
1662 fCorrRecEventHist2[3]->Fill(vEventMatrix,factLHCBack*factZ*corrToNDF0);\r
1663 fCorrRecEventHist2[4]->Fill(vEventMatrix,factLHCBack*factZ*corrToNSDF0);\r
0aaa8b91 1664 }\r
1665}\r
1666\r
1667//_____________________________________________________________________________\r
15b7cc05 1668void AlidNdPtCorrection::FillHistograms(AliESDtrack * const esdTrack, AliStack * const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t mult, Int_t trueMult) const\r
0aaa8b91 1669{\r
1670 //\r
1671 // Fill ESD track and MC histograms \r
1672 //\r
1673 if(!esdTrack) return;\r
1674\r
1675 //Float_t q = esdTrack->Charge();\r
1676 Float_t pt = esdTrack->Pt();\r
1677 Float_t eta = esdTrack->Eta();\r
1678 Float_t phi = esdTrack->Phi();\r
1679\r
1680 if(stack && GetAnalysisMode() == AlidNdPtHelper::kMCRec) \r
1681 {\r
1682 Int_t label = TMath::Abs(esdTrack->GetLabel());\r
1683 \r
1684 TParticle* particle = stack->Particle(label);\r
1685 if(!particle) return;\r
1686 \r
09abaebb 1687 if(!particle->GetPDG()) return;\r
0aaa8b91 1688 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3\r
00b81913 1689 if(TMath::Abs(gq)<0.001) return;\r
0aaa8b91 1690 Float_t gpt = particle->Pt();\r
1691 Float_t geta = particle->Eta();\r
1692 Float_t gphi = particle->Phi();\r
1693\r
1694 // replace reconstructed values with MC\r
1695 pt = gpt;\r
1696 eta = geta;\r
1697 phi = gphi;\r
1698 }\r
1699\r
1700 //\r
1701 // Fill histograms\r
1702 //\r
1703 Double_t values[3] = {pt,eta,phi}; \r
1704 fRecTrackHist1[trackObj]->Fill(values);\r
1705\r
1706 //\r
1707 // Correct for contamination and efficiency \r
1708 //\r
1709 if(trackObj == AlidNdPtHelper::kRecTracks || GetAnalysisMode() == AlidNdPtHelper::kMCRec) \r
1710 {\r
1711 // track level corrections\r
15b7cc05 1712 Double_t trackEffF = 1.0; \r
791aaf54 1713 if(pt < 2.6) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta);\r
15b7cc05 1714 else trackEffF = GetCorrFactZvPtEta(fCorrHighPtTrackMatrix,zv,pt,eta);\r
1715\r
0aaa8b91 1716 Double_t trackContF = GetContFactZvPtEta(fContTrackMatrix,zv,pt,eta);\r
1717 Double_t multTrackContF = GetContFactZvPtEta(fContMultTrackMatrix,zv,pt,eta);\r
1718 //printf("zv %f, pt %f, eta %f \n",zv,pt,eta);\r
1719 //printf("trackEffF %f, trackContF %f, multTrackContF %f \n", trackEffF, trackContF, multTrackContF);\r
1720 \r
1721 // track-event level corrections\r
1722 Double_t vertexEffF = GetCorrFactZvPtEta(fCorrTrackEventMatrix,zv,pt,eta);\r
1723 Double_t trigMBToInel = GetCorrFactZvPtEta(fCorrTriggerMBtoInelTrackEventMatrix,zv,pt,eta); \r
1724 Double_t trigMBToND = GetCorrFactZvPtEta(fCorrTriggerMBtoNDTrackEventMatrix,zv,pt,eta);\r
1725 Double_t trigMBToNSD = GetCorrFactZvPtEta(fCorrTriggerMBtoNSDTrackEventMatrix,zv,pt,eta);\r
1726 //printf("vertexEffF %f, trigMBToInel %f, trigMBToNSD %f \n", vertexEffF, trigMBToInel, trigMBToNSD);\r
bad4ba69 1727 \r
1728 Double_t corrF[8] = { 1.0, \r
1729 trackContF,\r
1730 trackContF*trackEffF,\r
1731 trackContF*trackEffF*multTrackContF,\r
1732 trackContF*trackEffF*multTrackContF*vertexEffF,\r
1733 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToInel,\r
1734 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToND,\r
1735 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToNSD\r
1736 }; \r
1737 \r
1738 // Fill histograms\r
0aaa8b91 1739 Double_t valCorrRecTrackMultHist1[3] = {pt,eta,mult}; \r
15b7cc05 1740 Double_t valCorrRecTrackPt1[1] = {pt}; \r
bad4ba69 1741 for(Int_t i=0; i<8; i++) {\r
1742 fCorrRecTrackMultHist1[i]->Fill(valCorrRecTrackMultHist1,corrF[i]);\r
15b7cc05 1743 fCorrRecTrackPt1[i]->Fill(valCorrRecTrackPt1,corrF[i]);\r
1744\r
1745 if( IsUseMCInfo() ) {\r
1746 Double_t valCorrRecTrackTrueMultHist1[3] = {pt,eta,trueMult}; \r
3f87610e 1747 Double_t valCorrRecTrackTrueMultHist2[3] = {pt,mult,trueMult}; \r
1748\r
15b7cc05 1749 fCorrRecTrackTrueMultHist1[i]->Fill(valCorrRecTrackTrueMultHist1,corrF[i]);\r
3f87610e 1750 fCorrRecTrackTrueMultHist2[i]->Fill(valCorrRecTrackTrueMultHist2,corrF[i]);\r
15b7cc05 1751 } \r
bad4ba69 1752 }\r
0aaa8b91 1753 }\r
1754}\r
1755\r
00b81913 1756void AlidNdPtCorrection::FillHistograms(AliStack * const stack, Int_t /*label*/, AlidNdPtHelper::TrackObject /*trackObj*/, Int_t /*mult*/) const\r
0aaa8b91 1757{\r
1758 // Fill MC histograms\r
1759 if(!stack) return;\r
1760\r
1761 /*\r
1762 TParticle* particle = stack->Particle(label);\r
1763 if(!particle) return;\r
1764\r
1765 Int_t mother_pdg = -1;\r
1766 TParticle* mother = 0;\r
1767\r
1768 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);\r
1769 Int_t motherLabel = particle->GetMother(0); \r
1770 if(motherLabel>0) mother = stack->Particle(motherLabel);\r
1771 if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
1772 Int_t mech = particle->GetUniqueID(); // production mechanism\r
1773\r
09abaebb 1774 if(!particle->GetPDG()) return;\r
0aaa8b91 1775 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 \r
1776 Float_t gpt = particle->Pt();\r
1777 Float_t qgpt = particle->Pt() * gq;\r
1778 Float_t geta = particle->Eta();\r
1779 Float_t gphi = particle->Phi();\r
1780 Float_t gpz = particle->Pz();\r
1781\r
1782 Bool_t prim = stack->IsPhysicalPrimary(label);\r
1783 Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();\r
1784\r
1785 Int_t pid=-1;\r
1786 if (TMath::Abs(particle->GetPdgCode()) == kElectron) { pid = 0; }\r
1787 else if (TMath::Abs(particle->GetPdgCode()) == kMuonMinus) { pid = 1; }\r
1788 else if (TMath::Abs(particle->GetPdgCode()) == kPiPlus) { pid = 2; }\r
1789 else if (TMath::Abs(particle->GetPdgCode()) == kKPlus) { pid = 3; }\r
1790 else if (TMath::Abs(particle->GetPdgCode()) == kProton) { pid = 4; }\r
1791 else { pid = 5; }\r
1792 */\r
1793\r
1794 //if(!prim) printf("prim_mother %d, mother %d, particle %d, production mech %d\n",prim_mother->GetPdgCode(),mother->GetPdgCode(), particle->GetPdgCode(),mech);\r
1795 \r
1796}\r
1797\r
1798//_____________________________________________________________________________\r
00b81913 1799Double_t AlidNdPtCorrection::GetCorrFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {\r
0aaa8b91 1800// return correction factor F(zv,pt,eta)\r
1801\r
1802 if(!hist) return 1.;\r
1803\r
1804 //\r
1805 TAxis *ax = hist->GetAxis(0);\r
1806 TAxis *ay = hist->GetAxis(1);\r
1807 TAxis *az = hist->GetAxis(2);\r
1808\r
1809 Int_t binx = ax->FindBin(zv);\r
1810 Int_t biny = ay->FindBin(pt);\r
1811 Int_t binz = az->FindBin(eta);\r
1812 Int_t dim[3] = {binx,biny,binz};\r
1813\r
1814 Double_t fact = hist->GetBinContent(dim); \r
1815\r
1816return fact;\r
1817}\r
1818\r
1819//_____________________________________________________________________________\r
00b81913 1820Double_t AlidNdPtCorrection::GetContFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {\r
0aaa8b91 1821// return contamination correction factor F(zv,pt,eta)\r
1822\r
1823 if(!hist) return 1.0;\r
1824\r
1825 //\r
1826 TAxis *ax = hist->GetAxis(0);\r
1827 TAxis *ay = hist->GetAxis(1);\r
1828 TAxis *az = hist->GetAxis(2);\r
1829\r
1830 Int_t binx = ax->FindBin(zv);\r
1831 Int_t biny = ay->FindBin(pt);\r
1832 Int_t binz = az->FindBin(eta);\r
1833 Int_t dim[3] = {binx,biny,binz};\r
1834\r
791aaf54 1835 //\r
1836 // additional correction for secondary \r
1837 // particles with strangeness (data driven)\r
1838 // \r
1839 Double_t corrFact = 1.;\r
1840 if(!IsUseMCInfo()) corrFact = AlidNdPtHelper::GetStrangenessCorrFactor(pt);\r
1841 //printf("pt %f, corrFact %f \n", pt, corrFact);\r
1842\r
1843 Double_t fact = 1.0 - corrFact*hist->GetBinContent(dim); \r
0aaa8b91 1844 //Double_t fact = hist->GetBinContent(dim); \r
1845\r
1846return fact;\r
1847}\r
1848\r
1849//_____________________________________________________________________________\r
00b81913 1850Double_t AlidNdPtCorrection::GetCorrFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {\r
0aaa8b91 1851// return correction factor F(zv,mult)\r
1852\r
1853 if(!hist) return 1.;\r
1854\r
1855 TAxis *ax = hist->GetAxis(0);\r
1856 TAxis *ay = hist->GetAxis(1);\r
1857 Int_t binx = ax->FindBin(zv);\r
1858 Int_t biny = ay->FindBin(mult);\r
1859 Int_t dim[2] = {binx,biny};\r
1860\r
1861 Double_t fact = hist->GetBinContent(dim); \r
1862\r
1863\r
1864return fact;\r
1865}\r
1866\r
1867//_____________________________________________________________________________\r
00b81913 1868Double_t AlidNdPtCorrection::GetContFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {\r
0aaa8b91 1869// return contamination correction factor F(zv,mult)\r
1870\r
1871 if(!hist) return 1.;\r
1872\r
1873 TAxis *ax = hist->GetAxis(0);\r
1874 TAxis *ay = hist->GetAxis(1);\r
1875 Int_t binx = ax->FindBin(zv);\r
1876 Int_t biny = ay->FindBin(mult);\r
1877 Int_t dim[2] = {binx,biny};\r
1878 Double_t fact = 1.0-hist->GetBinContent(dim); \r
1879\r
1880return fact;\r
1881}\r
1882\r
1883//_____________________________________________________________________________\r
00b81913 1884Long64_t AlidNdPtCorrection::Merge(TCollection* const list) \r
0aaa8b91 1885{\r
1886 // Merge list of objects (needed by PROOF)\r
1887\r
1888 if (!list)\r
1889 return 0;\r
1890\r
1891 if (list->IsEmpty())\r
1892 return 1;\r
1893\r
1894 TIterator* iter = list->MakeIterator();\r
1895 TObject* obj = 0;\r
1896\r
1897 // collection of generated histograms\r
1898\r
17e8c701 1899 // physics selection\r
1900 TList *collPhysSelection = new TList;\r
1901\r
0aaa8b91 1902 Int_t count=0;\r
1903 while((obj = iter->Next()) != 0) {\r
1904 AlidNdPtCorrection* entry = dynamic_cast<AlidNdPtCorrection*>(obj);\r
1905 if (entry == 0) continue; \r
1906 \r
17e8c701 1907 collPhysSelection->Add(entry->GetPhysicsTriggerSelection());\r
1908\r
1909 fEventCount->Add(entry->fEventCount);\r
1910\r
0aaa8b91 1911 fMCEventHist1->Add(entry->fMCEventHist1);\r
1912 fRecEventHist1->Add(entry->fRecEventHist1);\r
3f87610e 1913 fRecEventMultHist1->Add(entry->fRecEventMultHist1);\r
0aaa8b91 1914\r
1915 fMCAllEventMultHist1->Add(entry->fMCAllEventMultHist1);\r
1916 fMCAllNDEventMultHist1->Add(entry->fMCAllNDEventMultHist1);\r
1917 fMCAllNSDEventMultHist1->Add(entry->fMCAllNSDEventMultHist1);\r
1918 fMCTriggerMultHist1->Add(entry->fMCTriggerMultHist1);\r
1919 fMCEventMultHist1->Add(entry->fMCEventMultHist1);\r
1920\r
1921 fMCAllPrimTrackMultHist1->Add(entry->fMCAllPrimTrackMultHist1);\r
1922 fMCNDEventAllPrimTrackMultHist1->Add(entry->fMCNDEventAllPrimTrackMultHist1);\r
1923 fMCNSDEventAllPrimTrackMultHist1->Add(entry->fMCNSDEventAllPrimTrackMultHist1);\r
1924 fMCTriggerPrimTrackMultHist1->Add(entry->fMCTriggerPrimTrackMultHist1);\r
1925 fMCEventPrimTrackMultHist1->Add(entry->fMCEventPrimTrackMultHist1);\r
15b7cc05 1926\r
1927 fMCAllPrimTrackTrueMultHist1->Add(entry->fMCAllPrimTrackTrueMultHist1);\r
1928 fMCNDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNDEventAllPrimTrackTrueMultHist1);\r
1929 fMCNSDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist1);\r
1930 fMCTriggerPrimTrackTrueMultHist1->Add(entry->fMCTriggerPrimTrackTrueMultHist1);\r
1931 fMCEventPrimTrackTrueMultHist1->Add(entry->fMCEventPrimTrackTrueMultHist1);\r
1932\r
3f87610e 1933 fMCAllPrimTrackTrueMultHist2->Add(entry->fMCAllPrimTrackTrueMultHist2);\r
1934 fMCNDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNDEventAllPrimTrackTrueMultHist2);\r
1935 fMCNSDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist2);\r
1936 fMCTriggerPrimTrackTrueMultHist2->Add(entry->fMCTriggerPrimTrackTrueMultHist2);\r
1937 fMCEventPrimTrackTrueMultHist2->Add(entry->fMCEventPrimTrackTrueMultHist2);\r
1938\r
15b7cc05 1939 fMCAllPrimTrackMeanPtMult1->Add(entry->fMCAllPrimTrackMeanPtMult1);\r
1940 fMCNDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtMult1);\r
1941 fMCNSDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtMult1);\r
1942 fMCTriggerPrimTrackMeanPtMult1->Add(entry->fMCTriggerPrimTrackMeanPtMult1);\r
1943 fMCEventPrimTrackMeanPtMult1->Add(entry->fMCEventPrimTrackMeanPtMult1);\r
1944\r
1945 fMCAllPrimTrackMeanPtTrueMult1->Add(entry->fMCAllPrimTrackMeanPtTrueMult1);\r
1946 fMCNDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtTrueMult1);\r
1947 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtTrueMult1);\r
1948 fMCTriggerPrimTrackMeanPtTrueMult1->Add(entry->fMCTriggerPrimTrackMeanPtTrueMult1);\r
1949 fMCEventPrimTrackMeanPtTrueMult1->Add(entry->fMCEventPrimTrackMeanPtTrueMult1);\r
1950\r
d269b0e6 1951 fCosmicsHisto->Add(entry->fCosmicsHisto);\r
0aaa8b91 1952\r
1953 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {\r
1954 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);\r
1955 }\r
1956\r
1957 for(Int_t i=0; i<8; i++) {\r
1958 fCorrRecTrackMultHist1[i]->Add(entry->fCorrRecTrackMultHist1[i]);\r
15b7cc05 1959 fCorrRecTrackTrueMultHist1[i]->Add(entry->fCorrRecTrackTrueMultHist1[i]);\r
3f87610e 1960 fCorrRecTrackTrueMultHist2[i]->Add(entry->fCorrRecTrackTrueMultHist2[i]);\r
15b7cc05 1961\r
1962 fCorrRecTrackMeanPtMultHist1[i]->Add(entry->fCorrRecTrackMeanPtMultHist1[i]);\r
1963 fCorrRecTrackMeanPtTrueMultHist1[i]->Add(entry->fCorrRecTrackMeanPtTrueMultHist1[i]);\r
1964\r
1965 fCorrRecTrackPt1[i]->Add(entry->fCorrRecTrackPt1[i]);\r
0aaa8b91 1966 }\r
1967\r
1968 for(Int_t i=0; i<5; i++) {\r
1969 fCorrRecEventHist1[i]->Add(entry->fCorrRecEventHist1[i]);\r
1970 fCorrRecEventHist2[i]->Add(entry->fCorrRecEventHist2[i]);\r
1971 }\r
1972\r
0aaa8b91 1973 count++;\r
1974 }\r
1975\r
17e8c701 1976 //\r
1977 AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();\r
1978 trigSelection->Merge(collPhysSelection);\r
1979 if(collPhysSelection) delete collPhysSelection;\r
1980\r
0aaa8b91 1981return count;\r
1982}\r
1983 \r
00b81913 1984//____________________________________________________________________________\r
1985Int_t AlidNdPtCorrection::GetTrueMult(THnSparse * const hist, Int_t mult) const\r
0aaa8b91 1986{\r
00b81913 1987//\r
1988// get multiplicity of primary particles\r
1989//\r
0aaa8b91 1990 if(!hist) return 0;\r
00b81913 1991 Int_t trueMult = 0;\r
0aaa8b91 1992\r
1993 // 0 bins exluded\r
1994 TAxis *ax = hist->GetAxis(0);\r
1995 TAxis *ay = hist->GetAxis(1);\r
1996 ax->SetRange(1,ax->GetNbins());\r
1997 ay->SetRange(1,ay->GetNbins());\r
1998\r
1999 // measured mult\r
2000 ax->SetRangeUser((Float_t)mult,(Float_t)mult); \r
2001\r
2002 // get true multiplicity\r
2003 TH1D *h1 = (TH1D *)hist->Projection(1);\r
00b81913 2004 trueMult = (Int_t)h1->GetMean();\r
0aaa8b91 2005\r
00b81913 2006 return trueMult;\r
0aaa8b91 2007}\r
2008\r
2009//_____________________________________________________________________________\r
2010void AlidNdPtCorrection::Analyse() \r
2011{\r
2012 // Analyse histograms\r
2013 //\r
2014 TH1::AddDirectory(kFALSE);\r
2015 TH1 *h = 0, *hs=0, *hsc=0; \r
2016 TH2 *h2D = 0; \r
2017\r
2018 TObjArray *aFolderObj = new TObjArray;\r
2019\r
2020 //\r
2021 // get cuts\r
2022 //\r
2023 AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
2024 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
2025 AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
2026\r
2027 if(!evtCuts || !accCuts || !esdTrackCuts) {\r
2028 Error("AlidNdPtCutAnalysis::Analyse()", "cuts not available");\r
2029 return;\r
2030 }\r
2031\r
2032 //\r
2033 // set min and max values\r
2034 //\r
847e74b2 2035 //Double_t minPt = accCuts->GetMinPt();\r
2036 //Double_t maxPt = accCuts->GetMaxPt();\r
00b81913 2037 Double_t minEta = accCuts->GetMinEta();\r
2038 Double_t maxEta = accCuts->GetMaxEta()-0.00001;\r
d269b0e6 2039 \r
00b81913 2040 printf("minEta %f, maxEta %f \n",minEta, maxEta);\r
d269b0e6 2041\r
2042 //\r
363d22ac 2043 // LHC backgraund in all and 0-bins\r
2044 //\r
2045 AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();\r
2046 trigSel->SaveHistograms("physics_selection");\r
2047\r
2048 //\r
d269b0e6 2049 // cosmics background histo\r
2050 //\r
2051 h2D = fCosmicsHisto->Projection(0,1);\r
2052 h2D->SetName("deta_vs_dphi_cosmics");\r
2053 aFolderObj->Add(h2D);\r
0aaa8b91 2054\r
2055 //\r
0aaa8b91 2056 // event level \r
2057 //\r
2058 h = fCorrRecEventHist1[0]->Projection(1);\r
2059 h->SetName("mult_event_not_corrected");\r
2060 aFolderObj->Add(h);\r
2061\r
2062 h = fCorrRecEventHist1[1]->Projection(1);\r
2063 h->SetName("mult_event_vertex_corrected");\r
2064 aFolderObj->Add(h);\r
2065\r
2066 h = fCorrRecEventHist1[2]->Projection(1);\r
2067 h->SetName("mult_trigger_vertex_corrected");\r
2068 aFolderObj->Add(h);\r
2069\r
2070 h = fCorrRecEventHist1[3]->Projection(1);\r
2071 h->SetName("mult_ND_trigger_vertex_corrected");\r
2072 aFolderObj->Add(h);\r
2073\r
2074 h = fCorrRecEventHist1[4]->Projection(1);\r
2075 h->SetName("mult_NSD_trigger_vertex_corrected");\r
2076 aFolderObj->Add(h);\r
2077\r
2078 // empty events\r
2079 h = fCorrRecEventHist2[0]->Projection(1);\r
2080 h->SetName("mult_empty_event_not_corrected");\r
2081 aFolderObj->Add(h);\r
2082\r
2083 h = fCorrRecEventHist2[1]->Projection(1);\r
2084 h->SetName("mult_empty_event_vertex_corrected");\r
2085 aFolderObj->Add(h);\r
2086\r
2087 h = fCorrRecEventHist2[2]->Projection(1);\r
2088 h->SetName("mult_empty_trigger_vertex_corrected");\r
2089 aFolderObj->Add(h);\r
2090\r
2091 h = fCorrRecEventHist2[3]->Projection(1);\r
2092 h->SetName("mult_empty_ND_trigger_vertex_corrected");\r
2093 aFolderObj->Add(h);\r
2094\r
2095 h = fCorrRecEventHist2[4]->Projection(1);\r
2096 h->SetName("mult_empty_NSD_trigger_vertex_corrected");\r
2097 aFolderObj->Add(h);\r
bad4ba69 2098 \r
2099 //\r
2100 // MC available\r
2101 //\r
2102 if(IsUseMCInfo()) {\r
0aaa8b91 2103\r
2104 // mc \r
2105 h = fMCAllEventMultHist1->Projection(1);\r
2106 h->SetName("mc_mult_event_acc_prim");\r
2107 aFolderObj->Add(h);\r
2108\r
2109 h = fMCAllNDEventMultHist1->Projection(1);\r
2110 h->SetName("mc_mult_ND_event_acc_prim");\r
2111 aFolderObj->Add(h);\r
2112\r
2113 h = fMCAllNSDEventMultHist1->Projection(1);\r
2114 h->SetName("mc_mult_NSD_event_acc_prim");\r
2115 aFolderObj->Add(h);\r
2116\r
2117 h = fMCTriggerMultHist1->Projection(1);\r
2118 h->SetName("mc_mult_trigger_acc_prim");\r
2119 aFolderObj->Add(h);\r
2120\r
2121 h = fMCEventMultHist1->Projection(1);\r
2122 h->SetName("mc_mult_trigger_event_acc_prim");\r
2123 aFolderObj->Add(h);\r
2124\r
2125\r
2126 //\r
2127 // track level\r
2128 //\r
2129 \r
2130 // limit eta range\r
2131 for(Int_t i=0;i<8;i++) { \r
3405c7c2 2132 //fCorrRecTrackMultHist1[i]->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
2133 //fCorrRecTrackMultHist1[i]->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
0aaa8b91 2134 }\r
3405c7c2 2135 //fMCAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
2136 //fMCAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
0aaa8b91 2137\r
3405c7c2 2138 //fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
2139 //fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
0aaa8b91 2140\r
3405c7c2 2141 //fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
2142 //fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
0aaa8b91 2143\r
3405c7c2 2144 //fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
2145 //fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
0aaa8b91 2146\r
3405c7c2 2147 //fMCEventPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);\r
2148 //fMCEventPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
bad4ba69 2149\r
2150 } // end use MC info \r
0aaa8b91 2151 \r
2152 //\r
2153 h2D = fCorrRecTrackMultHist1[3]->Projection(1,0);\r
2154 h2D->SetName("pt_eta_rec_track_mult_eff_cont_corrected");\r
2155 aFolderObj->Add(h2D);\r
2156\r
2157 h2D = fCorrRecTrackMultHist1[4]->Projection(1,0);\r
2158 h2D->SetName("pt_eta_rec_event_track_mult_eff_cont_corrected");\r
2159 aFolderObj->Add(h2D);\r
2160\r
2161 h2D = fCorrRecTrackMultHist1[5]->Projection(1,0);\r
2162 h2D->SetName("pt_eta_rec_trig_event_track_mult_eff_cont_corrected");\r
2163 aFolderObj->Add(h2D);\r
2164\r
2165 h2D = fCorrRecTrackMultHist1[6]->Projection(1,0);\r
2166 h2D->SetName("pt_eta_rec_ND_trig_event_track_mult_eff_cont_corrected");\r
2167 aFolderObj->Add(h2D);\r
2168\r
2169 h2D = fCorrRecTrackMultHist1[7]->Projection(1,0);\r
2170 h2D->SetName("pt_eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");\r
2171 aFolderObj->Add(h2D);\r
2172\r
2173\r
2174 //\r
2175 h2D = fCorrRecTrackMultHist1[3]->Projection(2,0);\r
2176 h2D->SetName("pt_mult_rec_track_mult_eff_cont_corrected");\r
2177 aFolderObj->Add(h2D);\r
2178\r
2179 h2D = fCorrRecTrackMultHist1[4]->Projection(2,0);\r
2180 h2D->SetName("pt_mult_rec_event_track_mult_eff_cont_corrected");\r
2181 aFolderObj->Add(h2D);\r
2182\r
2183 h2D = fCorrRecTrackMultHist1[5]->Projection(2,0);\r
2184 h2D->SetName("pt_mult_rec_trig_event_track_mult_eff_cont_corrected");\r
2185 aFolderObj->Add(h2D);\r
2186\r
2187 h2D = fCorrRecTrackMultHist1[6]->Projection(2,0);\r
2188 h2D->SetName("pt_mult_rec_ND_trig_event_track_mult_eff_cont_corrected");\r
2189 aFolderObj->Add(h2D);\r
2190\r
2191 h2D = fCorrRecTrackMultHist1[7]->Projection(2,0);\r
2192 h2D->SetName("pt_mult_rec_NSD_trig_event_track_mult_eff_cont_corrected");\r
2193 aFolderObj->Add(h2D);\r
2194\r
2195 // pt axis\r
2196\r
2197 h = fCorrRecTrackMultHist1[0]->Projection(0);\r
2198 h->SetName("pt_rec_track_not_corrected");\r
2199 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2200 hs->SetName("pt_rec_track_not_corrected_s");\r
2201 aFolderObj->Add(hs);\r
2202\r
2203 //\r
2204 h = fCorrRecTrackMultHist1[1]->Projection(0);\r
2205 h->SetName("pt_rec_track_cont_corrected");\r
2206 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2207 hs->SetName("pt_rec_track_cont_corrected_s");\r
2208 aFolderObj->Add(hs);\r
2209\r
2210 hsc = (TH1D*)hs->Clone("pt_rec_track_cont_corr_fact");\r
2211 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));\r
2212 aFolderObj->Add(hsc);\r
2213\r
2214 //\r
2215 h = fCorrRecTrackMultHist1[2]->Projection(0);\r
2216 h->SetName("pt_rec_track_eff_cont_corrected");\r
2217 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2218 hs->SetName("pt_rec_track_eff_cont_corrected_s");\r
2219 aFolderObj->Add(hs);\r
2220\r
2221 hsc = (TH1D*)hs->Clone("pt_rec_track_eff_corr_fact");\r
2222 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_cont_corrected_s"));\r
2223 aFolderObj->Add(hsc);\r
2224\r
2225 //\r
2226 h = fCorrRecTrackMultHist1[3]->Projection(0);\r
2227 h->SetName("pt_rec_track_mult_eff_cont_corrected");\r
2228 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2229 hs->SetName("pt_rec_track_mult_eff_cont_corrected_s");\r
2230 aFolderObj->Add(hs);\r
2231\r
2232 hsc = (TH1D*)hs->Clone("pt_rec_track_mult_corr_fact");\r
2233 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_eff_cont_corrected_s"));\r
2234 aFolderObj->Add(hsc);\r
2235\r
2236 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2237 hsc = (TH1D*)hs->Clone("pt_rec_track_mult_eff_cont_corr_fact");\r
2238 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));\r
2239 aFolderObj->Add(hsc);\r
2240\r
2241 hsc = (TH1D*)hs->Clone();\r
2242 hsc->SetName("pt_rec_track_mult_eff_cont_corrected_s_norm");\r
2243 hsc->Scale(1./(fCorrRecEventHist1[0]->Projection(1)->Integral()));\r
2244 aFolderObj->Add(hsc);\r
2245\r
2246 //\r
2247 h = fCorrRecTrackMultHist1[4]->Projection(0);\r
2248 h->SetName("pt_rec_event_track_mult_eff_cont_corrected");\r
2249 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2250 hs->SetName("pt_rec_event_track_mult_eff_cont_corrected_s");\r
2251 aFolderObj->Add(hs);\r
2252\r
2253 hsc = (TH1D*)hs->Clone();\r
2254 hsc->SetName("pt_rec_event_track_mult_eff_cont_corrected_s_norm");\r
2255 hsc->Scale(1./(fCorrRecEventHist1[1]->Projection(1)->Integral()+fCorrRecEventHist2[1]->Projection(1)->Integral()));\r
2256 aFolderObj->Add(hsc);\r
2257\r
2258 //\r
2259 h = fCorrRecTrackMultHist1[5]->Projection(0);\r
2260 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected");\r
2261 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2262 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s");\r
2263 aFolderObj->Add(hs);\r
2264\r
2265 hsc = (TH1D*)hs->Clone();\r
2266 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");\r
2267 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral() + fCorrRecEventHist2[2]->Projection(1)->Integral()));\r
2268 aFolderObj->Add(hsc);\r
2269\r
00b81913 2270 // positive eta\r
2271 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(0., maxEta);\r
2272\r
2273 h = fCorrRecTrackMultHist1[5]->Projection(0);\r
2274 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_posEta");\r
2275 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2276 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_posEta");\r
2277 aFolderObj->Add(hs);\r
2278\r
2279 hsc = (TH1D*)hs->Clone();\r
2280 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");\r
2281 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));\r
2282 aFolderObj->Add(hsc);\r
2283\r
2284 // negative eta\r
2285 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(minEta, -0.00001);\r
2286\r
2287 h = fCorrRecTrackMultHist1[5]->Projection(0);\r
2288 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_negEta");\r
2289 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2290 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_negEta");\r
2291 aFolderObj->Add(hs);\r
2292\r
2293 hsc = (TH1D*)hs->Clone();\r
2294 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");\r
2295 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));\r
2296 aFolderObj->Add(hsc);\r
2297\r
2298 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[5]->GetAxis(1)->GetNbins());\r
2299\r
0aaa8b91 2300 //\r
2301 h = fCorrRecTrackMultHist1[6]->Projection(0);\r
2302 h->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected");\r
2303 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2304 hs->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s");\r
2305 aFolderObj->Add(hs);\r
2306\r
2307 hsc = (TH1D*)hs->Clone();\r
2308 hsc->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");\r
2309 hsc->Scale(1./(fCorrRecEventHist1[3]->Projection(1)->Integral()+fCorrRecEventHist2[3]->Projection(1)->Integral()));\r
2310 aFolderObj->Add(hsc);\r
2311\r
2312 //\r
2313 h = fCorrRecTrackMultHist1[7]->Projection(0);\r
2314 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected");\r
2315 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2316 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s");\r
2317 aFolderObj->Add(hs);\r
2318\r
2319 hsc = (TH1D*)hs->Clone();\r
2320 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");\r
15b7cc05 2321 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral() + fCorrRecEventHist2[4]->Projection(1)->Integral()));\r
0aaa8b91 2322 aFolderObj->Add(hsc);\r
2323\r
00b81913 2324 //\r
2325 // positive eta\r
2326 //\r
2327 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(0., maxEta);\r
2328\r
2329 h = fCorrRecTrackMultHist1[7]->Projection(0);\r
2330 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_posEta");\r
2331 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2332 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_posEta");\r
2333 aFolderObj->Add(hs);\r
2334\r
2335 hsc = (TH1D*)hs->Clone();\r
2336 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");\r
2337 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));\r
2338 aFolderObj->Add(hsc);\r
2339\r
2340 //\r
2341 // negative eta\r
2342 //\r
2343 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(minEta, -0.00001);\r
2344\r
2345 h = fCorrRecTrackMultHist1[7]->Projection(0);\r
2346 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_negEta");\r
2347 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2348 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_negEta");\r
2349 aFolderObj->Add(hs);\r
2350\r
2351 hsc = (TH1D*)hs->Clone();\r
2352 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");\r
2353 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));\r
2354 aFolderObj->Add(hsc);\r
2355\r
2356 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[7]->GetAxis(1)->GetNbins());\r
2357\r
0aaa8b91 2358 // eta axis\r
2359 h = fCorrRecTrackMultHist1[0]->Projection(1);\r
2360 h->SetName("eta_rec_track_not_corrected");\r
2361 aFolderObj->Add(h);\r
2362 \r
2363 h = fCorrRecTrackMultHist1[1]->Projection(1);\r
2364 h->SetName("eta_rec_track_cont_corrected");\r
2365 aFolderObj->Add(h);\r
2366\r
2367 h = fCorrRecTrackMultHist1[2]->Projection(1);\r
2368 h->SetName("eta_rec_track_eff_cont_corrected");\r
2369 aFolderObj->Add(h);\r
2370\r
2371 h = fCorrRecTrackMultHist1[3]->Projection(1);\r
2372 h->SetName("eta_rec_track_mult_eff_cont_corrected");\r
2373 aFolderObj->Add(h);\r
2374\r
2375 h = fCorrRecTrackMultHist1[4]->Projection(1);\r
2376 h->SetName("eta_rec_event_track_mult_eff_cont_corrected");\r
2377 aFolderObj->Add(h);\r
2378\r
2379 h = fCorrRecTrackMultHist1[5]->Projection(1);\r
2380 h->SetName("eta_rec_trig_event_track_mult_eff_cont_corrected");\r
2381 aFolderObj->Add(h);\r
2382\r
2383 h = fCorrRecTrackMultHist1[6]->Projection(1);\r
2384 h->SetName("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");\r
2385 aFolderObj->Add(h);\r
2386\r
2387 h = fCorrRecTrackMultHist1[7]->Projection(1);\r
2388 h->SetName("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");\r
2389 aFolderObj->Add(h);\r
2390\r
2391\r
bad4ba69 2392 //\r
2393 // MC available\r
2394 //\r
2395 if(IsUseMCInfo()) {\r
0aaa8b91 2396\r
2397 //\r
2398 h2D = fMCAllPrimTrackMultHist1->Projection(2,0);\r
2399 h2D->SetName("mc_all_pt_mult_acc_prim");\r
2400 aFolderObj->Add(h2D);\r
2401\r
2402 h2D = fMCAllPrimTrackMultHist1->Projection(1,0);\r
2403 h2D->SetName("mc_all_eta_pt_acc_prim");\r
2404 aFolderObj->Add(h2D);\r
2405\r
2406 h2D = fMCNDEventAllPrimTrackMultHist1->Projection(2,0);\r
2407 h2D->SetName("mc_ND_all_pt_mult_acc_prim");\r
2408 aFolderObj->Add(h2D);\r
2409\r
2410 h2D = fMCNDEventAllPrimTrackMultHist1->Projection(1,0);\r
2411 h2D->SetName("mc_ND_all_eta_pt_acc_prim");\r
2412 aFolderObj->Add(h2D);\r
2413\r
2414 h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(2,0);\r
2415 h2D->SetName("mc_NSD_all_pt_mult_acc_prim");\r
2416 aFolderObj->Add(h2D);\r
2417\r
2418 h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(1,0);\r
2419 h2D->SetName("mc_NSD_all_eta_pt_acc_prim");\r
2420 aFolderObj->Add(h2D);\r
2421\r
2422 //\r
2423\r
2424 h = fMCAllPrimTrackMultHist1->Projection(0);\r
2425 h->SetName("mc_all_pt_acc_prim");\r
2426 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2427 hs->SetName("mc_all_pt_acc_prim_s");\r
2428 aFolderObj->Add(hs);\r
2429\r
2430 hsc = (TH1D*)hs->Clone();\r
2431 hsc->SetName("mc_all_pt_acc_prim_s_norm");\r
2432 hsc->Scale(1./fMCAllEventMultHist1->Projection(1)->Integral());\r
2433 aFolderObj->Add(hsc);\r
2434\r
2435 h = fMCNDEventAllPrimTrackMultHist1->Projection(0);\r
2436 h->SetName("mc_ND_all_pt_acc_prim");\r
2437 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2438 hs->SetName("mc_ND_all_pt_acc_prim_s");\r
2439 aFolderObj->Add(hs);\r
2440\r
2441 hsc = (TH1D*)hs->Clone();\r
2442 hsc->SetName("mc_ND_all_pt_acc_prim_s_norm");\r
2443 hsc->Scale(1./fMCAllNDEventMultHist1->Projection(1)->Integral());\r
2444 aFolderObj->Add(hsc);\r
2445\r
2446 h = fMCNSDEventAllPrimTrackMultHist1->Projection(0);\r
2447 h->SetName("mc_NSD_all_pt_acc_prim");\r
2448 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2449 hs->SetName("mc_NSD_all_pt_acc_prim_s");\r
2450 aFolderObj->Add(hs);\r
2451\r
2452 hsc = (TH1D*)hs->Clone();\r
2453 hsc->SetName("mc_NSD_all_pt_acc_prim_s_norm");\r
2454 hsc->Scale(1./fMCAllNSDEventMultHist1->Projection(1)->Integral());\r
2455 aFolderObj->Add(hsc);\r
2456\r
2457 h = fMCTriggerPrimTrackMultHist1->Projection(0);\r
2458 h->SetName("mc_trigger_all_pt_acc_prim");\r
2459 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2460 hs->SetName("mc_trigger_all_pt_acc_prim_s");\r
2461 aFolderObj->Add(hs);\r
2462\r
2463 hsc = (TH1D*)hs->Clone();\r
2464 hsc->SetName("mc_trigger_all_pt_acc_prim_s_norm");\r
2465 hsc->Scale(1./fMCTriggerMultHist1->Projection(1)->Integral());\r
2466 aFolderObj->Add(hsc);\r
2467\r
2468 h = fMCEventPrimTrackMultHist1->Projection(0);\r
2469 h->SetName("mc_all_pt_acc_trig_event_prim");\r
2470 hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
2471 hs->SetName("mc_all_pt_acc_trig_event_prim_s");\r
2472 aFolderObj->Add(hs);\r
2473\r
2474 hsc = (TH1D*)hs->Clone();\r
2475 hsc->SetName("mc_all_pt_acc_trig_event_prim_s_norm");\r
2476 hsc->Scale(1./fMCEventMultHist1->Projection(1)->Integral());\r
2477 aFolderObj->Add(hsc);\r
2478\r
2479 //\r
2480\r
2481 h = fMCAllPrimTrackMultHist1->Projection(1);\r
2482 h->SetName("mc_all_eta_acc_prim");\r
2483 aFolderObj->Add(h);\r
2484\r
2485 h = fMCNDEventAllPrimTrackMultHist1->Projection(1);\r
2486 h->SetName("mc_ND_all_eta_acc_prim");\r
2487 aFolderObj->Add(h);\r
2488\r
2489 h = fMCNSDEventAllPrimTrackMultHist1->Projection(1);\r
2490 h->SetName("mc_NSD_all_eta_acc_prim");\r
2491 aFolderObj->Add(h);\r
2492\r
2493 h = fMCTriggerPrimTrackMultHist1->Projection(1);\r
2494 h->SetName("mc_trigger_all_eta_acc_prim");\r
2495 aFolderObj->Add(h);\r
2496\r
2497 h = fMCEventPrimTrackMultHist1->Projection(1);\r
2498 h->SetName("mc_all_eta_acc_trig_event_prim");\r
2499 aFolderObj->Add(h);\r
2500\r
2501 //\r
2502 // calculate ratios (rec / mc)\r
2503 //\r
2504 \r
2505 hs = (TH1*)aFolderObj->FindObject("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");\r
2506 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_trig_event_track_mult_eff_cont_corrected"); \r
2507 hsc->Sumw2();\r
2508 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_prim_s_norm"));\r
2509 aFolderObj->Add(hsc);\r
2510\r
2511 hs = (TH1*)aFolderObj->FindObject("eta_rec_trig_event_track_mult_eff_cont_corrected");\r
2512 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_trig_event_track_mult_eff_cont_corrected"); \r
2513 hsc->Sumw2();\r
2514 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_prim"));\r
2515 aFolderObj->Add(hsc);\r
2516\r
2517 //\r
2518 hs = (TH1*)aFolderObj->FindObject("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");\r
2519 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected"); \r
2520 hsc->Sumw2();\r
2521 hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_pt_acc_prim_s_norm"));\r
2522 aFolderObj->Add(hsc);\r
2523\r
2524 hs = (TH1*)aFolderObj->FindObject("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");\r
2525 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected"); \r
2526 hsc->Sumw2();\r
2527 hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_eta_acc_prim"));\r
2528 aFolderObj->Add(hsc);\r
2529\r
2530 //\r
2531 hs = (TH1*)aFolderObj->FindObject("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");\r
2532 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected"); \r
2533 hsc->Sumw2();\r
2534 hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_pt_acc_prim_s_norm"));\r
2535 aFolderObj->Add(hsc);\r
2536\r
2537 hs = (TH1*)aFolderObj->FindObject("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");\r
2538 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected"); \r
2539 hsc->Sumw2();\r
2540 hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_eta_acc_prim"));\r
2541 aFolderObj->Add(hsc);\r
2542\r
2543 //\r
2544 hs = (TH1*)aFolderObj->FindObject("pt_rec_event_track_mult_eff_cont_corrected_s_norm");\r
2545 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_event_track_mult_eff_cont_corrected"); \r
2546 hsc->Sumw2();\r
2547 hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_pt_acc_prim_s_norm"));\r
2548 aFolderObj->Add(hsc);\r
2549\r
2550 hs = (TH1*)aFolderObj->FindObject("eta_rec_event_track_mult_eff_cont_corrected");\r
2551 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_event_track_mult_eff_cont_corrected"); \r
2552 hsc->Sumw2();\r
2553 hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_eta_acc_prim"));\r
2554 aFolderObj->Add(hsc);\r
2555\r
2556 // track level\r
2557 hs = (TH1*)aFolderObj->FindObject("pt_rec_track_mult_eff_cont_corrected_s_norm");\r
2558 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_track_mult_eff_cont_corrected"); \r
2559 hsc->Sumw2();\r
2560 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_trig_event_prim_s_norm"));\r
2561 aFolderObj->Add(hsc);\r
2562\r
2563 hs = (TH1*)aFolderObj->FindObject("eta_rec_track_mult_eff_cont_corrected");\r
2564 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_track_mult_eff_cont_corrected"); \r
2565 hsc->Sumw2();\r
2566 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_trig_event_prim"));\r
2567 aFolderObj->Add(hsc);\r
2568\r
bad4ba69 2569 } // end MC infor available\r
2570\r
0aaa8b91 2571 // export objects to analysis folder\r
2572 fCorrectionFolder = ExportToFolder(aFolderObj);\r
2573\r
2574 // delete only TObjArray\r
2575 if(aFolderObj) delete aFolderObj;\r
2576}\r
2577\r
2578//_____________________________________________________________________________\r
c931948b 2579TFolder* AlidNdPtCorrection::ExportToFolder(TObjArray * const array) \r
0aaa8b91 2580{\r
2581 // recreate folder avery time and export objects to new one\r
2582 //\r
2583 AlidNdPtCorrection * comp=this;\r
2584 TFolder *folder = comp->GetCorrectionFolder();\r
2585\r
2586 TString name, title;\r
2587 TFolder *newFolder = 0;\r
2588 Int_t i = 0;\r
2589 Int_t size = array->GetSize();\r
2590\r
2591 if(folder) { \r
2592 // get name and title from old folder\r
2593 name = folder->GetName(); \r
2594 title = folder->GetTitle(); \r
2595\r
2596 // delete old one\r
2597 delete folder;\r
2598\r
2599 // create new one\r
2600 newFolder = CreateFolder(name.Data(),title.Data());\r
2601 newFolder->SetOwner();\r
2602\r
2603 // add objects to folder\r
2604 while(i < size) {\r
2605 newFolder->Add(array->At(i));\r
2606 i++;\r
2607 }\r
2608 }\r
2609\r
2610return newFolder;\r
2611}\r
2612\r
2613//_____________________________________________________________________________\r
2614TFolder* AlidNdPtCorrection::CreateFolder(TString name,TString title) { \r
2615// create folder for analysed histograms\r
2616//\r
2617TFolder *folder = 0;\r
2618 folder = new TFolder(name.Data(),title.Data());\r
2619\r
2620 return folder;\r
2621}\r