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 sprintf(name,"fMCAllPrimTrackMultHist1");
\r
352 sprintf(title,"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 sprintf(name,"fMCNDEventAllPrimTrackMultHist1");
\r
366 sprintf(title,"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 sprintf(name,"fMCNSDEventAllPrimTrackMultHist1");
\r
380 sprintf(title,"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 sprintf(name,"fMCTriggerPrimTrackMultHist1");
\r
394 sprintf(title,"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 sprintf(name,"fMCEventPrimTrackMultHist1");
\r
408 sprintf(title,"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 sprintf(name,"fMCAllPrimTrackTrueMultHist1");
\r
426 sprintf(title,"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 sprintf(name,"fMCNDEventAllPrimTrackTrueMultHist1");
\r
440 sprintf(title,"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 sprintf(name,"fMCNSDEventAllPrimTrackTrueMultHist1");
\r
454 sprintf(title,"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 sprintf(name,"fMCTriggerPrimTrackTrueMultHist1");
\r
468 sprintf(title,"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 sprintf(name,"fMCEventPrimTrackTrueMultHist1");
\r
482 sprintf(title,"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 sprintf(name,"fMCAllPrimTrackTrueMultHist2");
\r
500 sprintf(title,"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 sprintf(name,"fMCNDEventAllPrimTrackTrueMultHist2");
\r
513 sprintf(title,"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 sprintf(name,"fMCNSDEventAllPrimTrackTrueMultHist2");
\r
526 sprintf(title,"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 sprintf(name,"fMCTriggerPrimTrackTrueMultHist2");
\r
539 sprintf(title,"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 sprintf(name,"fMCEventPrimTrackTrueMultHist2");
\r
552 sprintf(title,"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 sprintf(name,"fMCAllPrimTrackMeanPtTrueMult1");
\r
569 sprintf(title,"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 sprintf(name,"fMCAllPrimTrackMeanPtMult1");
\r
580 sprintf(title,"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 sprintf(name,"fMCNDEventAllPrimTrackMeanPtTrueMult1");
\r
592 sprintf(title,"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 sprintf(name,"fMCNDEventAllPrimTrackMeanPtMult1");
\r
603 sprintf(title,"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 sprintf(name,"fMCNSDEventAllPrimTrackMeanPtTrueMult1");
\r
615 sprintf(title,"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 sprintf(name,"fMCNSDEventAllPrimTrackMeanPtMult1");
\r
626 sprintf(title,"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 sprintf(name,"fMCTriggerPrimTrackMeanPtTrueMult1");
\r
638 sprintf(title,"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 sprintf(name,"fMCTriggerPrimTrackMeanPtMult1");
\r
649 sprintf(title,"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 sprintf(name,"fMCEventPrimTrackMeanPtTrueMult1");
\r
661 sprintf(title,"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 sprintf(name,"fMCEventPrimTrackMeanPtMult1");
\r
672 sprintf(title,"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 sprintf(name,"fRecTrackHist1_%d",i);
\r
693 sprintf(title,"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 sprintf(name,"fCorrRecTrackMultHist1_%d",i);
\r
734 sprintf(title,"Pt:Eta:mult");
\r
735 fCorrRecTrackMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackMultHist1,minCorrRecTrackMultHist1,maxCorrRecTrackMultHist1);
\r
736 fCorrRecTrackMultHist1[i]->SetBinEdges(0,binsPt);
\r
737 fCorrRecTrackMultHist1[i]->SetBinEdges(1,binsEta);
\r
738 fCorrRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
739 fCorrRecTrackMultHist1[i]->GetAxis(1)->SetTitle("Eta");
\r
740 fCorrRecTrackMultHist1[i]->GetAxis(2)->SetTitle("multiplicity");
\r
741 fCorrRecTrackMultHist1[i]->Sumw2();
\r
743 // THnSparse track histograms
\r
744 sprintf(name,"fCorrRecTrackTrueMultHist1_%d",i);
\r
745 sprintf(title,"Pt:Eta:true_mult");
\r
746 fCorrRecTrackTrueMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist1,minCorrRecTrackTrueMultHist1,maxCorrRecTrackTrueMultHist1);
\r
747 fCorrRecTrackTrueMultHist1[i]->SetBinEdges(0,binsPt);
\r
748 fCorrRecTrackTrueMultHist1[i]->SetBinEdges(1,binsEta);
\r
749 fCorrRecTrackTrueMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
750 fCorrRecTrackTrueMultHist1[i]->GetAxis(1)->SetTitle("Eta");
\r
751 fCorrRecTrackTrueMultHist1[i]->GetAxis(2)->SetTitle("true multiplicity");
\r
752 fCorrRecTrackTrueMultHist1[i]->Sumw2();
\r
755 sprintf(name,"fCorrRecTrackTrueMultHist2_%d",i);
\r
756 sprintf(title,"Pt:mult:true_mult");
\r
757 fCorrRecTrackTrueMultHist2[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist2,minCorrRecTrackTrueMultHist2,maxCorrRecTrackTrueMultHist2);
\r
758 fCorrRecTrackTrueMultHist2[i]->SetBinEdges(0,binsPt);
\r
759 fCorrRecTrackTrueMultHist2[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
760 fCorrRecTrackTrueMultHist2[i]->GetAxis(1)->SetTitle("multiplicity");
\r
761 fCorrRecTrackTrueMultHist2[i]->GetAxis(2)->SetTitle("true multiplicity");
\r
762 fCorrRecTrackTrueMultHist2[i]->Sumw2();
\r
764 // THnSparse track histograms
\r
765 sprintf(name,"fCorrRecTrackMeanPtMultHist1_%d",i);
\r
766 sprintf(title,"<Pt>:mult");
\r
767 fCorrRecTrackMeanPtMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtMultHist1,minCorrRecTrackMeanPtMultHist1,maxCorrRecTrackMeanPtMultHist1);
\r
768 fCorrRecTrackMeanPtMultHist1[i]->GetAxis(0)->SetTitle("<Pt> (GeV/c)");
\r
769 fCorrRecTrackMeanPtMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");
\r
770 fCorrRecTrackMeanPtMultHist1[i]->Sumw2();
\r
772 // THnSparse track histograms
\r
773 sprintf(name,"fCorrRecTrackMeanPtTrueMultHist1_%d",i);
\r
774 sprintf(title,"<Pt>:true_mult");
\r
775 fCorrRecTrackMeanPtTrueMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtTrueMultHist1,minCorrRecTrackMeanPtTrueMultHist1,maxCorrRecTrackMeanPtTrueMultHist1);
\r
776 fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(0)->SetTitle("<Pt> (GeV/c)");
\r
777 fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(1)->SetTitle("true multiplicity");
\r
778 fCorrRecTrackMeanPtTrueMultHist1[i]->Sumw2();
\r
780 sprintf(name,"fCorrRecTrackPt1_%d",i);
\r
781 sprintf(title,"pt small bining");
\r
782 fCorrRecTrackPt1[i] = new THnSparseF(name,title,1,binsCorrRecTrackPt1,minCorrRecTrackPt1,maxCorrRecTrackPt1);
\r
783 fCorrRecTrackPt1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
784 fCorrRecTrackPt1[i]->Sumw2();
\r
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 sprintf(name,"fCorrRecEventHist1_%d",i);
\r
826 sprintf(title,"mcZv:mult");
\r
827 fCorrRecEventHist1[i] = new THnSparseF("fCorrRecEventHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
828 fCorrRecEventHist1[i]->SetBinEdges(0,binsZv);
\r
829 fCorrRecEventHist1[i]->GetAxis(0)->SetTitle("Zv (cm)");
\r
830 fCorrRecEventHist1[i]->GetAxis(1)->SetTitle("multiplicity");
\r
831 fCorrRecEventHist1[i]->Sumw2();
\r
833 // empty event corrected histograms
\r
834 sprintf(name,"fCorrRecEventHist2_%d",i);
\r
835 sprintf(title,"mcZv:mult");
\r
836 fCorrRecEventHist2[i] = new THnSparseF("fCorrRecEventHist2","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
837 fCorrRecEventHist2[i]->SetBinEdges(0,binsZv);
\r
838 fCorrRecEventHist2[i]->GetAxis(0)->SetTitle("Zv (cm)");
\r
839 fCorrRecEventHist2[i]->GetAxis(1)->SetTitle("multiplicity");
\r
840 fCorrRecEventHist2[i]->Sumw2();
\r
846 Int_t binsCosmicsHisto[3]= {151, 300, ptNbins};
\r
847 Double_t minCosmicsHisto[3]={-1.5, -2.*TMath::Pi(), 0.0};
\r
848 Double_t maxCosmicsHisto[3]={ 1.5, 2.*TMath::Pi(), 16.0};
\r
849 sprintf(name,"fCosmicsHisto");
\r
850 sprintf(title,"deta:dphi:pt");
\r
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[2]={2,2};
\r
861 Double_t minEventCount[2]={0,0};
\r
862 Double_t maxEventCount[2]={2,2};
\r
863 fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",2,binsEventCount,minEventCount,maxEventCount);
\r
864 fEventCount->GetAxis(0)->SetTitle("trig");
\r
865 fEventCount->GetAxis(1)->SetTitle("trig+vert");
\r
866 fEventCount->Sumw2();
\r
869 // init output folder
\r
870 fCorrectionFolder = CreateFolder("folderdNdPt","Correction dNdPt Folder");
\r
872 // init correction matrices
\r
873 TFile *file = (TFile *)TFile::Open(fCorrMatrixFileName.Data());
\r
875 AliDebug(AliLog::kError, "file with efficiency matrices not available");
\r
876 printf("file with efficiency matrices not available \n");
\r
878 TFolder *folder = (TFolder *)file->FindObjectAny("folderdNdPt");
\r
880 AliDebug(AliLog::kError, "file without folderdNdPt");
\r
881 printf("file without folderdNdPt \n");
\r
883 // rec. event mult vs true multiplicity
\r
884 fEventMultCorrelationMatrix = (THnSparseF*)folder->FindObject("event_mult_correlation_matrix");
\r
885 if(!fEventMultCorrelationMatrix) {
\r
886 Printf("No %s matrix \n", "event_mult_correlation_matrix");
\r
891 // event level corrections (zv,mult_MB)
\r
894 // trigger bias correction (MBtoND)
\r
895 fCorrTriggerMBtoNDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoND_corr_matrix");
\r
896 if(!fCorrTriggerMBtoNDEventMatrix) {
\r
897 Printf("No %s matrix \n", "zv_mult_trig_MBtoND_corr_matrix");
\r
901 // trigger bias correction (MBtoNSD)
\r
902 fCorrTriggerMBtoNSDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoNSD_corr_matrix");
\r
903 if(!fCorrTriggerMBtoNSDEventMatrix) {
\r
904 Printf("No %s matrix \n", "zv_mult_trig_MBtoNSD_corr_matrix");
\r
908 // trigger bias correction (MBtoInel)
\r
909 fCorrTriggerMBtoInelEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoInel_corr_matrix");
\r
910 if(!fCorrTriggerMBtoInelEventMatrix) {
\r
911 Printf("No %s matrix \n", "zv_mult_trig_MBtoInel_corr_matrix");
\r
915 // vertex reconstruction efficiency correction
\r
916 fCorrEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_event_corr_matrix");
\r
917 if(!fCorrEventMatrix) {
\r
918 Printf("No %s matrix \n", "zv_mult_event_corr_matrix");
\r
923 // histogram needed for empty events corrections
\r
925 fZvNorm = (TH1D*)folder->FindObject("zv_distribution_norm");
\r
927 Printf("No %s matrix \n", "fZvNorm");
\r
931 fZvEmptyEventsNorm = (TH1D*)folder->FindObject("zv_empty_events_norm");
\r
932 if(!fZvEmptyEventsNorm) {
\r
933 Printf("No %s matrix \n", "fZvEmptyEventsNorm");
\r
937 fLHCBin0Background = (TH1D*)folder->FindObject("hLHCBin0Background");
\r
938 if(!fLHCBin0Background) {
\r
939 Printf("No %s matrix \n", "fLHCBin0Background");
\r
944 // track-event level corrections (zv,pt,eta)
\r
947 // trigger bias correction (MBtoND)
\r
948 fCorrTriggerMBtoNDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoND_corr_matrix");
\r
949 if(!fCorrTriggerMBtoNDTrackEventMatrix) {
\r
950 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoND_corr_matrix");
\r
954 // trigger bias correction (MBtoNSD)
\r
955 fCorrTriggerMBtoNSDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoNSD_corr_matrix");
\r
956 if(!fCorrTriggerMBtoNSDTrackEventMatrix) {
\r
957 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoNSD_corr_matrix");
\r
961 // trigger bias correction (MBtoInel)
\r
962 fCorrTriggerMBtoInelTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoInel_corr_matrix");
\r
963 if(!fCorrTriggerMBtoInelTrackEventMatrix) {
\r
964 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoInel_corr_matrix");
\r
968 // vertex reconstruction efficiency correction (zv,pt,eta)
\r
969 fCorrTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_event_corr_matrix");
\r
970 if(!fCorrTrackEventMatrix) {
\r
971 Printf("No %s matrix \n", "zv_pt_eta_track_event_corr_matrix");
\r
975 // track reconstruction efficiency correction (zv,pt,eta)
\r
976 fCorrTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_corr_matrix");
\r
977 if(!fCorrTrackMatrix) {
\r
978 Printf("No %s matrix \n", "zv_pt_eta_track_corr_matrix");
\r
982 // high pt track reconstruction efficiency correction (zv,pt,eta)
\r
983 fCorrHighPtTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_highPt_track_corr_matrix");
\r
984 if(!fCorrHighPtTrackMatrix) {
\r
985 Printf("No %s matrix \n", "zv_pt_eta_highPt_track_corr_matrix");
\r
989 // secondary tracks contamination correction (zv,pt,eta)
\r
990 fContTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_cont_matrix");
\r
991 if(!fContTrackMatrix) {
\r
992 Printf("No %s matrix \n", "zv_pt_eta_track_cont_matrix");
\r
996 // multiply reconstructed tracks correction
\r
997 fContMultTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_mult_track_cont_matrix");
\r
998 if(!fContMultTrackMatrix) {
\r
999 Printf("No %s matrix \n", "zv_pt_eta_mult_track_cont_matrix");
\r
1007 //_____________________________________________________________________________
\r
1008 void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
\r
1011 // Process real and/or simulated events
\r
1014 AliDebug(AliLog::kError, "esdEvent not available");
\r
1018 // get selection cuts
\r
1019 AlidNdPtEventCuts *evtCuts = GetEventCuts();
\r
1020 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
\r
1021 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
\r
1023 if(!evtCuts || !accCuts || !esdTrackCuts) {
\r
1024 AliDebug(AliLog::kError, "cuts not available");
\r
1028 // trigger selection
\r
1029 Bool_t isEventTriggered = kTRUE;
\r
1030 AliPhysicsSelection *trigSel = NULL;
\r
1031 AliTriggerAnalysis *trigAna = NULL; // needed for andV0
\r
1033 if(evtCuts->IsTriggerRequired())
\r
1036 trigSel = GetPhysicsTriggerSelection();
\r
1038 AliDebug(AliLog::kError, "cannot get trigSel");
\r
1042 if(IsUseMCInfo())
\r
1044 trigSel->SetAnalyzeMC();
\r
1046 if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)
\r
1048 // check V0 systematics (case1)
\r
1049 // Initialization done in the macro
\r
1050 trigAna = trigSel->GetTriggerAnalysis();
\r
1054 //trigAna->SetV0HwPars(15, 61.5, 86.5);
\r
1055 //trigAna->SetV0AdcThr(15);
\r
1057 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1058 //printf("MB1 & kVZEROCase1 %d \n",isEventTriggered);
\r
1059 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1061 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1063 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1064 //printf("V0AND %d \n",isEventTriggered);
\r
1067 else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2)
\r
1069 // check V0 systematics (case2 only in MC)
\r
1070 // Initialization done in the macro
\r
1072 trigAna = trigSel->GetTriggerAnalysis();
\r
1076 //trigAna->SetV0HwPars(0, 0, 125);
\r
1077 //trigAna->SetV0AdcThr(0);
\r
1079 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1080 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1082 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1084 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1085 //printf("V0AND %d \n",isEventTriggered);
\r
1089 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1090 //printf("MB1 %d \n",isEventTriggered);
\r
1092 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1094 trigAna = trigSel->GetTriggerAnalysis();
\r
1098 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1099 //printf("V0AND %d \n",isEventTriggered);
\r
1105 // 0-multiplicity bin for LHC background correction
\r
1107 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS ||
\r
1108 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx ||
\r
1109 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1110 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx ||
\r
1111 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt )
\r
1113 trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx);
\r
1115 trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx);
\r
1118 if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)
\r
1120 // check V0 systematics (case1)
\r
1121 // Initialization done in the macro
\r
1122 trigAna = trigSel->GetTriggerAnalysis();
\r
1126 //trigAna->SetV0HwPars(15, 61.5, 86.5);
\r
1127 //trigAna->SetV0AdcThr(15);
\r
1129 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1130 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1132 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1134 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1135 //printf("V0AND %d \n",isEventTriggered);
\r
1139 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1140 //printf("MB1 %d \n",isEventTriggered);
\r
1142 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1144 trigAna = trigSel->GetTriggerAnalysis();
\r
1148 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1149 //printf("V0AND %d \n",isEventTriggered);
\r
1155 // use MC information
\r
1156 AliHeader* header = 0;
\r
1157 AliGenEventHeader* genHeader = 0;
\r
1158 AliStack* stack = 0;
\r
1160 AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;
\r
1161 Int_t multMCTrueTracks = 0;
\r
1166 AliDebug(AliLog::kError, "mcEvent not available");
\r
1170 // get MC event header
\r
1171 header = mcEvent->Header();
\r
1173 AliDebug(AliLog::kError, "Header not available");
\r
1176 // MC particle stack
\r
1177 stack = mcEvent->Stack();
\r
1179 AliDebug(AliLog::kError, "Stack not available");
\r
1183 // get event type (ND=0x1, DD=0x2, SD=0x4)
\r
1184 evtType = AliPWG0Helper::GetEventProcessType(header);
\r
1185 //Printf("evtType %d \n", evtType);
\r
1186 AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));
\r
1189 genHeader = header->GenEventHeader();
\r
1191 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
\r
1194 genHeader->PrimaryVertex(vtxMC);
\r
1196 // Fill MC event histogram
\r
1197 Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};
\r
1198 fMCEventHist1->Fill(vMCEventHist1);
\r
1200 // multipliticy of all MC primary tracks
\r
1201 // in Zvtx, eta ranges
\r
1202 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
\r
1206 // get reconstructed vertex
\r
1207 const AliESDVertex* vtxESD = 0;
\r
1208 Bool_t isRecVertex = kFALSE;
\r
1209 if(evtCuts->IsRecVertexRequired())
\r
1211 Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();
\r
1212 Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();
\r
1213 vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints);
\r
1214 isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE);
\r
1217 if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {
\r
1218 vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");
\r
1219 isRecVertex = kTRUE;
\r
1222 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex;
\r
1223 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);
\r
1224 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());
\r
1226 // vertex contributors
\r
1227 Int_t multMBTracks = 0;
\r
1228 if(GetAnalysisMode() == AlidNdPtHelper::kTPC)
\r
1230 if(vtxESD->GetStatus() && isRecVertex)
\r
1231 multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);
\r
1233 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx ||
\r
1234 GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid )
\r
1236 const AliMultiplicity* mult = esdEvent->GetMultiplicity();
\r
1237 //if(mult && vtxESD->GetStatus() && isRecVertex)
\r
1239 multMBTracks = mult->GetNumberOfTracklets();
\r
1242 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS ||
\r
1243 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx ||
\r
1244 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1245 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx ||
\r
1246 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt )
\r
1248 if(vtxESD->GetStatus() && isRecVertex)
\r
1249 multMBTracks = vtxESD->GetNContributors();
\r
1253 AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));
\r
1257 Bool_t isTrigAndVertex = isEventTriggered && isEventOK;
\r
1258 Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex};
\r
1259 fEventCount->Fill(vEventCount);
\r
1262 // correct event and track histograms
\r
1264 TObjArray *allChargedTracks=0;
\r
1265 Int_t multRec=0, multRecTemp=0;
\r
1266 Int_t *labelsRec=0;
\r
1267 Bool_t isCosmic = kFALSE;
\r
1270 if(isEventOK && isEventTriggered)
\r
1272 // get all charged tracks
\r
1273 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());
\r
1274 if(!allChargedTracks) return;
\r
1276 Int_t entries = allChargedTracks->GetEntries();
\r
1277 labelsRec = new Int_t[entries];
\r
1279 // calculate mult of reconstructed tracks
\r
1281 for(Int_t i=0; i<entries;++i)
\r
1283 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1284 if(!track) continue;
\r
1285 if(track->Charge()==0) continue;
\r
1288 // only postive charged
\r
1289 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1292 // only negative charged
\r
1293 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1296 // cosmics analysis
\r
1297 isCosmic = kFALSE;
\r
1298 if( GetParticleMode()==AlidNdPtHelper::kCosmic )
\r
1300 for(Int_t j=0; j<entries;++j)
\r
1302 AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);
\r
1303 if(!track1) continue;
\r
1304 if(track1->Charge()==0) continue;
\r
1306 if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) &&
\r
1307 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) )
\r
1309 isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);
\r
1313 Double_t vCosmicsHisto[3] = { track->Eta()+track1->Eta(), track->Phi()-track1->Phi(), track1->Pt() };
\r
1314 fCosmicsHisto->Fill(vCosmicsHisto);
\r
1318 if(!isCosmic) continue;
\r
1321 if(esdTrackCuts->AcceptTrack(track))
\r
1323 if(accCuts->AcceptTrack(track)) multRecTemp++;
\r
1328 for(Int_t i=0; i<entries;++i)
\r
1330 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1331 if(!track) continue;
\r
1332 if(track->Charge()==0) continue;
\r
1334 // only postive charged
\r
1335 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1338 // only negative charged
\r
1339 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1342 // track-level corrections
\r
1343 if(!esdTrackCuts->AcceptTrack(track)) continue;
\r
1344 //if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue;
\r
1346 // cosmics analysis
\r
1347 isCosmic = kFALSE;
\r
1348 if( GetParticleMode()==AlidNdPtHelper::kCosmic )
\r
1350 for(Int_t j=0; j<entries;++j)
\r
1352 AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);
\r
1353 if(!track1) continue;
\r
1354 if(track1->Charge()==0) continue;
\r
1356 if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) &&
\r
1357 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) )
\r
1359 isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);
\r
1362 if(!isCosmic) continue;
\r
1365 Bool_t isOK = kFALSE;
\r
1366 Double_t x[3]; track->GetXYZ(x);
\r
1367 Double_t b[3]; AliTracker::GetBxByBz(x,b);
\r
1370 // if TPC-ITS hybrid tracking (kTPCITSHybrid)
\r
1371 // replace track parameters with TPC-ony track parameters
\r
1373 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt)
\r
1375 // Relate TPC-only tracks to Tracks or SPD vertex
\r
1376 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);
\r
1377 if(!isOK) continue;
\r
1379 // replace esd track parameters with TPCinner
\r
1380 AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam()));
\r
1381 if (!tpcTrack) return;
\r
1382 track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());
\r
1384 if(tpcTrack) delete tpcTrack;
\r
1388 if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCTrackSPDvtxUpdate)
\r
1391 // update track parameters
\r
1393 AliExternalTrackParam cParam;
\r
1394 isOK = track->RelateToVertexTPC(vtxESD,esdEvent->GetMagneticField(),kVeryBig,&cParam);
\r
1395 if(!isOK) continue;
\r
1396 track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());
\r
1398 if(accCuts->AcceptTrack(track)) {
\r
1399 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp,multMCTrueTracks);
\r
1400 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1404 else if (GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo())
\r
1407 // Replace rec with MC
\r
1409 if(accCuts->AcceptTrack(track)) {
\r
1410 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxMC[2],multRecTemp, multMCTrueTracks);
\r
1411 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1417 // all the rest tracking scenarios
\r
1419 if(accCuts->AcceptTrack(track)) {
\r
1420 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp, multMCTrueTracks);
\r
1421 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1427 // event-level corrections
\r
1428 if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo())
\r
1430 FillHistograms(AlidNdPtHelper::kRecEvents,vtxMC[2],multMBTracks);
\r
1433 FillHistograms(AlidNdPtHelper::kRecEvents,vtxESD->GetZv(),multMBTracks);
\r
1436 // calculate meanPt from the event
\r
1437 Double_t meanPtMult[8] = {0};
\r
1438 for (Int_t i = 0; i<8; i++) {
\r
1439 if(!fCorrRecTrackMultHist1[i]) continue;
\r
1440 TH1D *hp = (TH1D *)fCorrRecTrackPt1[i]->Projection(0);
\r
1442 meanPtMult[i] = hp->GetMean();
\r
1443 Double_t vCorrRecTrackMeanPtMultHist1[2] = {meanPtMult[i],multRecTemp};
\r
1444 fCorrRecTrackMeanPtMultHist1[i]->Fill(vCorrRecTrackMeanPtMultHist1);
\r
1446 if( IsUseMCInfo() ) {
\r
1447 Double_t vCorrRecTrackMeanPtTrueMultHist1[2] = {meanPtMult[i],multMCTrueTracks};
\r
1448 fCorrRecTrackMeanPtTrueMultHist1[i]->Fill(vCorrRecTrackMeanPtTrueMultHist1);
\r
1451 // reset pt histo for the next event
\r
1452 if(fCorrRecTrackPt1[i]) fCorrRecTrackPt1[i]->Reset();
\r
1456 // control event histograms
\r
1457 Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};
\r
1458 fRecEventHist1->Fill(vRecEventHist1);
\r
1460 // correlation track multiplicity vs MB track multiplicity
\r
1461 Double_t vRecEventMultHist1[3] = {multRec, multMBTracks};
\r
1462 fRecEventMultHist1->Fill(vRecEventMultHist1);
\r
1465 // empty events corrections
\r
1466 // no reconstructed zv
\r
1467 if( isEventTriggered && multMBTracks==0 )
\r
1469 if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo())
\r
1471 FillHistograms(AlidNdPtHelper::kTriggeredEvents,vtxMC[2],multMBTracks);
\r
1474 Double_t zv = fZvNorm->GetRandom();
\r
1475 if(zv>evtCuts->GetMinZv() && zv<evtCuts->GetMaxZv())
\r
1476 FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks);
\r
1480 if(IsUseMCInfo())
\r
1482 // select MC events
\r
1483 if(evtCuts->AcceptMCEvent(mcEvent))
\r
1486 // event histograms
\r
1488 Double_t vMCEventMatrix[2] = {vtxMC[2],multMBTracks};
\r
1489 fMCAllEventMultHist1->Fill(vMCEventMatrix);
\r
1491 if(evtType == AliPWG0Helper::kND) {
\r
1492 fMCAllNDEventMultHist1->Fill(vMCEventMatrix);
\r
1494 if(evtType != AliPWG0Helper::kSD) {
\r
1495 fMCAllNSDEventMultHist1->Fill(vMCEventMatrix);
\r
1497 if(isEventTriggered) {
\r
1498 fMCTriggerMultHist1->Fill(vMCEventMatrix);
\r
1500 if(isEventTriggered && isEventOK) {
\r
1501 fMCEventMultHist1->Fill(vMCEventMatrix);
\r
1505 // MC histograms for efficiency studies
\r
1507 Double_t sumPtMC = 0;
\r
1508 Int_t nPart = stack->GetNtrack();
\r
1509 for (Int_t iMc = 0; iMc < nPart; ++iMc)
\r
1511 // print MC stack info
\r
1512 //AlidNdPtHelper::PrintMCInfo(stack,iMc);
\r
1514 TParticle* particle = stack->Particle(iMc);
\r
1518 // only charged particles
\r
1520 if(!particle->GetPDG()) continue;
\r
1521 Double_t charge = particle->GetPDG()->Charge()/3.;
\r
1522 if (TMath::Abs(charge) < 0.001)
\r
1525 // only postive charged
\r
1526 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
\r
1529 // only negative charged
\r
1530 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
\r
1533 // physical primary
\r
1534 Bool_t prim = stack->IsPhysicalPrimary(iMc);
\r
1535 if(!prim) continue;
\r
1537 // all primaries in acceptance
\r
1538 if(!accCuts->AcceptTrack(particle)) continue;
\r
1540 Double_t gpt = particle->Pt();
\r
1541 Double_t geta = particle->Eta();
\r
1543 // sum up pt in the event
\r
1546 Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRecTemp};
\r
1547 Double_t valMCAllTrackTrueMultHist1[3] = {gpt,geta,multMCTrueTracks};
\r
1548 Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRecTemp,multMCTrueTracks};
\r
1550 fMCAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1551 fMCAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1552 fMCAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1554 if(evtType == AliPWG0Helper::kND) {
\r
1555 fMCNDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1556 fMCNDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1557 fMCNDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1559 if(evtType != AliPWG0Helper::kSD) {
\r
1560 fMCNSDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1561 fMCNSDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1562 fMCNSDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1564 if(isEventTriggered) {
\r
1565 fMCTriggerPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1566 fMCTriggerPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1567 fMCTriggerPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1569 if(isEventTriggered && isEventOK) {
\r
1570 fMCEventPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1571 fMCEventPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1572 fMCEventPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1577 // calculate <pt> in the event
\r
1579 Double_t meanPtMCMult = 0;
\r
1580 Double_t meanPtMCTrueMult = 0;
\r
1581 if(multRecTemp) {
\r
1582 meanPtMCMult = sumPtMC/multRecTemp;
\r
1584 if(multMCTrueTracks) {
\r
1585 meanPtMCTrueMult = sumPtMC/multMCTrueTracks;
\r
1588 Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRecTemp};
\r
1589 Double_t valMCMeanPtTrueMult[2] = {meanPtMCTrueMult,multMCTrueTracks};
\r
1591 fMCAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1592 fMCAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1594 if(evtType == AliPWG0Helper::kND) {
\r
1595 fMCNDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1596 fMCNDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1598 if(evtType != AliPWG0Helper::kSD) {
\r
1599 fMCNSDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1600 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1602 if(isEventTriggered) {
\r
1603 fMCTriggerPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1604 fMCTriggerPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1606 if(isEventTriggered && isEventOK) {
\r
1607 fMCEventPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1608 fMCEventPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1613 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;
\r
1614 if(labelsRec) delete [] labelsRec; labelsRec = 0;
\r
1616 if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;
\r
1619 //_____________________________________________________________________________
\r
1620 void AlidNdPtCorrection::FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBTracks) const
\r
1623 // Fill corrected histograms
\r
1626 Double_t vEventMatrix[2] = {zv,multMBTracks};
\r
1628 // Correct for efficiency
\r
1630 if(eventObj == AlidNdPtHelper::kRecEvents && multMBTracks>0)
\r
1632 Double_t corrToMBF = GetCorrFactZvMult(fCorrEventMatrix,zv,multMBTracks);
\r
1633 Double_t corrToInelF = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);
\r
1634 Double_t corrToNDF = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);
\r
1635 Double_t corrToNSDF = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);
\r
1636 //printf("corrToMBF %f, corrToInelF %f, corrToNDF %f corrToNSDF %f \n",corrToMBF,corrToInelF,corrToNDF,corrToNSDF);
\r
1638 fCorrRecEventHist1[0]->Fill(vEventMatrix);
\r
1639 fCorrRecEventHist1[1]->Fill(vEventMatrix,corrToMBF);
\r
1640 fCorrRecEventHist1[2]->Fill(vEventMatrix,corrToMBF*corrToInelF);
\r
1641 fCorrRecEventHist1[3]->Fill(vEventMatrix,corrToMBF*corrToNDF);
\r
1642 fCorrRecEventHist1[4]->Fill(vEventMatrix,corrToMBF*corrToNSDF);
\r
1645 if(eventObj==AlidNdPtHelper::kTriggeredEvents && multMBTracks==0) // empty triggered events
\r
1647 Double_t factLHCBack = 1.;
\r
1648 if(!IsUseMCInfo()) factLHCBack = fLHCBin0Background->GetBinContent(1);
\r
1651 Int_t bin = fZvEmptyEventsNorm->FindBin(zv);
\r
1652 Double_t factZ = fZvEmptyEventsNorm->GetBinContent(bin);
\r
1654 Double_t corrToInelF0 = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);
\r
1655 Double_t corrToNDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);
\r
1656 Double_t corrToNSDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);
\r
1657 //printf("factLHCBack %f, factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factLHCBack,factZ,corrToInelF0,corrToNDF0,corrToNSDF0);
\r
1659 fCorrRecEventHist2[0]->Fill(vEventMatrix);
\r
1660 fCorrRecEventHist2[1]->Fill(vEventMatrix,factLHCBack*factZ);
\r
1661 fCorrRecEventHist2[2]->Fill(vEventMatrix,factLHCBack*factZ*corrToInelF0);
\r
1662 fCorrRecEventHist2[3]->Fill(vEventMatrix,factLHCBack*factZ*corrToNDF0);
\r
1663 fCorrRecEventHist2[4]->Fill(vEventMatrix,factLHCBack*factZ*corrToNSDF0);
\r
1667 //_____________________________________________________________________________
\r
1668 void AlidNdPtCorrection::FillHistograms(AliESDtrack * const esdTrack, AliStack * const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t mult, Int_t trueMult) const
\r
1671 // Fill ESD track and MC histograms
\r
1673 if(!esdTrack) return;
\r
1675 //Float_t q = esdTrack->Charge();
\r
1676 Float_t pt = esdTrack->Pt();
\r
1677 Float_t eta = esdTrack->Eta();
\r
1678 Float_t phi = esdTrack->Phi();
\r
1680 if(stack && GetAnalysisMode() == AlidNdPtHelper::kMCRec)
\r
1682 Int_t label = TMath::Abs(esdTrack->GetLabel());
\r
1684 TParticle* particle = stack->Particle(label);
\r
1685 if(!particle) return;
\r
1687 if(!particle->GetPDG()) return;
\r
1688 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1689 if(TMath::Abs(gq)<0.001) return;
\r
1690 Float_t gpt = particle->Pt();
\r
1691 Float_t geta = particle->Eta();
\r
1692 Float_t gphi = particle->Phi();
\r
1694 // replace reconstructed values with MC
\r
1701 // Fill histograms
\r
1703 Double_t values[3] = {pt,eta,phi};
\r
1704 fRecTrackHist1[trackObj]->Fill(values);
\r
1707 // Correct for contamination and efficiency
\r
1709 if(trackObj == AlidNdPtHelper::kRecTracks || GetAnalysisMode() == AlidNdPtHelper::kMCRec)
\r
1711 // track level corrections
\r
1712 Double_t trackEffF = 1.0;
\r
1713 if(pt < 2.6) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta);
\r
1714 else trackEffF = GetCorrFactZvPtEta(fCorrHighPtTrackMatrix,zv,pt,eta);
\r
1716 Double_t trackContF = GetContFactZvPtEta(fContTrackMatrix,zv,pt,eta);
\r
1717 Double_t multTrackContF = GetContFactZvPtEta(fContMultTrackMatrix,zv,pt,eta);
\r
1718 //printf("zv %f, pt %f, eta %f \n",zv,pt,eta);
\r
1719 //printf("trackEffF %f, trackContF %f, multTrackContF %f \n", trackEffF, trackContF, multTrackContF);
\r
1721 // track-event level corrections
\r
1722 Double_t vertexEffF = GetCorrFactZvPtEta(fCorrTrackEventMatrix,zv,pt,eta);
\r
1723 Double_t trigMBToInel = GetCorrFactZvPtEta(fCorrTriggerMBtoInelTrackEventMatrix,zv,pt,eta);
\r
1724 Double_t trigMBToND = GetCorrFactZvPtEta(fCorrTriggerMBtoNDTrackEventMatrix,zv,pt,eta);
\r
1725 Double_t trigMBToNSD = GetCorrFactZvPtEta(fCorrTriggerMBtoNSDTrackEventMatrix,zv,pt,eta);
\r
1726 //printf("vertexEffF %f, trigMBToInel %f, trigMBToNSD %f \n", vertexEffF, trigMBToInel, trigMBToNSD);
\r
1728 Double_t corrF[8] = { 1.0,
\r
1730 trackContF*trackEffF,
\r
1731 trackContF*trackEffF*multTrackContF,
\r
1732 trackContF*trackEffF*multTrackContF*vertexEffF,
\r
1733 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToInel,
\r
1734 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToND,
\r
1735 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToNSD
\r
1738 // Fill histograms
\r
1739 Double_t valCorrRecTrackMultHist1[3] = {pt,eta,mult};
\r
1740 Double_t valCorrRecTrackPt1[1] = {pt};
\r
1741 for(Int_t i=0; i<8; i++) {
\r
1742 fCorrRecTrackMultHist1[i]->Fill(valCorrRecTrackMultHist1,corrF[i]);
\r
1743 fCorrRecTrackPt1[i]->Fill(valCorrRecTrackPt1,corrF[i]);
\r
1745 if( IsUseMCInfo() ) {
\r
1746 Double_t valCorrRecTrackTrueMultHist1[3] = {pt,eta,trueMult};
\r
1747 Double_t valCorrRecTrackTrueMultHist2[3] = {pt,mult,trueMult};
\r
1749 fCorrRecTrackTrueMultHist1[i]->Fill(valCorrRecTrackTrueMultHist1,corrF[i]);
\r
1750 fCorrRecTrackTrueMultHist2[i]->Fill(valCorrRecTrackTrueMultHist2,corrF[i]);
\r
1756 void AlidNdPtCorrection::FillHistograms(AliStack * const stack, Int_t /*label*/, AlidNdPtHelper::TrackObject /*trackObj*/, Int_t /*mult*/) const
\r
1758 // Fill MC histograms
\r
1759 if(!stack) return;
\r
1762 TParticle* particle = stack->Particle(label);
\r
1763 if(!particle) return;
\r
1765 Int_t mother_pdg = -1;
\r
1766 TParticle* mother = 0;
\r
1768 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
\r
1769 Int_t motherLabel = particle->GetMother(0);
\r
1770 if(motherLabel>0) mother = stack->Particle(motherLabel);
\r
1771 if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
\r
1772 Int_t mech = particle->GetUniqueID(); // production mechanism
\r
1774 if(!particle->GetPDG()) return;
\r
1775 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1776 Float_t gpt = particle->Pt();
\r
1777 Float_t qgpt = particle->Pt() * gq;
\r
1778 Float_t geta = particle->Eta();
\r
1779 Float_t gphi = particle->Phi();
\r
1780 Float_t gpz = particle->Pz();
\r
1782 Bool_t prim = stack->IsPhysicalPrimary(label);
\r
1783 Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();
\r
1786 if (TMath::Abs(particle->GetPdgCode()) == kElectron) { pid = 0; }
\r
1787 else if (TMath::Abs(particle->GetPdgCode()) == kMuonMinus) { pid = 1; }
\r
1788 else if (TMath::Abs(particle->GetPdgCode()) == kPiPlus) { pid = 2; }
\r
1789 else if (TMath::Abs(particle->GetPdgCode()) == kKPlus) { pid = 3; }
\r
1790 else if (TMath::Abs(particle->GetPdgCode()) == kProton) { pid = 4; }
\r
1794 //if(!prim) printf("prim_mother %d, mother %d, particle %d, production mech %d\n",prim_mother->GetPdgCode(),mother->GetPdgCode(), particle->GetPdgCode(),mech);
\r
1798 //_____________________________________________________________________________
\r
1799 Double_t AlidNdPtCorrection::GetCorrFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {
\r
1800 // return correction factor F(zv,pt,eta)
\r
1802 if(!hist) return 1.;
\r
1805 TAxis *ax = hist->GetAxis(0);
\r
1806 TAxis *ay = hist->GetAxis(1);
\r
1807 TAxis *az = hist->GetAxis(2);
\r
1809 Int_t binx = ax->FindBin(zv);
\r
1810 Int_t biny = ay->FindBin(pt);
\r
1811 Int_t binz = az->FindBin(eta);
\r
1812 Int_t dim[3] = {binx,biny,binz};
\r
1814 Double_t fact = hist->GetBinContent(dim);
\r
1819 //_____________________________________________________________________________
\r
1820 Double_t AlidNdPtCorrection::GetContFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {
\r
1821 // return contamination correction factor F(zv,pt,eta)
\r
1823 if(!hist) return 1.0;
\r
1826 TAxis *ax = hist->GetAxis(0);
\r
1827 TAxis *ay = hist->GetAxis(1);
\r
1828 TAxis *az = hist->GetAxis(2);
\r
1830 Int_t binx = ax->FindBin(zv);
\r
1831 Int_t biny = ay->FindBin(pt);
\r
1832 Int_t binz = az->FindBin(eta);
\r
1833 Int_t dim[3] = {binx,biny,binz};
\r
1836 // additional correction for secondary
\r
1837 // particles with strangeness (data driven)
\r
1839 Double_t corrFact = 1.;
\r
1840 if(!IsUseMCInfo()) corrFact = AlidNdPtHelper::GetStrangenessCorrFactor(pt);
\r
1841 //printf("pt %f, corrFact %f \n", pt, corrFact);
\r
1843 Double_t fact = 1.0 - corrFact*hist->GetBinContent(dim);
\r
1844 //Double_t fact = hist->GetBinContent(dim);
\r
1849 //_____________________________________________________________________________
\r
1850 Double_t AlidNdPtCorrection::GetCorrFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {
\r
1851 // return correction factor F(zv,mult)
\r
1853 if(!hist) return 1.;
\r
1855 TAxis *ax = hist->GetAxis(0);
\r
1856 TAxis *ay = hist->GetAxis(1);
\r
1857 Int_t binx = ax->FindBin(zv);
\r
1858 Int_t biny = ay->FindBin(mult);
\r
1859 Int_t dim[2] = {binx,biny};
\r
1861 Double_t fact = hist->GetBinContent(dim);
\r
1867 //_____________________________________________________________________________
\r
1868 Double_t AlidNdPtCorrection::GetContFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {
\r
1869 // return contamination correction factor F(zv,mult)
\r
1871 if(!hist) return 1.;
\r
1873 TAxis *ax = hist->GetAxis(0);
\r
1874 TAxis *ay = hist->GetAxis(1);
\r
1875 Int_t binx = ax->FindBin(zv);
\r
1876 Int_t biny = ay->FindBin(mult);
\r
1877 Int_t dim[2] = {binx,biny};
\r
1878 Double_t fact = 1.0-hist->GetBinContent(dim);
\r
1883 //_____________________________________________________________________________
\r
1884 Long64_t AlidNdPtCorrection::Merge(TCollection* const list)
\r
1886 // Merge list of objects (needed by PROOF)
\r
1891 if (list->IsEmpty())
\r
1894 TIterator* iter = list->MakeIterator();
\r
1897 // collection of generated histograms
\r
1899 // physics selection
\r
1900 TList *collPhysSelection = new TList;
\r
1903 while((obj = iter->Next()) != 0) {
\r
1904 AlidNdPtCorrection* entry = dynamic_cast<AlidNdPtCorrection*>(obj);
\r
1905 if (entry == 0) continue;
\r
1907 collPhysSelection->Add(entry->GetPhysicsTriggerSelection());
\r
1909 fEventCount->Add(entry->fEventCount);
\r
1911 fMCEventHist1->Add(entry->fMCEventHist1);
\r
1912 fRecEventHist1->Add(entry->fRecEventHist1);
\r
1913 fRecEventMultHist1->Add(entry->fRecEventMultHist1);
\r
1915 fMCAllEventMultHist1->Add(entry->fMCAllEventMultHist1);
\r
1916 fMCAllNDEventMultHist1->Add(entry->fMCAllNDEventMultHist1);
\r
1917 fMCAllNSDEventMultHist1->Add(entry->fMCAllNSDEventMultHist1);
\r
1918 fMCTriggerMultHist1->Add(entry->fMCTriggerMultHist1);
\r
1919 fMCEventMultHist1->Add(entry->fMCEventMultHist1);
\r
1921 fMCAllPrimTrackMultHist1->Add(entry->fMCAllPrimTrackMultHist1);
\r
1922 fMCNDEventAllPrimTrackMultHist1->Add(entry->fMCNDEventAllPrimTrackMultHist1);
\r
1923 fMCNSDEventAllPrimTrackMultHist1->Add(entry->fMCNSDEventAllPrimTrackMultHist1);
\r
1924 fMCTriggerPrimTrackMultHist1->Add(entry->fMCTriggerPrimTrackMultHist1);
\r
1925 fMCEventPrimTrackMultHist1->Add(entry->fMCEventPrimTrackMultHist1);
\r
1927 fMCAllPrimTrackTrueMultHist1->Add(entry->fMCAllPrimTrackTrueMultHist1);
\r
1928 fMCNDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNDEventAllPrimTrackTrueMultHist1);
\r
1929 fMCNSDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist1);
\r
1930 fMCTriggerPrimTrackTrueMultHist1->Add(entry->fMCTriggerPrimTrackTrueMultHist1);
\r
1931 fMCEventPrimTrackTrueMultHist1->Add(entry->fMCEventPrimTrackTrueMultHist1);
\r
1933 fMCAllPrimTrackTrueMultHist2->Add(entry->fMCAllPrimTrackTrueMultHist2);
\r
1934 fMCNDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNDEventAllPrimTrackTrueMultHist2);
\r
1935 fMCNSDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist2);
\r
1936 fMCTriggerPrimTrackTrueMultHist2->Add(entry->fMCTriggerPrimTrackTrueMultHist2);
\r
1937 fMCEventPrimTrackTrueMultHist2->Add(entry->fMCEventPrimTrackTrueMultHist2);
\r
1939 fMCAllPrimTrackMeanPtMult1->Add(entry->fMCAllPrimTrackMeanPtMult1);
\r
1940 fMCNDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtMult1);
\r
1941 fMCNSDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtMult1);
\r
1942 fMCTriggerPrimTrackMeanPtMult1->Add(entry->fMCTriggerPrimTrackMeanPtMult1);
\r
1943 fMCEventPrimTrackMeanPtMult1->Add(entry->fMCEventPrimTrackMeanPtMult1);
\r
1945 fMCAllPrimTrackMeanPtTrueMult1->Add(entry->fMCAllPrimTrackMeanPtTrueMult1);
\r
1946 fMCNDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtTrueMult1);
\r
1947 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtTrueMult1);
\r
1948 fMCTriggerPrimTrackMeanPtTrueMult1->Add(entry->fMCTriggerPrimTrackMeanPtTrueMult1);
\r
1949 fMCEventPrimTrackMeanPtTrueMult1->Add(entry->fMCEventPrimTrackMeanPtTrueMult1);
\r
1951 fCosmicsHisto->Add(entry->fCosmicsHisto);
\r
1953 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
1954 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);
\r
1957 for(Int_t i=0; i<8; i++) {
\r
1958 fCorrRecTrackMultHist1[i]->Add(entry->fCorrRecTrackMultHist1[i]);
\r
1959 fCorrRecTrackTrueMultHist1[i]->Add(entry->fCorrRecTrackTrueMultHist1[i]);
\r
1960 fCorrRecTrackTrueMultHist2[i]->Add(entry->fCorrRecTrackTrueMultHist2[i]);
\r
1962 fCorrRecTrackMeanPtMultHist1[i]->Add(entry->fCorrRecTrackMeanPtMultHist1[i]);
\r
1963 fCorrRecTrackMeanPtTrueMultHist1[i]->Add(entry->fCorrRecTrackMeanPtTrueMultHist1[i]);
\r
1965 fCorrRecTrackPt1[i]->Add(entry->fCorrRecTrackPt1[i]);
\r
1968 for(Int_t i=0; i<5; i++) {
\r
1969 fCorrRecEventHist1[i]->Add(entry->fCorrRecEventHist1[i]);
\r
1970 fCorrRecEventHist2[i]->Add(entry->fCorrRecEventHist2[i]);
\r
1977 AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();
\r
1978 trigSelection->Merge(collPhysSelection);
\r
1979 if(collPhysSelection) delete collPhysSelection;
\r
1984 //____________________________________________________________________________
\r
1985 Int_t AlidNdPtCorrection::GetTrueMult(THnSparse * const hist, Int_t mult) const
\r
1988 // get multiplicity of primary particles
\r
1990 if(!hist) return 0;
\r
1991 Int_t trueMult = 0;
\r
1994 TAxis *ax = hist->GetAxis(0);
\r
1995 TAxis *ay = hist->GetAxis(1);
\r
1996 ax->SetRange(1,ax->GetNbins());
\r
1997 ay->SetRange(1,ay->GetNbins());
\r
2000 ax->SetRangeUser((Float_t)mult,(Float_t)mult);
\r
2002 // get true multiplicity
\r
2003 TH1D *h1 = (TH1D *)hist->Projection(1);
\r
2004 trueMult = (Int_t)h1->GetMean();
\r
2009 //_____________________________________________________________________________
\r
2010 void AlidNdPtCorrection::Analyse()
\r
2012 // Analyse histograms
\r
2014 TH1::AddDirectory(kFALSE);
\r
2015 TH1 *h = 0, *hs=0, *hsc=0;
\r
2018 TObjArray *aFolderObj = new TObjArray;
\r
2023 AlidNdPtEventCuts *evtCuts = GetEventCuts();
\r
2024 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
\r
2025 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
\r
2027 if(!evtCuts || !accCuts || !esdTrackCuts) {
\r
2028 Error("AlidNdPtCutAnalysis::Analyse()", "cuts not available");
\r
2033 // set min and max values
\r
2035 //Double_t minPt = accCuts->GetMinPt();
\r
2036 //Double_t maxPt = accCuts->GetMaxPt();
\r
2037 Double_t minEta = accCuts->GetMinEta();
\r
2038 Double_t maxEta = accCuts->GetMaxEta()-0.00001;
\r
2040 printf("minEta %f, maxEta %f \n",minEta, maxEta);
\r
2043 // LHC backgraund in all and 0-bins
\r
2045 AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();
\r
2046 trigSel->SaveHistograms("physics_selection");
\r
2049 // cosmics background histo
\r
2051 h2D = fCosmicsHisto->Projection(0,1);
\r
2052 h2D->SetName("deta_vs_dphi_cosmics");
\r
2053 aFolderObj->Add(h2D);
\r
2058 h = fCorrRecEventHist1[0]->Projection(1);
\r
2059 h->SetName("mult_event_not_corrected");
\r
2060 aFolderObj->Add(h);
\r
2062 h = fCorrRecEventHist1[1]->Projection(1);
\r
2063 h->SetName("mult_event_vertex_corrected");
\r
2064 aFolderObj->Add(h);
\r
2066 h = fCorrRecEventHist1[2]->Projection(1);
\r
2067 h->SetName("mult_trigger_vertex_corrected");
\r
2068 aFolderObj->Add(h);
\r
2070 h = fCorrRecEventHist1[3]->Projection(1);
\r
2071 h->SetName("mult_ND_trigger_vertex_corrected");
\r
2072 aFolderObj->Add(h);
\r
2074 h = fCorrRecEventHist1[4]->Projection(1);
\r
2075 h->SetName("mult_NSD_trigger_vertex_corrected");
\r
2076 aFolderObj->Add(h);
\r
2079 h = fCorrRecEventHist2[0]->Projection(1);
\r
2080 h->SetName("mult_empty_event_not_corrected");
\r
2081 aFolderObj->Add(h);
\r
2083 h = fCorrRecEventHist2[1]->Projection(1);
\r
2084 h->SetName("mult_empty_event_vertex_corrected");
\r
2085 aFolderObj->Add(h);
\r
2087 h = fCorrRecEventHist2[2]->Projection(1);
\r
2088 h->SetName("mult_empty_trigger_vertex_corrected");
\r
2089 aFolderObj->Add(h);
\r
2091 h = fCorrRecEventHist2[3]->Projection(1);
\r
2092 h->SetName("mult_empty_ND_trigger_vertex_corrected");
\r
2093 aFolderObj->Add(h);
\r
2095 h = fCorrRecEventHist2[4]->Projection(1);
\r
2096 h->SetName("mult_empty_NSD_trigger_vertex_corrected");
\r
2097 aFolderObj->Add(h);
\r
2102 if(IsUseMCInfo()) {
\r
2105 h = fMCAllEventMultHist1->Projection(1);
\r
2106 h->SetName("mc_mult_event_acc_prim");
\r
2107 aFolderObj->Add(h);
\r
2109 h = fMCAllNDEventMultHist1->Projection(1);
\r
2110 h->SetName("mc_mult_ND_event_acc_prim");
\r
2111 aFolderObj->Add(h);
\r
2113 h = fMCAllNSDEventMultHist1->Projection(1);
\r
2114 h->SetName("mc_mult_NSD_event_acc_prim");
\r
2115 aFolderObj->Add(h);
\r
2117 h = fMCTriggerMultHist1->Projection(1);
\r
2118 h->SetName("mc_mult_trigger_acc_prim");
\r
2119 aFolderObj->Add(h);
\r
2121 h = fMCEventMultHist1->Projection(1);
\r
2122 h->SetName("mc_mult_trigger_event_acc_prim");
\r
2123 aFolderObj->Add(h);
\r
2130 // limit eta range
\r
2131 for(Int_t i=0;i<8;i++) {
\r
2132 //fCorrRecTrackMultHist1[i]->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2133 //fCorrRecTrackMultHist1[i]->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2135 //fMCAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2136 //fMCAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2138 //fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2139 //fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2141 //fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2142 //fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2144 //fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2145 //fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2147 //fMCEventPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2148 //fMCEventPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2150 } // end use MC info
\r
2153 h2D = fCorrRecTrackMultHist1[3]->Projection(1,0);
\r
2154 h2D->SetName("pt_eta_rec_track_mult_eff_cont_corrected");
\r
2155 aFolderObj->Add(h2D);
\r
2157 h2D = fCorrRecTrackMultHist1[4]->Projection(1,0);
\r
2158 h2D->SetName("pt_eta_rec_event_track_mult_eff_cont_corrected");
\r
2159 aFolderObj->Add(h2D);
\r
2161 h2D = fCorrRecTrackMultHist1[5]->Projection(1,0);
\r
2162 h2D->SetName("pt_eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
2163 aFolderObj->Add(h2D);
\r
2165 h2D = fCorrRecTrackMultHist1[6]->Projection(1,0);
\r
2166 h2D->SetName("pt_eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2167 aFolderObj->Add(h2D);
\r
2169 h2D = fCorrRecTrackMultHist1[7]->Projection(1,0);
\r
2170 h2D->SetName("pt_eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2171 aFolderObj->Add(h2D);
\r
2175 h2D = fCorrRecTrackMultHist1[3]->Projection(2,0);
\r
2176 h2D->SetName("pt_mult_rec_track_mult_eff_cont_corrected");
\r
2177 aFolderObj->Add(h2D);
\r
2179 h2D = fCorrRecTrackMultHist1[4]->Projection(2,0);
\r
2180 h2D->SetName("pt_mult_rec_event_track_mult_eff_cont_corrected");
\r
2181 aFolderObj->Add(h2D);
\r
2183 h2D = fCorrRecTrackMultHist1[5]->Projection(2,0);
\r
2184 h2D->SetName("pt_mult_rec_trig_event_track_mult_eff_cont_corrected");
\r
2185 aFolderObj->Add(h2D);
\r
2187 h2D = fCorrRecTrackMultHist1[6]->Projection(2,0);
\r
2188 h2D->SetName("pt_mult_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2189 aFolderObj->Add(h2D);
\r
2191 h2D = fCorrRecTrackMultHist1[7]->Projection(2,0);
\r
2192 h2D->SetName("pt_mult_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2193 aFolderObj->Add(h2D);
\r
2197 h = fCorrRecTrackMultHist1[0]->Projection(0);
\r
2198 h->SetName("pt_rec_track_not_corrected");
\r
2199 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2200 hs->SetName("pt_rec_track_not_corrected_s");
\r
2201 aFolderObj->Add(hs);
\r
2204 h = fCorrRecTrackMultHist1[1]->Projection(0);
\r
2205 h->SetName("pt_rec_track_cont_corrected");
\r
2206 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2207 hs->SetName("pt_rec_track_cont_corrected_s");
\r
2208 aFolderObj->Add(hs);
\r
2210 hsc = (TH1D*)hs->Clone("pt_rec_track_cont_corr_fact");
\r
2211 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));
\r
2212 aFolderObj->Add(hsc);
\r
2215 h = fCorrRecTrackMultHist1[2]->Projection(0);
\r
2216 h->SetName("pt_rec_track_eff_cont_corrected");
\r
2217 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2218 hs->SetName("pt_rec_track_eff_cont_corrected_s");
\r
2219 aFolderObj->Add(hs);
\r
2221 hsc = (TH1D*)hs->Clone("pt_rec_track_eff_corr_fact");
\r
2222 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_cont_corrected_s"));
\r
2223 aFolderObj->Add(hsc);
\r
2226 h = fCorrRecTrackMultHist1[3]->Projection(0);
\r
2227 h->SetName("pt_rec_track_mult_eff_cont_corrected");
\r
2228 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2229 hs->SetName("pt_rec_track_mult_eff_cont_corrected_s");
\r
2230 aFolderObj->Add(hs);
\r
2232 hsc = (TH1D*)hs->Clone("pt_rec_track_mult_corr_fact");
\r
2233 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_eff_cont_corrected_s"));
\r
2234 aFolderObj->Add(hsc);
\r
2236 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2237 hsc = (TH1D*)hs->Clone("pt_rec_track_mult_eff_cont_corr_fact");
\r
2238 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));
\r
2239 aFolderObj->Add(hsc);
\r
2241 hsc = (TH1D*)hs->Clone();
\r
2242 hsc->SetName("pt_rec_track_mult_eff_cont_corrected_s_norm");
\r
2243 hsc->Scale(1./(fCorrRecEventHist1[0]->Projection(1)->Integral()));
\r
2244 aFolderObj->Add(hsc);
\r
2247 h = fCorrRecTrackMultHist1[4]->Projection(0);
\r
2248 h->SetName("pt_rec_event_track_mult_eff_cont_corrected");
\r
2249 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2250 hs->SetName("pt_rec_event_track_mult_eff_cont_corrected_s");
\r
2251 aFolderObj->Add(hs);
\r
2253 hsc = (TH1D*)hs->Clone();
\r
2254 hsc->SetName("pt_rec_event_track_mult_eff_cont_corrected_s_norm");
\r
2255 hsc->Scale(1./(fCorrRecEventHist1[1]->Projection(1)->Integral()+fCorrRecEventHist2[1]->Projection(1)->Integral()));
\r
2256 aFolderObj->Add(hsc);
\r
2259 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2260 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected");
\r
2261 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2262 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s");
\r
2263 aFolderObj->Add(hs);
\r
2265 hsc = (TH1D*)hs->Clone();
\r
2266 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2267 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral() + fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2268 aFolderObj->Add(hsc);
\r
2271 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(0., maxEta);
\r
2273 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2274 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_posEta");
\r
2275 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2276 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_posEta");
\r
2277 aFolderObj->Add(hs);
\r
2279 hsc = (TH1D*)hs->Clone();
\r
2280 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");
\r
2281 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2282 aFolderObj->Add(hsc);
\r
2285 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(minEta, -0.00001);
\r
2287 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2288 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_negEta");
\r
2289 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2290 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_negEta");
\r
2291 aFolderObj->Add(hs);
\r
2293 hsc = (TH1D*)hs->Clone();
\r
2294 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");
\r
2295 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2296 aFolderObj->Add(hsc);
\r
2298 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[5]->GetAxis(1)->GetNbins());
\r
2301 h = fCorrRecTrackMultHist1[6]->Projection(0);
\r
2302 h->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2303 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2304 hs->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s");
\r
2305 aFolderObj->Add(hs);
\r
2307 hsc = (TH1D*)hs->Clone();
\r
2308 hsc->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2309 hsc->Scale(1./(fCorrRecEventHist1[3]->Projection(1)->Integral()+fCorrRecEventHist2[3]->Projection(1)->Integral()));
\r
2310 aFolderObj->Add(hsc);
\r
2313 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2314 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2315 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2316 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s");
\r
2317 aFolderObj->Add(hs);
\r
2319 hsc = (TH1D*)hs->Clone();
\r
2320 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2321 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral() + fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2322 aFolderObj->Add(hsc);
\r
2327 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(0., maxEta);
\r
2329 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2330 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_posEta");
\r
2331 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2332 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_posEta");
\r
2333 aFolderObj->Add(hs);
\r
2335 hsc = (TH1D*)hs->Clone();
\r
2336 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");
\r
2337 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2338 aFolderObj->Add(hsc);
\r
2343 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(minEta, -0.00001);
\r
2345 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2346 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_negEta");
\r
2347 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2348 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_negEta");
\r
2349 aFolderObj->Add(hs);
\r
2351 hsc = (TH1D*)hs->Clone();
\r
2352 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");
\r
2353 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2354 aFolderObj->Add(hsc);
\r
2356 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[7]->GetAxis(1)->GetNbins());
\r
2359 h = fCorrRecTrackMultHist1[0]->Projection(1);
\r
2360 h->SetName("eta_rec_track_not_corrected");
\r
2361 aFolderObj->Add(h);
\r
2363 h = fCorrRecTrackMultHist1[1]->Projection(1);
\r
2364 h->SetName("eta_rec_track_cont_corrected");
\r
2365 aFolderObj->Add(h);
\r
2367 h = fCorrRecTrackMultHist1[2]->Projection(1);
\r
2368 h->SetName("eta_rec_track_eff_cont_corrected");
\r
2369 aFolderObj->Add(h);
\r
2371 h = fCorrRecTrackMultHist1[3]->Projection(1);
\r
2372 h->SetName("eta_rec_track_mult_eff_cont_corrected");
\r
2373 aFolderObj->Add(h);
\r
2375 h = fCorrRecTrackMultHist1[4]->Projection(1);
\r
2376 h->SetName("eta_rec_event_track_mult_eff_cont_corrected");
\r
2377 aFolderObj->Add(h);
\r
2379 h = fCorrRecTrackMultHist1[5]->Projection(1);
\r
2380 h->SetName("eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
2381 aFolderObj->Add(h);
\r
2383 h = fCorrRecTrackMultHist1[6]->Projection(1);
\r
2384 h->SetName("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2385 aFolderObj->Add(h);
\r
2387 h = fCorrRecTrackMultHist1[7]->Projection(1);
\r
2388 h->SetName("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2389 aFolderObj->Add(h);
\r
2395 if(IsUseMCInfo()) {
\r
2398 h2D = fMCAllPrimTrackMultHist1->Projection(2,0);
\r
2399 h2D->SetName("mc_all_pt_mult_acc_prim");
\r
2400 aFolderObj->Add(h2D);
\r
2402 h2D = fMCAllPrimTrackMultHist1->Projection(1,0);
\r
2403 h2D->SetName("mc_all_eta_pt_acc_prim");
\r
2404 aFolderObj->Add(h2D);
\r
2406 h2D = fMCNDEventAllPrimTrackMultHist1->Projection(2,0);
\r
2407 h2D->SetName("mc_ND_all_pt_mult_acc_prim");
\r
2408 aFolderObj->Add(h2D);
\r
2410 h2D = fMCNDEventAllPrimTrackMultHist1->Projection(1,0);
\r
2411 h2D->SetName("mc_ND_all_eta_pt_acc_prim");
\r
2412 aFolderObj->Add(h2D);
\r
2414 h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(2,0);
\r
2415 h2D->SetName("mc_NSD_all_pt_mult_acc_prim");
\r
2416 aFolderObj->Add(h2D);
\r
2418 h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(1,0);
\r
2419 h2D->SetName("mc_NSD_all_eta_pt_acc_prim");
\r
2420 aFolderObj->Add(h2D);
\r
2424 h = fMCAllPrimTrackMultHist1->Projection(0);
\r
2425 h->SetName("mc_all_pt_acc_prim");
\r
2426 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2427 hs->SetName("mc_all_pt_acc_prim_s");
\r
2428 aFolderObj->Add(hs);
\r
2430 hsc = (TH1D*)hs->Clone();
\r
2431 hsc->SetName("mc_all_pt_acc_prim_s_norm");
\r
2432 hsc->Scale(1./fMCAllEventMultHist1->Projection(1)->Integral());
\r
2433 aFolderObj->Add(hsc);
\r
2435 h = fMCNDEventAllPrimTrackMultHist1->Projection(0);
\r
2436 h->SetName("mc_ND_all_pt_acc_prim");
\r
2437 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2438 hs->SetName("mc_ND_all_pt_acc_prim_s");
\r
2439 aFolderObj->Add(hs);
\r
2441 hsc = (TH1D*)hs->Clone();
\r
2442 hsc->SetName("mc_ND_all_pt_acc_prim_s_norm");
\r
2443 hsc->Scale(1./fMCAllNDEventMultHist1->Projection(1)->Integral());
\r
2444 aFolderObj->Add(hsc);
\r
2446 h = fMCNSDEventAllPrimTrackMultHist1->Projection(0);
\r
2447 h->SetName("mc_NSD_all_pt_acc_prim");
\r
2448 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2449 hs->SetName("mc_NSD_all_pt_acc_prim_s");
\r
2450 aFolderObj->Add(hs);
\r
2452 hsc = (TH1D*)hs->Clone();
\r
2453 hsc->SetName("mc_NSD_all_pt_acc_prim_s_norm");
\r
2454 hsc->Scale(1./fMCAllNSDEventMultHist1->Projection(1)->Integral());
\r
2455 aFolderObj->Add(hsc);
\r
2457 h = fMCTriggerPrimTrackMultHist1->Projection(0);
\r
2458 h->SetName("mc_trigger_all_pt_acc_prim");
\r
2459 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2460 hs->SetName("mc_trigger_all_pt_acc_prim_s");
\r
2461 aFolderObj->Add(hs);
\r
2463 hsc = (TH1D*)hs->Clone();
\r
2464 hsc->SetName("mc_trigger_all_pt_acc_prim_s_norm");
\r
2465 hsc->Scale(1./fMCTriggerMultHist1->Projection(1)->Integral());
\r
2466 aFolderObj->Add(hsc);
\r
2468 h = fMCEventPrimTrackMultHist1->Projection(0);
\r
2469 h->SetName("mc_all_pt_acc_trig_event_prim");
\r
2470 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2471 hs->SetName("mc_all_pt_acc_trig_event_prim_s");
\r
2472 aFolderObj->Add(hs);
\r
2474 hsc = (TH1D*)hs->Clone();
\r
2475 hsc->SetName("mc_all_pt_acc_trig_event_prim_s_norm");
\r
2476 hsc->Scale(1./fMCEventMultHist1->Projection(1)->Integral());
\r
2477 aFolderObj->Add(hsc);
\r
2481 h = fMCAllPrimTrackMultHist1->Projection(1);
\r
2482 h->SetName("mc_all_eta_acc_prim");
\r
2483 aFolderObj->Add(h);
\r
2485 h = fMCNDEventAllPrimTrackMultHist1->Projection(1);
\r
2486 h->SetName("mc_ND_all_eta_acc_prim");
\r
2487 aFolderObj->Add(h);
\r
2489 h = fMCNSDEventAllPrimTrackMultHist1->Projection(1);
\r
2490 h->SetName("mc_NSD_all_eta_acc_prim");
\r
2491 aFolderObj->Add(h);
\r
2493 h = fMCTriggerPrimTrackMultHist1->Projection(1);
\r
2494 h->SetName("mc_trigger_all_eta_acc_prim");
\r
2495 aFolderObj->Add(h);
\r
2497 h = fMCEventPrimTrackMultHist1->Projection(1);
\r
2498 h->SetName("mc_all_eta_acc_trig_event_prim");
\r
2499 aFolderObj->Add(h);
\r
2502 // calculate ratios (rec / mc)
\r
2505 hs = (TH1*)aFolderObj->FindObject("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2506 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_trig_event_track_mult_eff_cont_corrected");
\r
2508 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_prim_s_norm"));
\r
2509 aFolderObj->Add(hsc);
\r
2511 hs = (TH1*)aFolderObj->FindObject("eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
2512 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_trig_event_track_mult_eff_cont_corrected");
\r
2514 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_prim"));
\r
2515 aFolderObj->Add(hsc);
\r
2518 hs = (TH1*)aFolderObj->FindObject("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2519 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected");
\r
2521 hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_pt_acc_prim_s_norm"));
\r
2522 aFolderObj->Add(hsc);
\r
2524 hs = (TH1*)aFolderObj->FindObject("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2525 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected");
\r
2527 hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_eta_acc_prim"));
\r
2528 aFolderObj->Add(hsc);
\r
2531 hs = (TH1*)aFolderObj->FindObject("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2532 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2534 hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_pt_acc_prim_s_norm"));
\r
2535 aFolderObj->Add(hsc);
\r
2537 hs = (TH1*)aFolderObj->FindObject("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2538 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2540 hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_eta_acc_prim"));
\r
2541 aFolderObj->Add(hsc);
\r
2544 hs = (TH1*)aFolderObj->FindObject("pt_rec_event_track_mult_eff_cont_corrected_s_norm");
\r
2545 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_event_track_mult_eff_cont_corrected");
\r
2547 hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_pt_acc_prim_s_norm"));
\r
2548 aFolderObj->Add(hsc);
\r
2550 hs = (TH1*)aFolderObj->FindObject("eta_rec_event_track_mult_eff_cont_corrected");
\r
2551 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_event_track_mult_eff_cont_corrected");
\r
2553 hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_eta_acc_prim"));
\r
2554 aFolderObj->Add(hsc);
\r
2557 hs = (TH1*)aFolderObj->FindObject("pt_rec_track_mult_eff_cont_corrected_s_norm");
\r
2558 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_track_mult_eff_cont_corrected");
\r
2560 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_trig_event_prim_s_norm"));
\r
2561 aFolderObj->Add(hsc);
\r
2563 hs = (TH1*)aFolderObj->FindObject("eta_rec_track_mult_eff_cont_corrected");
\r
2564 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_track_mult_eff_cont_corrected");
\r
2566 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_trig_event_prim"));
\r
2567 aFolderObj->Add(hsc);
\r
2569 } // end MC infor available
\r
2571 // export objects to analysis folder
\r
2572 fCorrectionFolder = ExportToFolder(aFolderObj);
\r
2574 // delete only TObjArray
\r
2575 if(aFolderObj) delete aFolderObj;
\r
2578 //_____________________________________________________________________________
\r
2579 TFolder* AlidNdPtCorrection::ExportToFolder(TObjArray * const array)
\r
2581 // recreate folder avery time and export objects to new one
\r
2583 AlidNdPtCorrection * comp=this;
\r
2584 TFolder *folder = comp->GetCorrectionFolder();
\r
2586 TString name, title;
\r
2587 TFolder *newFolder = 0;
\r
2589 Int_t size = array->GetSize();
\r
2592 // get name and title from old folder
\r
2593 name = folder->GetName();
\r
2594 title = folder->GetTitle();
\r
2600 newFolder = CreateFolder(name.Data(),title.Data());
\r
2601 newFolder->SetOwner();
\r
2603 // add objects to folder
\r
2605 newFolder->Add(array->At(i));
\r
2613 //_____________________________________________________________________________
\r
2614 TFolder* AlidNdPtCorrection::CreateFolder(TString name,TString title) {
\r
2615 // create folder for analysed histograms
\r
2617 TFolder *folder = 0;
\r
2618 folder = new TFolder(name.Data(),title.Data());
\r