1 /**************************************************************************
\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: The ALICE Off-line Project. *
\r
5 * Contributors are mentioned in the code where appropriate. *
\r
7 * Permission to use, copy, modify and distribute this software and its *
\r
8 * documentation strictly for non-commercial purposes is hereby granted *
\r
9 * without fee, provided that the above copyright notice appears in all *
\r
10 * copies and that both the copyright notice and this permission notice *
\r
11 * appear in the supporting documentation. The authors make no claims *
\r
12 * about the suitability of this software for any purpose. It is *
\r
13 * provided "as is" without express or implied warranty. *
\r
14 **************************************************************************/
\r
15 //------------------------------------------------------------------------------
\r
16 // AlidNdPtCorrection class:
\r
18 // a. functionality:
\r
19 // - applies corrections on dNdPt spectra
\r
20 // - fills corrected dNdPt histograms
\r
21 // - fills correction control histograms
\r
24 // - dNdPt spectra before and after correction procedure
\r
25 // - control histograms
\r
26 // - correction matrices (must be loaded)
\r
28 // Author: J.Otwinowski 04/11/2008
\r
29 //------------------------------------------------------------------------------
\r
35 #include "AliHeader.h"
\r
36 #include "AliGenEventHeader.h"
\r
37 #include "AliStack.h"
\r
38 #include "AliESDEvent.h"
\r
39 #include "AliMCEvent.h"
\r
40 #include "AliESDtrackCuts.h"
\r
41 #include "AliLog.h"
\r
42 #include "AliMultiplicity.h"
\r
43 #include "AliTracker.h"
\r
45 #include "AlidNdPtEventCuts.h"
\r
46 #include "AlidNdPtAcceptanceCuts.h"
\r
47 #include "AliPhysicsSelection.h"
\r
49 #include "AliPWG0Helper.h"
\r
50 #include "AlidNdPtHelper.h"
\r
51 #include "AlidNdPtCorrection.h"
\r
53 using namespace std;
\r
55 ClassImp(AlidNdPtCorrection)
\r
57 //_____________________________________________________________________________
\r
58 //AlidNdPtCorrection::AlidNdPtCorrection(): TNamed(),
\r
59 AlidNdPtCorrection::AlidNdPtCorrection(): AlidNdPt(),
\r
60 fCorrectionFolder(0),
\r
63 fRecEventMultHist1(0),
\r
64 fMCAllEventMultHist1(0),
\r
65 fMCAllNDEventMultHist1(0),
\r
66 fMCAllNSDEventMultHist1(0),
\r
67 fMCTriggerMultHist1(0),
\r
68 fMCEventMultHist1(0),
\r
69 fMCAllPrimTrackMultHist1(0),
\r
70 fMCNDEventAllPrimTrackMultHist1(0),
\r
71 fMCNSDEventAllPrimTrackMultHist1(0),
\r
72 fMCTriggerPrimTrackMultHist1(0),
\r
73 fMCEventPrimTrackMultHist1(0),
\r
74 fMCAllPrimTrackTrueMultHist1(0),
\r
75 fMCNDEventAllPrimTrackTrueMultHist1(0),
\r
76 fMCNSDEventAllPrimTrackTrueMultHist1(0),
\r
77 fMCTriggerPrimTrackTrueMultHist1(0),
\r
78 fMCEventPrimTrackTrueMultHist1(0),
\r
79 fMCAllPrimTrackTrueMultHist2(0),
\r
80 fMCNDEventAllPrimTrackTrueMultHist2(0),
\r
81 fMCNSDEventAllPrimTrackTrueMultHist2(0),
\r
82 fMCTriggerPrimTrackTrueMultHist2(0),
\r
83 fMCEventPrimTrackTrueMultHist2(0),
\r
84 fMCAllPrimTrackMeanPtMult1(0),
\r
85 fMCNDEventAllPrimTrackMeanPtMult1(0),
\r
86 fMCNSDEventAllPrimTrackMeanPtMult1(0),
\r
87 fMCTriggerPrimTrackMeanPtMult1(0),
\r
88 fMCEventPrimTrackMeanPtMult1(0),
\r
89 fMCAllPrimTrackMeanPtTrueMult1(0),
\r
90 fMCNDEventAllPrimTrackMeanPtTrueMult1(0),
\r
91 fMCNSDEventAllPrimTrackMeanPtTrueMult1(0),
\r
92 fMCTriggerPrimTrackMeanPtTrueMult1(0),
\r
93 fMCEventPrimTrackMeanPtTrueMult1(0),
\r
94 fEventMultCorrelationMatrix(0),
\r
96 fZvEmptyEventsNorm(0),
\r
97 fCorrTriggerMBtoInelEventMatrix(0),
\r
98 fCorrTriggerMBtoNDEventMatrix(0),
\r
99 fCorrTriggerMBtoNSDEventMatrix(0),
\r
100 fCorrEventMatrix(0),
\r
101 fCorrTriggerMBtoInelTrackEventMatrix(0),
\r
102 fCorrTriggerMBtoNDTrackEventMatrix(0),
\r
103 fCorrTriggerMBtoNSDTrackEventMatrix(0),
\r
104 fCorrTrackEventMatrix(0),
\r
105 fCorrTrackMatrix(0),
\r
106 fCorrHighPtTrackMatrix(0),
\r
107 fContTrackMatrix(0),
\r
108 fContMultTrackMatrix(0),
\r
109 fCorrMatrixFileName(""),
\r
112 // default constructor
\r
113 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
114 fRecTrackHist1[i]=0;
\r
117 for(Int_t i=0; i<8; i++) {
\r
118 fCorrRecTrackMultHist1[i] = 0;
\r
119 fCorrRecTrackTrueMultHist1[i] = 0;
\r
120 fCorrRecTrackTrueMultHist2[i] = 0;
\r
121 fCorrRecTrackMeanPtMultHist1[i] = 0;
\r
122 fCorrRecTrackMeanPtTrueMultHist1[i] = 0;
\r
123 fCorrRecTrackPt1[i] = 0;
\r
126 for(Int_t i=0; i<5; i++) {
\r
127 fCorrRecEventHist1[i] = 0;
\r
128 fCorrRecEventHist2[i] = 0;
\r
134 //_____________________________________________________________________________
\r
135 AlidNdPtCorrection::AlidNdPtCorrection(Char_t* name, Char_t* title, TString corrMatrixFileName): AlidNdPt(name,title),
\r
136 fCorrectionFolder(0),
\r
139 fRecEventMultHist1(0),
\r
140 fMCAllEventMultHist1(0),
\r
141 fMCAllNDEventMultHist1(0),
\r
142 fMCAllNSDEventMultHist1(0),
\r
143 fMCTriggerMultHist1(0),
\r
144 fMCEventMultHist1(0),
\r
145 fMCAllPrimTrackMultHist1(0),
\r
146 fMCNDEventAllPrimTrackMultHist1(0),
\r
147 fMCNSDEventAllPrimTrackMultHist1(0),
\r
148 fMCTriggerPrimTrackMultHist1(0),
\r
149 fMCEventPrimTrackMultHist1(0),
\r
150 fMCAllPrimTrackTrueMultHist1(0),
\r
151 fMCNDEventAllPrimTrackTrueMultHist1(0),
\r
152 fMCNSDEventAllPrimTrackTrueMultHist1(0),
\r
153 fMCTriggerPrimTrackTrueMultHist1(0),
\r
154 fMCEventPrimTrackTrueMultHist1(0),
\r
155 fMCAllPrimTrackTrueMultHist2(0),
\r
156 fMCNDEventAllPrimTrackTrueMultHist2(0),
\r
157 fMCNSDEventAllPrimTrackTrueMultHist2(0),
\r
158 fMCTriggerPrimTrackTrueMultHist2(0),
\r
159 fMCEventPrimTrackTrueMultHist2(0),
\r
160 fMCAllPrimTrackMeanPtMult1(0),
\r
161 fMCNDEventAllPrimTrackMeanPtMult1(0),
\r
162 fMCNSDEventAllPrimTrackMeanPtMult1(0),
\r
163 fMCTriggerPrimTrackMeanPtMult1(0),
\r
164 fMCEventPrimTrackMeanPtMult1(0),
\r
165 fMCAllPrimTrackMeanPtTrueMult1(0),
\r
166 fMCNDEventAllPrimTrackMeanPtTrueMult1(0),
\r
167 fMCNSDEventAllPrimTrackMeanPtTrueMult1(0),
\r
168 fMCTriggerPrimTrackMeanPtTrueMult1(0),
\r
169 fMCEventPrimTrackMeanPtTrueMult1(0),
\r
170 fEventMultCorrelationMatrix(0),
\r
172 fZvEmptyEventsNorm(0),
\r
173 fCorrTriggerMBtoInelEventMatrix(0),
\r
174 fCorrTriggerMBtoNDEventMatrix(0),
\r
175 fCorrTriggerMBtoNSDEventMatrix(0),
\r
176 fCorrEventMatrix(0),
\r
177 fCorrTriggerMBtoInelTrackEventMatrix(0),
\r
178 fCorrTriggerMBtoNDTrackEventMatrix(0),
\r
179 fCorrTriggerMBtoNSDTrackEventMatrix(0),
\r
180 fCorrTrackEventMatrix(0),
\r
181 fCorrTrackMatrix(0),
\r
182 fCorrHighPtTrackMatrix(0),
\r
183 fContTrackMatrix(0),
\r
184 fContMultTrackMatrix(0),
\r
185 fCorrMatrixFileName(corrMatrixFileName),
\r
189 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
190 fRecTrackHist1[i]=0;
\r
193 for(Int_t i=0; i<8; i++) {
\r
194 fCorrRecTrackMultHist1[i] = 0;
\r
195 fCorrRecTrackTrueMultHist1[i] = 0;
\r
196 fCorrRecTrackTrueMultHist2[i] = 0;
\r
197 fCorrRecTrackMeanPtMultHist1[i] = 0;
\r
198 fCorrRecTrackMeanPtTrueMultHist1[i] = 0;
\r
199 fCorrRecTrackPt1[i] = 0;
\r
202 for(Int_t i=0; i<5; i++) {
\r
203 fCorrRecEventHist1[i] = 0;
\r
204 fCorrRecEventHist2[i] = 0;
\r
210 //_____________________________________________________________________________
\r
211 AlidNdPtCorrection::~AlidNdPtCorrection() {
\r
215 if(fMCEventHist1) delete fMCEventHist1; fMCEventHist1=0;
\r
216 if(fRecEventHist1) delete fRecEventHist1; fRecEventHist1=0;
\r
217 if(fRecEventMultHist1) delete fRecEventMultHist1; fRecEventMultHist1=0;
\r
219 if(fMCAllEventMultHist1) delete fMCAllEventMultHist1; fMCAllEventMultHist1=0;
\r
220 if(fMCAllNDEventMultHist1) delete fMCAllNDEventMultHist1; fMCAllNDEventMultHist1=0;
\r
221 if(fMCAllNSDEventMultHist1) delete fMCAllNSDEventMultHist1; fMCAllNSDEventMultHist1=0;
\r
222 if(fMCTriggerMultHist1) delete fMCTriggerMultHist1; fMCTriggerMultHist1=0;
\r
223 if(fMCEventMultHist1) delete fMCEventMultHist1; fMCEventMultHist1=0;
\r
225 if(fMCAllPrimTrackMultHist1) delete fMCAllPrimTrackMultHist1; fMCAllPrimTrackMultHist1=0;
\r
226 if(fMCNDEventAllPrimTrackMultHist1) delete fMCNDEventAllPrimTrackMultHist1; fMCNDEventAllPrimTrackMultHist1=0;
\r
227 if(fMCNSDEventAllPrimTrackMultHist1) delete fMCNSDEventAllPrimTrackMultHist1; fMCNSDEventAllPrimTrackMultHist1=0;
\r
228 if(fMCTriggerPrimTrackMultHist1) delete fMCTriggerPrimTrackMultHist1; fMCTriggerPrimTrackMultHist1=0;
\r
229 if(fMCEventPrimTrackMultHist1) delete fMCEventPrimTrackMultHist1; fMCEventPrimTrackMultHist1=0;
\r
231 if(fMCAllPrimTrackTrueMultHist1) delete fMCAllPrimTrackTrueMultHist1; fMCAllPrimTrackTrueMultHist1=0;
\r
232 if(fMCNDEventAllPrimTrackTrueMultHist1) delete fMCNDEventAllPrimTrackTrueMultHist1; fMCNDEventAllPrimTrackTrueMultHist1=0;
\r
233 if(fMCNSDEventAllPrimTrackTrueMultHist1) delete fMCNSDEventAllPrimTrackTrueMultHist1; fMCNSDEventAllPrimTrackTrueMultHist1=0;
\r
234 if(fMCTriggerPrimTrackTrueMultHist1) delete fMCTriggerPrimTrackTrueMultHist1; fMCTriggerPrimTrackTrueMultHist1=0;
\r
235 if(fMCEventPrimTrackTrueMultHist1) delete fMCEventPrimTrackTrueMultHist1; fMCEventPrimTrackTrueMultHist1=0;
\r
237 if(fMCAllPrimTrackTrueMultHist2) delete fMCAllPrimTrackTrueMultHist2; fMCAllPrimTrackTrueMultHist2=0;
\r
238 if(fMCNDEventAllPrimTrackTrueMultHist2) delete fMCNDEventAllPrimTrackTrueMultHist2; fMCNDEventAllPrimTrackTrueMultHist2=0;
\r
239 if(fMCNSDEventAllPrimTrackTrueMultHist2) delete fMCNSDEventAllPrimTrackTrueMultHist2; fMCNSDEventAllPrimTrackTrueMultHist2=0;
\r
240 if(fMCTriggerPrimTrackTrueMultHist2) delete fMCTriggerPrimTrackTrueMultHist2; fMCTriggerPrimTrackTrueMultHist2=0;
\r
241 if(fMCEventPrimTrackTrueMultHist2) delete fMCEventPrimTrackTrueMultHist2; fMCEventPrimTrackTrueMultHist2=0;
\r
246 if(fMCAllPrimTrackMeanPtMult1) delete fMCAllPrimTrackMeanPtMult1; fMCAllPrimTrackMeanPtMult1=0;
\r
247 if(fMCNDEventAllPrimTrackMeanPtMult1) delete fMCNDEventAllPrimTrackMeanPtMult1; fMCNDEventAllPrimTrackMeanPtMult1=0;
\r
248 if(fMCNSDEventAllPrimTrackMeanPtMult1) delete fMCNSDEventAllPrimTrackMeanPtMult1; fMCNSDEventAllPrimTrackMeanPtMult1=0;
\r
249 if(fMCTriggerPrimTrackMeanPtMult1) delete fMCTriggerPrimTrackMeanPtMult1; fMCTriggerPrimTrackMeanPtMult1=0;
\r
250 if(fMCEventPrimTrackMeanPtMult1) delete fMCEventPrimTrackMeanPtMult1; fMCEventPrimTrackMeanPtMult1=0;
\r
252 if(fMCAllPrimTrackMeanPtTrueMult1) delete fMCAllPrimTrackMeanPtTrueMult1; fMCAllPrimTrackMeanPtTrueMult1=0;
\r
253 if(fMCNDEventAllPrimTrackMeanPtTrueMult1) delete fMCNDEventAllPrimTrackMeanPtTrueMult1; fMCNDEventAllPrimTrackMeanPtTrueMult1=0;
\r
254 if(fMCNSDEventAllPrimTrackMeanPtTrueMult1) delete fMCNSDEventAllPrimTrackMeanPtTrueMult1; fMCNSDEventAllPrimTrackMeanPtTrueMult1=0;
\r
255 if(fMCTriggerPrimTrackMeanPtTrueMult1) delete fMCTriggerPrimTrackMeanPtTrueMult1; fMCTriggerPrimTrackMeanPtTrueMult1=0;
\r
256 if(fMCEventPrimTrackMeanPtTrueMult1) delete fMCEventPrimTrackMeanPtTrueMult1; fMCEventPrimTrackMeanPtTrueMult1=0;
\r
258 if(fCosmicsHisto) delete fCosmicsHisto; fCosmicsHisto=0;
\r
260 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
261 if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;
\r
264 for(Int_t i=0; i<8; i++) {
\r
265 if(fCorrRecTrackMultHist1[i]) delete fCorrRecTrackMultHist1[i]; fCorrRecTrackMultHist1[i]=0;
\r
266 if(fCorrRecTrackTrueMultHist1[i]) delete fCorrRecTrackTrueMultHist1[i]; fCorrRecTrackTrueMultHist1[i]=0;
\r
267 if(fCorrRecTrackTrueMultHist2[i]) delete fCorrRecTrackTrueMultHist2[i]; fCorrRecTrackTrueMultHist2[i]=0;
\r
268 if(fCorrRecTrackMeanPtMultHist1[i]) delete fCorrRecTrackMeanPtMultHist1[i]; fCorrRecTrackMeanPtMultHist1[i]=0;
\r
269 if(fCorrRecTrackMeanPtTrueMultHist1[i]) delete fCorrRecTrackMeanPtTrueMultHist1[i]; fCorrRecTrackMeanPtTrueMultHist1[i]=0;
\r
270 if(fCorrRecTrackPt1[i]) delete fCorrRecTrackPt1[i]; fCorrRecTrackPt1[i]=0;
\r
273 for(Int_t i=0; i<5; i++) {
\r
274 if(fCorrRecEventHist1[i]) delete fCorrRecEventHist1[i]; fCorrRecEventHist1[i]=0;
\r
275 if(fCorrRecEventHist2[i]) delete fCorrRecEventHist2[i]; fCorrRecEventHist2[i]=0;
\r
278 if(fCorrectionFolder) delete fCorrectionFolder; fCorrectionFolder=0;
\r
281 //_____________________________________________________________________________
\r
282 void AlidNdPtCorrection::Init(){
\r
286 const Int_t etaNbins = 30;
\r
287 const Int_t zvNbins = 12;
\r
290 //const Int_t ptNbins = 52;
\r
291 //Double_t binsPt[ptNbins+1] = { 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80, 1.90, 2.00, 2.10, 2.20, 2.30, 2.40, 2.50, 2.60, 2.70, 2.80, 2.90, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.20, 4.40, 4.60, 4.80, 5.00, 5.20, 5.40, 5.60, 5.80, 6.00, 7.00, 7.60, 8.80, 9.60 };
\r
293 const Int_t ptNbins = 56;
\r
294 Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0};
\r
295 Double_t binsEta[etaNbins+1] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};
\r
296 Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
\r
300 Int_t binsMCEventHist1[3]={100,100,140};
\r
301 Double_t minMCEventHist1[3]={-0.1,-0.1,-35.};
\r
302 Double_t maxMCEventHist1[3]={0.1,0.1,35.};
\r
303 fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1);
\r
304 fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)");
\r
305 fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)");
\r
306 fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)");
\r
307 fMCEventHist1->Sumw2();
\r
310 Int_t binsRecEventHist1[3]={100,100,140};
\r
311 Double_t minRecEventHist1[3]={-3.,-3.,-35.};
\r
312 Double_t maxRecEventHist1[3]={3.,3.,35.};
\r
313 fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1);
\r
314 fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)");
\r
315 fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)");
\r
316 fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)");
\r
317 fRecEventHist1->Sumw2();
\r
320 Int_t binsRecEventMultHist1[2]={150,150};
\r
321 Double_t minRecEventMultHist1[2]={-0.5,-0.5};
\r
322 Double_t maxRecEventMultHist1[2]={149.5,149.5};
\r
323 fRecEventMultHist1 = new THnSparseF("fRecEventMultHist1","track multiplicity:tracklet multiplicity",2,binsRecEventMultHist1,minRecEventMultHist1,maxRecEventMultHist1);
\r
324 fRecEventMultHist1->GetAxis(0)->SetTitle("track_mult");
\r
325 fRecEventMultHist1->GetAxis(1)->SetTitle("tracklet_mult");
\r
326 fRecEventMultHist1->Sumw2();
\r
332 Int_t binsMCAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
333 Double_t minMCAllPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
334 Double_t maxMCAllPrimTrackMultHist1[3]={20.,1.,149.5};
\r
335 sprintf(name,"fMCAllPrimTrackMultHist1");
\r
336 sprintf(title,"mcPt:mcEta:multiplicity");
\r
338 fMCAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackMultHist1,minMCAllPrimTrackMultHist1,maxMCAllPrimTrackMultHist1);
\r
339 fMCAllPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
340 fMCAllPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
341 fMCAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
342 fMCAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
343 fMCAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
344 fMCAllPrimTrackMultHist1->Sumw2();
\r
346 Int_t binsMCNDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
347 Double_t minMCNDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
348 Double_t maxMCNDEventAllPrimTrackMultHist1[3]={20.,1.,149.5};
\r
349 sprintf(name,"fMCNDEventAllPrimTrackMultHist1");
\r
350 sprintf(title,"mcPt:mcEta:multiplicity");
\r
352 fMCNDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackMultHist1,minMCNDEventAllPrimTrackMultHist1,maxMCNDEventAllPrimTrackMultHist1);
\r
353 fMCNDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
354 fMCNDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
355 fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
356 fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
357 fMCNDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
358 fMCNDEventAllPrimTrackMultHist1->Sumw2();
\r
360 Int_t binsMCNSDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
361 Double_t minMCNSDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
362 Double_t maxMCNSDEventAllPrimTrackMultHist1[3]={20.,1.,149.5};
\r
363 sprintf(name,"fMCNSDEventAllPrimTrackMultHist1");
\r
364 sprintf(title,"mcPt:mcEta:multiplicity");
\r
366 fMCNSDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackMultHist1,minMCNSDEventAllPrimTrackMultHist1,maxMCNSDEventAllPrimTrackMultHist1);
\r
367 fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
368 fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
369 fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
370 fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
371 fMCNSDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
372 fMCNSDEventAllPrimTrackMultHist1->Sumw2();
\r
374 Int_t binsMCEventTriggerPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
375 Double_t minMCEventTriggerPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
376 Double_t maxMCEventTriggerPrimTrackMultHist1[3]={20.,1.,149.5};
\r
377 sprintf(name,"fMCTriggerPrimTrackMultHist1");
\r
378 sprintf(title,"mcPt:mcEta:multiplicity");
\r
380 fMCTriggerPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackMultHist1,minMCEventTriggerPrimTrackMultHist1,maxMCEventTriggerPrimTrackMultHist1);
\r
381 fMCTriggerPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
382 fMCTriggerPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
383 fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
384 fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
385 fMCTriggerPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
386 fMCTriggerPrimTrackMultHist1->Sumw2();
\r
388 Int_t binsMCEventPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
389 Double_t minMCEventPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
390 Double_t maxMCEventPrimTrackMultHist1[3]={20.,1.,149.5};
\r
391 sprintf(name,"fMCEventPrimTrackMultHist1");
\r
392 sprintf(title,"mcPt:mcEta:multiplicity");
\r
394 fMCEventPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackMultHist1,minMCEventPrimTrackMultHist1,maxMCEventPrimTrackMultHist1);
\r
395 fMCEventPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
396 fMCEventPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
397 fMCEventPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
398 fMCEventPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
399 fMCEventPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
400 fMCEventPrimTrackMultHist1->Sumw2();
\r
403 // true multiplicity
\r
406 Int_t binsMCAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
407 Double_t minMCAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
408 Double_t maxMCAllPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
409 sprintf(name,"fMCAllPrimTrackTrueMultHist1");
\r
410 sprintf(title,"mcPt:mcEta:true_mult");
\r
412 fMCAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist1,minMCAllPrimTrackTrueMultHist1,maxMCAllPrimTrackTrueMultHist1);
\r
413 fMCAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
414 fMCAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
415 fMCAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
416 fMCAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
417 fMCAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
418 fMCAllPrimTrackTrueMultHist1->Sumw2();
\r
420 Int_t binsMCNDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
421 Double_t minMCNDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
422 Double_t maxMCNDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
423 sprintf(name,"fMCNDEventAllPrimTrackTrueMultHist1");
\r
424 sprintf(title,"mcPt:mcEta:true_mult");
\r
426 fMCNDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist1,minMCNDEventAllPrimTrackTrueMultHist1,maxMCNDEventAllPrimTrackTrueMultHist1);
\r
427 fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
428 fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
429 fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
430 fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
431 fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
432 fMCNDEventAllPrimTrackTrueMultHist1->Sumw2();
\r
434 Int_t binsMCNSDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
435 Double_t minMCNSDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
436 Double_t maxMCNSDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
437 sprintf(name,"fMCNSDEventAllPrimTrackTrueMultHist1");
\r
438 sprintf(title,"mcPt:mcEta:true_mult");
\r
440 fMCNSDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist1,minMCNSDEventAllPrimTrackTrueMultHist1,maxMCNSDEventAllPrimTrackTrueMultHist1);
\r
441 fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
442 fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
443 fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
444 fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
445 fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
446 fMCNSDEventAllPrimTrackTrueMultHist1->Sumw2();
\r
448 Int_t binsMCEventTriggerPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
449 Double_t minMCEventTriggerPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
450 Double_t maxMCEventTriggerPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
451 sprintf(name,"fMCTriggerPrimTrackTrueMultHist1");
\r
452 sprintf(title,"mcPt:mcEta:true_mult");
\r
454 fMCTriggerPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist1,minMCEventTriggerPrimTrackTrueMultHist1,maxMCEventTriggerPrimTrackTrueMultHist1);
\r
455 fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
456 fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
457 fMCTriggerPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
458 fMCTriggerPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
459 fMCTriggerPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
460 fMCTriggerPrimTrackTrueMultHist1->Sumw2();
\r
462 Int_t binsMCEventPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
463 Double_t minMCEventPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
464 Double_t maxMCEventPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
465 sprintf(name,"fMCEventPrimTrackTrueMultHist1");
\r
466 sprintf(title,"mcPt:mcEta:true_mult");
\r
468 fMCEventPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist1,minMCEventPrimTrackTrueMultHist1,maxMCEventPrimTrackTrueMultHist1);
\r
469 fMCEventPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
470 fMCEventPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
471 fMCEventPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
472 fMCEventPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
473 fMCEventPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
474 fMCEventPrimTrackTrueMultHist1->Sumw2();
\r
477 // mcPT vs multiplicity vs true multiplicity
\r
480 Int_t binsMCAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
481 Double_t minMCAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
482 Double_t maxMCAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
483 sprintf(name,"fMCAllPrimTrackTrueMultHist2");
\r
484 sprintf(title,"mcPt:mult:true_mult");
\r
486 fMCAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist2,minMCAllPrimTrackTrueMultHist2,maxMCAllPrimTrackTrueMultHist2);
\r
487 fMCAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
488 fMCAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
489 fMCAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
490 fMCAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
491 fMCAllPrimTrackTrueMultHist2->Sumw2();
\r
493 Int_t binsMCNDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
494 Double_t minMCNDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
495 Double_t maxMCNDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
496 sprintf(name,"fMCNDEventAllPrimTrackTrueMultHist2");
\r
497 sprintf(title,"mcPt:mult:true_mult");
\r
499 fMCNDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist2,minMCNDEventAllPrimTrackTrueMultHist2,maxMCNDEventAllPrimTrackTrueMultHist2);
\r
500 fMCNDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
501 fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
502 fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
503 fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
504 fMCNDEventAllPrimTrackTrueMultHist2->Sumw2();
\r
506 Int_t binsMCNSDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
507 Double_t minMCNSDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
508 Double_t maxMCNSDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
509 sprintf(name,"fMCNSDEventAllPrimTrackTrueMultHist2");
\r
510 sprintf(title,"mcPt:mult:true_mult");
\r
512 fMCNSDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist2,minMCNSDEventAllPrimTrackTrueMultHist2,maxMCNSDEventAllPrimTrackTrueMultHist2);
\r
513 fMCNSDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
514 fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
515 fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
516 fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
517 fMCNSDEventAllPrimTrackTrueMultHist2->Sumw2();
\r
519 Int_t binsMCEventTriggerPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
520 Double_t minMCEventTriggerPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
521 Double_t maxMCEventTriggerPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
522 sprintf(name,"fMCTriggerPrimTrackTrueMultHist2");
\r
523 sprintf(title,"mcPt:mult:true_mult");
\r
525 fMCTriggerPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist2,minMCEventTriggerPrimTrackTrueMultHist2,maxMCEventTriggerPrimTrackTrueMultHist2);
\r
526 fMCTriggerPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
527 fMCTriggerPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
528 fMCTriggerPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
529 fMCTriggerPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
530 fMCTriggerPrimTrackTrueMultHist2->Sumw2();
\r
532 Int_t binsMCEventPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
533 Double_t minMCEventPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
534 Double_t maxMCEventPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
535 sprintf(name,"fMCEventPrimTrackTrueMultHist2");
\r
536 sprintf(title,"mcPt:mult:true_mult");
\r
538 fMCEventPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist2,minMCEventPrimTrackTrueMultHist2,maxMCEventPrimTrackTrueMultHist2);
\r
539 fMCEventPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
540 fMCEventPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
541 fMCEventPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
542 fMCEventPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
543 fMCEventPrimTrackTrueMultHist2->Sumw2();
\r
549 Int_t binsMCAllPrimTrackMeanPtTrueMult1[2]={100,150};
\r
550 Double_t minMCAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
551 Double_t maxMCAllPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
552 sprintf(name,"fMCAllPrimTrackMeanPtTrueMult1");
\r
553 sprintf(title,"event <mcPt>:true_mult");
\r
555 fMCAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtTrueMult1,minMCAllPrimTrackMeanPtTrueMult1,maxMCAllPrimTrackMeanPtTrueMult1);
\r
556 fMCAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
557 fMCAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
558 fMCAllPrimTrackMeanPtTrueMult1->Sumw2();
\r
560 Int_t binsMCAllPrimTrackMeanPtMult1[2]={100,150};
\r
561 Double_t minMCAllPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
562 Double_t maxMCAllPrimTrackMeanPtMult1[2]={10.,149.5};
\r
563 sprintf(name,"fMCAllPrimTrackMeanPtMult1");
\r
564 sprintf(title,"event <mcPt>:mult");
\r
566 fMCAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtMult1,minMCAllPrimTrackMeanPtMult1,maxMCAllPrimTrackMeanPtMult1);
\r
567 fMCAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
568 fMCAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
569 fMCAllPrimTrackMeanPtMult1->Sumw2();
\r
572 Int_t binsMCNDEventAllPrimTrackMeanPtTrueMult1[2]={100,150};
\r
573 Double_t minMCNDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
574 Double_t maxMCNDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
575 sprintf(name,"fMCNDEventAllPrimTrackMeanPtTrueMult1");
\r
576 sprintf(title,"event <mcPt>:true_mult");
\r
578 fMCNDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtTrueMult1,minMCNDEventAllPrimTrackMeanPtTrueMult1,maxMCNDEventAllPrimTrackMeanPtTrueMult1);
\r
579 fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
580 fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
581 fMCNDEventAllPrimTrackMeanPtTrueMult1->Sumw2();
\r
583 Int_t binsMCNDEventAllPrimTrackMeanPtMult1[2]={100,150};
\r
584 Double_t minMCNDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
585 Double_t maxMCNDEventAllPrimTrackMeanPtMult1[2]={10.,149.5};
\r
586 sprintf(name,"fMCNDEventAllPrimTrackMeanPtMult1");
\r
587 sprintf(title,"event <mcPt>:mult");
\r
589 fMCNDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtMult1,minMCNDEventAllPrimTrackMeanPtMult1,maxMCNDEventAllPrimTrackMeanPtMult1);
\r
590 fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
591 fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
592 fMCNDEventAllPrimTrackMeanPtMult1->Sumw2();
\r
595 Int_t binsMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={100,150};
\r
596 Double_t minMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
597 Double_t maxMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
598 sprintf(name,"fMCNSDEventAllPrimTrackMeanPtTrueMult1");
\r
599 sprintf(title,"event <mcPt>:true_mult");
\r
601 fMCNSDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtTrueMult1,minMCNSDEventAllPrimTrackMeanPtTrueMult1,maxMCNSDEventAllPrimTrackMeanPtTrueMult1);
\r
602 fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
603 fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
604 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Sumw2();
\r
606 Int_t binsMCNSDEventAllPrimTrackMeanPtMult1[2]={100,150};
\r
607 Double_t minMCNSDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
608 Double_t maxMCNSDEventAllPrimTrackMeanPtMult1[2]={10.,149.5};
\r
609 sprintf(name,"fMCNSDEventAllPrimTrackMeanPtMult1");
\r
610 sprintf(title,"event <mcPt>:mult");
\r
612 fMCNSDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtMult1,minMCNSDEventAllPrimTrackMeanPtMult1,maxMCNSDEventAllPrimTrackMeanPtMult1);
\r
613 fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
614 fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
615 fMCNSDEventAllPrimTrackMeanPtMult1->Sumw2();
\r
618 Int_t binsMCTriggerPrimTrackMeanPtTrueMult1[2]={100,150};
\r
619 Double_t minMCTriggerPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
620 Double_t maxMCTriggerPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
621 sprintf(name,"fMCTriggerPrimTrackMeanPtTrueMult1");
\r
622 sprintf(title,"event <mcPt>:true_mult");
\r
624 fMCTriggerPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtTrueMult1,minMCTriggerPrimTrackMeanPtTrueMult1,maxMCTriggerPrimTrackMeanPtTrueMult1);
\r
625 fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
626 fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
627 fMCTriggerPrimTrackMeanPtTrueMult1->Sumw2();
\r
629 Int_t binsMCTriggerPrimTrackMeanPtMult1[2]={100,150};
\r
630 Double_t minMCTriggerPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
631 Double_t maxMCTriggerPrimTrackMeanPtMult1[2]={10.,149.5};
\r
632 sprintf(name,"fMCTriggerPrimTrackMeanPtMult1");
\r
633 sprintf(title,"event <mcPt>:mult");
\r
635 fMCTriggerPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtMult1,minMCTriggerPrimTrackMeanPtMult1,maxMCTriggerPrimTrackMeanPtMult1);
\r
636 fMCTriggerPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
637 fMCTriggerPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
638 fMCTriggerPrimTrackMeanPtMult1->Sumw2();
\r
641 Int_t binsMCEventPrimTrackMeanPtTrueMult1[2]={100,150};
\r
642 Double_t minMCEventPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
643 Double_t maxMCEventPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
644 sprintf(name,"fMCEventPrimTrackMeanPtTrueMult1");
\r
645 sprintf(title,"event <mcPt>:true_mult");
\r
647 fMCEventPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtTrueMult1,minMCEventPrimTrackMeanPtTrueMult1,maxMCEventPrimTrackMeanPtTrueMult1);
\r
648 fMCEventPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
649 fMCEventPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
650 fMCEventPrimTrackMeanPtTrueMult1->Sumw2();
\r
652 Int_t binsMCEventPrimTrackMeanPtMult1[2]={100,150};
\r
653 Double_t minMCEventPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
654 Double_t maxMCEventPrimTrackMeanPtMult1[2]={10.,149.5};
\r
655 sprintf(name,"fMCEventPrimTrackMeanPtMult1");
\r
656 sprintf(title,"event <mcPt>:mult");
\r
658 fMCEventPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtMult1,minMCEventPrimTrackMeanPtMult1,maxMCEventPrimTrackMeanPtMult1);
\r
659 fMCEventPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
660 fMCEventPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
661 fMCEventPrimTrackMeanPtMult1->Sumw2();
\r
669 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++)
\r
671 // THnSparse track histograms
\r
673 Int_t binsRecTrackHist1[3]={ptNbins,etaNbins,90};
\r
674 Double_t minRecTrackHist1[3]={0.,-1.,0.};
\r
675 Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()};
\r
676 sprintf(name,"fRecTrackHist1_%d",i);
\r
677 sprintf(title,"Pt:Eta:Phi");
\r
679 fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1);
\r
680 fRecTrackHist1[i]->SetBinEdges(0,binsPt);
\r
681 fRecTrackHist1[i]->SetBinEdges(1,binsEta);
\r
682 fRecTrackHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
683 fRecTrackHist1[i]->GetAxis(1)->SetTitle("Eta");
\r
684 fRecTrackHist1[i]->GetAxis(2)->SetTitle("Phi (rad)");
\r
685 fRecTrackHist1[i]->Sumw2();
\r
689 Int_t binsCorrRecTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
690 Double_t minCorrRecTrackMultHist1[3]={0.,-1.,-0.5};
\r
691 Double_t maxCorrRecTrackMultHist1[3]={20.,1.,149.5};
\r
693 Int_t binsCorrRecTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
694 Double_t minCorrRecTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
695 Double_t maxCorrRecTrackTrueMultHist1[3]={20.,1.,149.5};
\r
697 Int_t binsCorrRecTrackTrueMultHist2[3]={ptNbins,150,150};
\r
698 Double_t minCorrRecTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
699 Double_t maxCorrRecTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
702 Int_t binsCorrRecTrackMeanPtMultHist1[2]={100,150};
\r
703 Double_t minCorrRecTrackMeanPtMultHist1[2]={0.,-0.5};
\r
704 Double_t maxCorrRecTrackMeanPtMultHist1[2]={10.,149.5};
\r
706 Int_t binsCorrRecTrackMeanPtTrueMultHist1[2]={100,150};
\r
707 Double_t minCorrRecTrackMeanPtTrueMultHist1[2]={0.,-0.5};
\r
708 Double_t maxCorrRecTrackMeanPtTrueMultHist1[2]={10.,149.5};
\r
710 Int_t binsCorrRecTrackPt1[1]={200};
\r
711 Double_t minCorrRecTrackPt1[1]={0.};
\r
712 Double_t maxCorrRecTrackPt1[1]={10.};
\r
714 for(Int_t i=0; i<8; i++)
\r
716 // THnSparse track histograms
\r
717 sprintf(name,"fCorrRecTrackMultHist1_%d",i);
\r
718 sprintf(title,"Pt:Eta:mult");
\r
719 fCorrRecTrackMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackMultHist1,minCorrRecTrackMultHist1,maxCorrRecTrackMultHist1);
\r
720 fCorrRecTrackMultHist1[i]->SetBinEdges(0,binsPt);
\r
721 fCorrRecTrackMultHist1[i]->SetBinEdges(1,binsEta);
\r
722 fCorrRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
723 fCorrRecTrackMultHist1[i]->GetAxis(1)->SetTitle("Eta");
\r
724 fCorrRecTrackMultHist1[i]->GetAxis(2)->SetTitle("multiplicity");
\r
725 fCorrRecTrackMultHist1[i]->Sumw2();
\r
727 // THnSparse track histograms
\r
728 sprintf(name,"fCorrRecTrackTrueMultHist1_%d",i);
\r
729 sprintf(title,"Pt:Eta:true_mult");
\r
730 fCorrRecTrackTrueMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist1,minCorrRecTrackTrueMultHist1,maxCorrRecTrackTrueMultHist1);
\r
731 fCorrRecTrackTrueMultHist1[i]->SetBinEdges(0,binsPt);
\r
732 fCorrRecTrackTrueMultHist1[i]->SetBinEdges(1,binsEta);
\r
733 fCorrRecTrackTrueMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
734 fCorrRecTrackTrueMultHist1[i]->GetAxis(1)->SetTitle("Eta");
\r
735 fCorrRecTrackTrueMultHist1[i]->GetAxis(2)->SetTitle("true multiplicity");
\r
736 fCorrRecTrackTrueMultHist1[i]->Sumw2();
\r
739 sprintf(name,"fCorrRecTrackTrueMultHist2_%d",i);
\r
740 sprintf(title,"Pt:mult:true_mult");
\r
741 fCorrRecTrackTrueMultHist2[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist2,minCorrRecTrackTrueMultHist2,maxCorrRecTrackTrueMultHist2);
\r
742 fCorrRecTrackTrueMultHist2[i]->SetBinEdges(0,binsPt);
\r
743 fCorrRecTrackTrueMultHist2[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
744 fCorrRecTrackTrueMultHist2[i]->GetAxis(1)->SetTitle("multiplicity");
\r
745 fCorrRecTrackTrueMultHist2[i]->GetAxis(2)->SetTitle("true multiplicity");
\r
746 fCorrRecTrackTrueMultHist2[i]->Sumw2();
\r
748 // THnSparse track histograms
\r
749 sprintf(name,"fCorrRecTrackMeanPtMultHist1_%d",i);
\r
750 sprintf(title,"<Pt>:mult");
\r
751 fCorrRecTrackMeanPtMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtMultHist1,minCorrRecTrackMeanPtMultHist1,maxCorrRecTrackMeanPtMultHist1);
\r
752 fCorrRecTrackMeanPtMultHist1[i]->GetAxis(0)->SetTitle("<Pt> (GeV/c)");
\r
753 fCorrRecTrackMeanPtMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");
\r
754 fCorrRecTrackMeanPtMultHist1[i]->Sumw2();
\r
756 // THnSparse track histograms
\r
757 sprintf(name,"fCorrRecTrackMeanPtTrueMultHist1_%d",i);
\r
758 sprintf(title,"<Pt>:true_mult");
\r
759 fCorrRecTrackMeanPtTrueMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtTrueMultHist1,minCorrRecTrackMeanPtTrueMultHist1,maxCorrRecTrackMeanPtTrueMultHist1);
\r
760 fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(0)->SetTitle("<Pt> (GeV/c)");
\r
761 fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(1)->SetTitle("true multiplicity");
\r
762 fCorrRecTrackMeanPtTrueMultHist1[i]->Sumw2();
\r
764 sprintf(name,"fCorrRecTrackPt1_%d",i);
\r
765 sprintf(title,"pt small bining");
\r
766 fCorrRecTrackPt1[i] = new THnSparseF(name,title,1,binsCorrRecTrackPt1,minCorrRecTrackPt1,maxCorrRecTrackPt1);
\r
767 fCorrRecTrackPt1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
768 fCorrRecTrackPt1[i]->Sumw2();
\r
772 Int_t binsEventMatrix[2]={zvNbins,150};
\r
773 Double_t minEventMatrix[2]={-25.,-0.5};
\r
774 Double_t maxEventMatrix[2]={25.,149.5};
\r
776 fMCAllEventMultHist1 = new THnSparseF("fMCAllEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
777 fMCAllEventMultHist1->SetBinEdges(0,binsZv);
\r
778 fMCAllEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
779 fMCAllEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
780 fMCAllEventMultHist1->Sumw2();
\r
782 fMCAllNDEventMultHist1 = new THnSparseF("fMCAllNDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
783 fMCAllNDEventMultHist1->SetBinEdges(0,binsZv);
\r
784 fMCAllNDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
785 fMCAllNDEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
786 fMCAllNDEventMultHist1->Sumw2();
\r
788 fMCAllNSDEventMultHist1 = new THnSparseF("fMCAllNSDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
789 fMCAllNSDEventMultHist1->SetBinEdges(0,binsZv);
\r
790 fMCAllNSDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
791 fMCAllNSDEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
792 fMCAllNSDEventMultHist1->Sumw2();
\r
794 fMCTriggerMultHist1 = new THnSparseF("fMCTriggerMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
795 fMCTriggerMultHist1->SetBinEdges(0,binsZv);
\r
796 fMCTriggerMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
797 fMCTriggerMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
798 fMCTriggerMultHist1->Sumw2();
\r
800 fMCEventMultHist1 = new THnSparseF("fMCEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
801 fMCEventMultHist1->SetBinEdges(0,binsZv);
\r
802 fMCEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
803 fMCEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
804 fMCEventMultHist1->Sumw2();
\r
806 for(Int_t i=0; i<5; i++)
\r
808 // event corrected histograms
\r
809 sprintf(name,"fCorrRecEventHist1_%d",i);
\r
810 sprintf(title,"mcZv:mult");
\r
811 fCorrRecEventHist1[i] = new THnSparseF("fCorrRecEventHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
812 fCorrRecEventHist1[i]->SetBinEdges(0,binsZv);
\r
813 fCorrRecEventHist1[i]->GetAxis(0)->SetTitle("Zv (cm)");
\r
814 fCorrRecEventHist1[i]->GetAxis(1)->SetTitle("multiplicity");
\r
815 fCorrRecEventHist1[i]->Sumw2();
\r
817 // empty event corrected histograms
\r
818 sprintf(name,"fCorrRecEventHist2_%d",i);
\r
819 sprintf(title,"mcZv:mult");
\r
820 fCorrRecEventHist2[i] = new THnSparseF("fCorrRecEventHist2","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
821 fCorrRecEventHist2[i]->SetBinEdges(0,binsZv);
\r
822 fCorrRecEventHist2[i]->GetAxis(0)->SetTitle("Zv (cm)");
\r
823 fCorrRecEventHist2[i]->GetAxis(1)->SetTitle("multiplicity");
\r
824 fCorrRecEventHist2[i]->Sumw2();
\r
830 Int_t binsCosmicsHisto[3]= {151, 300, ptNbins};
\r
831 Double_t minCosmicsHisto[3]={-1.5, -2.*TMath::Pi(), 0.0};
\r
832 Double_t maxCosmicsHisto[3]={ 1.5, 2.*TMath::Pi(), 16.0};
\r
833 sprintf(name,"fCosmicsHisto");
\r
834 sprintf(title,"deta:dphi:pt");
\r
836 fCosmicsHisto = new THnSparseF(name,title,3,binsCosmicsHisto,minCosmicsHisto,maxCosmicsHisto);
\r
837 fCosmicsHisto->SetBinEdges(2,binsPt);
\r
838 fCosmicsHisto->GetAxis(0)->SetTitle("#Delta#eta");
\r
839 fCosmicsHisto->GetAxis(1)->SetTitle("#Delta#phi (rad)");
\r
840 fCosmicsHisto->GetAxis(2)->SetTitle("pt (GV/c)");
\r
841 fCosmicsHisto->Sumw2();
\r
843 // init output folder
\r
844 fCorrectionFolder = CreateFolder("folderdNdPt","Correction dNdPt Folder");
\r
846 // init correction matrices
\r
847 TFile *file = (TFile *)TFile::Open(fCorrMatrixFileName.Data());
\r
849 AliDebug(AliLog::kError, "file with efficiency matrices not available");
\r
850 printf("file with efficiency matrices not available \n");
\r
852 TFolder *folder = (TFolder *)file->FindObjectAny("folderdNdPt");
\r
854 AliDebug(AliLog::kError, "file without folderdNdPt");
\r
855 printf("file without folderdNdPt \n");
\r
857 // rec. event mult vs true multiplicity
\r
858 fEventMultCorrelationMatrix = (THnSparseF*)folder->FindObject("event_mult_correlation_matrix");
\r
859 if(!fEventMultCorrelationMatrix) {
\r
860 Printf("No %s matrix \n", "event_mult_correlation_matrix");
\r
864 // event level corrections (zv,mult_MB)
\r
867 // trigger bias correction (MBtoND)
\r
868 fCorrTriggerMBtoNDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoND_corr_matrix");
\r
869 if(!fCorrTriggerMBtoNDEventMatrix) {
\r
870 Printf("No %s matrix \n", "zv_mult_trig_MBtoND_corr_matrix");
\r
873 // trigger bias correction (MBtoNSD)
\r
874 fCorrTriggerMBtoNSDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoNSD_corr_matrix");
\r
875 if(!fCorrTriggerMBtoNSDEventMatrix) {
\r
876 Printf("No %s matrix \n", "zv_mult_trig_MBtoNSD_corr_matrix");
\r
879 // trigger bias correction (MBtoInel)
\r
880 fCorrTriggerMBtoInelEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoInel_corr_matrix");
\r
881 if(!fCorrTriggerMBtoInelEventMatrix) {
\r
882 Printf("No %s matrix \n", "zv_mult_trig_MBtoInel_corr_matrix");
\r
885 // vertex reconstruction efficiency correction
\r
886 fCorrEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_event_corr_matrix");
\r
887 if(!fCorrEventMatrix) {
\r
888 Printf("No %s matrix \n", "zv_mult_event_corr_matrix");
\r
892 // histogram needed for empty events corrections
\r
894 fZvNorm = (TH1D*)folder->FindObject("zv_distribution_norm");
\r
896 Printf("No %s matrix \n", "fZvNorm");
\r
899 fZvEmptyEventsNorm = (TH1D*)folder->FindObject("zv_empty_events_norm");
\r
900 if(!fZvEmptyEventsNorm) {
\r
901 Printf("No %s matrix \n", "fZvEmptyEventsNorm");
\r
905 // track-event level corrections (zv,pt,eta)
\r
908 // trigger bias correction (MBtoND)
\r
909 fCorrTriggerMBtoNDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoND_corr_matrix");
\r
910 if(!fCorrTriggerMBtoNDTrackEventMatrix) {
\r
911 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoND_corr_matrix");
\r
914 // trigger bias correction (MBtoNSD)
\r
915 fCorrTriggerMBtoNSDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoNSD_corr_matrix");
\r
916 if(!fCorrTriggerMBtoNSDTrackEventMatrix) {
\r
917 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoNSD_corr_matrix");
\r
920 // trigger bias correction (MBtoInel)
\r
921 fCorrTriggerMBtoInelTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoInel_corr_matrix");
\r
922 if(!fCorrTriggerMBtoInelTrackEventMatrix) {
\r
923 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoInel_corr_matrix");
\r
926 // vertex reconstruction efficiency correction (zv,pt,eta)
\r
927 fCorrTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_event_corr_matrix");
\r
928 if(!fCorrTrackEventMatrix) {
\r
929 Printf("No %s matrix \n", "zv_pt_eta_track_event_corr_matrix");
\r
932 // track reconstruction efficiency correction (zv,pt,eta)
\r
933 fCorrTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_corr_matrix");
\r
934 if(!fCorrTrackMatrix) {
\r
935 Printf("No %s matrix \n", "zv_pt_eta_track_corr_matrix");
\r
938 // high pt track reconstruction efficiency correction (zv,pt,eta)
\r
939 fCorrHighPtTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_highPt_track_corr_matrix");
\r
940 if(!fCorrHighPtTrackMatrix) {
\r
941 Printf("No %s matrix \n", "zv_pt_eta_highPt_track_corr_matrix");
\r
944 // secondary tracks contamination correction (zv,pt,eta)
\r
945 fContTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_cont_matrix");
\r
946 if(!fContTrackMatrix) {
\r
947 Printf("No %s matrix \n", "zv_pt_eta_track_cont_matrix");
\r
950 // multiply reconstructed tracks correction
\r
951 fContMultTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_mult_track_cont_matrix");
\r
952 if(!fContMultTrackMatrix) {
\r
953 Printf("No %s matrix \n", "zv_pt_eta_mult_track_cont_matrix");
\r
960 //_____________________________________________________________________________
\r
961 void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
\r
964 // Process real and/or simulated events
\r
967 AliDebug(AliLog::kError, "esdEvent not available");
\r
971 // get selection cuts
\r
972 AlidNdPtEventCuts *evtCuts = GetEventCuts();
\r
973 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
\r
974 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
\r
976 if(!evtCuts || !accCuts || !esdTrackCuts) {
\r
977 AliDebug(AliLog::kError, "cuts not available");
\r
981 // trigger selection
\r
982 Bool_t isEventTriggered = kTRUE;
\r
983 if(evtCuts->IsTriggerRequired())
\r
985 AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();
\r
987 AliDebug(AliLog::kError, "cannot get trigSel");
\r
991 if(IsUseMCInfo()) {
\r
992 //static AliTriggerAnalysis* triggerAnalysis = new AliTriggerAnalysis;
\r
993 //isEventTriggered = triggerAnalysis->IsTriggerFired(esdEvent, GetTrigger());
\r
994 trigSel->SetAnalyzeMC();
\r
995 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
998 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1002 // use MC information
\r
1003 AliHeader* header = 0;
\r
1004 AliGenEventHeader* genHeader = 0;
\r
1005 AliStack* stack = 0;
\r
1007 AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;
\r
1008 Int_t multMCTrueTracks = 0;
\r
1013 AliDebug(AliLog::kError, "mcEvent not available");
\r
1017 // get MC event header
\r
1018 header = mcEvent->Header();
\r
1020 AliDebug(AliLog::kError, "Header not available");
\r
1023 // MC particle stack
\r
1024 stack = mcEvent->Stack();
\r
1026 AliDebug(AliLog::kError, "Stack not available");
\r
1030 // get event type (ND=0x1, DD=0x2, SD=0x4)
\r
1031 evtType = AliPWG0Helper::GetEventProcessType(header);
\r
1032 //Printf("evtType %d \n", evtType);
\r
1033 AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));
\r
1036 genHeader = header->GenEventHeader();
\r
1038 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
\r
1041 genHeader->PrimaryVertex(vtxMC);
\r
1043 // Fill MC event histogram
\r
1044 Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};
\r
1045 fMCEventHist1->Fill(vMCEventHist1);
\r
1047 // multipliticy of all MC primary tracks
\r
1048 // in Zvtx, pt and eta ranges
\r
1049 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
\r
1053 // get reconstructed vertex
\r
1054 const AliESDVertex* vtxESD = 0;
\r
1055 Bool_t isRecVertex = kFALSE;
\r
1056 if(evtCuts->IsRecVertexRequired())
\r
1058 Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();
\r
1059 Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();
\r
1060 vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints);
\r
1061 isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, GetAnalysisMode(), kFALSE);
\r
1063 if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {
\r
1064 vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced());
\r
1065 isRecVertex = kTRUE;
\r
1067 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex;
\r
1068 //printf("isEventOK %d, isRecVertex %d, nContributors %d, Zv %f\n",isEventOK, isRecVertex, vtxESD->GetNContributors(), vtxESD->GetZv());
\r
1071 // get multiplicity vertex contributors
\r
1073 Int_t multMBTracks = 0;
\r
1074 if(GetAnalysisMode() == AlidNdPtHelper::kTPC || GetAnalysisMode() == AlidNdPtHelper::kMCRec) {
\r
1075 multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);
\r
1077 else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx ||
\r
1078 GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode() == AlidNdPtHelper::kMCRec ||
\r
1079 GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid) {
\r
1080 //if(vtxESD->GetStatus())
\r
1081 // multMBTracks = vtxESD->GetNContributors();
\r
1083 // origin Jan Fiete GO
\r
1084 const AliMultiplicity* mult = esdEvent->GetMultiplicity();
\r
1086 Int_t trackletCount = 0;
\r
1088 for(Int_t i=0; i<mult->GetNumberOfTracklets(); ++i) {
\r
1089 Float_t deltaPhi = mult->GetDeltaPhi(i);
\r
1090 // prevent values to be shifted by 2 Pi()
\r
1091 if (deltaPhi < -TMath::Pi())
\r
1092 deltaPhi += TMath::Pi() * 2;
\r
1093 if (deltaPhi > TMath::Pi())
\r
1094 deltaPhi -= TMath::Pi() * 2;
\r
1096 //if (fDeltaPhiCut > 0 && TMath::Abs(deltaPhi) > fDeltaPhiCut)
\r
1101 //multMBTracks = mult->GetNumberOfTracklets();
\r
1102 multMBTracks = trackletCount;
\r
1103 //printf("trackletCount %d \n", trackletCount);
\r
1106 AliDebug(AliLog::kError, Form("Multiplicty %p", mult));
\r
1111 AliDebug(AliLog::kError, Form("Found analysis type %s", GetAnalysisMode()));
\r
1116 // correct event and track histograms
\r
1118 TObjArray *allChargedTracks=0;
\r
1119 Int_t multRec=0, multRecTemp=0;
\r
1120 Int_t *labelsRec=0;
\r
1121 Bool_t isCosmic = kFALSE;
\r
1123 if(isEventOK && isEventTriggered)
\r
1125 // get all charged tracks
\r
1126 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());
\r
1127 if(!allChargedTracks) return;
\r
1129 Int_t entries = allChargedTracks->GetEntries();
\r
1130 labelsRec = new Int_t[entries];
\r
1132 // calculate mult of reconstructed tracks
\r
1134 for(Int_t i=0; i<entries;++i)
\r
1136 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1137 if(!track) continue;
\r
1138 if(track->Charge()==0) continue;
\r
1141 // only postive charged
\r
1142 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1145 // only negative charged
\r
1146 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1149 // cosmics analysis
\r
1150 isCosmic = kFALSE;
\r
1151 if( GetParticleMode()==AlidNdPtHelper::kCosmic )
\r
1153 for(Int_t j=0; j<entries;++j)
\r
1155 AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);
\r
1156 if(!track1) continue;
\r
1157 if(track1->Charge()==0) continue;
\r
1159 if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) &&
\r
1160 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) )
\r
1162 isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);
\r
1166 Double_t vCosmicsHisto[3] = { track->Eta()+track1->Eta(), track->Phi()-track1->Phi(), track1->Pt() };
\r
1167 fCosmicsHisto->Fill(vCosmicsHisto);
\r
1171 if(!isCosmic) continue;
\r
1174 if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track))
\r
1179 for(Int_t i=0; i<entries;++i)
\r
1181 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1182 if(!track) continue;
\r
1183 if(track->Charge()==0) continue;
\r
1186 // only postive charged
\r
1187 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1190 // only negative charged
\r
1191 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1194 // track-level corrections
\r
1195 if(esdTrackCuts->AcceptTrack(track))
\r
1197 // cosmics analysis
\r
1198 isCosmic = kFALSE;
\r
1199 if( GetParticleMode()==AlidNdPtHelper::kCosmic )
\r
1201 for(Int_t j=0; j<entries;++j)
\r
1203 AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);
\r
1204 if(!track1) continue;
\r
1205 if(track1->Charge()==0) continue;
\r
1207 if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) &&
\r
1208 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) )
\r
1210 isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);
\r
1213 if(!isCosmic) continue;
\r
1216 Bool_t isOK = kFALSE;
\r
1217 Double_t x[3]; track->GetXYZ(x);
\r
1218 Double_t b[3]; AliTracker::GetBxByBz(x,b);
\r
1221 // if TPC-ITS hybrid tracking (kTPCITSHybrid)
\r
1222 // replace track parameters with TPC-ony track parameters
\r
1224 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid )
\r
1226 // Relate TPC-only tracks to SPD vertex
\r
1227 isOK = track->RelateToVertexTPCBxByBz(esdEvent->GetPrimaryVertexSPD(), b, kVeryBig);
\r
1228 if(!isOK) continue;
\r
1230 // replace esd track parameters with TPCinner
\r
1231 AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam()));
\r
1232 if (!tpcTrack) return;
\r
1233 track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());
\r
1235 if(tpcTrack) delete tpcTrack;
\r
1239 if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate)
\r
1242 // update track parameters
\r
1244 AliExternalTrackParam cParam;
\r
1245 isOK = track->RelateToVertexTPC(esdEvent->GetPrimaryVertexSPD(),esdEvent->GetMagneticField(),kVeryBig,&cParam);
\r
1246 if(!isOK) continue;
\r
1247 track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());
\r
1249 if(accCuts->AcceptTrack(track)) {
\r
1250 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp,multMCTrueTracks);
\r
1251 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1255 else if (GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo())
\r
1258 // Replace rec with MC
\r
1260 if(accCuts->AcceptTrack(track)) {
\r
1261 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxMC[2],multRecTemp, multMCTrueTracks);
\r
1262 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1268 // all the rest tracking scenarios
\r
1270 if(accCuts->AcceptTrack(track)) {
\r
1271 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp, multMCTrueTracks);
\r
1272 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1278 // event-level corrections
\r
1279 if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) {
\r
1280 FillHistograms(AlidNdPtHelper::kRecEvents,vtxMC[2],multMBTracks);
\r
1283 FillHistograms(AlidNdPtHelper::kRecEvents,vtxESD->GetZv(),multMBTracks);
\r
1286 // calculate meanPt from the event
\r
1287 Double_t meanPtMult[8] = {0};
\r
1288 Double_t meanPtTrueMult[8] = {0};
\r
1289 for (Int_t i = 0; i<8; i++) {
\r
1290 if(!fCorrRecTrackMultHist1[i]) continue;
\r
1291 meanPtMult[i] = fCorrRecTrackPt1[i]->Projection(0)->GetMean();
\r
1292 Double_t vCorrRecTrackMeanPtMultHist1[2] = {meanPtMult[i],multRecTemp};
\r
1293 fCorrRecTrackMeanPtMultHist1[i]->Fill(vCorrRecTrackMeanPtMultHist1);
\r
1295 if( IsUseMCInfo() ) {
\r
1296 if(!fCorrRecTrackPt1[i]) continue;
\r
1297 meanPtTrueMult[i] = fCorrRecTrackPt1[i]->Projection(0)->GetMean();
\r
1298 Double_t vCorrRecTrackMeanPtTrueMultHist1[2] = {meanPtMult[i],multMCTrueTracks};
\r
1299 fCorrRecTrackMeanPtTrueMultHist1[i]->Fill(vCorrRecTrackMeanPtTrueMultHist1);
\r
1302 // reset pt histo for the next event
\r
1303 if(fCorrRecTrackPt1[i]) fCorrRecTrackPt1[i]->Reset();
\r
1306 // control event histograms
\r
1307 Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};
\r
1308 fRecEventHist1->Fill(vRecEventHist1);
\r
1310 // correlation track multiplicity vs tracklet multiplicity
\r
1311 Double_t vRecEventMultHist1[3] = {multRecTemp, multMBTracks};
\r
1312 fRecEventMultHist1->Fill(vRecEventMultHist1);
\r
1316 // empty events corrections
\r
1317 // no reconstructed zv
\r
1318 if(isEventTriggered && multMBTracks==0) {
\r
1319 if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) {
\r
1320 FillHistograms(AlidNdPtHelper::kTriggeredEvents,vtxMC[2],multMBTracks);
\r
1323 Double_t zv = fZvNorm->GetRandom();
\r
1324 FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks);
\r
1328 if(IsUseMCInfo())
\r
1330 // select MC events
\r
1331 if(evtCuts->AcceptMCEvent(mcEvent))
\r
1334 // event histograms
\r
1336 Double_t vMCEventMatrix[2] = {vtxMC[2],multMBTracks};
\r
1337 fMCAllEventMultHist1->Fill(vMCEventMatrix);
\r
1338 if(evtType == AliPWG0Helper::kND) {
\r
1339 fMCAllNDEventMultHist1->Fill(vMCEventMatrix);
\r
1341 if(evtType != AliPWG0Helper::kSD) {
\r
1342 fMCAllNSDEventMultHist1->Fill(vMCEventMatrix);
\r
1344 if(isEventTriggered) fMCTriggerMultHist1->Fill(vMCEventMatrix);
\r
1345 if(isEventTriggered && isEventOK) fMCEventMultHist1->Fill(vMCEventMatrix);
\r
1348 // MC histograms for efficiency studies
\r
1350 Double_t sumPtMC = 0;
\r
1351 Int_t nPart = stack->GetNtrack();
\r
1352 for (Int_t iMc = 0; iMc < nPart; ++iMc)
\r
1354 // print MC stack info
\r
1355 //AlidNdPtHelper::PrintMCInfo(stack,iMc);
\r
1357 TParticle* particle = stack->Particle(iMc);
\r
1361 // only charged particles
\r
1362 Double_t charge = particle->GetPDG()->Charge()/3.;
\r
1363 if (TMath::Abs(charge) < 0.001)
\r
1366 // only postive charged
\r
1367 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
\r
1370 // only negative charged
\r
1371 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
\r
1374 // physical primary
\r
1375 Bool_t prim = stack->IsPhysicalPrimary(iMc);
\r
1376 if(!prim) continue;
\r
1378 // all primaries in acceptance
\r
1379 if(!accCuts->AcceptTrack(particle)) continue;
\r
1381 Double_t gpt = particle->Pt();
\r
1382 Double_t geta = particle->Eta();
\r
1384 // sum up pt in the event
\r
1387 Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRec};
\r
1388 Double_t valMCAllTrackTrueMultHist1[3] = {gpt,geta,multMCTrueTracks};
\r
1389 Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRec,multMCTrueTracks};
\r
1391 fMCAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1392 fMCAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1393 fMCAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1395 if(evtType == AliPWG0Helper::kND) {
\r
1396 fMCNDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1397 fMCNDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1398 fMCNDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1400 if(evtType != AliPWG0Helper::kSD) {
\r
1401 fMCNSDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1402 fMCNSDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1403 fMCNSDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1405 if(isEventTriggered) {
\r
1406 fMCTriggerPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1407 fMCTriggerPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1408 fMCTriggerPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1410 if(isEventTriggered && isEventOK) {
\r
1411 fMCEventPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1412 fMCEventPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1413 fMCEventPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1418 // calculate <pt> in the event
\r
1420 Double_t meanPtMCMult = 0;
\r
1421 Double_t meanPtMCTrueMult = 0;
\r
1422 if(multRec) meanPtMCMult = sumPtMC/multRec;
\r
1423 if(multMCTrueTracks) meanPtMCTrueMult = sumPtMC/multMCTrueTracks;
\r
1425 Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRec};
\r
1426 Double_t valMCMeanPtTrueMult[2] = {meanPtMCTrueMult,multMCTrueTracks};
\r
1428 fMCAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1429 fMCAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1431 if(evtType == AliPWG0Helper::kND) {
\r
1432 fMCNDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1433 fMCNDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1435 if(evtType != AliPWG0Helper::kSD) {
\r
1436 fMCNSDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1437 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1439 if(isEventTriggered) {
\r
1440 fMCTriggerPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1441 fMCTriggerPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1443 if(isEventTriggered && isEventOK) {
\r
1444 fMCEventPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1445 fMCEventPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1451 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;
\r
1452 if(labelsRec) delete [] labelsRec; labelsRec = 0;
\r
1454 if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;
\r
1457 //_____________________________________________________________________________
\r
1458 void AlidNdPtCorrection::FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBTracks) const
\r
1461 // Fill corrected histograms
\r
1464 Double_t vEventMatrix[2] = {zv,multMBTracks};
\r
1466 // Correct for efficiency
\r
1468 if(eventObj == AlidNdPtHelper::kRecEvents && multMBTracks>0)
\r
1470 Double_t corrToMBF = GetCorrFactZvMult(fCorrEventMatrix,zv,multMBTracks);
\r
1471 Double_t corrToInelF = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);
\r
1472 Double_t corrToNDF = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);
\r
1473 Double_t corrToNSDF = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);
\r
1474 //printf("corrToMBF %f, corrToInelF %f, corrToNDF %f corrToNSDF %f \n",corrToMBF,corrToInelF,corrToNDF,corrToNSDF);
\r
1476 fCorrRecEventHist1[0]->Fill(vEventMatrix);
\r
1477 fCorrRecEventHist1[1]->Fill(vEventMatrix,corrToMBF);
\r
1478 fCorrRecEventHist1[2]->Fill(vEventMatrix,corrToMBF*corrToInelF);
\r
1479 fCorrRecEventHist1[3]->Fill(vEventMatrix,corrToMBF*corrToNDF);
\r
1480 fCorrRecEventHist1[4]->Fill(vEventMatrix,corrToMBF*corrToNSDF);
\r
1483 if(eventObj==AlidNdPtHelper::kTriggeredEvents && multMBTracks==0) // empty triggered events
\r
1485 Int_t bin = fZvEmptyEventsNorm->FindBin(zv);
\r
1486 Double_t factZ = fZvEmptyEventsNorm->GetBinContent(bin);
\r
1487 Double_t corrToInelF0 = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);
\r
1488 Double_t corrToNDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);
\r
1489 Double_t corrToNSDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);
\r
1490 //printf("factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factZ,corrToInelF0,corrToNDF0,corrToNSDF0);
\r
1492 fCorrRecEventHist2[0]->Fill(vEventMatrix);
\r
1493 fCorrRecEventHist2[1]->Fill(vEventMatrix,factZ);
\r
1494 fCorrRecEventHist2[2]->Fill(vEventMatrix,factZ*corrToInelF0);
\r
1495 fCorrRecEventHist2[3]->Fill(vEventMatrix,factZ*corrToNDF0);
\r
1496 fCorrRecEventHist2[4]->Fill(vEventMatrix,factZ*corrToNSDF0);
\r
1500 //_____________________________________________________________________________
\r
1501 void AlidNdPtCorrection::FillHistograms(AliESDtrack * const esdTrack, AliStack * const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t mult, Int_t trueMult) const
\r
1504 // Fill ESD track and MC histograms
\r
1506 if(!esdTrack) return;
\r
1508 //Float_t q = esdTrack->Charge();
\r
1509 Float_t pt = esdTrack->Pt();
\r
1510 Float_t eta = esdTrack->Eta();
\r
1511 Float_t phi = esdTrack->Phi();
\r
1513 if(stack && GetAnalysisMode() == AlidNdPtHelper::kMCRec)
\r
1515 Int_t label = TMath::Abs(esdTrack->GetLabel());
\r
1517 TParticle* particle = stack->Particle(label);
\r
1518 if(!particle) return;
\r
1520 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1521 if(TMath::Abs(gq)<0.001) return;
\r
1522 Float_t gpt = particle->Pt();
\r
1523 Float_t geta = particle->Eta();
\r
1524 Float_t gphi = particle->Phi();
\r
1526 // replace reconstructed values with MC
\r
1533 // Fill histograms
\r
1535 Double_t values[3] = {pt,eta,phi};
\r
1536 fRecTrackHist1[trackObj]->Fill(values);
\r
1539 // Correct for contamination and efficiency
\r
1541 if(trackObj == AlidNdPtHelper::kRecTracks || GetAnalysisMode() == AlidNdPtHelper::kMCRec)
\r
1543 // track level corrections
\r
1544 Double_t trackEffF = 1.0;
\r
1545 if(pt < 2.5) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta);
\r
1546 else trackEffF = GetCorrFactZvPtEta(fCorrHighPtTrackMatrix,zv,pt,eta);
\r
1548 Double_t trackContF = GetContFactZvPtEta(fContTrackMatrix,zv,pt,eta);
\r
1549 Double_t multTrackContF = GetContFactZvPtEta(fContMultTrackMatrix,zv,pt,eta);
\r
1550 //printf("zv %f, pt %f, eta %f \n",zv,pt,eta);
\r
1551 //printf("trackEffF %f, trackContF %f, multTrackContF %f \n", trackEffF, trackContF, multTrackContF);
\r
1553 // track-event level corrections
\r
1554 Double_t vertexEffF = GetCorrFactZvPtEta(fCorrTrackEventMatrix,zv,pt,eta);
\r
1555 Double_t trigMBToInel = GetCorrFactZvPtEta(fCorrTriggerMBtoInelTrackEventMatrix,zv,pt,eta);
\r
1556 Double_t trigMBToND = GetCorrFactZvPtEta(fCorrTriggerMBtoNDTrackEventMatrix,zv,pt,eta);
\r
1557 Double_t trigMBToNSD = GetCorrFactZvPtEta(fCorrTriggerMBtoNSDTrackEventMatrix,zv,pt,eta);
\r
1558 //printf("vertexEffF %f, trigMBToInel %f, trigMBToNSD %f \n", vertexEffF, trigMBToInel, trigMBToNSD);
\r
1560 Double_t corrF[8] = { 1.0,
\r
1562 trackContF*trackEffF,
\r
1563 trackContF*trackEffF*multTrackContF,
\r
1564 trackContF*trackEffF*multTrackContF*vertexEffF,
\r
1565 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToInel,
\r
1566 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToND,
\r
1567 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToNSD
\r
1570 // Fill histograms
\r
1571 Double_t valCorrRecTrackMultHist1[3] = {pt,eta,mult};
\r
1572 Double_t valCorrRecTrackPt1[1] = {pt};
\r
1573 for(Int_t i=0; i<8; i++) {
\r
1574 fCorrRecTrackMultHist1[i]->Fill(valCorrRecTrackMultHist1,corrF[i]);
\r
1575 fCorrRecTrackPt1[i]->Fill(valCorrRecTrackPt1,corrF[i]);
\r
1577 if( IsUseMCInfo() ) {
\r
1578 Double_t valCorrRecTrackTrueMultHist1[3] = {pt,eta,trueMult};
\r
1579 Double_t valCorrRecTrackTrueMultHist2[3] = {pt,mult,trueMult};
\r
1581 fCorrRecTrackTrueMultHist1[i]->Fill(valCorrRecTrackTrueMultHist1,corrF[i]);
\r
1582 fCorrRecTrackTrueMultHist2[i]->Fill(valCorrRecTrackTrueMultHist2,corrF[i]);
\r
1588 void AlidNdPtCorrection::FillHistograms(AliStack * const stack, Int_t /*label*/, AlidNdPtHelper::TrackObject /*trackObj*/, Int_t /*mult*/) const
\r
1590 // Fill MC histograms
\r
1591 if(!stack) return;
\r
1594 TParticle* particle = stack->Particle(label);
\r
1595 if(!particle) return;
\r
1597 Int_t mother_pdg = -1;
\r
1598 TParticle* mother = 0;
\r
1600 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
\r
1601 Int_t motherLabel = particle->GetMother(0);
\r
1602 if(motherLabel>0) mother = stack->Particle(motherLabel);
\r
1603 if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
\r
1604 Int_t mech = particle->GetUniqueID(); // production mechanism
\r
1606 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1607 Float_t gpt = particle->Pt();
\r
1608 Float_t qgpt = particle->Pt() * gq;
\r
1609 Float_t geta = particle->Eta();
\r
1610 Float_t gphi = particle->Phi();
\r
1611 Float_t gpz = particle->Pz();
\r
1613 Bool_t prim = stack->IsPhysicalPrimary(label);
\r
1614 Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();
\r
1617 if (TMath::Abs(particle->GetPdgCode()) == kElectron) { pid = 0; }
\r
1618 else if (TMath::Abs(particle->GetPdgCode()) == kMuonMinus) { pid = 1; }
\r
1619 else if (TMath::Abs(particle->GetPdgCode()) == kPiPlus) { pid = 2; }
\r
1620 else if (TMath::Abs(particle->GetPdgCode()) == kKPlus) { pid = 3; }
\r
1621 else if (TMath::Abs(particle->GetPdgCode()) == kProton) { pid = 4; }
\r
1625 //if(!prim) printf("prim_mother %d, mother %d, particle %d, production mech %d\n",prim_mother->GetPdgCode(),mother->GetPdgCode(), particle->GetPdgCode(),mech);
\r
1629 //_____________________________________________________________________________
\r
1630 Double_t AlidNdPtCorrection::GetCorrFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {
\r
1631 // return correction factor F(zv,pt,eta)
\r
1633 if(!hist) return 1.;
\r
1636 TAxis *ax = hist->GetAxis(0);
\r
1637 TAxis *ay = hist->GetAxis(1);
\r
1638 TAxis *az = hist->GetAxis(2);
\r
1640 Int_t binx = ax->FindBin(zv);
\r
1641 Int_t biny = ay->FindBin(pt);
\r
1642 Int_t binz = az->FindBin(eta);
\r
1643 Int_t dim[3] = {binx,biny,binz};
\r
1645 Double_t fact = hist->GetBinContent(dim);
\r
1650 //_____________________________________________________________________________
\r
1651 Double_t AlidNdPtCorrection::GetContFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {
\r
1652 // return contamination correction factor F(zv,pt,eta)
\r
1654 if(!hist) return 1.0;
\r
1657 TAxis *ax = hist->GetAxis(0);
\r
1658 TAxis *ay = hist->GetAxis(1);
\r
1659 TAxis *az = hist->GetAxis(2);
\r
1661 Int_t binx = ax->FindBin(zv);
\r
1662 Int_t biny = ay->FindBin(pt);
\r
1663 Int_t binz = az->FindBin(eta);
\r
1664 Int_t dim[3] = {binx,biny,binz};
\r
1666 Double_t fact = 1.0-hist->GetBinContent(dim);
\r
1667 //Double_t fact = hist->GetBinContent(dim);
\r
1672 //_____________________________________________________________________________
\r
1673 Double_t AlidNdPtCorrection::GetCorrFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {
\r
1674 // return correction factor F(zv,mult)
\r
1676 if(!hist) return 1.;
\r
1678 TAxis *ax = hist->GetAxis(0);
\r
1679 TAxis *ay = hist->GetAxis(1);
\r
1680 Int_t binx = ax->FindBin(zv);
\r
1681 Int_t biny = ay->FindBin(mult);
\r
1682 Int_t dim[2] = {binx,biny};
\r
1684 Double_t fact = hist->GetBinContent(dim);
\r
1690 //_____________________________________________________________________________
\r
1691 Double_t AlidNdPtCorrection::GetContFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {
\r
1692 // return contamination correction factor F(zv,mult)
\r
1694 if(!hist) return 1.;
\r
1696 TAxis *ax = hist->GetAxis(0);
\r
1697 TAxis *ay = hist->GetAxis(1);
\r
1698 Int_t binx = ax->FindBin(zv);
\r
1699 Int_t biny = ay->FindBin(mult);
\r
1700 Int_t dim[2] = {binx,biny};
\r
1701 Double_t fact = 1.0-hist->GetBinContent(dim);
\r
1706 //_____________________________________________________________________________
\r
1707 Long64_t AlidNdPtCorrection::Merge(TCollection* const list)
\r
1709 // Merge list of objects (needed by PROOF)
\r
1714 if (list->IsEmpty())
\r
1717 TIterator* iter = list->MakeIterator();
\r
1720 // collection of generated histograms
\r
1723 while((obj = iter->Next()) != 0) {
\r
1724 AlidNdPtCorrection* entry = dynamic_cast<AlidNdPtCorrection*>(obj);
\r
1725 if (entry == 0) continue;
\r
1727 fMCEventHist1->Add(entry->fMCEventHist1);
\r
1728 fRecEventHist1->Add(entry->fRecEventHist1);
\r
1729 fRecEventMultHist1->Add(entry->fRecEventMultHist1);
\r
1731 fMCAllEventMultHist1->Add(entry->fMCAllEventMultHist1);
\r
1732 fMCAllNDEventMultHist1->Add(entry->fMCAllNDEventMultHist1);
\r
1733 fMCAllNSDEventMultHist1->Add(entry->fMCAllNSDEventMultHist1);
\r
1734 fMCTriggerMultHist1->Add(entry->fMCTriggerMultHist1);
\r
1735 fMCEventMultHist1->Add(entry->fMCEventMultHist1);
\r
1737 fMCAllPrimTrackMultHist1->Add(entry->fMCAllPrimTrackMultHist1);
\r
1738 fMCNDEventAllPrimTrackMultHist1->Add(entry->fMCNDEventAllPrimTrackMultHist1);
\r
1739 fMCNSDEventAllPrimTrackMultHist1->Add(entry->fMCNSDEventAllPrimTrackMultHist1);
\r
1740 fMCTriggerPrimTrackMultHist1->Add(entry->fMCTriggerPrimTrackMultHist1);
\r
1741 fMCEventPrimTrackMultHist1->Add(entry->fMCEventPrimTrackMultHist1);
\r
1743 fMCAllPrimTrackTrueMultHist1->Add(entry->fMCAllPrimTrackTrueMultHist1);
\r
1744 fMCNDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNDEventAllPrimTrackTrueMultHist1);
\r
1745 fMCNSDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist1);
\r
1746 fMCTriggerPrimTrackTrueMultHist1->Add(entry->fMCTriggerPrimTrackTrueMultHist1);
\r
1747 fMCEventPrimTrackTrueMultHist1->Add(entry->fMCEventPrimTrackTrueMultHist1);
\r
1749 fMCAllPrimTrackTrueMultHist2->Add(entry->fMCAllPrimTrackTrueMultHist2);
\r
1750 fMCNDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNDEventAllPrimTrackTrueMultHist2);
\r
1751 fMCNSDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist2);
\r
1752 fMCTriggerPrimTrackTrueMultHist2->Add(entry->fMCTriggerPrimTrackTrueMultHist2);
\r
1753 fMCEventPrimTrackTrueMultHist2->Add(entry->fMCEventPrimTrackTrueMultHist2);
\r
1755 fMCAllPrimTrackMeanPtMult1->Add(entry->fMCAllPrimTrackMeanPtMult1);
\r
1756 fMCNDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtMult1);
\r
1757 fMCNSDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtMult1);
\r
1758 fMCTriggerPrimTrackMeanPtMult1->Add(entry->fMCTriggerPrimTrackMeanPtMult1);
\r
1759 fMCEventPrimTrackMeanPtMult1->Add(entry->fMCEventPrimTrackMeanPtMult1);
\r
1761 fMCAllPrimTrackMeanPtTrueMult1->Add(entry->fMCAllPrimTrackMeanPtTrueMult1);
\r
1762 fMCNDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtTrueMult1);
\r
1763 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtTrueMult1);
\r
1764 fMCTriggerPrimTrackMeanPtTrueMult1->Add(entry->fMCTriggerPrimTrackMeanPtTrueMult1);
\r
1765 fMCEventPrimTrackMeanPtTrueMult1->Add(entry->fMCEventPrimTrackMeanPtTrueMult1);
\r
1767 fCosmicsHisto->Add(entry->fCosmicsHisto);
\r
1769 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
1770 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);
\r
1773 for(Int_t i=0; i<8; i++) {
\r
1774 fCorrRecTrackMultHist1[i]->Add(entry->fCorrRecTrackMultHist1[i]);
\r
1775 fCorrRecTrackTrueMultHist1[i]->Add(entry->fCorrRecTrackTrueMultHist1[i]);
\r
1776 fCorrRecTrackTrueMultHist2[i]->Add(entry->fCorrRecTrackTrueMultHist2[i]);
\r
1778 fCorrRecTrackMeanPtMultHist1[i]->Add(entry->fCorrRecTrackMeanPtMultHist1[i]);
\r
1779 fCorrRecTrackMeanPtTrueMultHist1[i]->Add(entry->fCorrRecTrackMeanPtTrueMultHist1[i]);
\r
1781 fCorrRecTrackPt1[i]->Add(entry->fCorrRecTrackPt1[i]);
\r
1784 for(Int_t i=0; i<5; i++) {
\r
1785 fCorrRecEventHist1[i]->Add(entry->fCorrRecEventHist1[i]);
\r
1786 fCorrRecEventHist2[i]->Add(entry->fCorrRecEventHist2[i]);
\r
1795 //____________________________________________________________________________
\r
1796 Int_t AlidNdPtCorrection::GetTrueMult(THnSparse * const hist, Int_t mult) const
\r
1799 // get multiplicity of primary particles
\r
1801 if(!hist) return 0;
\r
1802 Int_t trueMult = 0;
\r
1805 TAxis *ax = hist->GetAxis(0);
\r
1806 TAxis *ay = hist->GetAxis(1);
\r
1807 ax->SetRange(1,ax->GetNbins());
\r
1808 ay->SetRange(1,ay->GetNbins());
\r
1811 ax->SetRangeUser((Float_t)mult,(Float_t)mult);
\r
1813 // get true multiplicity
\r
1814 TH1D *h1 = (TH1D *)hist->Projection(1);
\r
1815 trueMult = (Int_t)h1->GetMean();
\r
1820 //_____________________________________________________________________________
\r
1821 void AlidNdPtCorrection::Analyse()
\r
1823 // Analyse histograms
\r
1825 TH1::AddDirectory(kFALSE);
\r
1826 TH1 *h = 0, *hs=0, *hsc=0;
\r
1829 TObjArray *aFolderObj = new TObjArray;
\r
1834 AlidNdPtEventCuts *evtCuts = GetEventCuts();
\r
1835 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
\r
1836 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
\r
1838 if(!evtCuts || !accCuts || !esdTrackCuts) {
\r
1839 Error("AlidNdPtCutAnalysis::Analyse()", "cuts not available");
\r
1844 // set min and max values
\r
1846 //Double_t minPt = accCuts->GetMinPt();
\r
1847 //Double_t maxPt = accCuts->GetMaxPt();
\r
1848 Double_t minEta = accCuts->GetMinEta();
\r
1849 Double_t maxEta = accCuts->GetMaxEta()-0.00001;
\r
1851 printf("minEta %f, maxEta %f \n",minEta, maxEta);
\r
1854 // cosmics background histo
\r
1856 h2D = fCosmicsHisto->Projection(0,1);
\r
1857 h2D->SetName("deta_vs_dphi_cosmics");
\r
1858 aFolderObj->Add(h2D);
\r
1863 h = fCorrRecEventHist1[0]->Projection(1);
\r
1864 h->SetName("mult_event_not_corrected");
\r
1865 aFolderObj->Add(h);
\r
1867 h = fCorrRecEventHist1[1]->Projection(1);
\r
1868 h->SetName("mult_event_vertex_corrected");
\r
1869 aFolderObj->Add(h);
\r
1871 h = fCorrRecEventHist1[2]->Projection(1);
\r
1872 h->SetName("mult_trigger_vertex_corrected");
\r
1873 aFolderObj->Add(h);
\r
1875 h = fCorrRecEventHist1[3]->Projection(1);
\r
1876 h->SetName("mult_ND_trigger_vertex_corrected");
\r
1877 aFolderObj->Add(h);
\r
1879 h = fCorrRecEventHist1[4]->Projection(1);
\r
1880 h->SetName("mult_NSD_trigger_vertex_corrected");
\r
1881 aFolderObj->Add(h);
\r
1884 h = fCorrRecEventHist2[0]->Projection(1);
\r
1885 h->SetName("mult_empty_event_not_corrected");
\r
1886 aFolderObj->Add(h);
\r
1888 h = fCorrRecEventHist2[1]->Projection(1);
\r
1889 h->SetName("mult_empty_event_vertex_corrected");
\r
1890 aFolderObj->Add(h);
\r
1892 h = fCorrRecEventHist2[2]->Projection(1);
\r
1893 h->SetName("mult_empty_trigger_vertex_corrected");
\r
1894 aFolderObj->Add(h);
\r
1896 h = fCorrRecEventHist2[3]->Projection(1);
\r
1897 h->SetName("mult_empty_ND_trigger_vertex_corrected");
\r
1898 aFolderObj->Add(h);
\r
1900 h = fCorrRecEventHist2[4]->Projection(1);
\r
1901 h->SetName("mult_empty_NSD_trigger_vertex_corrected");
\r
1902 aFolderObj->Add(h);
\r
1907 if(IsUseMCInfo()) {
\r
1910 h = fMCAllEventMultHist1->Projection(1);
\r
1911 h->SetName("mc_mult_event_acc_prim");
\r
1912 aFolderObj->Add(h);
\r
1914 h = fMCAllNDEventMultHist1->Projection(1);
\r
1915 h->SetName("mc_mult_ND_event_acc_prim");
\r
1916 aFolderObj->Add(h);
\r
1918 h = fMCAllNSDEventMultHist1->Projection(1);
\r
1919 h->SetName("mc_mult_NSD_event_acc_prim");
\r
1920 aFolderObj->Add(h);
\r
1922 h = fMCTriggerMultHist1->Projection(1);
\r
1923 h->SetName("mc_mult_trigger_acc_prim");
\r
1924 aFolderObj->Add(h);
\r
1926 h = fMCEventMultHist1->Projection(1);
\r
1927 h->SetName("mc_mult_trigger_event_acc_prim");
\r
1928 aFolderObj->Add(h);
\r
1935 // limit eta range
\r
1936 for(Int_t i=0;i<8;i++) {
\r
1937 //fCorrRecTrackMultHist1[i]->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
1938 //fCorrRecTrackMultHist1[i]->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
1940 //fMCAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
1941 //fMCAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
1943 //fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
1944 //fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
1946 //fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
1947 //fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
1949 //fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
1950 //fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
1952 //fMCEventPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
1953 //fMCEventPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
1955 } // end use MC info
\r
1958 h2D = fCorrRecTrackMultHist1[3]->Projection(1,0);
\r
1959 h2D->SetName("pt_eta_rec_track_mult_eff_cont_corrected");
\r
1960 aFolderObj->Add(h2D);
\r
1962 h2D = fCorrRecTrackMultHist1[4]->Projection(1,0);
\r
1963 h2D->SetName("pt_eta_rec_event_track_mult_eff_cont_corrected");
\r
1964 aFolderObj->Add(h2D);
\r
1966 h2D = fCorrRecTrackMultHist1[5]->Projection(1,0);
\r
1967 h2D->SetName("pt_eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
1968 aFolderObj->Add(h2D);
\r
1970 h2D = fCorrRecTrackMultHist1[6]->Projection(1,0);
\r
1971 h2D->SetName("pt_eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
1972 aFolderObj->Add(h2D);
\r
1974 h2D = fCorrRecTrackMultHist1[7]->Projection(1,0);
\r
1975 h2D->SetName("pt_eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
1976 aFolderObj->Add(h2D);
\r
1980 h2D = fCorrRecTrackMultHist1[3]->Projection(2,0);
\r
1981 h2D->SetName("pt_mult_rec_track_mult_eff_cont_corrected");
\r
1982 aFolderObj->Add(h2D);
\r
1984 h2D = fCorrRecTrackMultHist1[4]->Projection(2,0);
\r
1985 h2D->SetName("pt_mult_rec_event_track_mult_eff_cont_corrected");
\r
1986 aFolderObj->Add(h2D);
\r
1988 h2D = fCorrRecTrackMultHist1[5]->Projection(2,0);
\r
1989 h2D->SetName("pt_mult_rec_trig_event_track_mult_eff_cont_corrected");
\r
1990 aFolderObj->Add(h2D);
\r
1992 h2D = fCorrRecTrackMultHist1[6]->Projection(2,0);
\r
1993 h2D->SetName("pt_mult_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
1994 aFolderObj->Add(h2D);
\r
1996 h2D = fCorrRecTrackMultHist1[7]->Projection(2,0);
\r
1997 h2D->SetName("pt_mult_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
1998 aFolderObj->Add(h2D);
\r
2002 h = fCorrRecTrackMultHist1[0]->Projection(0);
\r
2003 h->SetName("pt_rec_track_not_corrected");
\r
2004 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2005 hs->SetName("pt_rec_track_not_corrected_s");
\r
2006 aFolderObj->Add(hs);
\r
2009 h = fCorrRecTrackMultHist1[1]->Projection(0);
\r
2010 h->SetName("pt_rec_track_cont_corrected");
\r
2011 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2012 hs->SetName("pt_rec_track_cont_corrected_s");
\r
2013 aFolderObj->Add(hs);
\r
2015 hsc = (TH1D*)hs->Clone("pt_rec_track_cont_corr_fact");
\r
2016 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));
\r
2017 aFolderObj->Add(hsc);
\r
2020 h = fCorrRecTrackMultHist1[2]->Projection(0);
\r
2021 h->SetName("pt_rec_track_eff_cont_corrected");
\r
2022 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2023 hs->SetName("pt_rec_track_eff_cont_corrected_s");
\r
2024 aFolderObj->Add(hs);
\r
2026 hsc = (TH1D*)hs->Clone("pt_rec_track_eff_corr_fact");
\r
2027 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_cont_corrected_s"));
\r
2028 aFolderObj->Add(hsc);
\r
2031 h = fCorrRecTrackMultHist1[3]->Projection(0);
\r
2032 h->SetName("pt_rec_track_mult_eff_cont_corrected");
\r
2033 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2034 hs->SetName("pt_rec_track_mult_eff_cont_corrected_s");
\r
2035 aFolderObj->Add(hs);
\r
2037 hsc = (TH1D*)hs->Clone("pt_rec_track_mult_corr_fact");
\r
2038 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_eff_cont_corrected_s"));
\r
2039 aFolderObj->Add(hsc);
\r
2041 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2042 hsc = (TH1D*)hs->Clone("pt_rec_track_mult_eff_cont_corr_fact");
\r
2043 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));
\r
2044 aFolderObj->Add(hsc);
\r
2046 hsc = (TH1D*)hs->Clone();
\r
2047 hsc->SetName("pt_rec_track_mult_eff_cont_corrected_s_norm");
\r
2048 hsc->Scale(1./(fCorrRecEventHist1[0]->Projection(1)->Integral()));
\r
2049 aFolderObj->Add(hsc);
\r
2052 h = fCorrRecTrackMultHist1[4]->Projection(0);
\r
2053 h->SetName("pt_rec_event_track_mult_eff_cont_corrected");
\r
2054 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2055 hs->SetName("pt_rec_event_track_mult_eff_cont_corrected_s");
\r
2056 aFolderObj->Add(hs);
\r
2058 hsc = (TH1D*)hs->Clone();
\r
2059 hsc->SetName("pt_rec_event_track_mult_eff_cont_corrected_s_norm");
\r
2060 hsc->Scale(1./(fCorrRecEventHist1[1]->Projection(1)->Integral()+fCorrRecEventHist2[1]->Projection(1)->Integral()));
\r
2061 aFolderObj->Add(hsc);
\r
2064 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2065 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected");
\r
2066 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2067 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s");
\r
2068 aFolderObj->Add(hs);
\r
2070 hsc = (TH1D*)hs->Clone();
\r
2071 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2072 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral() + fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2073 aFolderObj->Add(hsc);
\r
2076 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(0., maxEta);
\r
2078 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2079 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_posEta");
\r
2080 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2081 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_posEta");
\r
2082 aFolderObj->Add(hs);
\r
2084 hsc = (TH1D*)hs->Clone();
\r
2085 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");
\r
2086 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2087 aFolderObj->Add(hsc);
\r
2090 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(minEta, -0.00001);
\r
2092 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2093 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_negEta");
\r
2094 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2095 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_negEta");
\r
2096 aFolderObj->Add(hs);
\r
2098 hsc = (TH1D*)hs->Clone();
\r
2099 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");
\r
2100 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2101 aFolderObj->Add(hsc);
\r
2103 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[5]->GetAxis(1)->GetNbins());
\r
2106 h = fCorrRecTrackMultHist1[6]->Projection(0);
\r
2107 h->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2108 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2109 hs->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s");
\r
2110 aFolderObj->Add(hs);
\r
2112 hsc = (TH1D*)hs->Clone();
\r
2113 hsc->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2114 hsc->Scale(1./(fCorrRecEventHist1[3]->Projection(1)->Integral()+fCorrRecEventHist2[3]->Projection(1)->Integral()));
\r
2115 aFolderObj->Add(hsc);
\r
2118 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2119 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2120 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2121 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s");
\r
2122 aFolderObj->Add(hs);
\r
2124 hsc = (TH1D*)hs->Clone();
\r
2125 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2126 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral() + fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2127 aFolderObj->Add(hsc);
\r
2132 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(0., maxEta);
\r
2134 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2135 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_posEta");
\r
2136 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2137 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_posEta");
\r
2138 aFolderObj->Add(hs);
\r
2140 hsc = (TH1D*)hs->Clone();
\r
2141 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");
\r
2142 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2143 aFolderObj->Add(hsc);
\r
2148 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(minEta, -0.00001);
\r
2150 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2151 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_negEta");
\r
2152 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2153 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_negEta");
\r
2154 aFolderObj->Add(hs);
\r
2156 hsc = (TH1D*)hs->Clone();
\r
2157 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");
\r
2158 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2159 aFolderObj->Add(hsc);
\r
2161 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[7]->GetAxis(1)->GetNbins());
\r
2164 h = fCorrRecTrackMultHist1[0]->Projection(1);
\r
2165 h->SetName("eta_rec_track_not_corrected");
\r
2166 aFolderObj->Add(h);
\r
2168 h = fCorrRecTrackMultHist1[1]->Projection(1);
\r
2169 h->SetName("eta_rec_track_cont_corrected");
\r
2170 aFolderObj->Add(h);
\r
2172 h = fCorrRecTrackMultHist1[2]->Projection(1);
\r
2173 h->SetName("eta_rec_track_eff_cont_corrected");
\r
2174 aFolderObj->Add(h);
\r
2176 h = fCorrRecTrackMultHist1[3]->Projection(1);
\r
2177 h->SetName("eta_rec_track_mult_eff_cont_corrected");
\r
2178 aFolderObj->Add(h);
\r
2180 h = fCorrRecTrackMultHist1[4]->Projection(1);
\r
2181 h->SetName("eta_rec_event_track_mult_eff_cont_corrected");
\r
2182 aFolderObj->Add(h);
\r
2184 h = fCorrRecTrackMultHist1[5]->Projection(1);
\r
2185 h->SetName("eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
2186 aFolderObj->Add(h);
\r
2188 h = fCorrRecTrackMultHist1[6]->Projection(1);
\r
2189 h->SetName("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2190 aFolderObj->Add(h);
\r
2192 h = fCorrRecTrackMultHist1[7]->Projection(1);
\r
2193 h->SetName("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2194 aFolderObj->Add(h);
\r
2200 if(IsUseMCInfo()) {
\r
2203 h2D = fMCAllPrimTrackMultHist1->Projection(2,0);
\r
2204 h2D->SetName("mc_all_pt_mult_acc_prim");
\r
2205 aFolderObj->Add(h2D);
\r
2207 h2D = fMCAllPrimTrackMultHist1->Projection(1,0);
\r
2208 h2D->SetName("mc_all_eta_pt_acc_prim");
\r
2209 aFolderObj->Add(h2D);
\r
2211 h2D = fMCNDEventAllPrimTrackMultHist1->Projection(2,0);
\r
2212 h2D->SetName("mc_ND_all_pt_mult_acc_prim");
\r
2213 aFolderObj->Add(h2D);
\r
2215 h2D = fMCNDEventAllPrimTrackMultHist1->Projection(1,0);
\r
2216 h2D->SetName("mc_ND_all_eta_pt_acc_prim");
\r
2217 aFolderObj->Add(h2D);
\r
2219 h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(2,0);
\r
2220 h2D->SetName("mc_NSD_all_pt_mult_acc_prim");
\r
2221 aFolderObj->Add(h2D);
\r
2223 h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(1,0);
\r
2224 h2D->SetName("mc_NSD_all_eta_pt_acc_prim");
\r
2225 aFolderObj->Add(h2D);
\r
2229 h = fMCAllPrimTrackMultHist1->Projection(0);
\r
2230 h->SetName("mc_all_pt_acc_prim");
\r
2231 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2232 hs->SetName("mc_all_pt_acc_prim_s");
\r
2233 aFolderObj->Add(hs);
\r
2235 hsc = (TH1D*)hs->Clone();
\r
2236 hsc->SetName("mc_all_pt_acc_prim_s_norm");
\r
2237 hsc->Scale(1./fMCAllEventMultHist1->Projection(1)->Integral());
\r
2238 aFolderObj->Add(hsc);
\r
2240 h = fMCNDEventAllPrimTrackMultHist1->Projection(0);
\r
2241 h->SetName("mc_ND_all_pt_acc_prim");
\r
2242 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2243 hs->SetName("mc_ND_all_pt_acc_prim_s");
\r
2244 aFolderObj->Add(hs);
\r
2246 hsc = (TH1D*)hs->Clone();
\r
2247 hsc->SetName("mc_ND_all_pt_acc_prim_s_norm");
\r
2248 hsc->Scale(1./fMCAllNDEventMultHist1->Projection(1)->Integral());
\r
2249 aFolderObj->Add(hsc);
\r
2251 h = fMCNSDEventAllPrimTrackMultHist1->Projection(0);
\r
2252 h->SetName("mc_NSD_all_pt_acc_prim");
\r
2253 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2254 hs->SetName("mc_NSD_all_pt_acc_prim_s");
\r
2255 aFolderObj->Add(hs);
\r
2257 hsc = (TH1D*)hs->Clone();
\r
2258 hsc->SetName("mc_NSD_all_pt_acc_prim_s_norm");
\r
2259 hsc->Scale(1./fMCAllNSDEventMultHist1->Projection(1)->Integral());
\r
2260 aFolderObj->Add(hsc);
\r
2262 h = fMCTriggerPrimTrackMultHist1->Projection(0);
\r
2263 h->SetName("mc_trigger_all_pt_acc_prim");
\r
2264 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2265 hs->SetName("mc_trigger_all_pt_acc_prim_s");
\r
2266 aFolderObj->Add(hs);
\r
2268 hsc = (TH1D*)hs->Clone();
\r
2269 hsc->SetName("mc_trigger_all_pt_acc_prim_s_norm");
\r
2270 hsc->Scale(1./fMCTriggerMultHist1->Projection(1)->Integral());
\r
2271 aFolderObj->Add(hsc);
\r
2273 h = fMCEventPrimTrackMultHist1->Projection(0);
\r
2274 h->SetName("mc_all_pt_acc_trig_event_prim");
\r
2275 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2276 hs->SetName("mc_all_pt_acc_trig_event_prim_s");
\r
2277 aFolderObj->Add(hs);
\r
2279 hsc = (TH1D*)hs->Clone();
\r
2280 hsc->SetName("mc_all_pt_acc_trig_event_prim_s_norm");
\r
2281 hsc->Scale(1./fMCEventMultHist1->Projection(1)->Integral());
\r
2282 aFolderObj->Add(hsc);
\r
2286 h = fMCAllPrimTrackMultHist1->Projection(1);
\r
2287 h->SetName("mc_all_eta_acc_prim");
\r
2288 aFolderObj->Add(h);
\r
2290 h = fMCNDEventAllPrimTrackMultHist1->Projection(1);
\r
2291 h->SetName("mc_ND_all_eta_acc_prim");
\r
2292 aFolderObj->Add(h);
\r
2294 h = fMCNSDEventAllPrimTrackMultHist1->Projection(1);
\r
2295 h->SetName("mc_NSD_all_eta_acc_prim");
\r
2296 aFolderObj->Add(h);
\r
2298 h = fMCTriggerPrimTrackMultHist1->Projection(1);
\r
2299 h->SetName("mc_trigger_all_eta_acc_prim");
\r
2300 aFolderObj->Add(h);
\r
2302 h = fMCEventPrimTrackMultHist1->Projection(1);
\r
2303 h->SetName("mc_all_eta_acc_trig_event_prim");
\r
2304 aFolderObj->Add(h);
\r
2307 // calculate ratios (rec / mc)
\r
2310 hs = (TH1*)aFolderObj->FindObject("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2311 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_trig_event_track_mult_eff_cont_corrected");
\r
2313 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_prim_s_norm"));
\r
2314 aFolderObj->Add(hsc);
\r
2316 hs = (TH1*)aFolderObj->FindObject("eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
2317 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_trig_event_track_mult_eff_cont_corrected");
\r
2319 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_prim"));
\r
2320 aFolderObj->Add(hsc);
\r
2323 hs = (TH1*)aFolderObj->FindObject("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2324 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected");
\r
2326 hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_pt_acc_prim_s_norm"));
\r
2327 aFolderObj->Add(hsc);
\r
2329 hs = (TH1*)aFolderObj->FindObject("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2330 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected");
\r
2332 hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_eta_acc_prim"));
\r
2333 aFolderObj->Add(hsc);
\r
2336 hs = (TH1*)aFolderObj->FindObject("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2337 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2339 hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_pt_acc_prim_s_norm"));
\r
2340 aFolderObj->Add(hsc);
\r
2342 hs = (TH1*)aFolderObj->FindObject("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2343 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2345 hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_eta_acc_prim"));
\r
2346 aFolderObj->Add(hsc);
\r
2349 hs = (TH1*)aFolderObj->FindObject("pt_rec_event_track_mult_eff_cont_corrected_s_norm");
\r
2350 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_event_track_mult_eff_cont_corrected");
\r
2352 hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_pt_acc_prim_s_norm"));
\r
2353 aFolderObj->Add(hsc);
\r
2355 hs = (TH1*)aFolderObj->FindObject("eta_rec_event_track_mult_eff_cont_corrected");
\r
2356 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_event_track_mult_eff_cont_corrected");
\r
2358 hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_eta_acc_prim"));
\r
2359 aFolderObj->Add(hsc);
\r
2362 hs = (TH1*)aFolderObj->FindObject("pt_rec_track_mult_eff_cont_corrected_s_norm");
\r
2363 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_track_mult_eff_cont_corrected");
\r
2365 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_trig_event_prim_s_norm"));
\r
2366 aFolderObj->Add(hsc);
\r
2368 hs = (TH1*)aFolderObj->FindObject("eta_rec_track_mult_eff_cont_corrected");
\r
2369 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_track_mult_eff_cont_corrected");
\r
2371 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_trig_event_prim"));
\r
2372 aFolderObj->Add(hsc);
\r
2374 } // end MC infor available
\r
2376 // export objects to analysis folder
\r
2377 fCorrectionFolder = ExportToFolder(aFolderObj);
\r
2379 // delete only TObjArray
\r
2380 if(aFolderObj) delete aFolderObj;
\r
2383 //_____________________________________________________________________________
\r
2384 TFolder* AlidNdPtCorrection::ExportToFolder(TObjArray * const array)
\r
2386 // recreate folder avery time and export objects to new one
\r
2388 AlidNdPtCorrection * comp=this;
\r
2389 TFolder *folder = comp->GetCorrectionFolder();
\r
2391 TString name, title;
\r
2392 TFolder *newFolder = 0;
\r
2394 Int_t size = array->GetSize();
\r
2397 // get name and title from old folder
\r
2398 name = folder->GetName();
\r
2399 title = folder->GetTitle();
\r
2405 newFolder = CreateFolder(name.Data(),title.Data());
\r
2406 newFolder->SetOwner();
\r
2408 // add objects to folder
\r
2410 newFolder->Add(array->At(i));
\r
2418 //_____________________________________________________________________________
\r
2419 TFolder* AlidNdPtCorrection::CreateFolder(TString name,TString title) {
\r
2420 // create folder for analysed histograms
\r
2422 TFolder *folder = 0;
\r
2423 folder = new TFolder(name.Data(),title.Data());
\r