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
306 const Int_t ptNbins = 55;
\r
307 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};
\r
308 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
309 Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
\r
313 Int_t binsMCEventHist1[3]={100,100,140};
\r
314 Double_t minMCEventHist1[3]={-0.1,-0.1,-35.};
\r
315 Double_t maxMCEventHist1[3]={0.1,0.1,35.};
\r
316 fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1);
\r
317 fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)");
\r
318 fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)");
\r
319 fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)");
\r
320 fMCEventHist1->Sumw2();
\r
323 Int_t binsRecEventHist1[3]={100,100,140};
\r
324 Double_t minRecEventHist1[3]={-3.,-3.,-35.};
\r
325 Double_t maxRecEventHist1[3]={3.,3.,35.};
\r
326 fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1);
\r
327 fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)");
\r
328 fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)");
\r
329 fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)");
\r
330 fRecEventHist1->Sumw2();
\r
333 Int_t binsRecEventMultHist1[2]={150,150};
\r
334 Double_t minRecEventMultHist1[2]={-0.5,-0.5};
\r
335 Double_t maxRecEventMultHist1[2]={149.5,149.5};
\r
336 fRecEventMultHist1 = new THnSparseF("fRecEventMultHist1","track multiplicity:tracklet multiplicity",2,binsRecEventMultHist1,minRecEventMultHist1,maxRecEventMultHist1);
\r
337 fRecEventMultHist1->GetAxis(0)->SetTitle("track_mult");
\r
338 fRecEventMultHist1->GetAxis(1)->SetTitle("tracklet_mult");
\r
339 fRecEventMultHist1->Sumw2();
\r
345 Int_t binsMCAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
346 Double_t minMCAllPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
347 Double_t maxMCAllPrimTrackMultHist1[3]={20.,1.,149.5};
\r
348 sprintf(name,"fMCAllPrimTrackMultHist1");
\r
349 sprintf(title,"mcPt:mcEta:multiplicity");
\r
351 fMCAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackMultHist1,minMCAllPrimTrackMultHist1,maxMCAllPrimTrackMultHist1);
\r
352 fMCAllPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
353 fMCAllPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
354 fMCAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
355 fMCAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
356 fMCAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
357 fMCAllPrimTrackMultHist1->Sumw2();
\r
359 Int_t binsMCNDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
360 Double_t minMCNDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
361 Double_t maxMCNDEventAllPrimTrackMultHist1[3]={20.,1.,149.5};
\r
362 sprintf(name,"fMCNDEventAllPrimTrackMultHist1");
\r
363 sprintf(title,"mcPt:mcEta:multiplicity");
\r
365 fMCNDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackMultHist1,minMCNDEventAllPrimTrackMultHist1,maxMCNDEventAllPrimTrackMultHist1);
\r
366 fMCNDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
367 fMCNDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
368 fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
369 fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
370 fMCNDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
371 fMCNDEventAllPrimTrackMultHist1->Sumw2();
\r
373 Int_t binsMCNSDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
374 Double_t minMCNSDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
375 Double_t maxMCNSDEventAllPrimTrackMultHist1[3]={20.,1.,149.5};
\r
376 sprintf(name,"fMCNSDEventAllPrimTrackMultHist1");
\r
377 sprintf(title,"mcPt:mcEta:multiplicity");
\r
379 fMCNSDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackMultHist1,minMCNSDEventAllPrimTrackMultHist1,maxMCNSDEventAllPrimTrackMultHist1);
\r
380 fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
381 fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
382 fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
383 fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
384 fMCNSDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
385 fMCNSDEventAllPrimTrackMultHist1->Sumw2();
\r
387 Int_t binsMCEventTriggerPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
388 Double_t minMCEventTriggerPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
389 Double_t maxMCEventTriggerPrimTrackMultHist1[3]={20.,1.,149.5};
\r
390 sprintf(name,"fMCTriggerPrimTrackMultHist1");
\r
391 sprintf(title,"mcPt:mcEta:multiplicity");
\r
393 fMCTriggerPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackMultHist1,minMCEventTriggerPrimTrackMultHist1,maxMCEventTriggerPrimTrackMultHist1);
\r
394 fMCTriggerPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
395 fMCTriggerPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
396 fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
397 fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
398 fMCTriggerPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
399 fMCTriggerPrimTrackMultHist1->Sumw2();
\r
401 Int_t binsMCEventPrimTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
402 Double_t minMCEventPrimTrackMultHist1[3]={0.,-1.,-0.5};
\r
403 Double_t maxMCEventPrimTrackMultHist1[3]={20.,1.,149.5};
\r
404 sprintf(name,"fMCEventPrimTrackMultHist1");
\r
405 sprintf(title,"mcPt:mcEta:multiplicity");
\r
407 fMCEventPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackMultHist1,minMCEventPrimTrackMultHist1,maxMCEventPrimTrackMultHist1);
\r
408 fMCEventPrimTrackMultHist1->SetBinEdges(0,binsPt);
\r
409 fMCEventPrimTrackMultHist1->SetBinEdges(1,binsEta);
\r
410 fMCEventPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
411 fMCEventPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
412 fMCEventPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity");
\r
413 fMCEventPrimTrackMultHist1->Sumw2();
\r
416 // true multiplicity
\r
419 Int_t binsMCAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
420 Double_t minMCAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
421 Double_t maxMCAllPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
422 sprintf(name,"fMCAllPrimTrackTrueMultHist1");
\r
423 sprintf(title,"mcPt:mcEta:true_mult");
\r
425 fMCAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist1,minMCAllPrimTrackTrueMultHist1,maxMCAllPrimTrackTrueMultHist1);
\r
426 fMCAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
427 fMCAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
428 fMCAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
429 fMCAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
430 fMCAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
431 fMCAllPrimTrackTrueMultHist1->Sumw2();
\r
433 Int_t binsMCNDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
434 Double_t minMCNDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
435 Double_t maxMCNDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
436 sprintf(name,"fMCNDEventAllPrimTrackTrueMultHist1");
\r
437 sprintf(title,"mcPt:mcEta:true_mult");
\r
439 fMCNDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist1,minMCNDEventAllPrimTrackTrueMultHist1,maxMCNDEventAllPrimTrackTrueMultHist1);
\r
440 fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
441 fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
442 fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
443 fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
444 fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
445 fMCNDEventAllPrimTrackTrueMultHist1->Sumw2();
\r
447 Int_t binsMCNSDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
448 Double_t minMCNSDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
449 Double_t maxMCNSDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
450 sprintf(name,"fMCNSDEventAllPrimTrackTrueMultHist1");
\r
451 sprintf(title,"mcPt:mcEta:true_mult");
\r
453 fMCNSDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist1,minMCNSDEventAllPrimTrackTrueMultHist1,maxMCNSDEventAllPrimTrackTrueMultHist1);
\r
454 fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
455 fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
456 fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
457 fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
458 fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
459 fMCNSDEventAllPrimTrackTrueMultHist1->Sumw2();
\r
461 Int_t binsMCEventTriggerPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
462 Double_t minMCEventTriggerPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
463 Double_t maxMCEventTriggerPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
464 sprintf(name,"fMCTriggerPrimTrackTrueMultHist1");
\r
465 sprintf(title,"mcPt:mcEta:true_mult");
\r
467 fMCTriggerPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist1,minMCEventTriggerPrimTrackTrueMultHist1,maxMCEventTriggerPrimTrackTrueMultHist1);
\r
468 fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
469 fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
470 fMCTriggerPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
471 fMCTriggerPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
472 fMCTriggerPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
473 fMCTriggerPrimTrackTrueMultHist1->Sumw2();
\r
475 Int_t binsMCEventPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
476 Double_t minMCEventPrimTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
477 Double_t maxMCEventPrimTrackTrueMultHist1[3]={20.,1.,149.5};
\r
478 sprintf(name,"fMCEventPrimTrackTrueMultHist1");
\r
479 sprintf(title,"mcPt:mcEta:true_mult");
\r
481 fMCEventPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist1,minMCEventPrimTrackTrueMultHist1,maxMCEventPrimTrackTrueMultHist1);
\r
482 fMCEventPrimTrackTrueMultHist1->SetBinEdges(0,binsPt);
\r
483 fMCEventPrimTrackTrueMultHist1->SetBinEdges(1,binsEta);
\r
484 fMCEventPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
485 fMCEventPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta");
\r
486 fMCEventPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult");
\r
487 fMCEventPrimTrackTrueMultHist1->Sumw2();
\r
490 // mcPT vs multiplicity vs true multiplicity
\r
493 Int_t binsMCAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
494 Double_t minMCAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
495 Double_t maxMCAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
496 sprintf(name,"fMCAllPrimTrackTrueMultHist2");
\r
497 sprintf(title,"mcPt:mult:true_mult");
\r
499 fMCAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist2,minMCAllPrimTrackTrueMultHist2,maxMCAllPrimTrackTrueMultHist2);
\r
500 fMCAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
501 fMCAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
502 fMCAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
503 fMCAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
504 fMCAllPrimTrackTrueMultHist2->Sumw2();
\r
506 Int_t binsMCNDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
507 Double_t minMCNDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
508 Double_t maxMCNDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
509 sprintf(name,"fMCNDEventAllPrimTrackTrueMultHist2");
\r
510 sprintf(title,"mcPt:mult:true_mult");
\r
512 fMCNDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist2,minMCNDEventAllPrimTrackTrueMultHist2,maxMCNDEventAllPrimTrackTrueMultHist2);
\r
513 fMCNDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
514 fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
515 fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
516 fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
517 fMCNDEventAllPrimTrackTrueMultHist2->Sumw2();
\r
519 Int_t binsMCNSDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
520 Double_t minMCNSDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
521 Double_t maxMCNSDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
522 sprintf(name,"fMCNSDEventAllPrimTrackTrueMultHist2");
\r
523 sprintf(title,"mcPt:mult:true_mult");
\r
525 fMCNSDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist2,minMCNSDEventAllPrimTrackTrueMultHist2,maxMCNSDEventAllPrimTrackTrueMultHist2);
\r
526 fMCNSDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
527 fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
528 fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
529 fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
530 fMCNSDEventAllPrimTrackTrueMultHist2->Sumw2();
\r
532 Int_t binsMCEventTriggerPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
533 Double_t minMCEventTriggerPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
534 Double_t maxMCEventTriggerPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
535 sprintf(name,"fMCTriggerPrimTrackTrueMultHist2");
\r
536 sprintf(title,"mcPt:mult:true_mult");
\r
538 fMCTriggerPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist2,minMCEventTriggerPrimTrackTrueMultHist2,maxMCEventTriggerPrimTrackTrueMultHist2);
\r
539 fMCTriggerPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
540 fMCTriggerPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
541 fMCTriggerPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
542 fMCTriggerPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
543 fMCTriggerPrimTrackTrueMultHist2->Sumw2();
\r
545 Int_t binsMCEventPrimTrackTrueMultHist2[3]={ptNbins,150,150};
\r
546 Double_t minMCEventPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
547 Double_t maxMCEventPrimTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
548 sprintf(name,"fMCEventPrimTrackTrueMultHist2");
\r
549 sprintf(title,"mcPt:mult:true_mult");
\r
551 fMCEventPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist2,minMCEventPrimTrackTrueMultHist2,maxMCEventPrimTrackTrueMultHist2);
\r
552 fMCEventPrimTrackTrueMultHist2->SetBinEdges(0,binsPt);
\r
553 fMCEventPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
554 fMCEventPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult");
\r
555 fMCEventPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult");
\r
556 fMCEventPrimTrackTrueMultHist2->Sumw2();
\r
562 Int_t binsMCAllPrimTrackMeanPtTrueMult1[2]={100,150};
\r
563 Double_t minMCAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
564 Double_t maxMCAllPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
565 sprintf(name,"fMCAllPrimTrackMeanPtTrueMult1");
\r
566 sprintf(title,"event <mcPt>:true_mult");
\r
568 fMCAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtTrueMult1,minMCAllPrimTrackMeanPtTrueMult1,maxMCAllPrimTrackMeanPtTrueMult1);
\r
569 fMCAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
570 fMCAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
571 fMCAllPrimTrackMeanPtTrueMult1->Sumw2();
\r
573 Int_t binsMCAllPrimTrackMeanPtMult1[2]={100,150};
\r
574 Double_t minMCAllPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
575 Double_t maxMCAllPrimTrackMeanPtMult1[2]={10.,149.5};
\r
576 sprintf(name,"fMCAllPrimTrackMeanPtMult1");
\r
577 sprintf(title,"event <mcPt>:mult");
\r
579 fMCAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtMult1,minMCAllPrimTrackMeanPtMult1,maxMCAllPrimTrackMeanPtMult1);
\r
580 fMCAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
581 fMCAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
582 fMCAllPrimTrackMeanPtMult1->Sumw2();
\r
585 Int_t binsMCNDEventAllPrimTrackMeanPtTrueMult1[2]={100,150};
\r
586 Double_t minMCNDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
587 Double_t maxMCNDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
588 sprintf(name,"fMCNDEventAllPrimTrackMeanPtTrueMult1");
\r
589 sprintf(title,"event <mcPt>:true_mult");
\r
591 fMCNDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtTrueMult1,minMCNDEventAllPrimTrackMeanPtTrueMult1,maxMCNDEventAllPrimTrackMeanPtTrueMult1);
\r
592 fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
593 fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
594 fMCNDEventAllPrimTrackMeanPtTrueMult1->Sumw2();
\r
596 Int_t binsMCNDEventAllPrimTrackMeanPtMult1[2]={100,150};
\r
597 Double_t minMCNDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
598 Double_t maxMCNDEventAllPrimTrackMeanPtMult1[2]={10.,149.5};
\r
599 sprintf(name,"fMCNDEventAllPrimTrackMeanPtMult1");
\r
600 sprintf(title,"event <mcPt>:mult");
\r
602 fMCNDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtMult1,minMCNDEventAllPrimTrackMeanPtMult1,maxMCNDEventAllPrimTrackMeanPtMult1);
\r
603 fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
604 fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
605 fMCNDEventAllPrimTrackMeanPtMult1->Sumw2();
\r
608 Int_t binsMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={100,150};
\r
609 Double_t minMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
610 Double_t maxMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
611 sprintf(name,"fMCNSDEventAllPrimTrackMeanPtTrueMult1");
\r
612 sprintf(title,"event <mcPt>:true_mult");
\r
614 fMCNSDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtTrueMult1,minMCNSDEventAllPrimTrackMeanPtTrueMult1,maxMCNSDEventAllPrimTrackMeanPtTrueMult1);
\r
615 fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
616 fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
617 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Sumw2();
\r
619 Int_t binsMCNSDEventAllPrimTrackMeanPtMult1[2]={100,150};
\r
620 Double_t minMCNSDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
621 Double_t maxMCNSDEventAllPrimTrackMeanPtMult1[2]={10.,149.5};
\r
622 sprintf(name,"fMCNSDEventAllPrimTrackMeanPtMult1");
\r
623 sprintf(title,"event <mcPt>:mult");
\r
625 fMCNSDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtMult1,minMCNSDEventAllPrimTrackMeanPtMult1,maxMCNSDEventAllPrimTrackMeanPtMult1);
\r
626 fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
627 fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
628 fMCNSDEventAllPrimTrackMeanPtMult1->Sumw2();
\r
631 Int_t binsMCTriggerPrimTrackMeanPtTrueMult1[2]={100,150};
\r
632 Double_t minMCTriggerPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
633 Double_t maxMCTriggerPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
634 sprintf(name,"fMCTriggerPrimTrackMeanPtTrueMult1");
\r
635 sprintf(title,"event <mcPt>:true_mult");
\r
637 fMCTriggerPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtTrueMult1,minMCTriggerPrimTrackMeanPtTrueMult1,maxMCTriggerPrimTrackMeanPtTrueMult1);
\r
638 fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
639 fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
640 fMCTriggerPrimTrackMeanPtTrueMult1->Sumw2();
\r
642 Int_t binsMCTriggerPrimTrackMeanPtMult1[2]={100,150};
\r
643 Double_t minMCTriggerPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
644 Double_t maxMCTriggerPrimTrackMeanPtMult1[2]={10.,149.5};
\r
645 sprintf(name,"fMCTriggerPrimTrackMeanPtMult1");
\r
646 sprintf(title,"event <mcPt>:mult");
\r
648 fMCTriggerPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtMult1,minMCTriggerPrimTrackMeanPtMult1,maxMCTriggerPrimTrackMeanPtMult1);
\r
649 fMCTriggerPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
650 fMCTriggerPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
651 fMCTriggerPrimTrackMeanPtMult1->Sumw2();
\r
654 Int_t binsMCEventPrimTrackMeanPtTrueMult1[2]={100,150};
\r
655 Double_t minMCEventPrimTrackMeanPtTrueMult1[2]={0.,-0.5};
\r
656 Double_t maxMCEventPrimTrackMeanPtTrueMult1[2]={10.,149.5};
\r
657 sprintf(name,"fMCEventPrimTrackMeanPtTrueMult1");
\r
658 sprintf(title,"event <mcPt>:true_mult");
\r
660 fMCEventPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtTrueMult1,minMCEventPrimTrackMeanPtTrueMult1,maxMCEventPrimTrackMeanPtTrueMult1);
\r
661 fMCEventPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
662 fMCEventPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult");
\r
663 fMCEventPrimTrackMeanPtTrueMult1->Sumw2();
\r
665 Int_t binsMCEventPrimTrackMeanPtMult1[2]={100,150};
\r
666 Double_t minMCEventPrimTrackMeanPtMult1[2]={0.,-0.5};
\r
667 Double_t maxMCEventPrimTrackMeanPtMult1[2]={10.,149.5};
\r
668 sprintf(name,"fMCEventPrimTrackMeanPtMult1");
\r
669 sprintf(title,"event <mcPt>:mult");
\r
671 fMCEventPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtMult1,minMCEventPrimTrackMeanPtMult1,maxMCEventPrimTrackMeanPtMult1);
\r
672 fMCEventPrimTrackMeanPtMult1->GetAxis(0)->SetTitle("<mcPt> (GeV/c)");
\r
673 fMCEventPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity");
\r
674 fMCEventPrimTrackMeanPtMult1->Sumw2();
\r
682 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++)
\r
684 // THnSparse track histograms
\r
686 Int_t binsRecTrackHist1[3]={ptNbins,etaNbins,90};
\r
687 Double_t minRecTrackHist1[3]={0.,-1.,0.};
\r
688 Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()};
\r
689 sprintf(name,"fRecTrackHist1_%d",i);
\r
690 sprintf(title,"Pt:Eta:Phi");
\r
692 fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1);
\r
693 fRecTrackHist1[i]->SetBinEdges(0,binsPt);
\r
694 fRecTrackHist1[i]->SetBinEdges(1,binsEta);
\r
695 fRecTrackHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
696 fRecTrackHist1[i]->GetAxis(1)->SetTitle("Eta");
\r
697 fRecTrackHist1[i]->GetAxis(2)->SetTitle("Phi (rad)");
\r
698 fRecTrackHist1[i]->Sumw2();
\r
702 Int_t binsCorrRecTrackMultHist1[3]={ptNbins,etaNbins,150};
\r
703 Double_t minCorrRecTrackMultHist1[3]={0.,-1.,-0.5};
\r
704 Double_t maxCorrRecTrackMultHist1[3]={20.,1.,149.5};
\r
706 Int_t binsCorrRecTrackTrueMultHist1[3]={ptNbins,etaNbins,150};
\r
707 Double_t minCorrRecTrackTrueMultHist1[3]={0.,-1.,-0.5};
\r
708 Double_t maxCorrRecTrackTrueMultHist1[3]={20.,1.,149.5};
\r
710 Int_t binsCorrRecTrackTrueMultHist2[3]={ptNbins,150,150};
\r
711 Double_t minCorrRecTrackTrueMultHist2[3]={0.,-0.5,-0.5};
\r
712 Double_t maxCorrRecTrackTrueMultHist2[3]={20.,149.5,149.5};
\r
715 Int_t binsCorrRecTrackMeanPtMultHist1[2]={100,150};
\r
716 Double_t minCorrRecTrackMeanPtMultHist1[2]={0.,-0.5};
\r
717 Double_t maxCorrRecTrackMeanPtMultHist1[2]={10.,149.5};
\r
719 Int_t binsCorrRecTrackMeanPtTrueMultHist1[2]={100,150};
\r
720 Double_t minCorrRecTrackMeanPtTrueMultHist1[2]={0.,-0.5};
\r
721 Double_t maxCorrRecTrackMeanPtTrueMultHist1[2]={10.,149.5};
\r
723 Int_t binsCorrRecTrackPt1[1]={200};
\r
724 Double_t minCorrRecTrackPt1[1]={0.};
\r
725 Double_t maxCorrRecTrackPt1[1]={10.};
\r
727 for(Int_t i=0; i<8; i++)
\r
729 // THnSparse track histograms
\r
730 sprintf(name,"fCorrRecTrackMultHist1_%d",i);
\r
731 sprintf(title,"Pt:Eta:mult");
\r
732 fCorrRecTrackMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackMultHist1,minCorrRecTrackMultHist1,maxCorrRecTrackMultHist1);
\r
733 fCorrRecTrackMultHist1[i]->SetBinEdges(0,binsPt);
\r
734 fCorrRecTrackMultHist1[i]->SetBinEdges(1,binsEta);
\r
735 fCorrRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
736 fCorrRecTrackMultHist1[i]->GetAxis(1)->SetTitle("Eta");
\r
737 fCorrRecTrackMultHist1[i]->GetAxis(2)->SetTitle("multiplicity");
\r
738 fCorrRecTrackMultHist1[i]->Sumw2();
\r
740 // THnSparse track histograms
\r
741 sprintf(name,"fCorrRecTrackTrueMultHist1_%d",i);
\r
742 sprintf(title,"Pt:Eta:true_mult");
\r
743 fCorrRecTrackTrueMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist1,minCorrRecTrackTrueMultHist1,maxCorrRecTrackTrueMultHist1);
\r
744 fCorrRecTrackTrueMultHist1[i]->SetBinEdges(0,binsPt);
\r
745 fCorrRecTrackTrueMultHist1[i]->SetBinEdges(1,binsEta);
\r
746 fCorrRecTrackTrueMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
747 fCorrRecTrackTrueMultHist1[i]->GetAxis(1)->SetTitle("Eta");
\r
748 fCorrRecTrackTrueMultHist1[i]->GetAxis(2)->SetTitle("true multiplicity");
\r
749 fCorrRecTrackTrueMultHist1[i]->Sumw2();
\r
752 sprintf(name,"fCorrRecTrackTrueMultHist2_%d",i);
\r
753 sprintf(title,"Pt:mult:true_mult");
\r
754 fCorrRecTrackTrueMultHist2[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist2,minCorrRecTrackTrueMultHist2,maxCorrRecTrackTrueMultHist2);
\r
755 fCorrRecTrackTrueMultHist2[i]->SetBinEdges(0,binsPt);
\r
756 fCorrRecTrackTrueMultHist2[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
757 fCorrRecTrackTrueMultHist2[i]->GetAxis(1)->SetTitle("multiplicity");
\r
758 fCorrRecTrackTrueMultHist2[i]->GetAxis(2)->SetTitle("true multiplicity");
\r
759 fCorrRecTrackTrueMultHist2[i]->Sumw2();
\r
761 // THnSparse track histograms
\r
762 sprintf(name,"fCorrRecTrackMeanPtMultHist1_%d",i);
\r
763 sprintf(title,"<Pt>:mult");
\r
764 fCorrRecTrackMeanPtMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtMultHist1,minCorrRecTrackMeanPtMultHist1,maxCorrRecTrackMeanPtMultHist1);
\r
765 fCorrRecTrackMeanPtMultHist1[i]->GetAxis(0)->SetTitle("<Pt> (GeV/c)");
\r
766 fCorrRecTrackMeanPtMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");
\r
767 fCorrRecTrackMeanPtMultHist1[i]->Sumw2();
\r
769 // THnSparse track histograms
\r
770 sprintf(name,"fCorrRecTrackMeanPtTrueMultHist1_%d",i);
\r
771 sprintf(title,"<Pt>:true_mult");
\r
772 fCorrRecTrackMeanPtTrueMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtTrueMultHist1,minCorrRecTrackMeanPtTrueMultHist1,maxCorrRecTrackMeanPtTrueMultHist1);
\r
773 fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(0)->SetTitle("<Pt> (GeV/c)");
\r
774 fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(1)->SetTitle("true multiplicity");
\r
775 fCorrRecTrackMeanPtTrueMultHist1[i]->Sumw2();
\r
777 sprintf(name,"fCorrRecTrackPt1_%d",i);
\r
778 sprintf(title,"pt small bining");
\r
779 fCorrRecTrackPt1[i] = new THnSparseF(name,title,1,binsCorrRecTrackPt1,minCorrRecTrackPt1,maxCorrRecTrackPt1);
\r
780 fCorrRecTrackPt1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
781 fCorrRecTrackPt1[i]->Sumw2();
\r
785 Int_t binsEventMatrix[2]={zvNbins,150};
\r
786 Double_t minEventMatrix[2]={-25.,-0.5};
\r
787 Double_t maxEventMatrix[2]={25.,149.5};
\r
789 fMCAllEventMultHist1 = new THnSparseF("fMCAllEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
790 fMCAllEventMultHist1->SetBinEdges(0,binsZv);
\r
791 fMCAllEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
792 fMCAllEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
793 fMCAllEventMultHist1->Sumw2();
\r
795 fMCAllNDEventMultHist1 = new THnSparseF("fMCAllNDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
796 fMCAllNDEventMultHist1->SetBinEdges(0,binsZv);
\r
797 fMCAllNDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
798 fMCAllNDEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
799 fMCAllNDEventMultHist1->Sumw2();
\r
801 fMCAllNSDEventMultHist1 = new THnSparseF("fMCAllNSDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
802 fMCAllNSDEventMultHist1->SetBinEdges(0,binsZv);
\r
803 fMCAllNSDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
804 fMCAllNSDEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
805 fMCAllNSDEventMultHist1->Sumw2();
\r
807 fMCTriggerMultHist1 = new THnSparseF("fMCTriggerMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
808 fMCTriggerMultHist1->SetBinEdges(0,binsZv);
\r
809 fMCTriggerMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
810 fMCTriggerMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
811 fMCTriggerMultHist1->Sumw2();
\r
813 fMCEventMultHist1 = new THnSparseF("fMCEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
814 fMCEventMultHist1->SetBinEdges(0,binsZv);
\r
815 fMCEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)");
\r
816 fMCEventMultHist1->GetAxis(1)->SetTitle("multiplicity");
\r
817 fMCEventMultHist1->Sumw2();
\r
819 for(Int_t i=0; i<5; i++)
\r
821 // event corrected histograms
\r
822 sprintf(name,"fCorrRecEventHist1_%d",i);
\r
823 sprintf(title,"mcZv:mult");
\r
824 fCorrRecEventHist1[i] = new THnSparseF("fCorrRecEventHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
825 fCorrRecEventHist1[i]->SetBinEdges(0,binsZv);
\r
826 fCorrRecEventHist1[i]->GetAxis(0)->SetTitle("Zv (cm)");
\r
827 fCorrRecEventHist1[i]->GetAxis(1)->SetTitle("multiplicity");
\r
828 fCorrRecEventHist1[i]->Sumw2();
\r
830 // empty event corrected histograms
\r
831 sprintf(name,"fCorrRecEventHist2_%d",i);
\r
832 sprintf(title,"mcZv:mult");
\r
833 fCorrRecEventHist2[i] = new THnSparseF("fCorrRecEventHist2","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
834 fCorrRecEventHist2[i]->SetBinEdges(0,binsZv);
\r
835 fCorrRecEventHist2[i]->GetAxis(0)->SetTitle("Zv (cm)");
\r
836 fCorrRecEventHist2[i]->GetAxis(1)->SetTitle("multiplicity");
\r
837 fCorrRecEventHist2[i]->Sumw2();
\r
843 Int_t binsCosmicsHisto[3]= {151, 300, ptNbins};
\r
844 Double_t minCosmicsHisto[3]={-1.5, -2.*TMath::Pi(), 0.0};
\r
845 Double_t maxCosmicsHisto[3]={ 1.5, 2.*TMath::Pi(), 16.0};
\r
846 sprintf(name,"fCosmicsHisto");
\r
847 sprintf(title,"deta:dphi:pt");
\r
849 fCosmicsHisto = new THnSparseF(name,title,3,binsCosmicsHisto,minCosmicsHisto,maxCosmicsHisto);
\r
850 fCosmicsHisto->SetBinEdges(2,binsPt);
\r
851 fCosmicsHisto->GetAxis(0)->SetTitle("#Delta#eta");
\r
852 fCosmicsHisto->GetAxis(1)->SetTitle("#Delta#phi (rad)");
\r
853 fCosmicsHisto->GetAxis(2)->SetTitle("pt (GV/c)");
\r
854 fCosmicsHisto->Sumw2();
\r
857 Int_t binsEventCount[2]={2,2};
\r
858 Double_t minEventCount[2]={0,0};
\r
859 Double_t maxEventCount[2]={2,2};
\r
860 fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",2,binsEventCount,minEventCount,maxEventCount);
\r
861 fEventCount->GetAxis(0)->SetTitle("trig");
\r
862 fEventCount->GetAxis(1)->SetTitle("trig+vert");
\r
863 fEventCount->Sumw2();
\r
866 // init output folder
\r
867 fCorrectionFolder = CreateFolder("folderdNdPt","Correction dNdPt Folder");
\r
869 // init correction matrices
\r
870 TFile *file = (TFile *)TFile::Open(fCorrMatrixFileName.Data());
\r
872 AliDebug(AliLog::kError, "file with efficiency matrices not available");
\r
873 printf("file with efficiency matrices not available \n");
\r
875 TFolder *folder = (TFolder *)file->FindObjectAny("folderdNdPt");
\r
877 AliDebug(AliLog::kError, "file without folderdNdPt");
\r
878 printf("file without folderdNdPt \n");
\r
880 // rec. event mult vs true multiplicity
\r
881 fEventMultCorrelationMatrix = (THnSparseF*)folder->FindObject("event_mult_correlation_matrix");
\r
882 if(!fEventMultCorrelationMatrix) {
\r
883 Printf("No %s matrix \n", "event_mult_correlation_matrix");
\r
888 // event level corrections (zv,mult_MB)
\r
891 // trigger bias correction (MBtoND)
\r
892 fCorrTriggerMBtoNDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoND_corr_matrix");
\r
893 if(!fCorrTriggerMBtoNDEventMatrix) {
\r
894 Printf("No %s matrix \n", "zv_mult_trig_MBtoND_corr_matrix");
\r
898 // trigger bias correction (MBtoNSD)
\r
899 fCorrTriggerMBtoNSDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoNSD_corr_matrix");
\r
900 if(!fCorrTriggerMBtoNSDEventMatrix) {
\r
901 Printf("No %s matrix \n", "zv_mult_trig_MBtoNSD_corr_matrix");
\r
905 // trigger bias correction (MBtoInel)
\r
906 fCorrTriggerMBtoInelEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoInel_corr_matrix");
\r
907 if(!fCorrTriggerMBtoInelEventMatrix) {
\r
908 Printf("No %s matrix \n", "zv_mult_trig_MBtoInel_corr_matrix");
\r
912 // vertex reconstruction efficiency correction
\r
913 fCorrEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_event_corr_matrix");
\r
914 if(!fCorrEventMatrix) {
\r
915 Printf("No %s matrix \n", "zv_mult_event_corr_matrix");
\r
920 // histogram needed for empty events corrections
\r
922 fZvNorm = (TH1D*)folder->FindObject("zv_distribution_norm");
\r
924 Printf("No %s matrix \n", "fZvNorm");
\r
928 fZvEmptyEventsNorm = (TH1D*)folder->FindObject("zv_empty_events_norm");
\r
929 if(!fZvEmptyEventsNorm) {
\r
930 Printf("No %s matrix \n", "fZvEmptyEventsNorm");
\r
934 fLHCBin0Background = (TH1D*)folder->FindObject("hLHCBin0Background");
\r
935 if(!fLHCBin0Background) {
\r
936 Printf("No %s matrix \n", "fLHCBin0Background");
\r
941 // track-event level corrections (zv,pt,eta)
\r
944 // trigger bias correction (MBtoND)
\r
945 fCorrTriggerMBtoNDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoND_corr_matrix");
\r
946 if(!fCorrTriggerMBtoNDTrackEventMatrix) {
\r
947 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoND_corr_matrix");
\r
951 // trigger bias correction (MBtoNSD)
\r
952 fCorrTriggerMBtoNSDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoNSD_corr_matrix");
\r
953 if(!fCorrTriggerMBtoNSDTrackEventMatrix) {
\r
954 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoNSD_corr_matrix");
\r
958 // trigger bias correction (MBtoInel)
\r
959 fCorrTriggerMBtoInelTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoInel_corr_matrix");
\r
960 if(!fCorrTriggerMBtoInelTrackEventMatrix) {
\r
961 Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoInel_corr_matrix");
\r
965 // vertex reconstruction efficiency correction (zv,pt,eta)
\r
966 fCorrTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_event_corr_matrix");
\r
967 if(!fCorrTrackEventMatrix) {
\r
968 Printf("No %s matrix \n", "zv_pt_eta_track_event_corr_matrix");
\r
972 // track reconstruction efficiency correction (zv,pt,eta)
\r
973 fCorrTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_corr_matrix");
\r
974 if(!fCorrTrackMatrix) {
\r
975 Printf("No %s matrix \n", "zv_pt_eta_track_corr_matrix");
\r
979 // high pt track reconstruction efficiency correction (zv,pt,eta)
\r
980 fCorrHighPtTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_highPt_track_corr_matrix");
\r
981 if(!fCorrHighPtTrackMatrix) {
\r
982 Printf("No %s matrix \n", "zv_pt_eta_highPt_track_corr_matrix");
\r
986 // secondary tracks contamination correction (zv,pt,eta)
\r
987 fContTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_cont_matrix");
\r
988 if(!fContTrackMatrix) {
\r
989 Printf("No %s matrix \n", "zv_pt_eta_track_cont_matrix");
\r
993 // multiply reconstructed tracks correction
\r
994 fContMultTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_mult_track_cont_matrix");
\r
995 if(!fContMultTrackMatrix) {
\r
996 Printf("No %s matrix \n", "zv_pt_eta_mult_track_cont_matrix");
\r
1004 //_____________________________________________________________________________
\r
1005 void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
\r
1008 // Process real and/or simulated events
\r
1011 AliDebug(AliLog::kError, "esdEvent not available");
\r
1015 // get selection cuts
\r
1016 AlidNdPtEventCuts *evtCuts = GetEventCuts();
\r
1017 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
\r
1018 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
\r
1020 if(!evtCuts || !accCuts || !esdTrackCuts) {
\r
1021 AliDebug(AliLog::kError, "cuts not available");
\r
1025 // trigger selection
\r
1026 Bool_t isEventTriggered = kTRUE;
\r
1027 AliPhysicsSelection *trigSel = NULL;
\r
1028 AliTriggerAnalysis *trigAna = NULL; // needed for andV0
\r
1030 if(evtCuts->IsTriggerRequired())
\r
1033 trigSel = GetPhysicsTriggerSelection();
\r
1035 AliDebug(AliLog::kError, "cannot get trigSel");
\r
1039 if(IsUseMCInfo())
\r
1041 trigSel->SetAnalyzeMC();
\r
1043 if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)
\r
1045 // check V0 systematics (case1)
\r
1046 // Initialization done in the macro
\r
1047 trigAna = trigSel->GetTriggerAnalysis();
\r
1051 //trigAna->SetV0HwPars(15, 61.5, 86.5);
\r
1052 //trigAna->SetV0AdcThr(15);
\r
1054 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1055 //printf("MB1 & kVZEROCase1 %d \n",isEventTriggered);
\r
1056 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1058 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1060 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1061 //printf("V0AND %d \n",isEventTriggered);
\r
1064 else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2)
\r
1066 // check V0 systematics (case2 only in MC)
\r
1067 // Initialization done in the macro
\r
1069 trigAna = trigSel->GetTriggerAnalysis();
\r
1073 //trigAna->SetV0HwPars(0, 0, 125);
\r
1074 //trigAna->SetV0AdcThr(0);
\r
1076 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1077 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1079 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1081 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1082 //printf("V0AND %d \n",isEventTriggered);
\r
1086 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1087 //printf("MB1 %d \n",isEventTriggered);
\r
1089 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1091 trigAna = trigSel->GetTriggerAnalysis();
\r
1095 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1096 //printf("V0AND %d \n",isEventTriggered);
\r
1102 // 0-multiplicity bin for LHC background correction
\r
1104 if(GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1105 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt)
\r
1107 trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx);
\r
1109 trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx);
\r
1112 if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)
\r
1114 // check V0 systematics (case1)
\r
1115 // Initialization done in the macro
\r
1116 trigAna = trigSel->GetTriggerAnalysis();
\r
1120 //trigAna->SetV0HwPars(15, 61.5, 86.5);
\r
1121 //trigAna->SetV0AdcThr(15);
\r
1123 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1124 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1126 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1128 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1129 //printf("V0AND %d \n",isEventTriggered);
\r
1133 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1134 //printf("MB1 %d \n",isEventTriggered);
\r
1136 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1138 trigAna = trigSel->GetTriggerAnalysis();
\r
1142 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1143 //printf("V0AND %d \n",isEventTriggered);
\r
1149 // use MC information
\r
1150 AliHeader* header = 0;
\r
1151 AliGenEventHeader* genHeader = 0;
\r
1152 AliStack* stack = 0;
\r
1154 AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;
\r
1155 Int_t multMCTrueTracks = 0;
\r
1160 AliDebug(AliLog::kError, "mcEvent not available");
\r
1164 // get MC event header
\r
1165 header = mcEvent->Header();
\r
1167 AliDebug(AliLog::kError, "Header not available");
\r
1170 // MC particle stack
\r
1171 stack = mcEvent->Stack();
\r
1173 AliDebug(AliLog::kError, "Stack not available");
\r
1177 // get event type (ND=0x1, DD=0x2, SD=0x4)
\r
1178 evtType = AliPWG0Helper::GetEventProcessType(header);
\r
1179 //Printf("evtType %d \n", evtType);
\r
1180 AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));
\r
1183 genHeader = header->GenEventHeader();
\r
1185 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
\r
1188 genHeader->PrimaryVertex(vtxMC);
\r
1190 // Fill MC event histogram
\r
1191 Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};
\r
1192 fMCEventHist1->Fill(vMCEventHist1);
\r
1194 // multipliticy of all MC primary tracks
\r
1195 // in Zvtx, eta ranges
\r
1196 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
\r
1200 // get reconstructed vertex
\r
1201 const AliESDVertex* vtxESD = 0;
\r
1202 Bool_t isRecVertex = kFALSE;
\r
1203 if(evtCuts->IsRecVertexRequired())
\r
1205 Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();
\r
1206 Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();
\r
1207 vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints);
\r
1208 isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE);
\r
1211 if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {
\r
1212 vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");
\r
1213 isRecVertex = kTRUE;
\r
1216 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex;
\r
1217 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);
\r
1218 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());
\r
1220 // vertex contributors
\r
1221 Int_t multMBTracks = 0;
\r
1222 if(GetAnalysisMode() == AlidNdPtHelper::kTPC)
\r
1224 if(vtxESD->GetStatus() && isRecVertex)
\r
1225 multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);
\r
1227 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx ||
\r
1228 GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid )
\r
1230 const AliMultiplicity* mult = esdEvent->GetMultiplicity();
\r
1231 //if(mult && vtxESD->GetStatus() && isRecVertex)
\r
1233 multMBTracks = mult->GetNumberOfTracklets();
\r
1236 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1237 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt)
\r
1239 if(vtxESD->GetStatus() && isRecVertex)
\r
1240 multMBTracks = vtxESD->GetNContributors();
\r
1244 AliDebug(AliLog::kError, Form("Found analysis type %s", GetAnalysisMode()));
\r
1248 Bool_t isTrigAndVertex = isEventTriggered && isEventOK;
\r
1249 Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex};
\r
1250 fEventCount->Fill(vEventCount);
\r
1253 // correct event and track histograms
\r
1255 TObjArray *allChargedTracks=0;
\r
1256 Int_t multRec=0, multRecTemp=0;
\r
1257 Int_t *labelsRec=0;
\r
1258 Bool_t isCosmic = kFALSE;
\r
1261 if(isEventOK && isEventTriggered)
\r
1263 // get all charged tracks
\r
1264 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());
\r
1265 if(!allChargedTracks) return;
\r
1267 Int_t entries = allChargedTracks->GetEntries();
\r
1268 labelsRec = new Int_t[entries];
\r
1270 // calculate mult of reconstructed tracks
\r
1272 for(Int_t i=0; i<entries;++i)
\r
1274 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1275 if(!track) continue;
\r
1276 if(track->Charge()==0) continue;
\r
1279 // only postive charged
\r
1280 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1283 // only negative charged
\r
1284 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1287 // cosmics analysis
\r
1288 isCosmic = kFALSE;
\r
1289 if( GetParticleMode()==AlidNdPtHelper::kCosmic )
\r
1291 for(Int_t j=0; j<entries;++j)
\r
1293 AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);
\r
1294 if(!track1) continue;
\r
1295 if(track1->Charge()==0) continue;
\r
1297 if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) &&
\r
1298 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) )
\r
1300 isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);
\r
1304 Double_t vCosmicsHisto[3] = { track->Eta()+track1->Eta(), track->Phi()-track1->Phi(), track1->Pt() };
\r
1305 fCosmicsHisto->Fill(vCosmicsHisto);
\r
1309 if(!isCosmic) continue;
\r
1312 if(esdTrackCuts->AcceptTrack(track))
\r
1314 if(accCuts->AcceptTrack(track)) multRecTemp++;
\r
1316 if(GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) {
\r
1317 if(AlidNdPtHelper::IsGoodImpPar(track) && accCuts->AcceptTrack(track)) multRecTemp++;
\r
1320 if(accCuts->AcceptTrack(track)) multRecTemp++;
\r
1327 // check multiplicity
\r
1328 const AliMultiplicity* mult = esdEvent->GetMultiplicity();
\r
1329 Int_t trackletMult = 0;
\r
1331 for(Int_t i=0; i<mult->GetNumberOfTracklets(); i++) {
\r
1332 if(TMath::Abs(mult->GetEta(i)) < accCuts->GetMaxEta() )
\r
1336 // use tracklet multiplicity
\r
1337 multRecTemp = trackletMult;
\r
1341 for(Int_t i=0; i<entries;++i)
\r
1343 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1344 if(!track) continue;
\r
1345 if(track->Charge()==0) continue;
\r
1347 // only postive charged
\r
1348 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1351 // only negative charged
\r
1352 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1355 // track-level corrections
\r
1356 if(!esdTrackCuts->AcceptTrack(track)) continue;
\r
1357 //if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue;
\r
1359 // cosmics analysis
\r
1360 isCosmic = kFALSE;
\r
1361 if( GetParticleMode()==AlidNdPtHelper::kCosmic )
\r
1363 for(Int_t j=0; j<entries;++j)
\r
1365 AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);
\r
1366 if(!track1) continue;
\r
1367 if(track1->Charge()==0) continue;
\r
1369 if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) &&
\r
1370 esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) )
\r
1372 isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1);
\r
1375 if(!isCosmic) continue;
\r
1378 Bool_t isOK = kFALSE;
\r
1379 Double_t x[3]; track->GetXYZ(x);
\r
1380 Double_t b[3]; AliTracker::GetBxByBz(x,b);
\r
1383 // if TPC-ITS hybrid tracking (kTPCITSHybrid)
\r
1384 // replace track parameters with TPC-ony track parameters
\r
1386 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt)
\r
1388 // Relate TPC-only tracks to Tracks or SPD vertex
\r
1389 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);
\r
1390 if(!isOK) continue;
\r
1392 // replace esd track parameters with TPCinner
\r
1393 AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam()));
\r
1394 if (!tpcTrack) return;
\r
1395 track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());
\r
1397 if(tpcTrack) delete tpcTrack;
\r
1401 if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCTrackSPDvtxUpdate)
\r
1404 // update track parameters
\r
1406 AliExternalTrackParam cParam;
\r
1407 isOK = track->RelateToVertexTPC(vtxESD,esdEvent->GetMagneticField(),kVeryBig,&cParam);
\r
1408 if(!isOK) continue;
\r
1409 track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());
\r
1411 if(accCuts->AcceptTrack(track)) {
\r
1412 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp,multMCTrueTracks);
\r
1413 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1417 else if (GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo())
\r
1420 // Replace rec with MC
\r
1422 if(accCuts->AcceptTrack(track)) {
\r
1423 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxMC[2],multRecTemp, multMCTrueTracks);
\r
1424 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1430 // all the rest tracking scenarios
\r
1432 if(accCuts->AcceptTrack(track)) {
\r
1433 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp, multMCTrueTracks);
\r
1434 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1440 // event-level corrections
\r
1441 if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo())
\r
1443 FillHistograms(AlidNdPtHelper::kRecEvents,vtxMC[2],multMBTracks);
\r
1446 FillHistograms(AlidNdPtHelper::kRecEvents,vtxESD->GetZv(),multMBTracks);
\r
1449 // calculate meanPt from the event
\r
1450 Double_t meanPtMult[8] = {0};
\r
1451 for (Int_t i = 0; i<8; i++) {
\r
1452 if(!fCorrRecTrackMultHist1[i]) continue;
\r
1453 TH1D *hp = (TH1D *)fCorrRecTrackPt1[i]->Projection(0);
\r
1455 meanPtMult[i] = hp->GetMean();
\r
1456 Double_t vCorrRecTrackMeanPtMultHist1[2] = {meanPtMult[i],multRecTemp};
\r
1457 fCorrRecTrackMeanPtMultHist1[i]->Fill(vCorrRecTrackMeanPtMultHist1);
\r
1459 if( IsUseMCInfo() ) {
\r
1460 Double_t vCorrRecTrackMeanPtTrueMultHist1[2] = {meanPtMult[i],multMCTrueTracks};
\r
1461 fCorrRecTrackMeanPtTrueMultHist1[i]->Fill(vCorrRecTrackMeanPtTrueMultHist1);
\r
1464 // reset pt histo for the next event
\r
1465 if(fCorrRecTrackPt1[i]) fCorrRecTrackPt1[i]->Reset();
\r
1469 // control event histograms
\r
1470 Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};
\r
1471 fRecEventHist1->Fill(vRecEventHist1);
\r
1473 // correlation track multiplicity vs MB track multiplicity
\r
1474 Double_t vRecEventMultHist1[3] = {multRec, multMBTracks};
\r
1475 fRecEventMultHist1->Fill(vRecEventMultHist1);
\r
1478 // empty events corrections
\r
1479 // no reconstructed zv
\r
1480 if( isEventTriggered && multMBTracks==0 )
\r
1482 if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo())
\r
1484 FillHistograms(AlidNdPtHelper::kTriggeredEvents,vtxMC[2],multMBTracks);
\r
1487 Double_t zv = fZvNorm->GetRandom();
\r
1488 if(zv>evtCuts->GetMinZv() && zv<evtCuts->GetMaxZv())
\r
1489 FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks);
\r
1493 if(IsUseMCInfo())
\r
1495 // select MC events
\r
1496 if(evtCuts->AcceptMCEvent(mcEvent))
\r
1499 // event histograms
\r
1501 Double_t vMCEventMatrix[2] = {vtxMC[2],multMBTracks};
\r
1502 fMCAllEventMultHist1->Fill(vMCEventMatrix);
\r
1504 if(evtType == AliPWG0Helper::kND) {
\r
1505 fMCAllNDEventMultHist1->Fill(vMCEventMatrix);
\r
1507 if(evtType != AliPWG0Helper::kSD) {
\r
1508 fMCAllNSDEventMultHist1->Fill(vMCEventMatrix);
\r
1510 if(isEventTriggered) {
\r
1511 fMCTriggerMultHist1->Fill(vMCEventMatrix);
\r
1513 if(isEventTriggered && isEventOK) {
\r
1514 fMCEventMultHist1->Fill(vMCEventMatrix);
\r
1518 // MC histograms for efficiency studies
\r
1520 Double_t sumPtMC = 0;
\r
1521 Int_t nPart = stack->GetNtrack();
\r
1522 for (Int_t iMc = 0; iMc < nPart; ++iMc)
\r
1524 // print MC stack info
\r
1525 //AlidNdPtHelper::PrintMCInfo(stack,iMc);
\r
1527 TParticle* particle = stack->Particle(iMc);
\r
1531 // only charged particles
\r
1533 if(!particle->GetPDG()) continue;
\r
1534 Double_t charge = particle->GetPDG()->Charge()/3.;
\r
1535 if (TMath::Abs(charge) < 0.001)
\r
1538 // only postive charged
\r
1539 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
\r
1542 // only negative charged
\r
1543 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
\r
1546 // physical primary
\r
1547 Bool_t prim = stack->IsPhysicalPrimary(iMc);
\r
1548 if(!prim) continue;
\r
1550 // all primaries in acceptance
\r
1551 if(!accCuts->AcceptTrack(particle)) continue;
\r
1553 Double_t gpt = particle->Pt();
\r
1554 Double_t geta = particle->Eta();
\r
1556 // sum up pt in the event
\r
1559 Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRecTemp};
\r
1560 Double_t valMCAllTrackTrueMultHist1[3] = {gpt,geta,multMCTrueTracks};
\r
1561 Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRecTemp,multMCTrueTracks};
\r
1563 fMCAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1564 fMCAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1565 fMCAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1567 if(evtType == AliPWG0Helper::kND) {
\r
1568 fMCNDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1569 fMCNDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1570 fMCNDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1572 if(evtType != AliPWG0Helper::kSD) {
\r
1573 fMCNSDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1574 fMCNSDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1575 fMCNSDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1577 if(isEventTriggered) {
\r
1578 fMCTriggerPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1579 fMCTriggerPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1580 fMCTriggerPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1582 if(isEventTriggered && isEventOK) {
\r
1583 fMCEventPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);
\r
1584 fMCEventPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);
\r
1585 fMCEventPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2);
\r
1590 // calculate <pt> in the event
\r
1592 Double_t meanPtMCMult = 0;
\r
1593 Double_t meanPtMCTrueMult = 0;
\r
1594 if(multRecTemp) {
\r
1595 meanPtMCMult = sumPtMC/multRecTemp;
\r
1597 if(multMCTrueTracks) {
\r
1598 meanPtMCTrueMult = sumPtMC/multMCTrueTracks;
\r
1601 Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRecTemp};
\r
1602 Double_t valMCMeanPtTrueMult[2] = {meanPtMCTrueMult,multMCTrueTracks};
\r
1604 fMCAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1605 fMCAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1607 if(evtType == AliPWG0Helper::kND) {
\r
1608 fMCNDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1609 fMCNDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1611 if(evtType != AliPWG0Helper::kSD) {
\r
1612 fMCNSDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1613 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1615 if(isEventTriggered) {
\r
1616 fMCTriggerPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1617 fMCTriggerPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1619 if(isEventTriggered && isEventOK) {
\r
1620 fMCEventPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);
\r
1621 fMCEventPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);
\r
1626 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;
\r
1627 if(labelsRec) delete [] labelsRec; labelsRec = 0;
\r
1629 if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;
\r
1632 //_____________________________________________________________________________
\r
1633 void AlidNdPtCorrection::FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBTracks) const
\r
1636 // Fill corrected histograms
\r
1639 Double_t vEventMatrix[2] = {zv,multMBTracks};
\r
1641 // Correct for efficiency
\r
1643 if(eventObj == AlidNdPtHelper::kRecEvents && multMBTracks>0)
\r
1645 Double_t corrToMBF = GetCorrFactZvMult(fCorrEventMatrix,zv,multMBTracks);
\r
1646 Double_t corrToInelF = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);
\r
1647 Double_t corrToNDF = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);
\r
1648 Double_t corrToNSDF = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);
\r
1649 //printf("corrToMBF %f, corrToInelF %f, corrToNDF %f corrToNSDF %f \n",corrToMBF,corrToInelF,corrToNDF,corrToNSDF);
\r
1651 fCorrRecEventHist1[0]->Fill(vEventMatrix);
\r
1652 fCorrRecEventHist1[1]->Fill(vEventMatrix,corrToMBF);
\r
1653 fCorrRecEventHist1[2]->Fill(vEventMatrix,corrToMBF*corrToInelF);
\r
1654 fCorrRecEventHist1[3]->Fill(vEventMatrix,corrToMBF*corrToNDF);
\r
1655 fCorrRecEventHist1[4]->Fill(vEventMatrix,corrToMBF*corrToNSDF);
\r
1658 if(eventObj==AlidNdPtHelper::kTriggeredEvents && multMBTracks==0) // empty triggered events
\r
1660 Double_t factLHCBack = 1.;
\r
1661 if(!IsUseMCInfo()) factLHCBack = fLHCBin0Background->GetBinContent(1);
\r
1664 Int_t bin = fZvEmptyEventsNorm->FindBin(zv);
\r
1665 Double_t factZ = fZvEmptyEventsNorm->GetBinContent(bin);
\r
1667 Double_t corrToInelF0 = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);
\r
1668 Double_t corrToNDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);
\r
1669 Double_t corrToNSDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);
\r
1670 //printf("factLHCBack %f, factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factLHCBack,factZ,corrToInelF0,corrToNDF0,corrToNSDF0);
\r
1672 fCorrRecEventHist2[0]->Fill(vEventMatrix);
\r
1673 fCorrRecEventHist2[1]->Fill(vEventMatrix,factLHCBack*factZ);
\r
1674 fCorrRecEventHist2[2]->Fill(vEventMatrix,factLHCBack*factZ*corrToInelF0);
\r
1675 fCorrRecEventHist2[3]->Fill(vEventMatrix,factLHCBack*factZ*corrToNDF0);
\r
1676 fCorrRecEventHist2[4]->Fill(vEventMatrix,factLHCBack*factZ*corrToNSDF0);
\r
1680 //_____________________________________________________________________________
\r
1681 void AlidNdPtCorrection::FillHistograms(AliESDtrack * const esdTrack, AliStack * const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t mult, Int_t trueMult) const
\r
1684 // Fill ESD track and MC histograms
\r
1686 if(!esdTrack) return;
\r
1688 //Float_t q = esdTrack->Charge();
\r
1689 Float_t pt = esdTrack->Pt();
\r
1690 Float_t eta = esdTrack->Eta();
\r
1691 Float_t phi = esdTrack->Phi();
\r
1693 if(stack && GetAnalysisMode() == AlidNdPtHelper::kMCRec)
\r
1695 Int_t label = TMath::Abs(esdTrack->GetLabel());
\r
1697 TParticle* particle = stack->Particle(label);
\r
1698 if(!particle) return;
\r
1700 if(!particle->GetPDG()) return;
\r
1701 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1702 if(TMath::Abs(gq)<0.001) return;
\r
1703 Float_t gpt = particle->Pt();
\r
1704 Float_t geta = particle->Eta();
\r
1705 Float_t gphi = particle->Phi();
\r
1707 // replace reconstructed values with MC
\r
1714 // Fill histograms
\r
1716 Double_t values[3] = {pt,eta,phi};
\r
1717 fRecTrackHist1[trackObj]->Fill(values);
\r
1720 // Correct for contamination and efficiency
\r
1722 if(trackObj == AlidNdPtHelper::kRecTracks || GetAnalysisMode() == AlidNdPtHelper::kMCRec)
\r
1724 // track level corrections
\r
1725 Double_t trackEffF = 1.0;
\r
1726 if(pt < 2.6) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta);
\r
1727 else trackEffF = GetCorrFactZvPtEta(fCorrHighPtTrackMatrix,zv,pt,eta);
\r
1729 Double_t trackContF = GetContFactZvPtEta(fContTrackMatrix,zv,pt,eta);
\r
1730 Double_t multTrackContF = GetContFactZvPtEta(fContMultTrackMatrix,zv,pt,eta);
\r
1731 //printf("zv %f, pt %f, eta %f \n",zv,pt,eta);
\r
1732 //printf("trackEffF %f, trackContF %f, multTrackContF %f \n", trackEffF, trackContF, multTrackContF);
\r
1734 // track-event level corrections
\r
1735 Double_t vertexEffF = GetCorrFactZvPtEta(fCorrTrackEventMatrix,zv,pt,eta);
\r
1736 Double_t trigMBToInel = GetCorrFactZvPtEta(fCorrTriggerMBtoInelTrackEventMatrix,zv,pt,eta);
\r
1737 Double_t trigMBToND = GetCorrFactZvPtEta(fCorrTriggerMBtoNDTrackEventMatrix,zv,pt,eta);
\r
1738 Double_t trigMBToNSD = GetCorrFactZvPtEta(fCorrTriggerMBtoNSDTrackEventMatrix,zv,pt,eta);
\r
1739 //printf("vertexEffF %f, trigMBToInel %f, trigMBToNSD %f \n", vertexEffF, trigMBToInel, trigMBToNSD);
\r
1741 Double_t corrF[8] = { 1.0,
\r
1743 trackContF*trackEffF,
\r
1744 trackContF*trackEffF*multTrackContF,
\r
1745 trackContF*trackEffF*multTrackContF*vertexEffF,
\r
1746 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToInel,
\r
1747 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToND,
\r
1748 trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToNSD
\r
1751 // Fill histograms
\r
1752 Double_t valCorrRecTrackMultHist1[3] = {pt,eta,mult};
\r
1753 Double_t valCorrRecTrackPt1[1] = {pt};
\r
1754 for(Int_t i=0; i<8; i++) {
\r
1755 fCorrRecTrackMultHist1[i]->Fill(valCorrRecTrackMultHist1,corrF[i]);
\r
1756 fCorrRecTrackPt1[i]->Fill(valCorrRecTrackPt1,corrF[i]);
\r
1758 if( IsUseMCInfo() ) {
\r
1759 Double_t valCorrRecTrackTrueMultHist1[3] = {pt,eta,trueMult};
\r
1760 Double_t valCorrRecTrackTrueMultHist2[3] = {pt,mult,trueMult};
\r
1762 fCorrRecTrackTrueMultHist1[i]->Fill(valCorrRecTrackTrueMultHist1,corrF[i]);
\r
1763 fCorrRecTrackTrueMultHist2[i]->Fill(valCorrRecTrackTrueMultHist2,corrF[i]);
\r
1769 void AlidNdPtCorrection::FillHistograms(AliStack * const stack, Int_t /*label*/, AlidNdPtHelper::TrackObject /*trackObj*/, Int_t /*mult*/) const
\r
1771 // Fill MC histograms
\r
1772 if(!stack) return;
\r
1775 TParticle* particle = stack->Particle(label);
\r
1776 if(!particle) return;
\r
1778 Int_t mother_pdg = -1;
\r
1779 TParticle* mother = 0;
\r
1781 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
\r
1782 Int_t motherLabel = particle->GetMother(0);
\r
1783 if(motherLabel>0) mother = stack->Particle(motherLabel);
\r
1784 if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
\r
1785 Int_t mech = particle->GetUniqueID(); // production mechanism
\r
1787 if(!particle->GetPDG()) return;
\r
1788 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1789 Float_t gpt = particle->Pt();
\r
1790 Float_t qgpt = particle->Pt() * gq;
\r
1791 Float_t geta = particle->Eta();
\r
1792 Float_t gphi = particle->Phi();
\r
1793 Float_t gpz = particle->Pz();
\r
1795 Bool_t prim = stack->IsPhysicalPrimary(label);
\r
1796 Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();
\r
1799 if (TMath::Abs(particle->GetPdgCode()) == kElectron) { pid = 0; }
\r
1800 else if (TMath::Abs(particle->GetPdgCode()) == kMuonMinus) { pid = 1; }
\r
1801 else if (TMath::Abs(particle->GetPdgCode()) == kPiPlus) { pid = 2; }
\r
1802 else if (TMath::Abs(particle->GetPdgCode()) == kKPlus) { pid = 3; }
\r
1803 else if (TMath::Abs(particle->GetPdgCode()) == kProton) { pid = 4; }
\r
1807 //if(!prim) printf("prim_mother %d, mother %d, particle %d, production mech %d\n",prim_mother->GetPdgCode(),mother->GetPdgCode(), particle->GetPdgCode(),mech);
\r
1811 //_____________________________________________________________________________
\r
1812 Double_t AlidNdPtCorrection::GetCorrFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {
\r
1813 // return correction factor F(zv,pt,eta)
\r
1815 if(!hist) return 1.;
\r
1818 TAxis *ax = hist->GetAxis(0);
\r
1819 TAxis *ay = hist->GetAxis(1);
\r
1820 TAxis *az = hist->GetAxis(2);
\r
1822 Int_t binx = ax->FindBin(zv);
\r
1823 Int_t biny = ay->FindBin(pt);
\r
1824 Int_t binz = az->FindBin(eta);
\r
1825 Int_t dim[3] = {binx,biny,binz};
\r
1827 Double_t fact = hist->GetBinContent(dim);
\r
1832 //_____________________________________________________________________________
\r
1833 Double_t AlidNdPtCorrection::GetContFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {
\r
1834 // return contamination correction factor F(zv,pt,eta)
\r
1836 if(!hist) return 1.0;
\r
1839 TAxis *ax = hist->GetAxis(0);
\r
1840 TAxis *ay = hist->GetAxis(1);
\r
1841 TAxis *az = hist->GetAxis(2);
\r
1843 Int_t binx = ax->FindBin(zv);
\r
1844 Int_t biny = ay->FindBin(pt);
\r
1845 Int_t binz = az->FindBin(eta);
\r
1846 Int_t dim[3] = {binx,biny,binz};
\r
1849 // additional correction for secondary
\r
1850 // particles with strangeness (data driven)
\r
1852 Double_t corrFact = 1.;
\r
1853 if(!IsUseMCInfo()) corrFact = AlidNdPtHelper::GetStrangenessCorrFactor(pt);
\r
1854 //printf("pt %f, corrFact %f \n", pt, corrFact);
\r
1856 Double_t fact = 1.0 - corrFact*hist->GetBinContent(dim);
\r
1857 //Double_t fact = hist->GetBinContent(dim);
\r
1862 //_____________________________________________________________________________
\r
1863 Double_t AlidNdPtCorrection::GetCorrFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {
\r
1864 // return correction factor F(zv,mult)
\r
1866 if(!hist) return 1.;
\r
1868 TAxis *ax = hist->GetAxis(0);
\r
1869 TAxis *ay = hist->GetAxis(1);
\r
1870 Int_t binx = ax->FindBin(zv);
\r
1871 Int_t biny = ay->FindBin(mult);
\r
1872 Int_t dim[2] = {binx,biny};
\r
1874 Double_t fact = hist->GetBinContent(dim);
\r
1880 //_____________________________________________________________________________
\r
1881 Double_t AlidNdPtCorrection::GetContFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {
\r
1882 // return contamination correction factor F(zv,mult)
\r
1884 if(!hist) return 1.;
\r
1886 TAxis *ax = hist->GetAxis(0);
\r
1887 TAxis *ay = hist->GetAxis(1);
\r
1888 Int_t binx = ax->FindBin(zv);
\r
1889 Int_t biny = ay->FindBin(mult);
\r
1890 Int_t dim[2] = {binx,biny};
\r
1891 Double_t fact = 1.0-hist->GetBinContent(dim);
\r
1896 //_____________________________________________________________________________
\r
1897 Long64_t AlidNdPtCorrection::Merge(TCollection* const list)
\r
1899 // Merge list of objects (needed by PROOF)
\r
1904 if (list->IsEmpty())
\r
1907 TIterator* iter = list->MakeIterator();
\r
1910 // collection of generated histograms
\r
1912 // physics selection
\r
1913 TList *collPhysSelection = new TList;
\r
1916 while((obj = iter->Next()) != 0) {
\r
1917 AlidNdPtCorrection* entry = dynamic_cast<AlidNdPtCorrection*>(obj);
\r
1918 if (entry == 0) continue;
\r
1920 collPhysSelection->Add(entry->GetPhysicsTriggerSelection());
\r
1922 fEventCount->Add(entry->fEventCount);
\r
1924 fMCEventHist1->Add(entry->fMCEventHist1);
\r
1925 fRecEventHist1->Add(entry->fRecEventHist1);
\r
1926 fRecEventMultHist1->Add(entry->fRecEventMultHist1);
\r
1928 fMCAllEventMultHist1->Add(entry->fMCAllEventMultHist1);
\r
1929 fMCAllNDEventMultHist1->Add(entry->fMCAllNDEventMultHist1);
\r
1930 fMCAllNSDEventMultHist1->Add(entry->fMCAllNSDEventMultHist1);
\r
1931 fMCTriggerMultHist1->Add(entry->fMCTriggerMultHist1);
\r
1932 fMCEventMultHist1->Add(entry->fMCEventMultHist1);
\r
1934 fMCAllPrimTrackMultHist1->Add(entry->fMCAllPrimTrackMultHist1);
\r
1935 fMCNDEventAllPrimTrackMultHist1->Add(entry->fMCNDEventAllPrimTrackMultHist1);
\r
1936 fMCNSDEventAllPrimTrackMultHist1->Add(entry->fMCNSDEventAllPrimTrackMultHist1);
\r
1937 fMCTriggerPrimTrackMultHist1->Add(entry->fMCTriggerPrimTrackMultHist1);
\r
1938 fMCEventPrimTrackMultHist1->Add(entry->fMCEventPrimTrackMultHist1);
\r
1940 fMCAllPrimTrackTrueMultHist1->Add(entry->fMCAllPrimTrackTrueMultHist1);
\r
1941 fMCNDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNDEventAllPrimTrackTrueMultHist1);
\r
1942 fMCNSDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist1);
\r
1943 fMCTriggerPrimTrackTrueMultHist1->Add(entry->fMCTriggerPrimTrackTrueMultHist1);
\r
1944 fMCEventPrimTrackTrueMultHist1->Add(entry->fMCEventPrimTrackTrueMultHist1);
\r
1946 fMCAllPrimTrackTrueMultHist2->Add(entry->fMCAllPrimTrackTrueMultHist2);
\r
1947 fMCNDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNDEventAllPrimTrackTrueMultHist2);
\r
1948 fMCNSDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist2);
\r
1949 fMCTriggerPrimTrackTrueMultHist2->Add(entry->fMCTriggerPrimTrackTrueMultHist2);
\r
1950 fMCEventPrimTrackTrueMultHist2->Add(entry->fMCEventPrimTrackTrueMultHist2);
\r
1952 fMCAllPrimTrackMeanPtMult1->Add(entry->fMCAllPrimTrackMeanPtMult1);
\r
1953 fMCNDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtMult1);
\r
1954 fMCNSDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtMult1);
\r
1955 fMCTriggerPrimTrackMeanPtMult1->Add(entry->fMCTriggerPrimTrackMeanPtMult1);
\r
1956 fMCEventPrimTrackMeanPtMult1->Add(entry->fMCEventPrimTrackMeanPtMult1);
\r
1958 fMCAllPrimTrackMeanPtTrueMult1->Add(entry->fMCAllPrimTrackMeanPtTrueMult1);
\r
1959 fMCNDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtTrueMult1);
\r
1960 fMCNSDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtTrueMult1);
\r
1961 fMCTriggerPrimTrackMeanPtTrueMult1->Add(entry->fMCTriggerPrimTrackMeanPtTrueMult1);
\r
1962 fMCEventPrimTrackMeanPtTrueMult1->Add(entry->fMCEventPrimTrackMeanPtTrueMult1);
\r
1964 fCosmicsHisto->Add(entry->fCosmicsHisto);
\r
1966 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
1967 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);
\r
1970 for(Int_t i=0; i<8; i++) {
\r
1971 fCorrRecTrackMultHist1[i]->Add(entry->fCorrRecTrackMultHist1[i]);
\r
1972 fCorrRecTrackTrueMultHist1[i]->Add(entry->fCorrRecTrackTrueMultHist1[i]);
\r
1973 fCorrRecTrackTrueMultHist2[i]->Add(entry->fCorrRecTrackTrueMultHist2[i]);
\r
1975 fCorrRecTrackMeanPtMultHist1[i]->Add(entry->fCorrRecTrackMeanPtMultHist1[i]);
\r
1976 fCorrRecTrackMeanPtTrueMultHist1[i]->Add(entry->fCorrRecTrackMeanPtTrueMultHist1[i]);
\r
1978 fCorrRecTrackPt1[i]->Add(entry->fCorrRecTrackPt1[i]);
\r
1981 for(Int_t i=0; i<5; i++) {
\r
1982 fCorrRecEventHist1[i]->Add(entry->fCorrRecEventHist1[i]);
\r
1983 fCorrRecEventHist2[i]->Add(entry->fCorrRecEventHist2[i]);
\r
1990 AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();
\r
1991 trigSelection->Merge(collPhysSelection);
\r
1992 if(collPhysSelection) delete collPhysSelection;
\r
1997 //____________________________________________________________________________
\r
1998 Int_t AlidNdPtCorrection::GetTrueMult(THnSparse * const hist, Int_t mult) const
\r
2001 // get multiplicity of primary particles
\r
2003 if(!hist) return 0;
\r
2004 Int_t trueMult = 0;
\r
2007 TAxis *ax = hist->GetAxis(0);
\r
2008 TAxis *ay = hist->GetAxis(1);
\r
2009 ax->SetRange(1,ax->GetNbins());
\r
2010 ay->SetRange(1,ay->GetNbins());
\r
2013 ax->SetRangeUser((Float_t)mult,(Float_t)mult);
\r
2015 // get true multiplicity
\r
2016 TH1D *h1 = (TH1D *)hist->Projection(1);
\r
2017 trueMult = (Int_t)h1->GetMean();
\r
2022 //_____________________________________________________________________________
\r
2023 void AlidNdPtCorrection::Analyse()
\r
2025 // Analyse histograms
\r
2027 TH1::AddDirectory(kFALSE);
\r
2028 TH1 *h = 0, *hs=0, *hsc=0;
\r
2031 TObjArray *aFolderObj = new TObjArray;
\r
2036 AlidNdPtEventCuts *evtCuts = GetEventCuts();
\r
2037 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
\r
2038 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
\r
2040 if(!evtCuts || !accCuts || !esdTrackCuts) {
\r
2041 Error("AlidNdPtCutAnalysis::Analyse()", "cuts not available");
\r
2046 // set min and max values
\r
2048 //Double_t minPt = accCuts->GetMinPt();
\r
2049 //Double_t maxPt = accCuts->GetMaxPt();
\r
2050 Double_t minEta = accCuts->GetMinEta();
\r
2051 Double_t maxEta = accCuts->GetMaxEta()-0.00001;
\r
2053 printf("minEta %f, maxEta %f \n",minEta, maxEta);
\r
2056 // LHC backgraund in all and 0-bins
\r
2058 AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();
\r
2059 trigSel->SaveHistograms("physics_selection");
\r
2062 // cosmics background histo
\r
2064 h2D = fCosmicsHisto->Projection(0,1);
\r
2065 h2D->SetName("deta_vs_dphi_cosmics");
\r
2066 aFolderObj->Add(h2D);
\r
2071 h = fCorrRecEventHist1[0]->Projection(1);
\r
2072 h->SetName("mult_event_not_corrected");
\r
2073 aFolderObj->Add(h);
\r
2075 h = fCorrRecEventHist1[1]->Projection(1);
\r
2076 h->SetName("mult_event_vertex_corrected");
\r
2077 aFolderObj->Add(h);
\r
2079 h = fCorrRecEventHist1[2]->Projection(1);
\r
2080 h->SetName("mult_trigger_vertex_corrected");
\r
2081 aFolderObj->Add(h);
\r
2083 h = fCorrRecEventHist1[3]->Projection(1);
\r
2084 h->SetName("mult_ND_trigger_vertex_corrected");
\r
2085 aFolderObj->Add(h);
\r
2087 h = fCorrRecEventHist1[4]->Projection(1);
\r
2088 h->SetName("mult_NSD_trigger_vertex_corrected");
\r
2089 aFolderObj->Add(h);
\r
2092 h = fCorrRecEventHist2[0]->Projection(1);
\r
2093 h->SetName("mult_empty_event_not_corrected");
\r
2094 aFolderObj->Add(h);
\r
2096 h = fCorrRecEventHist2[1]->Projection(1);
\r
2097 h->SetName("mult_empty_event_vertex_corrected");
\r
2098 aFolderObj->Add(h);
\r
2100 h = fCorrRecEventHist2[2]->Projection(1);
\r
2101 h->SetName("mult_empty_trigger_vertex_corrected");
\r
2102 aFolderObj->Add(h);
\r
2104 h = fCorrRecEventHist2[3]->Projection(1);
\r
2105 h->SetName("mult_empty_ND_trigger_vertex_corrected");
\r
2106 aFolderObj->Add(h);
\r
2108 h = fCorrRecEventHist2[4]->Projection(1);
\r
2109 h->SetName("mult_empty_NSD_trigger_vertex_corrected");
\r
2110 aFolderObj->Add(h);
\r
2115 if(IsUseMCInfo()) {
\r
2118 h = fMCAllEventMultHist1->Projection(1);
\r
2119 h->SetName("mc_mult_event_acc_prim");
\r
2120 aFolderObj->Add(h);
\r
2122 h = fMCAllNDEventMultHist1->Projection(1);
\r
2123 h->SetName("mc_mult_ND_event_acc_prim");
\r
2124 aFolderObj->Add(h);
\r
2126 h = fMCAllNSDEventMultHist1->Projection(1);
\r
2127 h->SetName("mc_mult_NSD_event_acc_prim");
\r
2128 aFolderObj->Add(h);
\r
2130 h = fMCTriggerMultHist1->Projection(1);
\r
2131 h->SetName("mc_mult_trigger_acc_prim");
\r
2132 aFolderObj->Add(h);
\r
2134 h = fMCEventMultHist1->Projection(1);
\r
2135 h->SetName("mc_mult_trigger_event_acc_prim");
\r
2136 aFolderObj->Add(h);
\r
2143 // limit eta range
\r
2144 for(Int_t i=0;i<8;i++) {
\r
2145 //fCorrRecTrackMultHist1[i]->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2146 //fCorrRecTrackMultHist1[i]->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2148 //fMCAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2149 //fMCAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2151 //fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2152 //fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2154 //fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2155 //fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2157 //fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2158 //fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2160 //fMCEventPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt);
\r
2161 //fMCEventPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta);
\r
2163 } // end use MC info
\r
2166 h2D = fCorrRecTrackMultHist1[3]->Projection(1,0);
\r
2167 h2D->SetName("pt_eta_rec_track_mult_eff_cont_corrected");
\r
2168 aFolderObj->Add(h2D);
\r
2170 h2D = fCorrRecTrackMultHist1[4]->Projection(1,0);
\r
2171 h2D->SetName("pt_eta_rec_event_track_mult_eff_cont_corrected");
\r
2172 aFolderObj->Add(h2D);
\r
2174 h2D = fCorrRecTrackMultHist1[5]->Projection(1,0);
\r
2175 h2D->SetName("pt_eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
2176 aFolderObj->Add(h2D);
\r
2178 h2D = fCorrRecTrackMultHist1[6]->Projection(1,0);
\r
2179 h2D->SetName("pt_eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2180 aFolderObj->Add(h2D);
\r
2182 h2D = fCorrRecTrackMultHist1[7]->Projection(1,0);
\r
2183 h2D->SetName("pt_eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2184 aFolderObj->Add(h2D);
\r
2188 h2D = fCorrRecTrackMultHist1[3]->Projection(2,0);
\r
2189 h2D->SetName("pt_mult_rec_track_mult_eff_cont_corrected");
\r
2190 aFolderObj->Add(h2D);
\r
2192 h2D = fCorrRecTrackMultHist1[4]->Projection(2,0);
\r
2193 h2D->SetName("pt_mult_rec_event_track_mult_eff_cont_corrected");
\r
2194 aFolderObj->Add(h2D);
\r
2196 h2D = fCorrRecTrackMultHist1[5]->Projection(2,0);
\r
2197 h2D->SetName("pt_mult_rec_trig_event_track_mult_eff_cont_corrected");
\r
2198 aFolderObj->Add(h2D);
\r
2200 h2D = fCorrRecTrackMultHist1[6]->Projection(2,0);
\r
2201 h2D->SetName("pt_mult_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2202 aFolderObj->Add(h2D);
\r
2204 h2D = fCorrRecTrackMultHist1[7]->Projection(2,0);
\r
2205 h2D->SetName("pt_mult_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2206 aFolderObj->Add(h2D);
\r
2210 h = fCorrRecTrackMultHist1[0]->Projection(0);
\r
2211 h->SetName("pt_rec_track_not_corrected");
\r
2212 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2213 hs->SetName("pt_rec_track_not_corrected_s");
\r
2214 aFolderObj->Add(hs);
\r
2217 h = fCorrRecTrackMultHist1[1]->Projection(0);
\r
2218 h->SetName("pt_rec_track_cont_corrected");
\r
2219 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2220 hs->SetName("pt_rec_track_cont_corrected_s");
\r
2221 aFolderObj->Add(hs);
\r
2223 hsc = (TH1D*)hs->Clone("pt_rec_track_cont_corr_fact");
\r
2224 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));
\r
2225 aFolderObj->Add(hsc);
\r
2228 h = fCorrRecTrackMultHist1[2]->Projection(0);
\r
2229 h->SetName("pt_rec_track_eff_cont_corrected");
\r
2230 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2231 hs->SetName("pt_rec_track_eff_cont_corrected_s");
\r
2232 aFolderObj->Add(hs);
\r
2234 hsc = (TH1D*)hs->Clone("pt_rec_track_eff_corr_fact");
\r
2235 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_cont_corrected_s"));
\r
2236 aFolderObj->Add(hsc);
\r
2239 h = fCorrRecTrackMultHist1[3]->Projection(0);
\r
2240 h->SetName("pt_rec_track_mult_eff_cont_corrected");
\r
2241 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2242 hs->SetName("pt_rec_track_mult_eff_cont_corrected_s");
\r
2243 aFolderObj->Add(hs);
\r
2245 hsc = (TH1D*)hs->Clone("pt_rec_track_mult_corr_fact");
\r
2246 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_eff_cont_corrected_s"));
\r
2247 aFolderObj->Add(hsc);
\r
2249 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2250 hsc = (TH1D*)hs->Clone("pt_rec_track_mult_eff_cont_corr_fact");
\r
2251 hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s"));
\r
2252 aFolderObj->Add(hsc);
\r
2254 hsc = (TH1D*)hs->Clone();
\r
2255 hsc->SetName("pt_rec_track_mult_eff_cont_corrected_s_norm");
\r
2256 hsc->Scale(1./(fCorrRecEventHist1[0]->Projection(1)->Integral()));
\r
2257 aFolderObj->Add(hsc);
\r
2260 h = fCorrRecTrackMultHist1[4]->Projection(0);
\r
2261 h->SetName("pt_rec_event_track_mult_eff_cont_corrected");
\r
2262 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2263 hs->SetName("pt_rec_event_track_mult_eff_cont_corrected_s");
\r
2264 aFolderObj->Add(hs);
\r
2266 hsc = (TH1D*)hs->Clone();
\r
2267 hsc->SetName("pt_rec_event_track_mult_eff_cont_corrected_s_norm");
\r
2268 hsc->Scale(1./(fCorrRecEventHist1[1]->Projection(1)->Integral()+fCorrRecEventHist2[1]->Projection(1)->Integral()));
\r
2269 aFolderObj->Add(hsc);
\r
2272 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2273 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected");
\r
2274 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2275 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s");
\r
2276 aFolderObj->Add(hs);
\r
2278 hsc = (TH1D*)hs->Clone();
\r
2279 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2280 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral() + fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2281 aFolderObj->Add(hsc);
\r
2284 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(0., maxEta);
\r
2286 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2287 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_posEta");
\r
2288 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2289 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_posEta");
\r
2290 aFolderObj->Add(hs);
\r
2292 hsc = (TH1D*)hs->Clone();
\r
2293 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");
\r
2294 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2295 aFolderObj->Add(hsc);
\r
2298 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(minEta, -0.00001);
\r
2300 h = fCorrRecTrackMultHist1[5]->Projection(0);
\r
2301 h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_negEta");
\r
2302 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2303 hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_negEta");
\r
2304 aFolderObj->Add(hs);
\r
2306 hsc = (TH1D*)hs->Clone();
\r
2307 hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");
\r
2308 hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));
\r
2309 aFolderObj->Add(hsc);
\r
2311 fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[5]->GetAxis(1)->GetNbins());
\r
2314 h = fCorrRecTrackMultHist1[6]->Projection(0);
\r
2315 h->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2316 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2317 hs->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s");
\r
2318 aFolderObj->Add(hs);
\r
2320 hsc = (TH1D*)hs->Clone();
\r
2321 hsc->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2322 hsc->Scale(1./(fCorrRecEventHist1[3]->Projection(1)->Integral()+fCorrRecEventHist2[3]->Projection(1)->Integral()));
\r
2323 aFolderObj->Add(hsc);
\r
2326 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2327 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2328 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2329 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s");
\r
2330 aFolderObj->Add(hs);
\r
2332 hsc = (TH1D*)hs->Clone();
\r
2333 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2334 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral() + fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2335 aFolderObj->Add(hsc);
\r
2340 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(0., maxEta);
\r
2342 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2343 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_posEta");
\r
2344 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2345 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_posEta");
\r
2346 aFolderObj->Add(hs);
\r
2348 hsc = (TH1D*)hs->Clone();
\r
2349 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");
\r
2350 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2351 aFolderObj->Add(hsc);
\r
2356 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(minEta, -0.00001);
\r
2358 h = fCorrRecTrackMultHist1[7]->Projection(0);
\r
2359 h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_negEta");
\r
2360 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2361 hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_negEta");
\r
2362 aFolderObj->Add(hs);
\r
2364 hsc = (TH1D*)hs->Clone();
\r
2365 hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");
\r
2366 hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));
\r
2367 aFolderObj->Add(hsc);
\r
2369 fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[7]->GetAxis(1)->GetNbins());
\r
2372 h = fCorrRecTrackMultHist1[0]->Projection(1);
\r
2373 h->SetName("eta_rec_track_not_corrected");
\r
2374 aFolderObj->Add(h);
\r
2376 h = fCorrRecTrackMultHist1[1]->Projection(1);
\r
2377 h->SetName("eta_rec_track_cont_corrected");
\r
2378 aFolderObj->Add(h);
\r
2380 h = fCorrRecTrackMultHist1[2]->Projection(1);
\r
2381 h->SetName("eta_rec_track_eff_cont_corrected");
\r
2382 aFolderObj->Add(h);
\r
2384 h = fCorrRecTrackMultHist1[3]->Projection(1);
\r
2385 h->SetName("eta_rec_track_mult_eff_cont_corrected");
\r
2386 aFolderObj->Add(h);
\r
2388 h = fCorrRecTrackMultHist1[4]->Projection(1);
\r
2389 h->SetName("eta_rec_event_track_mult_eff_cont_corrected");
\r
2390 aFolderObj->Add(h);
\r
2392 h = fCorrRecTrackMultHist1[5]->Projection(1);
\r
2393 h->SetName("eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
2394 aFolderObj->Add(h);
\r
2396 h = fCorrRecTrackMultHist1[6]->Projection(1);
\r
2397 h->SetName("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2398 aFolderObj->Add(h);
\r
2400 h = fCorrRecTrackMultHist1[7]->Projection(1);
\r
2401 h->SetName("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2402 aFolderObj->Add(h);
\r
2408 if(IsUseMCInfo()) {
\r
2411 h2D = fMCAllPrimTrackMultHist1->Projection(2,0);
\r
2412 h2D->SetName("mc_all_pt_mult_acc_prim");
\r
2413 aFolderObj->Add(h2D);
\r
2415 h2D = fMCAllPrimTrackMultHist1->Projection(1,0);
\r
2416 h2D->SetName("mc_all_eta_pt_acc_prim");
\r
2417 aFolderObj->Add(h2D);
\r
2419 h2D = fMCNDEventAllPrimTrackMultHist1->Projection(2,0);
\r
2420 h2D->SetName("mc_ND_all_pt_mult_acc_prim");
\r
2421 aFolderObj->Add(h2D);
\r
2423 h2D = fMCNDEventAllPrimTrackMultHist1->Projection(1,0);
\r
2424 h2D->SetName("mc_ND_all_eta_pt_acc_prim");
\r
2425 aFolderObj->Add(h2D);
\r
2427 h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(2,0);
\r
2428 h2D->SetName("mc_NSD_all_pt_mult_acc_prim");
\r
2429 aFolderObj->Add(h2D);
\r
2431 h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(1,0);
\r
2432 h2D->SetName("mc_NSD_all_eta_pt_acc_prim");
\r
2433 aFolderObj->Add(h2D);
\r
2437 h = fMCAllPrimTrackMultHist1->Projection(0);
\r
2438 h->SetName("mc_all_pt_acc_prim");
\r
2439 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2440 hs->SetName("mc_all_pt_acc_prim_s");
\r
2441 aFolderObj->Add(hs);
\r
2443 hsc = (TH1D*)hs->Clone();
\r
2444 hsc->SetName("mc_all_pt_acc_prim_s_norm");
\r
2445 hsc->Scale(1./fMCAllEventMultHist1->Projection(1)->Integral());
\r
2446 aFolderObj->Add(hsc);
\r
2448 h = fMCNDEventAllPrimTrackMultHist1->Projection(0);
\r
2449 h->SetName("mc_ND_all_pt_acc_prim");
\r
2450 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2451 hs->SetName("mc_ND_all_pt_acc_prim_s");
\r
2452 aFolderObj->Add(hs);
\r
2454 hsc = (TH1D*)hs->Clone();
\r
2455 hsc->SetName("mc_ND_all_pt_acc_prim_s_norm");
\r
2456 hsc->Scale(1./fMCAllNDEventMultHist1->Projection(1)->Integral());
\r
2457 aFolderObj->Add(hsc);
\r
2459 h = fMCNSDEventAllPrimTrackMultHist1->Projection(0);
\r
2460 h->SetName("mc_NSD_all_pt_acc_prim");
\r
2461 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2462 hs->SetName("mc_NSD_all_pt_acc_prim_s");
\r
2463 aFolderObj->Add(hs);
\r
2465 hsc = (TH1D*)hs->Clone();
\r
2466 hsc->SetName("mc_NSD_all_pt_acc_prim_s_norm");
\r
2467 hsc->Scale(1./fMCAllNSDEventMultHist1->Projection(1)->Integral());
\r
2468 aFolderObj->Add(hsc);
\r
2470 h = fMCTriggerPrimTrackMultHist1->Projection(0);
\r
2471 h->SetName("mc_trigger_all_pt_acc_prim");
\r
2472 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2473 hs->SetName("mc_trigger_all_pt_acc_prim_s");
\r
2474 aFolderObj->Add(hs);
\r
2476 hsc = (TH1D*)hs->Clone();
\r
2477 hsc->SetName("mc_trigger_all_pt_acc_prim_s_norm");
\r
2478 hsc->Scale(1./fMCTriggerMultHist1->Projection(1)->Integral());
\r
2479 aFolderObj->Add(hsc);
\r
2481 h = fMCEventPrimTrackMultHist1->Projection(0);
\r
2482 h->SetName("mc_all_pt_acc_trig_event_prim");
\r
2483 hs = AlidNdPtHelper::ScaleByBinWidth(h);
\r
2484 hs->SetName("mc_all_pt_acc_trig_event_prim_s");
\r
2485 aFolderObj->Add(hs);
\r
2487 hsc = (TH1D*)hs->Clone();
\r
2488 hsc->SetName("mc_all_pt_acc_trig_event_prim_s_norm");
\r
2489 hsc->Scale(1./fMCEventMultHist1->Projection(1)->Integral());
\r
2490 aFolderObj->Add(hsc);
\r
2494 h = fMCAllPrimTrackMultHist1->Projection(1);
\r
2495 h->SetName("mc_all_eta_acc_prim");
\r
2496 aFolderObj->Add(h);
\r
2498 h = fMCNDEventAllPrimTrackMultHist1->Projection(1);
\r
2499 h->SetName("mc_ND_all_eta_acc_prim");
\r
2500 aFolderObj->Add(h);
\r
2502 h = fMCNSDEventAllPrimTrackMultHist1->Projection(1);
\r
2503 h->SetName("mc_NSD_all_eta_acc_prim");
\r
2504 aFolderObj->Add(h);
\r
2506 h = fMCTriggerPrimTrackMultHist1->Projection(1);
\r
2507 h->SetName("mc_trigger_all_eta_acc_prim");
\r
2508 aFolderObj->Add(h);
\r
2510 h = fMCEventPrimTrackMultHist1->Projection(1);
\r
2511 h->SetName("mc_all_eta_acc_trig_event_prim");
\r
2512 aFolderObj->Add(h);
\r
2515 // calculate ratios (rec / mc)
\r
2518 hs = (TH1*)aFolderObj->FindObject("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2519 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_trig_event_track_mult_eff_cont_corrected");
\r
2521 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_prim_s_norm"));
\r
2522 aFolderObj->Add(hsc);
\r
2524 hs = (TH1*)aFolderObj->FindObject("eta_rec_trig_event_track_mult_eff_cont_corrected");
\r
2525 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_trig_event_track_mult_eff_cont_corrected");
\r
2527 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_prim"));
\r
2528 aFolderObj->Add(hsc);
\r
2531 hs = (TH1*)aFolderObj->FindObject("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2532 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected");
\r
2534 hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_pt_acc_prim_s_norm"));
\r
2535 aFolderObj->Add(hsc);
\r
2537 hs = (TH1*)aFolderObj->FindObject("eta_rec_ND_trig_event_track_mult_eff_cont_corrected");
\r
2538 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected");
\r
2540 hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_eta_acc_prim"));
\r
2541 aFolderObj->Add(hsc);
\r
2544 hs = (TH1*)aFolderObj->FindObject("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm");
\r
2545 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2547 hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_pt_acc_prim_s_norm"));
\r
2548 aFolderObj->Add(hsc);
\r
2550 hs = (TH1*)aFolderObj->FindObject("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2551 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected");
\r
2553 hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_eta_acc_prim"));
\r
2554 aFolderObj->Add(hsc);
\r
2557 hs = (TH1*)aFolderObj->FindObject("pt_rec_event_track_mult_eff_cont_corrected_s_norm");
\r
2558 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_event_track_mult_eff_cont_corrected");
\r
2560 hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_pt_acc_prim_s_norm"));
\r
2561 aFolderObj->Add(hsc);
\r
2563 hs = (TH1*)aFolderObj->FindObject("eta_rec_event_track_mult_eff_cont_corrected");
\r
2564 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_event_track_mult_eff_cont_corrected");
\r
2566 hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_eta_acc_prim"));
\r
2567 aFolderObj->Add(hsc);
\r
2570 hs = (TH1*)aFolderObj->FindObject("pt_rec_track_mult_eff_cont_corrected_s_norm");
\r
2571 hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_track_mult_eff_cont_corrected");
\r
2573 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_trig_event_prim_s_norm"));
\r
2574 aFolderObj->Add(hsc);
\r
2576 hs = (TH1*)aFolderObj->FindObject("eta_rec_track_mult_eff_cont_corrected");
\r
2577 hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_track_mult_eff_cont_corrected");
\r
2579 hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_trig_event_prim"));
\r
2580 aFolderObj->Add(hsc);
\r
2582 } // end MC infor available
\r
2584 // export objects to analysis folder
\r
2585 fCorrectionFolder = ExportToFolder(aFolderObj);
\r
2587 // delete only TObjArray
\r
2588 if(aFolderObj) delete aFolderObj;
\r
2591 //_____________________________________________________________________________
\r
2592 TFolder* AlidNdPtCorrection::ExportToFolder(TObjArray * const array)
\r
2594 // recreate folder avery time and export objects to new one
\r
2596 AlidNdPtCorrection * comp=this;
\r
2597 TFolder *folder = comp->GetCorrectionFolder();
\r
2599 TString name, title;
\r
2600 TFolder *newFolder = 0;
\r
2602 Int_t size = array->GetSize();
\r
2605 // get name and title from old folder
\r
2606 name = folder->GetName();
\r
2607 title = folder->GetTitle();
\r
2613 newFolder = CreateFolder(name.Data(),title.Data());
\r
2614 newFolder->SetOwner();
\r
2616 // add objects to folder
\r
2618 newFolder->Add(array->At(i));
\r
2626 //_____________________________________________________________________________
\r
2627 TFolder* AlidNdPtCorrection::CreateFolder(TString name,TString title) {
\r
2628 // create folder for analysed histograms
\r
2630 TFolder *folder = 0;
\r
2631 folder = new TFolder(name.Data(),title.Data());
\r