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 "AlidNdPtAnalysis.h"
\r
52 #include "AlidNdPtCorrection.h"
\r
54 using namespace std;
\r
56 ClassImp(AlidNdPtCorrection)
\r
58 //_____________________________________________________________________________
\r
59 //AlidNdPtCorrection::AlidNdPtCorrection(): TNamed(),
\r
60 AlidNdPtCorrection::AlidNdPtCorrection(): AlidNdPt(),
\r
61 fCorrectionFolder(0),
\r
64 fRecEventMultHist1(0),
\r
65 fMCAllEventMultHist1(0),
\r
66 fMCAllNDEventMultHist1(0),
\r
67 fMCAllNSDEventMultHist1(0),
\r
68 fMCTriggerMultHist1(0),
\r
69 fMCEventMultHist1(0),
\r
70 fMCAllPrimTrackMultHist1(0),
\r
71 fMCNDEventAllPrimTrackMultHist1(0),
\r
72 fMCNSDEventAllPrimTrackMultHist1(0),
\r
73 fMCTriggerPrimTrackMultHist1(0),
\r
74 fMCEventPrimTrackMultHist1(0),
\r
75 fMCAllPrimTrackTrueMultHist1(0),
\r
76 fMCNDEventAllPrimTrackTrueMultHist1(0),
\r
77 fMCNSDEventAllPrimTrackTrueMultHist1(0),
\r
78 fMCTriggerPrimTrackTrueMultHist1(0),
\r
79 fMCEventPrimTrackTrueMultHist1(0),
\r
80 fMCAllPrimTrackTrueMultHist2(0),
\r
81 fMCNDEventAllPrimTrackTrueMultHist2(0),
\r
82 fMCNSDEventAllPrimTrackTrueMultHist2(0),
\r
83 fMCTriggerPrimTrackTrueMultHist2(0),
\r
84 fMCEventPrimTrackTrueMultHist2(0),
\r
85 fMCAllPrimTrackMeanPtMult1(0),
\r
86 fMCNDEventAllPrimTrackMeanPtMult1(0),
\r
87 fMCNSDEventAllPrimTrackMeanPtMult1(0),
\r
88 fMCTriggerPrimTrackMeanPtMult1(0),
\r
89 fMCEventPrimTrackMeanPtMult1(0),
\r
90 fMCAllPrimTrackMeanPtTrueMult1(0),
\r
91 fMCNDEventAllPrimTrackMeanPtTrueMult1(0),
\r
92 fMCNSDEventAllPrimTrackMeanPtTrueMult1(0),
\r
93 fMCTriggerPrimTrackMeanPtTrueMult1(0),
\r
94 fMCEventPrimTrackMeanPtTrueMult1(0),
\r
95 fEventMultCorrelationMatrix(0),
\r
97 fZvEmptyEventsNorm(0),
\r
98 fLHCBin0Background(0),
\r
99 fCorrTriggerMBtoInelEventMatrix(0),
\r
100 fCorrTriggerMBtoNDEventMatrix(0),
\r
101 fCorrTriggerMBtoNSDEventMatrix(0),
\r
102 fCorrEventMatrix(0),
\r
103 fCorrTriggerMBtoInelTrackEventMatrix(0),
\r
104 fCorrTriggerMBtoNDTrackEventMatrix(0),
\r
105 fCorrTriggerMBtoNSDTrackEventMatrix(0),
\r
106 fCorrTrackEventMatrix(0),
\r
107 fCorrTrackMatrix(0),
\r
108 fCorrHighPtTrackMatrix(0),
\r
109 fContTrackMatrix(0),
\r
110 fContMultTrackMatrix(0),
\r
111 fCorrMatrixFileName(""),
\r
115 // default constructor
\r
116 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
117 fRecTrackHist1[i]=0;
\r
120 for(Int_t i=0; i<8; i++) {
\r
121 fCorrRecTrackMultHist1[i] = 0;
\r
122 fCorrRecTrackTrueMultHist1[i] = 0;
\r
123 fCorrRecTrackTrueMultHist2[i] = 0;
\r
124 fCorrRecTrackMeanPtMultHist1[i] = 0;
\r
125 fCorrRecTrackMeanPtTrueMultHist1[i] = 0;
\r
126 fCorrRecTrackPt1[i] = 0;
\r
129 for(Int_t i=0; i<5; i++) {
\r
130 fCorrRecEventHist1[i] = 0;
\r
131 fCorrRecEventHist2[i] = 0;
\r
137 //_____________________________________________________________________________
\r
138 AlidNdPtCorrection::AlidNdPtCorrection(Char_t* name, Char_t* title, TString corrMatrixFileName): AlidNdPt(name,title),
\r
139 fCorrectionFolder(0),
\r
142 fRecEventMultHist1(0),
\r
143 fMCAllEventMultHist1(0),
\r
144 fMCAllNDEventMultHist1(0),
\r
145 fMCAllNSDEventMultHist1(0),
\r
146 fMCTriggerMultHist1(0),
\r
147 fMCEventMultHist1(0),
\r
148 fMCAllPrimTrackMultHist1(0),
\r
149 fMCNDEventAllPrimTrackMultHist1(0),
\r
150 fMCNSDEventAllPrimTrackMultHist1(0),
\r
151 fMCTriggerPrimTrackMultHist1(0),
\r
152 fMCEventPrimTrackMultHist1(0),
\r
153 fMCAllPrimTrackTrueMultHist1(0),
\r
154 fMCNDEventAllPrimTrackTrueMultHist1(0),
\r
155 fMCNSDEventAllPrimTrackTrueMultHist1(0),
\r
156 fMCTriggerPrimTrackTrueMultHist1(0),
\r
157 fMCEventPrimTrackTrueMultHist1(0),
\r
158 fMCAllPrimTrackTrueMultHist2(0),
\r
159 fMCNDEventAllPrimTrackTrueMultHist2(0),
\r
160 fMCNSDEventAllPrimTrackTrueMultHist2(0),
\r
161 fMCTriggerPrimTrackTrueMultHist2(0),
\r
162 fMCEventPrimTrackTrueMultHist2(0),
\r
163 fMCAllPrimTrackMeanPtMult1(0),
\r
164 fMCNDEventAllPrimTrackMeanPtMult1(0),
\r
165 fMCNSDEventAllPrimTrackMeanPtMult1(0),
\r
166 fMCTriggerPrimTrackMeanPtMult1(0),
\r
167 fMCEventPrimTrackMeanPtMult1(0),
\r
168 fMCAllPrimTrackMeanPtTrueMult1(0),
\r
169 fMCNDEventAllPrimTrackMeanPtTrueMult1(0),
\r
170 fMCNSDEventAllPrimTrackMeanPtTrueMult1(0),
\r
171 fMCTriggerPrimTrackMeanPtTrueMult1(0),
\r
172 fMCEventPrimTrackMeanPtTrueMult1(0),
\r
173 fEventMultCorrelationMatrix(0),
\r
175 fZvEmptyEventsNorm(0),
\r
176 fLHCBin0Background(0),
\r
177 fCorrTriggerMBtoInelEventMatrix(0),
\r
178 fCorrTriggerMBtoNDEventMatrix(0),
\r
179 fCorrTriggerMBtoNSDEventMatrix(0),
\r
180 fCorrEventMatrix(0),
\r
181 fCorrTriggerMBtoInelTrackEventMatrix(0),
\r
182 fCorrTriggerMBtoNDTrackEventMatrix(0),
\r
183 fCorrTriggerMBtoNSDTrackEventMatrix(0),
\r
184 fCorrTrackEventMatrix(0),
\r
185 fCorrTrackMatrix(0),
\r
186 fCorrHighPtTrackMatrix(0),
\r
187 fContTrackMatrix(0),
\r
188 fContMultTrackMatrix(0),
\r
189 fCorrMatrixFileName(corrMatrixFileName),
\r
194 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
195 fRecTrackHist1[i]=0;
\r
198 for(Int_t i=0; i<8; i++) {
\r
199 fCorrRecTrackMultHist1[i] = 0;
\r
200 fCorrRecTrackTrueMultHist1[i] = 0;
\r
201 fCorrRecTrackTrueMultHist2[i] = 0;
\r
202 fCorrRecTrackMeanPtMultHist1[i] = 0;
\r
203 fCorrRecTrackMeanPtTrueMultHist1[i] = 0;
\r
204 fCorrRecTrackPt1[i] = 0;
\r
207 for(Int_t i=0; i<5; i++) {
\r
208 fCorrRecEventHist1[i] = 0;
\r
209 fCorrRecEventHist2[i] = 0;
\r
215 //_____________________________________________________________________________
\r
216 AlidNdPtCorrection::~AlidNdPtCorrection() {
\r
220 if(fMCEventHist1) delete fMCEventHist1; fMCEventHist1=0;
\r
221 if(fRecEventHist1) delete fRecEventHist1; fRecEventHist1=0;
\r
222 if(fRecEventMultHist1) delete fRecEventMultHist1; fRecEventMultHist1=0;
\r
224 if(fMCAllEventMultHist1) delete fMCAllEventMultHist1; fMCAllEventMultHist1=0;
\r
225 if(fMCAllNDEventMultHist1) delete fMCAllNDEventMultHist1; fMCAllNDEventMultHist1=0;
\r
226 if(fMCAllNSDEventMultHist1) delete fMCAllNSDEventMultHist1; fMCAllNSDEventMultHist1=0;
\r
227 if(fMCTriggerMultHist1) delete fMCTriggerMultHist1; fMCTriggerMultHist1=0;
\r
228 if(fMCEventMultHist1) delete fMCEventMultHist1; fMCEventMultHist1=0;
\r
230 if(fMCAllPrimTrackMultHist1) delete fMCAllPrimTrackMultHist1; fMCAllPrimTrackMultHist1=0;
\r
231 if(fMCNDEventAllPrimTrackMultHist1) delete fMCNDEventAllPrimTrackMultHist1; fMCNDEventAllPrimTrackMultHist1=0;
\r
232 if(fMCNSDEventAllPrimTrackMultHist1) delete fMCNSDEventAllPrimTrackMultHist1; fMCNSDEventAllPrimTrackMultHist1=0;
\r
233 if(fMCTriggerPrimTrackMultHist1) delete fMCTriggerPrimTrackMultHist1; fMCTriggerPrimTrackMultHist1=0;
\r
234 if(fMCEventPrimTrackMultHist1) delete fMCEventPrimTrackMultHist1; fMCEventPrimTrackMultHist1=0;
\r
236 if(fMCAllPrimTrackTrueMultHist1) delete fMCAllPrimTrackTrueMultHist1; fMCAllPrimTrackTrueMultHist1=0;
\r
237 if(fMCNDEventAllPrimTrackTrueMultHist1) delete fMCNDEventAllPrimTrackTrueMultHist1; fMCNDEventAllPrimTrackTrueMultHist1=0;
\r
238 if(fMCNSDEventAllPrimTrackTrueMultHist1) delete fMCNSDEventAllPrimTrackTrueMultHist1; fMCNSDEventAllPrimTrackTrueMultHist1=0;
\r
239 if(fMCTriggerPrimTrackTrueMultHist1) delete fMCTriggerPrimTrackTrueMultHist1; fMCTriggerPrimTrackTrueMultHist1=0;
\r
240 if(fMCEventPrimTrackTrueMultHist1) delete fMCEventPrimTrackTrueMultHist1; fMCEventPrimTrackTrueMultHist1=0;
\r
242 if(fMCAllPrimTrackTrueMultHist2) delete fMCAllPrimTrackTrueMultHist2; fMCAllPrimTrackTrueMultHist2=0;
\r
243 if(fMCNDEventAllPrimTrackTrueMultHist2) delete fMCNDEventAllPrimTrackTrueMultHist2; fMCNDEventAllPrimTrackTrueMultHist2=0;
\r
244 if(fMCNSDEventAllPrimTrackTrueMultHist2) delete fMCNSDEventAllPrimTrackTrueMultHist2; fMCNSDEventAllPrimTrackTrueMultHist2=0;
\r
245 if(fMCTriggerPrimTrackTrueMultHist2) delete fMCTriggerPrimTrackTrueMultHist2; fMCTriggerPrimTrackTrueMultHist2=0;
\r
246 if(fMCEventPrimTrackTrueMultHist2) delete fMCEventPrimTrackTrueMultHist2; fMCEventPrimTrackTrueMultHist2=0;
\r
251 if(fMCAllPrimTrackMeanPtMult1) delete fMCAllPrimTrackMeanPtMult1; fMCAllPrimTrackMeanPtMult1=0;
\r
252 if(fMCNDEventAllPrimTrackMeanPtMult1) delete fMCNDEventAllPrimTrackMeanPtMult1; fMCNDEventAllPrimTrackMeanPtMult1=0;
\r
253 if(fMCNSDEventAllPrimTrackMeanPtMult1) delete fMCNSDEventAllPrimTrackMeanPtMult1; fMCNSDEventAllPrimTrackMeanPtMult1=0;
\r
254 if(fMCTriggerPrimTrackMeanPtMult1) delete fMCTriggerPrimTrackMeanPtMult1; fMCTriggerPrimTrackMeanPtMult1=0;
\r
255 if(fMCEventPrimTrackMeanPtMult1) delete fMCEventPrimTrackMeanPtMult1; fMCEventPrimTrackMeanPtMult1=0;
\r
257 if(fMCAllPrimTrackMeanPtTrueMult1) delete fMCAllPrimTrackMeanPtTrueMult1; fMCAllPrimTrackMeanPtTrueMult1=0;
\r
258 if(fMCNDEventAllPrimTrackMeanPtTrueMult1) delete fMCNDEventAllPrimTrackMeanPtTrueMult1; fMCNDEventAllPrimTrackMeanPtTrueMult1=0;
\r
259 if(fMCNSDEventAllPrimTrackMeanPtTrueMult1) delete fMCNSDEventAllPrimTrackMeanPtTrueMult1; fMCNSDEventAllPrimTrackMeanPtTrueMult1=0;
\r
260 if(fMCTriggerPrimTrackMeanPtTrueMult1) delete fMCTriggerPrimTrackMeanPtTrueMult1; fMCTriggerPrimTrackMeanPtTrueMult1=0;
\r
261 if(fMCEventPrimTrackMeanPtTrueMult1) delete fMCEventPrimTrackMeanPtTrueMult1; fMCEventPrimTrackMeanPtTrueMult1=0;
\r
263 if(fCosmicsHisto) delete fCosmicsHisto; fCosmicsHisto=0;
\r
264 if(fEventCount) delete fEventCount; fEventCount=0;
\r
266 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
267 if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;
\r
270 for(Int_t i=0; i<8; i++) {
\r
271 if(fCorrRecTrackMultHist1[i]) delete fCorrRecTrackMultHist1[i]; fCorrRecTrackMultHist1[i]=0;
\r
272 if(fCorrRecTrackTrueMultHist1[i]) delete fCorrRecTrackTrueMultHist1[i]; fCorrRecTrackTrueMultHist1[i]=0;
\r
273 if(fCorrRecTrackTrueMultHist2[i]) delete fCorrRecTrackTrueMultHist2[i]; fCorrRecTrackTrueMultHist2[i]=0;
\r
274 if(fCorrRecTrackMeanPtMultHist1[i]) delete fCorrRecTrackMeanPtMultHist1[i]; fCorrRecTrackMeanPtMultHist1[i]=0;
\r
275 if(fCorrRecTrackMeanPtTrueMultHist1[i]) delete fCorrRecTrackMeanPtTrueMultHist1[i]; fCorrRecTrackMeanPtTrueMultHist1[i]=0;
\r
276 if(fCorrRecTrackPt1[i]) delete fCorrRecTrackPt1[i]; fCorrRecTrackPt1[i]=0;
\r
279 for(Int_t i=0; i<5; i++) {
\r
280 if(fCorrRecEventHist1[i]) delete fCorrRecEventHist1[i]; fCorrRecEventHist1[i]=0;
\r
281 if(fCorrRecEventHist2[i]) delete fCorrRecEventHist2[i]; fCorrRecEventHist2[i]=0;
\r
284 if(fCorrectionFolder) delete fCorrectionFolder; fCorrectionFolder=0;
\r
287 //_____________________________________________________________________________
\r
288 void AlidNdPtCorrection::Init(){
\r
292 const Int_t etaNbins = 30;
\r
293 const Int_t zvNbins = 12;
\r
296 //const Int_t ptNbins = 52;
\r
297 //Double_t binsPt[ptNbins+1] = { 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80, 1.90, 2.00, 2.10, 2.20, 2.30, 2.40, 2.50, 2.60, 2.70, 2.80, 2.90, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.20, 4.40, 4.60, 4.80, 5.00, 5.20, 5.40, 5.60, 5.80, 6.00, 7.00, 7.60, 8.80, 9.60 };
\r
300 const Int_t ptNbins = 56;
\r
301 Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0};
\r
302 Double_t binsEta[etaNbins+1] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};
\r
303 Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
\r
307 const Int_t ptNbins = 68;
\r
308 Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0,34.0,36.0,40.0,45.0,50.0};
\r
311 Double_t binsEta[etaNbins+1] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};
\r
312 Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
\r
316 Int_t binsMCEventHist1[3]={100,100,140};
\r
317 Double_t minMCEventHist1[3]={-0.1,-0.1,-35.};
\r
318 Double_t maxMCEventHist1[3]={0.1,0.1,35.};
\r
319 fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1);
\r
320 fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)");
\r
321 fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)");
\r
322 fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)");
\r
323 fMCEventHist1->Sumw2();
\r
326 Int_t binsRecEventHist1[3]={100,100,140};
\r
327 Double_t minRecEventHist1[3]={-3.,-3.,-35.};
\r
328 Double_t maxRecEventHist1[3]={3.,3.,35.};
\r
329 fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1);
\r
330 fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)");
\r
331 fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)");
\r
332 fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)");
\r
333 fRecEventHist1->Sumw2();
\r
336 Int_t binsRecEventMultHist1[2]={150,150};
\r
337 Double_t minRecEventMultHist1[2]={-0.5,-0.5};
\r
338 Double_t maxRecEventMultHist1[2]={149.5,149.5};
\r
339 fRecEventMultHist1 = new THnSparseF("fRecEventMultHist1","track multiplicity:tracklet multiplicity",2,binsRecEventMultHist1,minRecEventMultHist1,maxRecEventMultHist1);
\r
340 fRecEventMultHist1->GetAxis(0)->SetTitle("track_mult");
\r
341 fRecEventMultHist1->GetAxis(1)->SetTitle("tracklet_mult");
\r
342 fRecEventMultHist1->Sumw2();
\r
348 Int_t binsMCAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
349 Double_t minMCAllPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
350 Double_t maxMCAllPrimTrackMultHist1[3]={20.,1.,149.5};
\r
351 snprintf(name,256,"fMCAllPrimTrackMultHist1");
\r
352 snprintf(title,256,"mcPt:mcEta:multiplicity");
\r
354 fMCAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackMultHist1,minMCAllPrimTrackMultHist1,maxMCAllPrimTrackMultHist1);
\r
355 fMCAllPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
356 fMCAllPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
357 fMCAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
358 fMCAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
359 fMCAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
360 fMCAllPrimTrackMultHist1->Sumw2();
\r
362 Int_t binsMCNDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
363 Double_t minMCNDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
364 Double_t maxMCNDEventAllPrimTrackMultHist1[3]={20.,1.,149.5};
\r
365 snprintf(name,256,"fMCNDEventAllPrimTrackMultHist1");
\r
366 snprintf(title,256,"mcPt:mcEta:multiplicity");
\r
368 fMCNDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackMultHist1,minMCNDEventAllPrimTrackMultHist1,maxMCNDEventAllPrimTrackMultHist1);
\r
369 fMCNDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
370 fMCNDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
371 fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
372 fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
373 fMCNDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
374 fMCNDEventAllPrimTrackMultHist1->Sumw2();
\r
376 Int_t binsMCNSDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
377 Double_t minMCNSDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
378 Double_t maxMCNSDEventAllPrimTrackMultHist1[3]={20.,1.,149.5};
\r
379 snprintf(name,256,"fMCNSDEventAllPrimTrackMultHist1");
\r
380 snprintf(title,256,"mcPt:mcEta:multiplicity");
\r
382 fMCNSDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackMultHist1,minMCNSDEventAllPrimTrackMultHist1,maxMCNSDEventAllPrimTrackMultHist1);
\r
383 fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
384 fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
385 fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
386 fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
387 fMCNSDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
388 fMCNSDEventAllPrimTrackMultHist1->Sumw2();
\r
390 Int_t binsMCEventTriggerPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
391 Double_t minMCEventTriggerPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
392 Double_t maxMCEventTriggerPrimTrackMultHist1[3]={20.,1.,149.5};
\r
393 snprintf(name,256,"fMCTriggerPrimTrackMultHist1");
\r
394 snprintf(title,256,"mcPt:mcEta:multiplicity");
\r
396 fMCTriggerPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackMultHist1,minMCEventTriggerPrimTrackMultHist1,maxMCEventTriggerPrimTrackMultHist1);
\r
397 fMCTriggerPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
398 fMCTriggerPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
399 fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
400 fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
401 fMCTriggerPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
402 fMCTriggerPrimTrackMultHist1->Sumw2();
\r
404 Int_t binsMCEventPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
405 Double_t minMCEventPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
406 Double_t maxMCEventPrimTrackMultHist1[3]={20.,1.,149.5};
\r
407 snprintf(name,256,"fMCEventPrimTrackMultHist1");
\r
408 snprintf(title,256,"mcPt:mcEta:multiplicity");
\r
410 fMCEventPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackMultHist1,minMCEventPrimTrackMultHist1,maxMCEventPrimTrackMultHist1);
\r
411 fMCEventPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
412 fMCEventPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
413 fMCEventPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
414 fMCEventPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
415 fMCEventPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
416 fMCEventPrimTrackMultHist1->Sumw2();
\r
419 // true multiplicity
\r
422 Int_t binsMCAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
423 Double_t minMCAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
424 Double_t maxMCAllPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
425 snprintf(name,256,"fMCAllPrimTrackTrueMultHist1");
\r
426 snprintf(title,256,"mcPt:mcEta:true_mult");
\r
428 fMCAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist1,minMCAllPrimTrackTrueMultHist1,maxMCAllPrimTrackTrueMultHist1);
\r
429 fMCAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
430 fMCAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
431 fMCAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
432 fMCAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
433 fMCAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
434 fMCAllPrimTrackTrueMultHist1->Sumw2();
\r
436 Int_t binsMCNDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
437 Double_t minMCNDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
438 Double_t maxMCNDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
439 snprintf(name,256,"fMCNDEventAllPrimTrackTrueMultHist1");
\r
440 snprintf(title,256,"mcPt:mcEta:true_mult");
\r
442 fMCNDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist1,minMCNDEventAllPrimTrackTrueMultHist1,maxMCNDEventAllPrimTrackTrueMultHist1);
\r
443 fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
444 fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
445 fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
446 fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
447 fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
448 fMCNDEventAllPrimTrackTrueMultHist1->Sumw2();
\r
450 Int_t binsMCNSDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
451 Double_t minMCNSDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
452 Double_t maxMCNSDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
453 snprintf(name,256,"fMCNSDEventAllPrimTrackTrueMultHist1");
\r
454 snprintf(title,256,"mcPt:mcEta:true_mult");
\r
456 fMCNSDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist1,minMCNSDEventAllPrimTrackTrueMultHist1,maxMCNSDEventAllPrimTrackTrueMultHist1);
\r
457 fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
458 fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
459 fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
460 fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
461 fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
462 fMCNSDEventAllPrimTrackTrueMultHist1->Sumw2();
\r
464 Int_t binsMCEventTriggerPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
465 Double_t minMCEventTriggerPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
466 Double_t maxMCEventTriggerPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
467 snprintf(name,256,"fMCTriggerPrimTrackTrueMultHist1");
\r
468 snprintf(title,256,"mcPt:mcEta:true_mult");
\r
470 fMCTriggerPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist1,minMCEventTriggerPrimTrackTrueMultHist1,maxMCEventTriggerPrimTrackTrueMultHist1);
\r
471 fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
472 fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
473 fMCTriggerPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
474 fMCTriggerPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
475 fMCTriggerPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
476 fMCTriggerPrimTrackTrueMultHist1->Sumw2();
\r
478 Int_t binsMCEventPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
479 Double_t minMCEventPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
480 Double_t maxMCEventPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
481 snprintf(name,256,"fMCEventPrimTrackTrueMultHist1");
\r
482 snprintf(title,256,"mcPt:mcEta:true_mult");
\r
484 fMCEventPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist1,minMCEventPrimTrackTrueMultHist1,maxMCEventPrimTrackTrueMultHist1);
\r
485 fMCEventPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
486 fMCEventPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
487 fMCEventPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
488 fMCEventPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
489 fMCEventPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
490 fMCEventPrimTrackTrueMultHist1->Sumw2();
\r
493 // mcPT vs multiplicity vs true multiplicity
\r
496 Int_t binsMCAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
497 Double_t minMCAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
498 Double_t maxMCAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
499 snprintf(name,256,"fMCAllPrimTrackTrueMultHist2");
\r
500 snprintf(title,256,"mcPt:mult:true_mult");
\r
502 fMCAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist2,minMCAllPrimTrackTrueMultHist2,maxMCAllPrimTrackTrueMultHist2);
\r
503 fMCAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
504 fMCAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
505 fMCAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
506 fMCAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
507 fMCAllPrimTrackTrueMultHist2->Sumw2();
\r
509 Int_t binsMCNDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
510 Double_t minMCNDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
511 Double_t maxMCNDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
512 snprintf(name,256,"fMCNDEventAllPrimTrackTrueMultHist2");
\r
513 snprintf(title,256,"mcPt:mult:true_mult");
\r
515 fMCNDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist2,minMCNDEventAllPrimTrackTrueMultHist2,maxMCNDEventAllPrimTrackTrueMultHist2);
\r
516 fMCNDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
517 fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
518 fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
519 fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
520 fMCNDEventAllPrimTrackTrueMultHist2->Sumw2();
\r
522 Int_t binsMCNSDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
523 Double_t minMCNSDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
524 Double_t maxMCNSDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
525 snprintf(name,256,"fMCNSDEventAllPrimTrackTrueMultHist2");
\r
526 snprintf(title,256,"mcPt:mult:true_mult");
\r
528 fMCNSDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist2,minMCNSDEventAllPrimTrackTrueMultHist2,maxMCNSDEventAllPrimTrackTrueMultHist2);
\r
529 fMCNSDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
530 fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
531 fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
532 fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
533 fMCNSDEventAllPrimTrackTrueMultHist2->Sumw2();
\r
535 Int_t binsMCEventTriggerPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
536 Double_t minMCEventTriggerPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
537 Double_t maxMCEventTriggerPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
538 snprintf(name,256,"fMCTriggerPrimTrackTrueMultHist2");
\r
539 snprintf(title,256,"mcPt:mult:true_mult");
\r
541 fMCTriggerPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist2,minMCEventTriggerPrimTrackTrueMultHist2,maxMCEventTriggerPrimTrackTrueMultHist2);
\r
542 fMCTriggerPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
543 fMCTriggerPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
544 fMCTriggerPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
545 fMCTriggerPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
546 fMCTriggerPrimTrackTrueMultHist2->Sumw2();
\r
548 Int_t binsMCEventPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
549 Double_t minMCEventPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
550 Double_t maxMCEventPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
551 snprintf(name,256,"fMCEventPrimTrackTrueMultHist2");
\r
552 snprintf(title,256,"mcPt:mult:true_mult");
\r
554 fMCEventPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist2,minMCEventPrimTrackTrueMultHist2,maxMCEventPrimTrackTrueMultHist2);
\r
555 fMCEventPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
556 fMCEventPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
557 fMCEventPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
558 fMCEventPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
559 fMCEventPrimTrackTrueMultHist2->Sumw2();
\r
565 Int_t binsMCAllPrimTrackMeanPtTrueMult1[2]={100,150};
\r
566 Double_t minMCAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
567 Double_t maxMCAllPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
568 snprintf(name,256,"fMCAllPrimTrackMeanPtTrueMult1");
\r
569 snprintf(title,256,"event <mcPt>:true_mult");
\r
571 fMCAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtTrueMult1,minMCAllPrimTrackMeanPtTrueMult1,maxMCAllPrimTrackMeanPtTrueMult1);
\r
572 fMCAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
573 fMCAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
574 fMCAllPrimTrackMeanPtTrueMult1->Sumw2();
\r
576 Int_t binsMCAllPrimTrackMeanPtMult1[2]={100,150};
\r
577 Double_t minMCAllPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
578 Double_t maxMCAllPrimTrackMeanPtMult1[2]={10.,149.5};
\r
579 snprintf(name,256,"fMCAllPrimTrackMeanPtMult1");
\r
580 snprintf(title,256,"event <mcPt>:mult");
\r
582 fMCAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtMult1,minMCAllPrimTrackMeanPtMult1,maxMCAllPrimTrackMeanPtMult1);
\r
583 fMCAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
584 fMCAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
585 fMCAllPrimTrackMeanPtMult1->Sumw2();
\r
588 Int_t binsMCNDEventAllPrimTrackMeanPtTrueMult1[2]={100,150};
\r
589 Double_t minMCNDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
590 Double_t maxMCNDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
591 snprintf(name,256,"fMCNDEventAllPrimTrackMeanPtTrueMult1");
\r
592 snprintf(title,256,"event <mcPt>:true_mult");
\r
594 fMCNDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtTrueMult1,minMCNDEventAllPrimTrackMeanPtTrueMult1,maxMCNDEventAllPrimTrackMeanPtTrueMult1);
\r
595 fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
596 fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
597 fMCNDEventAllPrimTrackMeanPtTrueMult1->Sumw2();
\r
599 Int_t binsMCNDEventAllPrimTrackMeanPtMult1[2]={100,150};
\r
600 Double_t minMCNDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
601 Double_t maxMCNDEventAllPrimTrackMeanPtMult1[2]={10.,149.5};
\r
602 snprintf(name,256,"fMCNDEventAllPrimTrackMeanPtMult1");
\r
603 snprintf(title,256,"event <mcPt>:mult");
\r
605 fMCNDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtMult1,minMCNDEventAllPrimTrackMeanPtMult1,maxMCNDEventAllPrimTrackMeanPtMult1);
\r
606 fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
607 fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
608 fMCNDEventAllPrimTrackMeanPtMult1->Sumw2();
\r
611 Int_t binsMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={100,150};
\r
612 Double_t minMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
613 Double_t maxMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
614 snprintf(name,256,"fMCNSDEventAllPrimTrackMeanPtTrueMult1");
\r
615 snprintf(title,256,"event <mcPt>:true_mult");
\r
617 fMCNSDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtTrueMult1,minMCNSDEventAllPrimTrackMeanPtTrueMult1,maxMCNSDEventAllPrimTrackMeanPtTrueMult1);
\r
618 fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
619 fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
620 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Sumw2();
\r
622 Int_t binsMCNSDEventAllPrimTrackMeanPtMult1[2]={100,150};
\r
623 Double_t minMCNSDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
624 Double_t maxMCNSDEventAllPrimTrackMeanPtMult1[2]={10.,149.5};
\r
625 snprintf(name,256,"fMCNSDEventAllPrimTrackMeanPtMult1");
\r
626 snprintf(title,256,"event <mcPt>:mult");
\r
628 fMCNSDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtMult1,minMCNSDEventAllPrimTrackMeanPtMult1,maxMCNSDEventAllPrimTrackMeanPtMult1);
\r
629 fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
630 fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
631 fMCNSDEventAllPrimTrackMeanPtMult1->Sumw2();
\r
634 Int_t binsMCTriggerPrimTrackMeanPtTrueMult1[2]={100,150};
\r
635 Double_t minMCTriggerPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
636 Double_t maxMCTriggerPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
637 snprintf(name,256,"fMCTriggerPrimTrackMeanPtTrueMult1");
\r
638 snprintf(title,256,"event <mcPt>:true_mult");
\r
640 fMCTriggerPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtTrueMult1,minMCTriggerPrimTrackMeanPtTrueMult1,maxMCTriggerPrimTrackMeanPtTrueMult1);
\r
641 fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
642 fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
643 fMCTriggerPrimTrackMeanPtTrueMult1->Sumw2();
\r
645 Int_t binsMCTriggerPrimTrackMeanPtMult1[2]={100,150};
\r
646 Double_t minMCTriggerPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
647 Double_t maxMCTriggerPrimTrackMeanPtMult1[2]={10.,149.5};
\r
648 snprintf(name,256,"fMCTriggerPrimTrackMeanPtMult1");
\r
649 snprintf(title,256,"event <mcPt>:mult");
\r
651 fMCTriggerPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtMult1,minMCTriggerPrimTrackMeanPtMult1,maxMCTriggerPrimTrackMeanPtMult1);
\r
652 fMCTriggerPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
653 fMCTriggerPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
654 fMCTriggerPrimTrackMeanPtMult1->Sumw2();
\r
657 Int_t binsMCEventPrimTrackMeanPtTrueMult1[2]={100,150};
\r
658 Double_t minMCEventPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
659 Double_t maxMCEventPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
660 snprintf(name,256,"fMCEventPrimTrackMeanPtTrueMult1");
\r
661 snprintf(title,256,"event <mcPt>:true_mult");
\r
663 fMCEventPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtTrueMult1,minMCEventPrimTrackMeanPtTrueMult1,maxMCEventPrimTrackMeanPtTrueMult1);
\r
664 fMCEventPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
665 fMCEventPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
666 fMCEventPrimTrackMeanPtTrueMult1->Sumw2();
\r
668 Int_t binsMCEventPrimTrackMeanPtMult1[2]={100,150};
\r
669 Double_t minMCEventPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
670 Double_t maxMCEventPrimTrackMeanPtMult1[2]={10.,149.5};
\r
671 snprintf(name,256,"fMCEventPrimTrackMeanPtMult1");
\r
672 snprintf(title,256,"event <mcPt>:mult");
\r
674 fMCEventPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtMult1,minMCEventPrimTrackMeanPtMult1,maxMCEventPrimTrackMeanPtMult1);
\r
675 fMCEventPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
676 fMCEventPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
677 fMCEventPrimTrackMeanPtMult1->Sumw2();
\r
685 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++)
\r
687 // THnSparse track histograms
\r
689 Int_t binsRecTrackHist1[3]={ptNbins,etaNbins,90};
\r
690 Double_t minRecTrackHist1[3]={0.,-1.,0.};
\r
691 Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()};
\r
692 snprintf(name,256,"fRecTrackHist1_%d",i);
\r
693 snprintf(title,256,"Pt:Eta:Phi");
\r
695 fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1);
\r
696 fRecTrackHist1[i]->SetBinEdges(0,binsPt);
\r
697 fRecTrackHist1[i]->SetBinEdges(1,binsEta);
\r
698 fRecTrackHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
699 fRecTrackHist1[i]->GetAxis(1)->SetTitle("Eta");
\r
700 fRecTrackHist1[i]->GetAxis(2)->SetTitle("Phi (rad)");
\r
701 fRecTrackHist1[i]->Sumw2();
\r
705 Int_t binsCorrRecTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
706 Double_t minCorrRecTrackMultHist1[3]={0.,-1.,-0.5};
\r
707 Double_t maxCorrRecTrackMultHist1[3]={20.,1.,149.5};
\r
709 Int_t binsCorrRecTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
710 Double_t minCorrRecTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
711 Double_t maxCorrRecTrackTrueMultHist1[3]={20.,1.,149.5};
\r
713 Int_t binsCorrRecTrackTrueMultHist2[3]={ptNbins,150,150};
\r
714 Double_t minCorrRecTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
715 Double_t maxCorrRecTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
718 Int_t binsCorrRecTrackMeanPtMultHist1[2]={100,150};
\r
719 Double_t minCorrRecTrackMeanPtMultHist1[2]={0.,-0.5};
\r
720 Double_t maxCorrRecTrackMeanPtMultHist1[2]={10.,149.5};
\r
722 Int_t binsCorrRecTrackMeanPtTrueMultHist1[2]={100,150};
\r
723 Double_t minCorrRecTrackMeanPtTrueMultHist1[2]={0.,-0.5};
\r
724 Double_t maxCorrRecTrackMeanPtTrueMultHist1[2]={10.,149.5};
\r
726 Int_t binsCorrRecTrackPt1[1]={200};
\r
727 Double_t minCorrRecTrackPt1[1]={0.};
\r
728 Double_t maxCorrRecTrackPt1[1]={10.};
\r
730 for(Int_t i=0; i<8; i++)
\r
732 // THnSparse track histograms
\r
733 snprintf(name,256,"fCorrRecTrackMultHist1_%d",i);
\r
734 snprintf(title,256,"Pt:Eta:mult");
\r
735 fCorrRecTrackMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackMultHist1,minCorrRecTrackMultHist1,maxCorrRecTrackMultHist1);
\r
736 fCorrRecTrackMultHist1[i]->SetBinEdges(0,binsPt);
\r
737 fCorrRecTrackMultHist1[i]->SetBinEdges(1,binsEta);
\r
738 fCorrRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
739 fCorrRecTrackMultHist1[i]->GetAxis(1)->SetTitle("Eta");
\r
740 fCorrRecTrackMultHist1[i]->GetAxis(2)->SetTitle("multiplicity");
\r
741 fCorrRecTrackMultHist1[i]->Sumw2();
\r
743 // THnSparse track histograms
\r
744 snprintf(name,256,"fCorrRecTrackTrueMultHist1_%d",i);
\r
745 snprintf(title,256,"Pt:Eta:true_mult");
\r
746 fCorrRecTrackTrueMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist1,minCorrRecTrackTrueMultHist1,maxCorrRecTrackTrueMultHist1);
\r
747 fCorrRecTrackTrueMultHist1[i]->SetBinEdges(0,binsPt);
\r
748 fCorrRecTrackTrueMultHist1[i]->SetBinEdges(1,binsEta);
\r
749 fCorrRecTrackTrueMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
750 fCorrRecTrackTrueMultHist1[i]->GetAxis(1)->SetTitle("Eta");
\r
751 fCorrRecTrackTrueMultHist1[i]->GetAxis(2)->SetTitle("true multiplicity");
\r
752 fCorrRecTrackTrueMultHist1[i]->Sumw2();
\r
755 snprintf(name,256,"fCorrRecTrackTrueMultHist2_%d",i);
\r
756 snprintf(title,256,"Pt:mult:true_mult");
\r
757 fCorrRecTrackTrueMultHist2[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist2,minCorrRecTrackTrueMultHist2,maxCorrRecTrackTrueMultHist2);
\r
758 fCorrRecTrackTrueMultHist2[i]->SetBinEdges(0,binsPt);
\r
759 fCorrRecTrackTrueMultHist2[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
760 fCorrRecTrackTrueMultHist2[i]->GetAxis(1)->SetTitle("multiplicity");
\r
761 fCorrRecTrackTrueMultHist2[i]->GetAxis(2)->SetTitle("true multiplicity");
\r
762 fCorrRecTrackTrueMultHist2[i]->Sumw2();
\r
764 // THnSparse track histograms
\r
765 snprintf(name,256,"fCorrRecTrackMeanPtMultHist1_%d",i);
\r
766 snprintf(title,256,"<Pt>:mult");
\r
767 fCorrRecTrackMeanPtMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtMultHist1,minCorrRecTrackMeanPtMultHist1,maxCorrRecTrackMeanPtMultHist1);
\r
768 fCorrRecTrackMeanPtMultHist1[i]->GetAxis(0)->SetTitle("<Pt> (GeV/c)");
\r
769 fCorrRecTrackMeanPtMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");
\r
770 fCorrRecTrackMeanPtMultHist1[i]->Sumw2();
\r
772 // THnSparse track histograms
\r
773 snprintf(name,256,"fCorrRecTrackMeanPtTrueMultHist1_%d",i);
\r
774 snprintf(title,256,"<Pt>:true_mult");
\r
775 fCorrRecTrackMeanPtTrueMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtTrueMultHist1,minCorrRecTrackMeanPtTrueMultHist1,maxCorrRecTrackMeanPtTrueMultHist1);
\r
776 fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(0)->SetTitle("<Pt> (GeV/c)");
\r
777 fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(1)->SetTitle("true multiplicity");
\r
778 fCorrRecTrackMeanPtTrueMultHist1[i]->Sumw2();
\r
780 snprintf(name,256,"fCorrRecTrackPt1_%d",i);
\r
781 snprintf(title,256,"pt small bining");
\r
782 fCorrRecTrackPt1[i] = new THnSparseF(name,title,1,binsCorrRecTrackPt1,minCorrRecTrackPt1,maxCorrRecTrackPt1);
\r
783 fCorrRecTrackPt1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
784 fCorrRecTrackPt1[i]->Sumw2();
\r
788 Int_t binsEventMatrix[2]={zvNbins,150};
\r
789 Double_t minEventMatrix[2]={-25.,-0.5};
\r
790 Double_t maxEventMatrix[2]={25.,149.5};
\r
792 fMCAllEventMultHist1 = new THnSparseF("fMCAllEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
793 fMCAllEventMultHist1->SetBinEdges(0,binsZv);
\r
794 fMCAllEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
795 fMCAllEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
796 fMCAllEventMultHist1->Sumw2();
\r
798 fMCAllNDEventMultHist1 = new THnSparseF("fMCAllNDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
799 fMCAllNDEventMultHist1->SetBinEdges(0,binsZv);
\r
800 fMCAllNDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
801 fMCAllNDEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
802 fMCAllNDEventMultHist1->Sumw2();
\r
804 fMCAllNSDEventMultHist1 = new THnSparseF("fMCAllNSDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
805 fMCAllNSDEventMultHist1->SetBinEdges(0,binsZv);
\r
806 fMCAllNSDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
807 fMCAllNSDEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
808 fMCAllNSDEventMultHist1->Sumw2();
\r
810 fMCTriggerMultHist1 = new THnSparseF("fMCTriggerMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
811 fMCTriggerMultHist1->SetBinEdges(0,binsZv);
\r
812 fMCTriggerMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
813 fMCTriggerMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
814 fMCTriggerMultHist1->Sumw2();
\r
816 fMCEventMultHist1 = new THnSparseF("fMCEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
817 fMCEventMultHist1->SetBinEdges(0,binsZv);
\r
818 fMCEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
819 fMCEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
820 fMCEventMultHist1->Sumw2();
\r
822 for(Int_t i=0; i<5; i++)
\r
824 // event corrected histograms
\r
825 snprintf(name,256,"fCorrRecEventHist1_%d",i);
\r
826 snprintf(title,256,"mcZv:mult");
\r
827 fCorrRecEventHist1[i] = new THnSparseF("fCorrRecEventHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
828 fCorrRecEventHist1[i]->SetBinEdges(0,binsZv);
\r
829 fCorrRecEventHist1[i]->GetAxis(0)->SetTitle("Zv (cm)");
\r
830 fCorrRecEventHist1[i]->GetAxis(1)->SetTitle("multiplicity");
\r
831 fCorrRecEventHist1[i]->Sumw2();
\r
833 // empty event corrected histograms
\r
834 snprintf(name,256,"fCorrRecEventHist2_%d",i);
\r
835 snprintf(title,256,"mcZv:mult");
\r
836 fCorrRecEventHist2[i] = new THnSparseF("fCorrRecEventHist2","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
837 fCorrRecEventHist2[i]->SetBinEdges(0,binsZv);
\r
838 fCorrRecEventHist2[i]->GetAxis(0)->SetTitle("Zv (cm)");
\r
839 fCorrRecEventHist2[i]->GetAxis(1)->SetTitle("multiplicity");
\r
840 fCorrRecEventHist2[i]->Sumw2();
\r
846 Int_t binsCosmicsHisto[3]= {151, 300, ptNbins};
\r
847 Double_t minCosmicsHisto[3]={-1.5, -2.*TMath::Pi(), 0.0};
\r
848 Double_t maxCosmicsHisto[3]={ 1.5, 2.*TMath::Pi(), 16.0};
\r
849 snprintf(name,256,"fCosmicsHisto");
\r
850 snprintf(title,256,"deta:dphi:pt");
\r
852 fCosmicsHisto = new THnSparseF(name,title,3,binsCosmicsHisto,minCosmicsHisto,maxCosmicsHisto);
\r
853 fCosmicsHisto->SetBinEdges(2,binsPt);
\r
854 fCosmicsHisto->GetAxis(0)->SetTitle("#Delta#eta");
\r
855 fCosmicsHisto->GetAxis(1)->SetTitle("#Delta#phi (rad)");
\r
856 fCosmicsHisto->GetAxis(2)->SetTitle("pt (GV/c)");
\r
857 fCosmicsHisto->Sumw2();
\r
860 Int_t binsEventCount[3]={2,2,2};
\r
861 Double_t minEventCount[3]={0,0,0};
\r
862 Double_t maxEventCount[3]={2,2,2};
\r
863 fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount);
\r
864 fEventCount->GetAxis(0)->SetTitle("trig");
\r
865 fEventCount->GetAxis(1)->SetTitle("trig+vert");
\r
866 fEventCount->GetAxis(2)->SetTitle("selected");
\r
867 fEventCount->Sumw2();
\r
870 // init output folder
\r
871 fCorrectionFolder = CreateFolder("folderdNdPt","Correction dNdPt Folder");
\r
873 // init correction matrices
\r
874 TFile *file = (TFile *)TFile::Open(fCorrMatrixFileName.Data());
\r
876 AliDebug(AliLog::kError, "file with efficiency matrices not available");
\r
877 printf("file with efficiency matrices not available \n");
\r
879 TFolder *folder = (TFolder *)file->FindObjectAny("folderdNdPt");
\r
881 AliDebug(AliLog::kError, "file without folderdNdPt");
\r
882 printf("file without folderdNdPt \n");
\r
884 // rec. event mult vs true multiplicity
\r
885 fEventMultCorrelationMatrix = (THnSparseF*)folder->FindObject("event_mult_correlation_matrix");
\r
886 if(!fEventMultCorrelationMatrix) {
\r
887 Printf("No %s matrix \n", "event_mult_correlation_matrix");
\r
892 // event level corrections (zv,mult_MB)
\r
895 // trigger bias correction (MBtoND)
\r
896 fCorrTriggerMBtoNDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoND_corr_matrix");
\r
897 if(!fCorrTriggerMBtoNDEventMatrix) {
\r
898 Printf("No %s matrix \n", "zv_mult_trig_MBtoND_corr_matrix");
\r
902 // trigger bias correction (MBtoNSD)
\r
903 fCorrTriggerMBtoNSDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoNSD_corr_matrix");
\r
904 if(!fCorrTriggerMBtoNSDEventMatrix) {
\r
905 Printf("No %s matrix \n", "zv_mult_trig_MBtoNSD_corr_matrix");
\r
909 // trigger bias correction (MBtoInel)
\r
910 fCorrTriggerMBtoInelEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoInel_corr_matrix");
\r
911 if(!fCorrTriggerMBtoInelEventMatrix) {
\r
912 Printf("No %s matrix \n", "zv_mult_trig_MBtoInel_corr_matrix");
\r
916 // vertex reconstruction efficiency correction
\r
917 fCorrEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_event_corr_matrix");
\r
918 if(!fCorrEventMatrix) {
\r
919 Printf("No %s matrix \n", "zv_mult_event_corr_matrix");
\r
924 // histogram needed for empty events corrections
\r
926 fZvNorm = (TH1D*)folder->FindObject("zv_distribution_norm");
\r
928 Printf("No %s matrix \n", "fZvNorm");
\r
932 fZvEmptyEventsNorm = (TH1D*)folder->FindObject("zv_empty_events_norm");
\r
933 if(!fZvEmptyEventsNorm) {
\r
934 Printf("No %s matrix \n", "fZvEmptyEventsNorm");
\r
938 fLHCBin0Background = (TH1D*)folder->FindObject("hLHCBin0Background");
\r
939 if(!fLHCBin0Background) {
\r
940 Printf("No %s matrix \n", "fLHCBin0Background");
\r
945 // track-event level corrections (zv,pt,eta)
\r
948 // trigger bias correction (MBtoND)
\r
949 fCorrTriggerMBtoNDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoND_corr_matrix");
\r
950 if(!fCorrTriggerMBtoNDTrackEventMatrix) {
\r
951 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoND_corr_matrix");
\r
955 // trigger bias correction (MBtoNSD)
\r
956 fCorrTriggerMBtoNSDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoNSD_corr_matrix");
\r
957 if(!fCorrTriggerMBtoNSDTrackEventMatrix) {
\r
958 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoNSD_corr_matrix");
\r
962 // trigger bias correction (MBtoInel)
\r
963 fCorrTriggerMBtoInelTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoInel_corr_matrix");
\r
964 if(!fCorrTriggerMBtoInelTrackEventMatrix) {
\r
965 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoInel_corr_matrix");
\r
969 // vertex reconstruction efficiency correction (zv,pt,eta)
\r
970 fCorrTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_event_corr_matrix");
\r
971 if(!fCorrTrackEventMatrix) {
\r
972 Printf("No %s matrix \n", "zv_pt_eta_track_event_corr_matrix");
\r
976 // track reconstruction efficiency correction (zv,pt,eta)
\r
977 fCorrTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_corr_matrix");
\r
978 if(!fCorrTrackMatrix) {
\r
979 Printf("No %s matrix \n", "zv_pt_eta_track_corr_matrix");
\r
983 // high pt track reconstruction efficiency correction (zv,pt,eta)
\r
984 fCorrHighPtTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_highPt_track_corr_matrix");
\r
985 if(!fCorrHighPtTrackMatrix) {
\r
986 Printf("No %s matrix \n", "zv_pt_eta_highPt_track_corr_matrix");
\r
990 // secondary tracks contamination correction (zv,pt,eta)
\r
991 fContTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_cont_matrix");
\r
992 if(!fContTrackMatrix) {
\r
993 Printf("No %s matrix \n", "zv_pt_eta_track_cont_matrix");
\r
997 // multiply reconstructed tracks correction
\r
998 fContMultTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_mult_track_cont_matrix");
\r
999 if(!fContMultTrackMatrix) {
\r
1000 Printf("No %s matrix \n", "zv_pt_eta_mult_track_cont_matrix");
\r
1008 //_____________________________________________________________________________
\r
1009 void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
\r
1012 // Process real and/or simulated events
\r
1015 AliDebug(AliLog::kError, "esdEvent not available");
\r
1019 // get selection cuts
\r
1020 AlidNdPtEventCuts *evtCuts = GetEventCuts();
\r
1021 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
\r
1022 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
\r
1024 if(!evtCuts || !accCuts || !esdTrackCuts) {
\r
1025 AliDebug(AliLog::kError, "cuts not available");
\r
1030 // trigger selection
\r
1031 Bool_t isEventTriggered = kTRUE;
\r
1032 AliPhysicsSelection *trigSel = NULL;
\r
1033 AliTriggerAnalysis *trigAna = NULL; // needed for andV0
\r
1035 if(evtCuts->IsTriggerRequired())
\r
1038 trigSel = GetPhysicsTriggerSelection();
\r
1040 AliDebug(AliLog::kError, "cannot get trigSel");
\r
1044 if(IsUseMCInfo())
\r
1046 trigSel->SetAnalyzeMC();
\r
1048 if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)
\r
1050 // check V0 systematics (case1)
\r
1051 // Initialization done in the macro
\r
1052 trigAna = trigSel->GetTriggerAnalysis();
\r
1056 //trigAna->SetV0HwPars(15, 61.5, 86.5);
\r
1057 //trigAna->SetV0AdcThr(15);
\r
1059 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1060 //printf("MB1 & kVZEROCase1 %d \n",isEventTriggered);
\r
1061 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1063 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1065 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1066 //printf("V0AND %d \n",isEventTriggered);
\r
1069 else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2)
\r
1071 // check V0 systematics (case2 only in MC)
\r
1072 // Initialization done in the macro
\r
1074 trigAna = trigSel->GetTriggerAnalysis();
\r
1078 //trigAna->SetV0HwPars(0, 0, 125);
\r
1079 //trigAna->SetV0AdcThr(0);
\r
1081 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1082 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1084 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1086 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1087 //printf("V0AND %d \n",isEventTriggered);
\r
1091 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1092 //printf("MB1 %d \n",isEventTriggered);
\r
1094 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1096 trigAna = trigSel->GetTriggerAnalysis();
\r
1100 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1101 //printf("V0AND %d \n",isEventTriggered);
\r
1107 // 0-multiplicity bin for LHC background correction
\r
1109 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS ||
\r
1110 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx ||
\r
1111 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1112 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx ||
\r
1113 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt )
\r
1115 trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx);
\r
1117 trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx);
\r
1120 if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)
\r
1122 // check V0 systematics (case1)
\r
1123 // Initialization done in the macro
\r
1124 trigAna = trigSel->GetTriggerAnalysis();
\r
1128 //trigAna->SetV0HwPars(15, 61.5, 86.5);
\r
1129 //trigAna->SetV0AdcThr(15);
\r
1131 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1132 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1134 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1136 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1137 //printf("V0AND %d \n",isEventTriggered);
\r
1141 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1142 //printf("MB1 %d \n",isEventTriggered);
\r
1144 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1146 trigAna = trigSel->GetTriggerAnalysis();
\r
1150 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1151 //printf("V0AND %d \n",isEventTriggered);
\r
1157 // use MC information
\r
1158 AliHeader* header = 0;
\r
1159 AliGenEventHeader* genHeader = 0;
\r
1160 AliStack* stack = 0;
\r
1162 AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;
\r
1163 Int_t multMCTrueTracks = 0;
\r
1168 AliDebug(AliLog::kError, "mcEvent not available");
\r
1172 // get MC event header
\r
1173 header = mcEvent->Header();
\r
1175 AliDebug(AliLog::kError, "Header not available");
\r
1178 // MC particle stack
\r
1179 stack = mcEvent->Stack();
\r
1181 AliDebug(AliLog::kError, "Stack not available");
\r
1185 // get event type (ND=0x1, DD=0x2, SD=0x4)
\r
1186 evtType = AliPWG0Helper::GetEventProcessType(header);
\r
1187 //Printf("evtType %d \n", evtType);
\r
1188 AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));
\r
1191 genHeader = header->GenEventHeader();
\r
1193 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
\r
1196 genHeader->PrimaryVertex(vtxMC);
\r
1198 // Fill MC event histogram
\r
1199 Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};
\r
1200 fMCEventHist1->Fill(vMCEventHist1);
\r
1202 // multipliticy of all MC primary tracks
\r
1203 // in Zvtx, eta ranges
\r
1204 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
\r
1208 // get reconstructed vertex
\r
1209 const AliESDVertex* vtxESD = 0;
\r
1210 Bool_t isRecVertex = kFALSE;
\r
1211 if(evtCuts->IsRecVertexRequired())
\r
1213 Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();
\r
1214 Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();
\r
1215 vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints);
\r
1216 isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE);
\r
1219 if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {
\r
1220 vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");
\r
1221 isRecVertex = kTRUE;
\r
1224 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex;
\r
1225 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);
\r
1226 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());
\r
1228 // vertex contributors
\r
1229 Int_t multMBTracks = 0;
\r
1230 if(GetAnalysisMode() == AlidNdPtHelper::kTPC)
\r
1232 if(vtxESD->GetStatus() && isRecVertex)
\r
1233 multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);
\r
1235 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx ||
\r
1236 GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid )
\r
1238 const AliMultiplicity* mult = esdEvent->GetMultiplicity();
\r
1239 //if(mult && vtxESD->GetStatus() && isRecVertex)
\r
1241 multMBTracks = mult->GetNumberOfTracklets();
\r
1244 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS ||
\r
1245 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx ||
\r
1246 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1247 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx ||
\r
1248 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt )
\r
1250 if(vtxESD->GetStatus() && isRecVertex)
\r
1251 multMBTracks = vtxESD->GetNContributors();
\r
1255 AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));
\r
1259 Bool_t isEventSelected = kTRUE;
\r
1260 if(evtCuts->IsEventSelectedRequired())
\r
1262 // select events with at least
\r
1263 // one prompt track in acceptance
\r
1264 // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies
\r
1266 isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts);
\r
1267 //printf("isEventSelected %d \n", isEventSelected);
\r
1270 Bool_t isTrigAndVertex = isEventTriggered && isEventOK;
\r
1271 Double_t vEventCount[3] = { isEventTriggered, isTrigAndVertex, isEventSelected };
\r
1272 fEventCount->Fill(vEventCount);
\r
1275 // correct event and track histograms
\r
1277 TObjArray *allChargedTracks=0;
\r
1278 Int_t multRec=0, multRecTemp=0;
\r
1279 Int_t *labelsRec=0;
\r
1280 Bool_t isCosmic = kFALSE;
\r
1283 if(isEventOK && isEventTriggered && isEventSelected)
\r
1285 // get all charged tracks
\r
1286 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());
\r
1287 if(!allChargedTracks) return;
\r
1289 Int_t entries = allChargedTracks->GetEntries();
\r
1290 labelsRec = new Int_t[entries];
\r
1292 // calculate mult of reconstructed tracks
\r
1294 for(Int_t i=0; i<entries;++i)
\r
1296 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1297 if(!track) continue;
\r
1298 if(track->Charge()==0) continue;
\r
1301 // only postive charged
\r
1302 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1305 // only negative charged
\r
1306 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1309 // cosmics analysis
\r
1310 isCosmic = kFALSE;
\r
1311 if( GetParticleMode()==AlidNdPtHelper::kCosmic )
\r
1313 for(Int_t j=0; j<entries;++j)
\r
1315 AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);
\r
1316 if(!track1) continue;
\r
1317 if(track1->Charge()==0) continue;
\r
1319 if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) &&
\r
1320 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) )
\r
1322 isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);
\r
1326 Double_t vCosmicsHisto[3] = { track->Eta()+track1->Eta(), track->Phi()-track1->Phi(), track1->Pt() };
\r
1327 fCosmicsHisto->Fill(vCosmicsHisto);
\r
1331 if(!isCosmic) continue;
\r
1334 if(esdTrackCuts->AcceptTrack(track))
\r
1336 if(accCuts->AcceptTrack(track)) multRecTemp++;
\r
1341 for(Int_t i=0; i<entries;++i)
\r
1343 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1344 if(!track) continue;
\r
1345 if(track->Charge()==0) continue;
\r
1347 // only postive charged
\r
1348 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1351 // only negative charged
\r
1352 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1355 // track-level corrections
\r
1356 if(!esdTrackCuts->AcceptTrack(track)) continue;
\r
1357 //if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue;
\r
1359 // cosmics analysis
\r
1360 isCosmic = kFALSE;
\r
1361 if( GetParticleMode()==AlidNdPtHelper::kCosmic )
\r
1363 for(Int_t j=0; j<entries;++j)
\r
1365 AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);
\r
1366 if(!track1) continue;
\r
1367 if(track1->Charge()==0) continue;
\r
1369 if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) &&
\r
1370 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) )
\r
1372 isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);
\r
1375 if(!isCosmic) continue;
\r
1378 Bool_t isOK = kFALSE;
\r
1379 Double_t x[3]; track->GetXYZ(x);
\r
1380 Double_t b[3]; AliTracker::GetBxByBz(x,b);
\r
1383 // if TPC-ITS hybrid tracking (kTPCITSHybrid)
\r
1384 // replace track parameters with TPC-ony track parameters
\r
1386 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt)
\r
1388 // Relate TPC-only tracks to Tracks or SPD vertex
\r
1389 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);
\r
1390 if(!isOK) continue;
\r
1392 // replace esd track parameters with TPCinner
\r
1393 AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam()));
\r
1394 if (!tpcTrack) return;
\r
1395 track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());
\r
1397 if(tpcTrack) delete tpcTrack;
\r
1401 if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCTrackSPDvtxUpdate)
\r
1404 // update track parameters
\r
1406 AliExternalTrackParam cParam;
\r
1407 isOK = track->RelateToVertexTPC(vtxESD,esdEvent->GetMagneticField(),kVeryBig,&cParam);
\r
1408 if(!isOK) continue;
\r
1409 track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());
\r
1411 if(accCuts->AcceptTrack(track)) {
\r
1412 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp,multMCTrueTracks);
\r
1413 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1417 else if (GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo())
\r
1420 // Replace rec with MC
\r
1422 if(accCuts->AcceptTrack(track)) {
\r
1423 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxMC[2],multRecTemp, multMCTrueTracks);
\r
1424 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1430 // all the rest tracking scenarios
\r
1432 if(accCuts->AcceptTrack(track)) {
\r
1433 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp, multMCTrueTracks);
\r
1434 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1440 // event-level corrections
\r
1441 if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo())
\r
1443 FillHistograms(AlidNdPtHelper::kRecEvents,vtxMC[2],multMBTracks);
\r
1446 FillHistograms(AlidNdPtHelper::kRecEvents,vtxESD->GetZv(),multMBTracks);
\r
1449 // calculate meanPt from the event
\r
1450 Double_t meanPtMult[8] = {0};
\r
1451 for (Int_t i = 0; i<8; i++) {
\r
1452 if(!fCorrRecTrackMultHist1[i]) continue;
\r
1453 TH1D *hp = (TH1D *)fCorrRecTrackPt1[i]->Projection(0);
\r
1455 meanPtMult[i] = hp->GetMean();
\r
1456 Double_t vCorrRecTrackMeanPtMultHist1[2] = {meanPtMult[i],multRecTemp};
\r
1457 fCorrRecTrackMeanPtMultHist1[i]->Fill(vCorrRecTrackMeanPtMultHist1);
\r
1459 if( IsUseMCInfo() ) {
\r
1460 Double_t vCorrRecTrackMeanPtTrueMultHist1[2] = {meanPtMult[i],multMCTrueTracks};
\r
1461 fCorrRecTrackMeanPtTrueMultHist1[i]->Fill(vCorrRecTrackMeanPtTrueMultHist1);
\r
1464 // reset pt histo for the next event
\r
1465 if(fCorrRecTrackPt1[i]) fCorrRecTrackPt1[i]->Reset();
\r
1469 // control event histograms
\r
1470 Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};
\r
1471 fRecEventHist1->Fill(vRecEventHist1);
\r
1473 // correlation track multiplicity vs MB track multiplicity
\r
1474 Double_t vRecEventMultHist1[3] = {multRec, multMBTracks};
\r
1475 fRecEventMultHist1->Fill(vRecEventMultHist1);
\r
1478 // empty events corrections
\r
1479 // no reconstructed zv
\r
1480 if( isEventTriggered && multMBTracks==0 && isEventSelected )
\r
1482 if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo())
\r
1484 FillHistograms(AlidNdPtHelper::kTriggeredEvents,vtxMC[2],multMBTracks);
\r
1487 Double_t zv = fZvNorm->GetRandom();
\r
1488 if(zv>evtCuts->GetMinZv() && zv<evtCuts->GetMaxZv())
\r
1489 FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks);
\r
1493 if(IsUseMCInfo())
\r
1495 if(!mcEvent) return;
\r
1497 Bool_t isMCEventSelected = kTRUE;
\r
1498 if(evtCuts->IsEventSelectedRequired())
\r
1500 // select events with at least
\r
1501 // one MC primary track in acceptance
\r
1502 // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies
\r
1503 isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent);
\r
1504 //printf("isMCEventSelected %d \n", isMCEventSelected);
\r
1507 // select MC events
\r
1508 if(evtCuts->AcceptMCEvent(mcEvent) && isMCEventSelected)
\r
1511 // event histograms
\r
1513 Double_t vMCEventMatrix[2] = {vtxMC[2],multMBTracks};
\r
1514 fMCAllEventMultHist1->Fill(vMCEventMatrix);
\r
1516 if(evtType == AliPWG0Helper::kND) {
\r
1517 fMCAllNDEventMultHist1->Fill(vMCEventMatrix);
\r
1519 if(evtType != AliPWG0Helper::kSD) {
\r
1520 fMCAllNSDEventMultHist1->Fill(vMCEventMatrix);
\r
1522 if(isEventTriggered) {
\r
1523 fMCTriggerMultHist1->Fill(vMCEventMatrix);
\r
1525 if(isEventTriggered && isEventOK) {
\r
1526 fMCEventMultHist1->Fill(vMCEventMatrix);
\r
1530 // MC histograms for efficiency studies
\r
1532 Double_t sumPtMC = 0;
\r
1533 Int_t nPart = stack->GetNtrack();
\r
1534 for (Int_t iMc = 0; iMc < nPart; ++iMc)
\r
1536 // print MC stack info
\r
1537 //AlidNdPtHelper::PrintMCInfo(stack,iMc);
\r
1539 TParticle* particle = stack->Particle(iMc);
\r
1543 // only charged particles
\r
1545 if(!particle->GetPDG()) continue;
\r
1546 Double_t charge = particle->GetPDG()->Charge()/3.;
\r
1547 if (TMath::Abs(charge) < 0.001)
\r
1550 // only postive charged
\r
1551 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
\r
1554 // only negative charged
\r
1555 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
\r
1558 // physical primary
\r
1559 Bool_t prim = stack->IsPhysicalPrimary(iMc);
\r
1560 if(!prim) continue;
\r
1562 // all primaries in acceptance
\r
1563 if(!accCuts->AcceptTrack(particle)) continue;
\r
1565 Double_t gpt = particle->Pt();
\r
1566 Double_t geta = particle->Eta();
\r
1568 // sum up pt in the event
\r
1571 Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRecTemp};
\r
1572 Double_t valMCAllTrackTrueMultHist1[3] = {gpt,geta,multMCTrueTracks};
\r
1573 Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRecTemp,multMCTrueTracks};
\r
1575 fMCAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1576 fMCAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1577 fMCAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1579 if(evtType == AliPWG0Helper::kND) {
\r
1580 fMCNDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1581 fMCNDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1582 fMCNDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1584 if(evtType != AliPWG0Helper::kSD) {
\r
1585 fMCNSDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1586 fMCNSDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1587 fMCNSDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1589 if(isEventTriggered) {
\r
1590 fMCTriggerPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1591 fMCTriggerPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1592 fMCTriggerPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1594 if(isEventTriggered && isEventOK) {
\r
1595 fMCEventPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1596 fMCEventPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1597 fMCEventPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1602 // calculate <pt> in the event
\r
1604 Double_t meanPtMCMult = 0;
\r
1605 Double_t meanPtMCTrueMult = 0;
\r
1606 if(multRecTemp) {
\r
1607 meanPtMCMult = sumPtMC/multRecTemp;
\r
1609 if(multMCTrueTracks) {
\r
1610 meanPtMCTrueMult = sumPtMC/multMCTrueTracks;
\r
1613 Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRecTemp};
\r
1614 Double_t valMCMeanPtTrueMult[2] = {meanPtMCTrueMult,multMCTrueTracks};
\r
1616 fMCAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1617 fMCAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1619 if(evtType == AliPWG0Helper::kND) {
\r
1620 fMCNDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1621 fMCNDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1623 if(evtType != AliPWG0Helper::kSD) {
\r
1624 fMCNSDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1625 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1627 if(isEventTriggered) {
\r
1628 fMCTriggerPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1629 fMCTriggerPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1631 if(isEventTriggered && isEventOK) {
\r
1632 fMCEventPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1633 fMCEventPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1638 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;
\r
1639 if(labelsRec) delete [] labelsRec; labelsRec = 0;
\r
1641 if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;
\r
1644 //_____________________________________________________________________________
\r
1645 void AlidNdPtCorrection::FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBTracks) const
\r
1648 // Fill corrected histograms
\r
1651 Double_t vEventMatrix[2] = {zv,multMBTracks};
\r
1653 // Correct for efficiency
\r
1655 if(eventObj == AlidNdPtHelper::kRecEvents && multMBTracks>0)
\r
1657 Double_t corrToMBF = GetCorrFactZvMult(fCorrEventMatrix,zv,multMBTracks);
\r
1658 Double_t corrToInelF = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);
\r
1659 Double_t corrToNDF = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);
\r
1660 Double_t corrToNSDF = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);
\r
1661 //printf("corrToMBF %f, corrToInelF %f, corrToNDF %f corrToNSDF %f \n",corrToMBF,corrToInelF,corrToNDF,corrToNSDF);
\r
1663 fCorrRecEventHist1[0]->Fill(vEventMatrix);
\r
1664 fCorrRecEventHist1[1]->Fill(vEventMatrix,corrToMBF);
\r
1665 fCorrRecEventHist1[2]->Fill(vEventMatrix,corrToMBF*corrToInelF);
\r
1666 fCorrRecEventHist1[3]->Fill(vEventMatrix,corrToMBF*corrToNDF);
\r
1667 fCorrRecEventHist1[4]->Fill(vEventMatrix,corrToMBF*corrToNSDF);
\r
1670 if(eventObj==AlidNdPtHelper::kTriggeredEvents && multMBTracks==0) // empty triggered events
\r
1672 Double_t factLHCBack = 1.;
\r
1673 if(!IsUseMCInfo()) factLHCBack = fLHCBin0Background->GetBinContent(1);
\r
1676 Int_t bin = fZvEmptyEventsNorm->FindBin(zv);
\r
1677 Double_t factZ = fZvEmptyEventsNorm->GetBinContent(bin);
\r
1679 Double_t corrToInelF0 = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);
\r
1680 Double_t corrToNDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);
\r
1681 Double_t corrToNSDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);
\r
1682 //printf("factLHCBack %f, factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factLHCBack,factZ,corrToInelF0,corrToNDF0,corrToNSDF0);
\r
1684 fCorrRecEventHist2[0]->Fill(vEventMatrix);
\r
1685 fCorrRecEventHist2[1]->Fill(vEventMatrix,factLHCBack*factZ);
\r
1686 fCorrRecEventHist2[2]->Fill(vEventMatrix,factLHCBack*factZ*corrToInelF0);
\r
1687 fCorrRecEventHist2[3]->Fill(vEventMatrix,factLHCBack*factZ*corrToNDF0);
\r
1688 fCorrRecEventHist2[4]->Fill(vEventMatrix,factLHCBack*factZ*corrToNSDF0);
\r
1692 //_____________________________________________________________________________
\r
1693 void AlidNdPtCorrection::FillHistograms(AliESDtrack * const esdTrack, AliStack * const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t mult, Int_t trueMult) const
\r
1696 // Fill ESD track and MC histograms
\r
1698 if(!esdTrack) return;
\r
1700 //Float_t q = esdTrack->Charge();
\r
1701 Float_t pt = esdTrack->Pt();
\r
1702 Float_t eta = esdTrack->Eta();
\r
1703 Float_t phi = esdTrack->Phi();
\r
1705 if(stack && GetAnalysisMode() == AlidNdPtHelper::kMCRec)
\r
1707 Int_t label = TMath::Abs(esdTrack->GetLabel());
\r
1709 TParticle* particle = stack->Particle(label);
\r
1710 if(!particle) return;
\r
1712 if(!particle->GetPDG()) return;
\r
1713 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1714 if(TMath::Abs(gq)<0.001) return;
\r
1715 Float_t gpt = particle->Pt();
\r
1716 Float_t geta = particle->Eta();
\r
1717 Float_t gphi = particle->Phi();
\r
1719 // replace reconstructed values with MC
\r
1726 // Fill histograms
\r
1728 Double_t values[3] = {pt,eta,phi};
\r
1729 fRecTrackHist1[trackObj]->Fill(values);
\r
1732 // Correct for contamination and efficiency
\r
1734 if(trackObj == AlidNdPtHelper::kRecTracks || GetAnalysisMode() == AlidNdPtHelper::kMCRec)
\r
1736 // track level corrections
\r
1737 Double_t trackEffF = 1.0;
\r
1738 if(pt < 2.6) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta);
\r
1739 else trackEffF = GetCorrFactZvPtEta(fCorrHighPtTrackMatrix,zv,pt,eta);
\r
1741 Double_t trackContF = GetContFactZvPtEta(fContTrackMatrix,zv,pt,eta);
\r
1742 Double_t multTrackContF = GetContFactZvPtEta(fContMultTrackMatrix,zv,pt,eta);
\r
1743 //printf("zv %f, pt %f, eta %f \n",zv,pt,eta);
\r
1744 //printf("trackEffF %f, trackContF %f, multTrackContF %f \n", trackEffF, trackContF, multTrackContF);
\r
1746 // track-event level corrections
\r
1747 Double_t vertexEffF = GetCorrFactZvPtEta(fCorrTrackEventMatrix,zv,pt,eta);
\r
1748 Double_t trigMBToInel = GetCorrFactZvPtEta(fCorrTriggerMBtoInelTrackEventMatrix,zv,pt,eta);
\r
1749 Double_t trigMBToND = GetCorrFactZvPtEta(fCorrTriggerMBtoNDTrackEventMatrix,zv,pt,eta);
\r
1750 Double_t trigMBToNSD = GetCorrFactZvPtEta(fCorrTriggerMBtoNSDTrackEventMatrix,zv,pt,eta);
\r
1751 //printf("vertexEffF %f, trigMBToInel %f, trigMBToNSD %f \n", vertexEffF, trigMBToInel, trigMBToNSD);
\r
1753 Double_t corrF[8] = { 1.0,
\r
1755 trackContF*trackEffF,
\r
1756 trackContF*trackEffF*multTrackContF,
\r
1757 trackContF*trackEffF*multTrackContF*vertexEffF,
\r
1758 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToInel,
\r
1759 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToND,
\r
1760 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToNSD
\r
1763 // Fill histograms
\r
1764 Double_t valCorrRecTrackMultHist1[3] = {pt,eta,mult};
\r
1765 Double_t valCorrRecTrackPt1[1] = {pt};
\r
1766 for(Int_t i=0; i<8; i++) {
\r
1767 fCorrRecTrackMultHist1[i]->Fill(valCorrRecTrackMultHist1,corrF[i]);
\r
1768 fCorrRecTrackPt1[i]->Fill(valCorrRecTrackPt1,corrF[i]);
\r
1770 if( IsUseMCInfo() ) {
\r
1771 Double_t valCorrRecTrackTrueMultHist1[3] = {pt,eta,trueMult};
\r
1772 Double_t valCorrRecTrackTrueMultHist2[3] = {pt,mult,trueMult};
\r
1774 fCorrRecTrackTrueMultHist1[i]->Fill(valCorrRecTrackTrueMultHist1,corrF[i]);
\r
1775 fCorrRecTrackTrueMultHist2[i]->Fill(valCorrRecTrackTrueMultHist2,corrF[i]);
\r
1781 void AlidNdPtCorrection::FillHistograms(AliStack * const stack, Int_t /*label*/, AlidNdPtHelper::TrackObject /*trackObj*/, Int_t /*mult*/) const
\r
1783 // Fill MC histograms
\r
1784 if(!stack) return;
\r
1787 TParticle* particle = stack->Particle(label);
\r
1788 if(!particle) return;
\r
1790 Int_t mother_pdg = -1;
\r
1791 TParticle* mother = 0;
\r
1793 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
\r
1794 Int_t motherLabel = particle->GetMother(0);
\r
1795 if(motherLabel>0) mother = stack->Particle(motherLabel);
\r
1796 if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
\r
1797 Int_t mech = particle->GetUniqueID(); // production mechanism
\r
1799 if(!particle->GetPDG()) return;
\r
1800 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1801 Float_t gpt = particle->Pt();
\r
1802 Float_t qgpt = particle->Pt() * gq;
\r
1803 Float_t geta = particle->Eta();
\r
1804 Float_t gphi = particle->Phi();
\r
1805 Float_t gpz = particle->Pz();
\r
1807 Bool_t prim = stack->IsPhysicalPrimary(label);
\r
1808 Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();
\r
1811 if (TMath::Abs(particle->GetPdgCode()) == kElectron) { pid = 0; }
\r
1812 else if (TMath::Abs(particle->GetPdgCode()) == kMuonMinus) { pid = 1; }
\r
1813 else if (TMath::Abs(particle->GetPdgCode()) == kPiPlus) { pid = 2; }
\r
1814 else if (TMath::Abs(particle->GetPdgCode()) == kKPlus) { pid = 3; }
\r
1815 else if (TMath::Abs(particle->GetPdgCode()) == kProton) { pid = 4; }
\r
1819 //if(!prim) printf("prim_mother %d, mother %d, particle %d, production mech %d\n",prim_mother->GetPdgCode(),mother->GetPdgCode(), particle->GetPdgCode(),mech);
\r
1823 //_____________________________________________________________________________
\r
1824 Double_t AlidNdPtCorrection::GetCorrFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {
\r
1825 // return correction factor F(zv,pt,eta)
\r
1827 if(!hist) return 1.;
\r
1830 TAxis *ax = hist->GetAxis(0);
\r
1831 TAxis *ay = hist->GetAxis(1);
\r
1832 TAxis *az = hist->GetAxis(2);
\r
1834 Int_t binx = ax->FindBin(zv);
\r
1835 Int_t biny = ay->FindBin(pt);
\r
1836 Int_t binz = az->FindBin(eta);
\r
1837 Int_t dim[3] = {binx,biny,binz};
\r
1839 Double_t fact = hist->GetBinContent(dim);
\r
1844 //_____________________________________________________________________________
\r
1845 Double_t AlidNdPtCorrection::GetContFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {
\r
1846 // return contamination correction factor F(zv,pt,eta)
\r
1848 if(!hist) return 1.0;
\r
1851 TAxis *ax = hist->GetAxis(0);
\r
1852 TAxis *ay = hist->GetAxis(1);
\r
1853 TAxis *az = hist->GetAxis(2);
\r
1855 Int_t binx = ax->FindBin(zv);
\r
1856 Int_t biny = ay->FindBin(pt);
\r
1857 Int_t binz = az->FindBin(eta);
\r
1858 Int_t dim[3] = {binx,biny,binz};
\r
1861 // additional correction for secondary
\r
1862 // particles with strangeness (data driven)
\r
1864 Double_t corrFact = 1.;
\r
1865 if(!IsUseMCInfo()) corrFact = AlidNdPtHelper::GetStrangenessCorrFactor(pt);
\r
1866 //printf("pt %f, corrFact %f \n", pt, corrFact);
\r
1868 Double_t fact = 1.0 - corrFact*hist->GetBinContent(dim);
\r
1869 //Double_t fact = hist->GetBinContent(dim);
\r
1874 //_____________________________________________________________________________
\r
1875 Double_t AlidNdPtCorrection::GetCorrFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {
\r
1876 // return correction factor F(zv,mult)
\r
1878 if(!hist) return 1.;
\r
1880 TAxis *ax = hist->GetAxis(0);
\r
1881 TAxis *ay = hist->GetAxis(1);
\r
1882 Int_t binx = ax->FindBin(zv);
\r
1883 Int_t biny = ay->FindBin(mult);
\r
1884 Int_t dim[2] = {binx,biny};
\r
1886 Double_t fact = hist->GetBinContent(dim);
\r
1892 //_____________________________________________________________________________
\r
1893 Double_t AlidNdPtCorrection::GetContFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {
\r
1894 // return contamination correction factor F(zv,mult)
\r
1896 if(!hist) return 1.;
\r
1898 TAxis *ax = hist->GetAxis(0);
\r
1899 TAxis *ay = hist->GetAxis(1);
\r
1900 Int_t binx = ax->FindBin(zv);
\r
1901 Int_t biny = ay->FindBin(mult);
\r
1902 Int_t dim[2] = {binx,biny};
\r
1903 Double_t fact = 1.0-hist->GetBinContent(dim);
\r
1908 //_____________________________________________________________________________
\r
1909 Long64_t AlidNdPtCorrection::Merge(TCollection* const list)
\r
1911 // Merge list of objects (needed by PROOF)
\r
1916 if (list->IsEmpty())
\r
1919 TIterator* iter = list->MakeIterator();
\r
1922 // collection of generated histograms
\r
1924 // physics selection
\r
1925 TList *collPhysSelection = new TList;
\r
1928 while((obj = iter->Next()) != 0) {
\r
1929 AlidNdPtCorrection* entry = dynamic_cast<AlidNdPtCorrection*>(obj);
\r
1930 if (entry == 0) continue;
\r
1932 collPhysSelection->Add(entry->GetPhysicsTriggerSelection());
\r
1934 fEventCount->Add(entry->fEventCount);
\r
1936 fMCEventHist1->Add(entry->fMCEventHist1);
\r
1937 fRecEventHist1->Add(entry->fRecEventHist1);
\r
1938 fRecEventMultHist1->Add(entry->fRecEventMultHist1);
\r
1940 fMCAllEventMultHist1->Add(entry->fMCAllEventMultHist1);
\r
1941 fMCAllNDEventMultHist1->Add(entry->fMCAllNDEventMultHist1);
\r
1942 fMCAllNSDEventMultHist1->Add(entry->fMCAllNSDEventMultHist1);
\r
1943 fMCTriggerMultHist1->Add(entry->fMCTriggerMultHist1);
\r
1944 fMCEventMultHist1->Add(entry->fMCEventMultHist1);
\r
1946 fMCAllPrimTrackMultHist1->Add(entry->fMCAllPrimTrackMultHist1);
\r
1947 fMCNDEventAllPrimTrackMultHist1->Add(entry->fMCNDEventAllPrimTrackMultHist1);
\r
1948 fMCNSDEventAllPrimTrackMultHist1->Add(entry->fMCNSDEventAllPrimTrackMultHist1);
\r
1949 fMCTriggerPrimTrackMultHist1->Add(entry->fMCTriggerPrimTrackMultHist1);
\r
1950 fMCEventPrimTrackMultHist1->Add(entry->fMCEventPrimTrackMultHist1);
\r
1952 fMCAllPrimTrackTrueMultHist1->Add(entry->fMCAllPrimTrackTrueMultHist1);
\r
1953 fMCNDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNDEventAllPrimTrackTrueMultHist1);
\r
1954 fMCNSDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist1);
\r
1955 fMCTriggerPrimTrackTrueMultHist1->Add(entry->fMCTriggerPrimTrackTrueMultHist1);
\r
1956 fMCEventPrimTrackTrueMultHist1->Add(entry->fMCEventPrimTrackTrueMultHist1);
\r
1958 fMCAllPrimTrackTrueMultHist2->Add(entry->fMCAllPrimTrackTrueMultHist2);
\r
1959 fMCNDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNDEventAllPrimTrackTrueMultHist2);
\r
1960 fMCNSDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist2);
\r
1961 fMCTriggerPrimTrackTrueMultHist2->Add(entry->fMCTriggerPrimTrackTrueMultHist2);
\r
1962 fMCEventPrimTrackTrueMultHist2->Add(entry->fMCEventPrimTrackTrueMultHist2);
\r
1964 fMCAllPrimTrackMeanPtMult1->Add(entry->fMCAllPrimTrackMeanPtMult1);
\r
1965 fMCNDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtMult1);
\r
1966 fMCNSDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtMult1);
\r
1967 fMCTriggerPrimTrackMeanPtMult1->Add(entry->fMCTriggerPrimTrackMeanPtMult1);
\r
1968 fMCEventPrimTrackMeanPtMult1->Add(entry->fMCEventPrimTrackMeanPtMult1);
\r
1970 fMCAllPrimTrackMeanPtTrueMult1->Add(entry->fMCAllPrimTrackMeanPtTrueMult1);
\r
1971 fMCNDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtTrueMult1);
\r
1972 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtTrueMult1);
\r
1973 fMCTriggerPrimTrackMeanPtTrueMult1->Add(entry->fMCTriggerPrimTrackMeanPtTrueMult1);
\r
1974 fMCEventPrimTrackMeanPtTrueMult1->Add(entry->fMCEventPrimTrackMeanPtTrueMult1);
\r
1976 fCosmicsHisto->Add(entry->fCosmicsHisto);
\r
1978 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
1979 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);
\r
1982 for(Int_t i=0; i<8; i++) {
\r
1983 fCorrRecTrackMultHist1[i]->Add(entry->fCorrRecTrackMultHist1[i]);
\r
1984 fCorrRecTrackTrueMultHist1[i]->Add(entry->fCorrRecTrackTrueMultHist1[i]);
\r
1985 fCorrRecTrackTrueMultHist2[i]->Add(entry->fCorrRecTrackTrueMultHist2[i]);
\r
1987 fCorrRecTrackMeanPtMultHist1[i]->Add(entry->fCorrRecTrackMeanPtMultHist1[i]);
\r
1988 fCorrRecTrackMeanPtTrueMultHist1[i]->Add(entry->fCorrRecTrackMeanPtTrueMultHist1[i]);
\r
1990 fCorrRecTrackPt1[i]->Add(entry->fCorrRecTrackPt1[i]);
\r
1993 for(Int_t i=0; i<5; i++) {
\r
1994 fCorrRecEventHist1[i]->Add(entry->fCorrRecEventHist1[i]);
\r
1995 fCorrRecEventHist2[i]->Add(entry->fCorrRecEventHist2[i]);
\r
2002 AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();
\r
2003 trigSelection->Merge(collPhysSelection);
\r
2004 if(collPhysSelection) delete collPhysSelection;
\r
2009 //____________________________________________________________________________
\r
2010 Int_t AlidNdPtCorrection::GetTrueMult(THnSparse * const hist, Int_t mult) const
\r
2013 // get multiplicity of primary particles
\r
2015 if(!hist) return 0;
\r
2016 Int_t trueMult = 0;
\r
2019 TAxis *ax = hist->GetAxis(0);
\r
2020 TAxis *ay = hist->GetAxis(1);
\r
2021 ax->SetRange(1,ax->GetNbins());
\r
2022 ay->SetRange(1,ay->GetNbins());
\r
2025 ax->SetRangeUser((Float_t)mult,(Float_t)mult);
\r
2027 // get true multiplicity
\r
2028 TH1D *h1 = (TH1D *)hist->Projection(1);
\r
2029 trueMult = (Int_t)h1->GetMean();
\r
2034 //_____________________________________________________________________________
\r
2035 void AlidNdPtCorrection::Analyse()
\r
2037 // Analyse histograms
\r
2039 TH1::AddDirectory(kFALSE);
\r
2040 TH1 *h = 0, *hs=0, *hsc=0;
\r
2043 TObjArray *aFolderObj = new TObjArray;
\r
2048 AlidNdPtEventCuts *evtCuts = GetEventCuts();
\r
2049 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
\r
2050 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
\r
2052 if(!evtCuts || !accCuts || !esdTrackCuts) {
\r
2053 Error("AlidNdPtCutAnalysis::Analyse()", "cuts not available");
\r
2058 // set min and max values
\r
2060 //Double_t minPt = accCuts->GetMinPt();
\r
2061 //Double_t maxPt = accCuts->GetMaxPt();
\r
2062 Double_t minEta = accCuts->GetMinEta();
\r
2063 Double_t maxEta = accCuts->GetMaxEta()-0.00001;
\r
2065 printf("minEta %f, maxEta %f \n",minEta, maxEta);
\r
2068 // LHC backgraund in all and 0-bins
\r
2070 AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();
\r
2071 trigSel->SaveHistograms("physics_selection");
\r
2074 // cosmics background histo
\r
2076 h2D = fCosmicsHisto->Projection(0,1);
\r
2077 h2D->SetName("deta_vs_dphi_cosmics");
\r
2078 aFolderObj->Add(h2D);
\r
2083 h = fCorrRecEventHist1[0]->Projection(1);
\r
2084 h->SetName("mult_event_not_corrected");
\r
2085 aFolderObj->Add(h);
\r
2087 h = fCorrRecEventHist1[1]->Projection(1);
\r
2088 h->SetName("mult_event_vertex_corrected");
\r
2089 aFolderObj->Add(h);
\r
2091 h = fCorrRecEventHist1[2]->Projection(1);
\r
2092 h->SetName("mult_trigger_vertex_corrected");
\r
2093 aFolderObj->Add(h);
\r
2095 h = fCorrRecEventHist1[3]->Projection(1);
\r
2096 h->SetName("mult_ND_trigger_vertex_corrected");
\r
2097 aFolderObj->Add(h);
\r
2099 h = fCorrRecEventHist1[4]->Projection(1);
\r
2100 h->SetName("mult_NSD_trigger_vertex_corrected");
\r
2101 aFolderObj->Add(h);
\r
2104 h = fCorrRecEventHist2[0]->Projection(1);
\r
2105 h->SetName("mult_empty_event_not_corrected");
\r
2106 aFolderObj->Add(h);
\r
2108 h = fCorrRecEventHist2[1]->Projection(1);
\r
2109 h->SetName("mult_empty_event_vertex_corrected");
\r
2110 aFolderObj->Add(h);
\r
2112 h = fCorrRecEventHist2[2]->Projection(1);
\r
2113 h->SetName("mult_empty_trigger_vertex_corrected");
\r
2114 aFolderObj->Add(h);
\r
2116 h = fCorrRecEventHist2[3]->Projection(1);
\r
2117 h->SetName("mult_empty_ND_trigger_vertex_corrected");
\r
2118 aFolderObj->Add(h);
\r
2120 h = fCorrRecEventHist2[4]->Projection(1);
\r
2121 h->SetName("mult_empty_NSD_trigger_vertex_corrected");
\r
2122 aFolderObj->Add(h);
\r
2127 if(IsUseMCInfo()) {
\r
2130 h = fMCAllEventMultHist1->Projection(1);
\r
2131 h->SetName("mc_mult_event_acc_prim");
\r
2132 aFolderObj->Add(h);
\r
2134 h = fMCAllNDEventMultHist1->Projection(1);
\r
2135 h->SetName("mc_mult_ND_event_acc_prim");
\r
2136 aFolderObj->Add(h);
\r
2138 h = fMCAllNSDEventMultHist1->Projection(1);
\r
2139 h->SetName("mc_mult_NSD_event_acc_prim");
\r
2140 aFolderObj->Add(h);
\r
2142 h = fMCTriggerMultHist1->Projection(1);
\r
2143 h->SetName("mc_mult_trigger_acc_prim");
\r
2144 aFolderObj->Add(h);
\r
2146 h = fMCEventMultHist1->Projection(1);
\r
2147 h->SetName("mc_mult_trigger_event_acc_prim");
\r
2148 aFolderObj->Add(h);
\r
2155 // limit eta range
\r
2156 for(Int_t i=0;i<8;i++) {
\r
2157 //fCorrRecTrackMultHist1[i]->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2158 //fCorrRecTrackMultHist1[i]->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2160 //fMCAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2161 //fMCAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2163 //fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2164 //fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2166 //fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2167 //fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2169 //fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2170 //fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2172 //fMCEventPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2173 //fMCEventPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2175 } // end use MC info
\r
2178 h2D = fCorrRecTrackMultHist1[3]->Projection(1,0);
\r
2179 h2D->SetName("pt_eta_rec_track_mult_eff_cont_corrected");
\r
2180 aFolderObj->Add(h2D);
\r
2182 h2D = fCorrRecTrackMultHist1[4]->Projection(1,0);
\r
2183 h2D->SetName("pt_eta_rec_event_track_mult_eff_cont_corrected");
\r
2184 aFolderObj->Add(h2D);
\r
2186 h2D = fCorrRecTrackMultHist1[5]->Projection(1,0);
\r
2187 h2D->SetName("pt_eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
2188 aFolderObj->Add(h2D);
\r
2190 h2D = fCorrRecTrackMultHist1[6]->Projection(1,0);
\r
2191 h2D->SetName("pt_eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2192 aFolderObj->Add(h2D);
\r
2194 h2D = fCorrRecTrackMultHist1[7]->Projection(1,0);
\r
2195 h2D->SetName("pt_eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2196 aFolderObj->Add(h2D);
\r
2200 h2D = fCorrRecTrackMultHist1[3]->Projection(2,0);
\r
2201 h2D->SetName("pt_mult_rec_track_mult_eff_cont_corrected");
\r
2202 aFolderObj->Add(h2D);
\r
2204 h2D = fCorrRecTrackMultHist1[4]->Projection(2,0);
\r
2205 h2D->SetName("pt_mult_rec_event_track_mult_eff_cont_corrected");
\r
2206 aFolderObj->Add(h2D);
\r
2208 h2D = fCorrRecTrackMultHist1[5]->Projection(2,0);
\r
2209 h2D->SetName("pt_mult_rec_trig_event_track_mult_eff_cont_corrected");
\r
2210 aFolderObj->Add(h2D);
\r
2212 h2D = fCorrRecTrackMultHist1[6]->Projection(2,0);
\r
2213 h2D->SetName("pt_mult_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2214 aFolderObj->Add(h2D);
\r
2216 h2D = fCorrRecTrackMultHist1[7]->Projection(2,0);
\r
2217 h2D->SetName("pt_mult_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2218 aFolderObj->Add(h2D);
\r
2222 h = fCorrRecTrackMultHist1[0]->Projection(0);
\r
2223 h->SetName("pt_rec_track_not_corrected");
\r
2224 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2225 hs->SetName("pt_rec_track_not_corrected_s");
\r
2226 aFolderObj->Add(hs);
\r
2229 h = fCorrRecTrackMultHist1[1]->Projection(0);
\r
2230 h->SetName("pt_rec_track_cont_corrected");
\r
2231 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2232 hs->SetName("pt_rec_track_cont_corrected_s");
\r
2233 aFolderObj->Add(hs);
\r
2235 hsc = (TH1D*)hs->Clone("pt_rec_track_cont_corr_fact");
\r
2236 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));
\r
2237 aFolderObj->Add(hsc);
\r
2240 h = fCorrRecTrackMultHist1[2]->Projection(0);
\r
2241 h->SetName("pt_rec_track_eff_cont_corrected");
\r
2242 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2243 hs->SetName("pt_rec_track_eff_cont_corrected_s");
\r
2244 aFolderObj->Add(hs);
\r
2246 hsc = (TH1D*)hs->Clone("pt_rec_track_eff_corr_fact");
\r
2247 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_cont_corrected_s"));
\r
2248 aFolderObj->Add(hsc);
\r
2251 h = fCorrRecTrackMultHist1[3]->Projection(0);
\r
2252 h->SetName("pt_rec_track_mult_eff_cont_corrected");
\r
2253 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2254 hs->SetName("pt_rec_track_mult_eff_cont_corrected_s");
\r
2255 aFolderObj->Add(hs);
\r
2257 hsc = (TH1D*)hs->Clone("pt_rec_track_mult_corr_fact");
\r
2258 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_eff_cont_corrected_s"));
\r
2259 aFolderObj->Add(hsc);
\r
2261 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2262 hsc = (TH1D*)hs->Clone("pt_rec_track_mult_eff_cont_corr_fact");
\r
2263 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));
\r
2264 aFolderObj->Add(hsc);
\r
2266 hsc = (TH1D*)hs->Clone();
\r
2267 hsc->SetName("pt_rec_track_mult_eff_cont_corrected_s_norm");
\r
2268 hsc->Scale(1./(fCorrRecEventHist1[0]->Projection(1)->Integral()));
\r
2269 aFolderObj->Add(hsc);
\r
2272 h = fCorrRecTrackMultHist1[4]->Projection(0);
\r
2273 h->SetName("pt_rec_event_track_mult_eff_cont_corrected");
\r
2274 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2275 hs->SetName("pt_rec_event_track_mult_eff_cont_corrected_s");
\r
2276 aFolderObj->Add(hs);
\r
2278 hsc = (TH1D*)hs->Clone();
\r
2279 hsc->SetName("pt_rec_event_track_mult_eff_cont_corrected_s_norm");
\r
2280 hsc->Scale(1./(fCorrRecEventHist1[1]->Projection(1)->Integral()+fCorrRecEventHist2[1]->Projection(1)->Integral()));
\r
2281 aFolderObj->Add(hsc);
\r
2284 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2285 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected");
\r
2286 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2287 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s");
\r
2288 aFolderObj->Add(hs);
\r
2290 hsc = (TH1D*)hs->Clone();
\r
2291 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2292 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral() + fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2293 aFolderObj->Add(hsc);
\r
2296 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(0., maxEta);
\r
2298 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2299 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_posEta");
\r
2300 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2301 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_posEta");
\r
2302 aFolderObj->Add(hs);
\r
2304 hsc = (TH1D*)hs->Clone();
\r
2305 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");
\r
2306 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2307 aFolderObj->Add(hsc);
\r
2310 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(minEta, -0.00001);
\r
2312 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2313 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_negEta");
\r
2314 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2315 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_negEta");
\r
2316 aFolderObj->Add(hs);
\r
2318 hsc = (TH1D*)hs->Clone();
\r
2319 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");
\r
2320 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2321 aFolderObj->Add(hsc);
\r
2323 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[5]->GetAxis(1)->GetNbins());
\r
2326 h = fCorrRecTrackMultHist1[6]->Projection(0);
\r
2327 h->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2328 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2329 hs->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s");
\r
2330 aFolderObj->Add(hs);
\r
2332 hsc = (TH1D*)hs->Clone();
\r
2333 hsc->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2334 hsc->Scale(1./(fCorrRecEventHist1[3]->Projection(1)->Integral()+fCorrRecEventHist2[3]->Projection(1)->Integral()));
\r
2335 aFolderObj->Add(hsc);
\r
2338 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2339 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2340 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2341 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s");
\r
2342 aFolderObj->Add(hs);
\r
2344 hsc = (TH1D*)hs->Clone();
\r
2345 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2346 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral() + fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2347 aFolderObj->Add(hsc);
\r
2352 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(0., maxEta);
\r
2354 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2355 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_posEta");
\r
2356 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2357 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_posEta");
\r
2358 aFolderObj->Add(hs);
\r
2360 hsc = (TH1D*)hs->Clone();
\r
2361 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");
\r
2362 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2363 aFolderObj->Add(hsc);
\r
2368 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(minEta, -0.00001);
\r
2370 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2371 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_negEta");
\r
2372 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2373 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_negEta");
\r
2374 aFolderObj->Add(hs);
\r
2376 hsc = (TH1D*)hs->Clone();
\r
2377 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");
\r
2378 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2379 aFolderObj->Add(hsc);
\r
2381 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[7]->GetAxis(1)->GetNbins());
\r
2384 h = fCorrRecTrackMultHist1[0]->Projection(1);
\r
2385 h->SetName("eta_rec_track_not_corrected");
\r
2386 aFolderObj->Add(h);
\r
2388 h = fCorrRecTrackMultHist1[1]->Projection(1);
\r
2389 h->SetName("eta_rec_track_cont_corrected");
\r
2390 aFolderObj->Add(h);
\r
2392 h = fCorrRecTrackMultHist1[2]->Projection(1);
\r
2393 h->SetName("eta_rec_track_eff_cont_corrected");
\r
2394 aFolderObj->Add(h);
\r
2396 h = fCorrRecTrackMultHist1[3]->Projection(1);
\r
2397 h->SetName("eta_rec_track_mult_eff_cont_corrected");
\r
2398 aFolderObj->Add(h);
\r
2400 h = fCorrRecTrackMultHist1[4]->Projection(1);
\r
2401 h->SetName("eta_rec_event_track_mult_eff_cont_corrected");
\r
2402 aFolderObj->Add(h);
\r
2404 h = fCorrRecTrackMultHist1[5]->Projection(1);
\r
2405 h->SetName("eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
2406 aFolderObj->Add(h);
\r
2408 h = fCorrRecTrackMultHist1[6]->Projection(1);
\r
2409 h->SetName("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2410 aFolderObj->Add(h);
\r
2412 h = fCorrRecTrackMultHist1[7]->Projection(1);
\r
2413 h->SetName("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2414 aFolderObj->Add(h);
\r
2420 if(IsUseMCInfo()) {
\r
2423 h2D = fMCAllPrimTrackMultHist1->Projection(2,0);
\r
2424 h2D->SetName("mc_all_pt_mult_acc_prim");
\r
2425 aFolderObj->Add(h2D);
\r
2427 h2D = fMCAllPrimTrackMultHist1->Projection(1,0);
\r
2428 h2D->SetName("mc_all_eta_pt_acc_prim");
\r
2429 aFolderObj->Add(h2D);
\r
2431 h2D = fMCNDEventAllPrimTrackMultHist1->Projection(2,0);
\r
2432 h2D->SetName("mc_ND_all_pt_mult_acc_prim");
\r
2433 aFolderObj->Add(h2D);
\r
2435 h2D = fMCNDEventAllPrimTrackMultHist1->Projection(1,0);
\r
2436 h2D->SetName("mc_ND_all_eta_pt_acc_prim");
\r
2437 aFolderObj->Add(h2D);
\r
2439 h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(2,0);
\r
2440 h2D->SetName("mc_NSD_all_pt_mult_acc_prim");
\r
2441 aFolderObj->Add(h2D);
\r
2443 h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(1,0);
\r
2444 h2D->SetName("mc_NSD_all_eta_pt_acc_prim");
\r
2445 aFolderObj->Add(h2D);
\r
2449 h = fMCAllPrimTrackMultHist1->Projection(0);
\r
2450 h->SetName("mc_all_pt_acc_prim");
\r
2451 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2452 hs->SetName("mc_all_pt_acc_prim_s");
\r
2453 aFolderObj->Add(hs);
\r
2455 hsc = (TH1D*)hs->Clone();
\r
2456 hsc->SetName("mc_all_pt_acc_prim_s_norm");
\r
2457 hsc->Scale(1./fMCAllEventMultHist1->Projection(1)->Integral());
\r
2458 aFolderObj->Add(hsc);
\r
2460 h = fMCNDEventAllPrimTrackMultHist1->Projection(0);
\r
2461 h->SetName("mc_ND_all_pt_acc_prim");
\r
2462 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2463 hs->SetName("mc_ND_all_pt_acc_prim_s");
\r
2464 aFolderObj->Add(hs);
\r
2466 hsc = (TH1D*)hs->Clone();
\r
2467 hsc->SetName("mc_ND_all_pt_acc_prim_s_norm");
\r
2468 hsc->Scale(1./fMCAllNDEventMultHist1->Projection(1)->Integral());
\r
2469 aFolderObj->Add(hsc);
\r
2471 h = fMCNSDEventAllPrimTrackMultHist1->Projection(0);
\r
2472 h->SetName("mc_NSD_all_pt_acc_prim");
\r
2473 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2474 hs->SetName("mc_NSD_all_pt_acc_prim_s");
\r
2475 aFolderObj->Add(hs);
\r
2477 hsc = (TH1D*)hs->Clone();
\r
2478 hsc->SetName("mc_NSD_all_pt_acc_prim_s_norm");
\r
2479 hsc->Scale(1./fMCAllNSDEventMultHist1->Projection(1)->Integral());
\r
2480 aFolderObj->Add(hsc);
\r
2482 h = fMCTriggerPrimTrackMultHist1->Projection(0);
\r
2483 h->SetName("mc_trigger_all_pt_acc_prim");
\r
2484 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2485 hs->SetName("mc_trigger_all_pt_acc_prim_s");
\r
2486 aFolderObj->Add(hs);
\r
2488 hsc = (TH1D*)hs->Clone();
\r
2489 hsc->SetName("mc_trigger_all_pt_acc_prim_s_norm");
\r
2490 hsc->Scale(1./fMCTriggerMultHist1->Projection(1)->Integral());
\r
2491 aFolderObj->Add(hsc);
\r
2493 h = fMCEventPrimTrackMultHist1->Projection(0);
\r
2494 h->SetName("mc_all_pt_acc_trig_event_prim");
\r
2495 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2496 hs->SetName("mc_all_pt_acc_trig_event_prim_s");
\r
2497 aFolderObj->Add(hs);
\r
2499 hsc = (TH1D*)hs->Clone();
\r
2500 hsc->SetName("mc_all_pt_acc_trig_event_prim_s_norm");
\r
2501 hsc->Scale(1./fMCEventMultHist1->Projection(1)->Integral());
\r
2502 aFolderObj->Add(hsc);
\r
2506 h = fMCAllPrimTrackMultHist1->Projection(1);
\r
2507 h->SetName("mc_all_eta_acc_prim");
\r
2508 aFolderObj->Add(h);
\r
2510 h = fMCNDEventAllPrimTrackMultHist1->Projection(1);
\r
2511 h->SetName("mc_ND_all_eta_acc_prim");
\r
2512 aFolderObj->Add(h);
\r
2514 h = fMCNSDEventAllPrimTrackMultHist1->Projection(1);
\r
2515 h->SetName("mc_NSD_all_eta_acc_prim");
\r
2516 aFolderObj->Add(h);
\r
2518 h = fMCTriggerPrimTrackMultHist1->Projection(1);
\r
2519 h->SetName("mc_trigger_all_eta_acc_prim");
\r
2520 aFolderObj->Add(h);
\r
2522 h = fMCEventPrimTrackMultHist1->Projection(1);
\r
2523 h->SetName("mc_all_eta_acc_trig_event_prim");
\r
2524 aFolderObj->Add(h);
\r
2527 // calculate ratios (rec / mc)
\r
2530 hs = (TH1*)aFolderObj->FindObject("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2531 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_trig_event_track_mult_eff_cont_corrected");
\r
2533 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_prim_s_norm"));
\r
2534 aFolderObj->Add(hsc);
\r
2536 hs = (TH1*)aFolderObj->FindObject("eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
2537 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_trig_event_track_mult_eff_cont_corrected");
\r
2539 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_prim"));
\r
2540 aFolderObj->Add(hsc);
\r
2543 hs = (TH1*)aFolderObj->FindObject("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2544 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected");
\r
2546 hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_pt_acc_prim_s_norm"));
\r
2547 aFolderObj->Add(hsc);
\r
2549 hs = (TH1*)aFolderObj->FindObject("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2550 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected");
\r
2552 hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_eta_acc_prim"));
\r
2553 aFolderObj->Add(hsc);
\r
2556 hs = (TH1*)aFolderObj->FindObject("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2557 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2559 hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_pt_acc_prim_s_norm"));
\r
2560 aFolderObj->Add(hsc);
\r
2562 hs = (TH1*)aFolderObj->FindObject("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2563 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2565 hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_eta_acc_prim"));
\r
2566 aFolderObj->Add(hsc);
\r
2569 hs = (TH1*)aFolderObj->FindObject("pt_rec_event_track_mult_eff_cont_corrected_s_norm");
\r
2570 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_event_track_mult_eff_cont_corrected");
\r
2572 hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_pt_acc_prim_s_norm"));
\r
2573 aFolderObj->Add(hsc);
\r
2575 hs = (TH1*)aFolderObj->FindObject("eta_rec_event_track_mult_eff_cont_corrected");
\r
2576 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_event_track_mult_eff_cont_corrected");
\r
2578 hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_eta_acc_prim"));
\r
2579 aFolderObj->Add(hsc);
\r
2582 hs = (TH1*)aFolderObj->FindObject("pt_rec_track_mult_eff_cont_corrected_s_norm");
\r
2583 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_track_mult_eff_cont_corrected");
\r
2585 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_trig_event_prim_s_norm"));
\r
2586 aFolderObj->Add(hsc);
\r
2588 hs = (TH1*)aFolderObj->FindObject("eta_rec_track_mult_eff_cont_corrected");
\r
2589 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_track_mult_eff_cont_corrected");
\r
2591 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_trig_event_prim"));
\r
2592 aFolderObj->Add(hsc);
\r
2594 } // end MC infor available
\r
2596 // export objects to analysis folder
\r
2597 fCorrectionFolder = ExportToFolder(aFolderObj);
\r
2599 // delete only TObjArray
\r
2600 if(aFolderObj) delete aFolderObj;
\r
2603 //_____________________________________________________________________________
\r
2604 TFolder* AlidNdPtCorrection::ExportToFolder(TObjArray * const array)
\r
2606 // recreate folder avery time and export objects to new one
\r
2608 AlidNdPtCorrection * comp=this;
\r
2609 TFolder *folder = comp->GetCorrectionFolder();
\r
2611 TString name, title;
\r
2612 TFolder *newFolder = 0;
\r
2614 Int_t size = array->GetSize();
\r
2617 // get name and title from old folder
\r
2618 name = folder->GetName();
\r
2619 title = folder->GetTitle();
\r
2625 newFolder = CreateFolder(name.Data(),title.Data());
\r
2626 newFolder->SetOwner();
\r
2628 // add objects to folder
\r
2630 newFolder->Add(array->At(i));
\r
2638 //_____________________________________________________________________________
\r
2639 TFolder* AlidNdPtCorrection::CreateFolder(TString name,TString title) {
\r
2640 // create folder for analysed histograms
\r
2642 TFolder *folder = 0;
\r
2643 folder = new TFolder(name.Data(),title.Data());
\r