]>
Commit | Line | Data |
---|---|---|
ca2d9973 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | //------------------------------------------------------------------------------ | |
16 | // AlidNdPtAnalysisPbPb class. | |
17 | // | |
18 | // a. functionality: | |
19 | // - fills analysis control histograms | |
20 | // - fills generic correction matrices | |
21 | // - generates correction matrices | |
22 | // | |
23 | // b. data members: | |
24 | // - generic correction matrices | |
25 | // - control histograms | |
26 | // | |
27 | // Author: J.Otwinowski 04/11/2008 | |
28 | //------------------------------------------------------------------------------ | |
29 | ||
30 | #include "TH1.h" | |
31 | #include "TH2.h" | |
32 | #include "TCanvas.h" | |
33 | #include "THnSparse.h" | |
34 | ||
35 | #include "AliHeader.h" | |
36 | #include "AliGenEventHeader.h" | |
37 | #include "AliStack.h" | |
38 | #include "AliESDEvent.h" | |
39 | #include "AliMCEvent.h" | |
40 | #include "AliESDtrackCuts.h" | |
41 | #include "AliLog.h" | |
42 | #include "AliMultiplicity.h" | |
43 | #include "AliTracker.h" | |
44 | ||
45 | #include "AlidNdPtEventCuts.h" | |
46 | #include "AlidNdPtAcceptanceCuts.h" | |
47 | #include "AliPhysicsSelection.h" | |
48 | #include "AliTriggerAnalysis.h" | |
49 | ||
50 | #include "AliPWG0Helper.h" | |
51 | #include "AlidNdPtHelper.h" | |
52 | #include "AlidNdPtAnalysisPbPb.h" | |
53 | ||
54 | ||
55 | using namespace std; | |
56 | ||
57 | ClassImp(AlidNdPtAnalysisPbPb) | |
58 | ||
59 | //_____________________________________________________________________________ | |
60 | AlidNdPtAnalysisPbPb::AlidNdPtAnalysisPbPb(): AlidNdPt(), | |
61 | fAnalysisFolder(0), | |
62 | fHistogramsOn(kFALSE), | |
63 | ||
64 | // rec. track pt vs true track pt correlation matrix | |
65 | fTrackPtCorrelationMatrix(0), | |
66 | ||
67 | // event level correction | |
68 | fGenEventMatrix(0), | |
69 | fTriggerEventMatrix(0), | |
70 | fRecEventMatrix(0), | |
71 | ||
72 | // | |
73 | // track-event level correction | |
74 | // | |
75 | fGenTrackEventMatrix(0), | |
76 | ||
77 | fTriggerTrackEventMatrix(0), | |
78 | ||
79 | fRecTrackEventMatrix(0), | |
80 | ||
81 | // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix) | |
82 | fGenTrackMatrix(0), | |
83 | fGenPrimTrackMatrix(0), | |
84 | fRecPrimTrackMatrix(0), | |
85 | ||
86 | // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix) | |
87 | fRecTrackMatrix(0), | |
88 | fRecSecTrackMatrix(0), | |
89 | ||
90 | // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix) | |
91 | fRecMultTrackMatrix(0), | |
92 | ||
93 | // event control histograms | |
94 | fMCEventHist1(0), | |
95 | fRecEventHist1(0), | |
96 | fRecEventHist2(0), | |
97 | fRecMCEventHist1(0), | |
98 | fRecMCEventHist2(0), | |
99 | ||
100 | // rec. pt and eta resolution w.r.t MC | |
101 | fRecMCTrackHist1(0), | |
102 | ||
103 | //multple reconstructed tracks | |
104 | fMCMultRecTrackHist1(0), | |
105 | ||
106 | // rec. track control histograms | |
51ce74a4 | 107 | fRecTrackHist3(0) |
ca2d9973 | 108 | { |
109 | // default constructor | |
110 | for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { | |
111 | fMCTrackHist1[i]=0; | |
112 | fMCPrimTrackHist1[i]=0; | |
113 | fMCPrimTrackHist2[i]=0; | |
114 | fMCSecTrackHist1[i]=0; | |
115 | fRecTrackHist1[i]=0; | |
51ce74a4 | 116 | fRecTrackHist2[i]=0; |
ca2d9973 | 117 | fRecTrackMultHist1[i]=0; |
118 | } | |
119 | Init(); | |
120 | } | |
121 | ||
122 | //_____________________________________________________________________________ | |
123 | AlidNdPtAnalysisPbPb::AlidNdPtAnalysisPbPb(Char_t* name, Char_t* title): AlidNdPt(name,title), | |
124 | fAnalysisFolder(0), | |
125 | fHistogramsOn(kFALSE), | |
126 | ||
127 | // rec. track pt vs true track pt correlation matrix | |
128 | fTrackPtCorrelationMatrix(0), | |
129 | ||
130 | // event level correction | |
131 | fGenEventMatrix(0), | |
ca2d9973 | 132 | fTriggerEventMatrix(0), |
ca2d9973 | 133 | fRecEventMatrix(0), |
134 | ||
135 | // | |
136 | // track-event level correction | |
137 | // | |
138 | fGenTrackEventMatrix(0), | |
139 | ||
140 | fTriggerTrackEventMatrix(0), | |
141 | ||
142 | fRecTrackEventMatrix(0), | |
143 | ||
144 | // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix) | |
145 | fGenTrackMatrix(0), | |
146 | fGenPrimTrackMatrix(0), | |
147 | fRecPrimTrackMatrix(0), | |
148 | ||
84794c5b | 149 | // secondary track contamination correction (fRecTrackMatrix - fRecSecTrackMatrix) |
ca2d9973 | 150 | fRecTrackMatrix(0), |
151 | fRecSecTrackMatrix(0), | |
152 | ||
84794c5b | 153 | // multiple rec. track contamination corrections (fRecTrackMatrix - fRecMultTrackMatrix) |
ca2d9973 | 154 | fRecMultTrackMatrix(0), |
155 | ||
84794c5b | 156 | |
157 | ||
158 | ||
ca2d9973 | 159 | // event control histograms |
160 | fMCEventHist1(0), | |
161 | fRecEventHist1(0), | |
162 | fRecEventHist2(0), | |
163 | fRecMCEventHist1(0), | |
164 | fRecMCEventHist2(0), | |
165 | ||
166 | // rec. pt and eta resolution w.r.t MC | |
167 | fRecMCTrackHist1(0), | |
168 | ||
84794c5b | 169 | //multiple reconstructed tracks |
ca2d9973 | 170 | fMCMultRecTrackHist1(0), |
171 | ||
172 | // rec. track control histograms | |
51ce74a4 | 173 | fRecTrackHist3(0) |
ca2d9973 | 174 | { |
175 | // | |
176 | // constructor | |
177 | // | |
178 | for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { | |
179 | fMCTrackHist1[i]=0; | |
180 | fMCPrimTrackHist1[i]=0; | |
181 | fMCPrimTrackHist2[i]=0; | |
182 | fMCSecTrackHist1[i]=0; | |
183 | fRecTrackHist1[i]=0; | |
51ce74a4 | 184 | fRecTrackHist2[i]=0; |
ca2d9973 | 185 | fRecTrackMultHist1[i]=0; |
186 | } | |
187 | ||
188 | Init(); | |
189 | } | |
190 | ||
191 | //_____________________________________________________________________________ | |
192 | AlidNdPtAnalysisPbPb::~AlidNdPtAnalysisPbPb() { | |
193 | // | |
194 | // destructor | |
195 | // | |
196 | if(fTrackPtCorrelationMatrix) delete fTrackPtCorrelationMatrix; fTrackPtCorrelationMatrix=0; | |
197 | // | |
198 | if(fGenEventMatrix) delete fGenEventMatrix; fGenEventMatrix=0; | |
199 | if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0; | |
200 | if(fRecEventMatrix) delete fRecEventMatrix; fRecEventMatrix=0; | |
201 | ||
202 | // | |
203 | if(fGenTrackEventMatrix) delete fGenTrackEventMatrix; fGenTrackEventMatrix=0; | |
204 | if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0; | |
205 | if(fRecTrackEventMatrix) delete fRecTrackEventMatrix; fRecTrackEventMatrix=0; | |
206 | ||
207 | // | |
208 | if(fGenTrackMatrix) delete fGenTrackMatrix; fGenTrackMatrix=0; | |
209 | if(fGenPrimTrackMatrix) delete fGenPrimTrackMatrix; fGenPrimTrackMatrix=0; | |
210 | if(fRecPrimTrackMatrix) delete fRecPrimTrackMatrix; fRecPrimTrackMatrix=0; | |
211 | // | |
212 | if(fRecTrackMatrix) delete fRecTrackMatrix; fRecTrackMatrix=0; | |
213 | if(fRecSecTrackMatrix) delete fRecSecTrackMatrix; fRecSecTrackMatrix=0; | |
214 | // | |
215 | if(fRecMultTrackMatrix) delete fRecMultTrackMatrix; fRecMultTrackMatrix=0; | |
216 | // | |
217 | // Control histograms | |
218 | // | |
219 | if(fMCEventHist1) delete fMCEventHist1; fMCEventHist1=0; | |
220 | if(fRecEventHist1) delete fRecEventHist1; fRecEventHist1=0; | |
221 | if(fRecEventHist2) delete fRecEventHist2; fRecEventHist2=0; | |
222 | if(fRecMCEventHist1) delete fRecMCEventHist1; fRecMCEventHist1=0; | |
223 | if(fRecMCEventHist2) delete fRecMCEventHist2; fRecMCEventHist2=0; | |
224 | ||
225 | // | |
226 | for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { | |
227 | if(fMCTrackHist1[i]) delete fMCTrackHist1[i]; fMCTrackHist1[i]=0; | |
228 | if(fMCPrimTrackHist1[i]) delete fMCPrimTrackHist1[i]; fMCPrimTrackHist1[i]=0; | |
229 | if(fMCPrimTrackHist2[i]) delete fMCPrimTrackHist2[i]; fMCPrimTrackHist2[i]=0; | |
230 | if(fMCSecTrackHist1[i]) delete fMCSecTrackHist1[i]; fMCSecTrackHist1[i]=0; | |
231 | if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0; | |
51ce74a4 | 232 | if(fRecTrackHist2[i]) delete fRecTrackHist2[i]; fRecTrackHist2[i]=0; |
ca2d9973 | 233 | if(fRecTrackMultHist1[i]) delete fRecTrackMultHist1[i]; fRecTrackMultHist1[i]=0; |
234 | } | |
235 | if(fRecMCTrackHist1) delete fRecMCTrackHist1; fRecMCTrackHist1=0; | |
236 | if(fMCMultRecTrackHist1) delete fMCMultRecTrackHist1; fMCMultRecTrackHist1=0; | |
51ce74a4 | 237 | if(fRecTrackHist3) delete fRecTrackHist3; fRecTrackHist3=0; |
ca2d9973 | 238 | // |
239 | if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0; | |
240 | } | |
241 | ||
242 | //_____________________________________________________________________________ | |
243 | void AlidNdPtAnalysisPbPb::Init(){ | |
244 | // | |
245 | // Init histograms | |
246 | // | |
247 | ||
248 | const Int_t multNbins = 47; | |
515964cb | 249 | const Int_t ptNbinsTrackEventCorr = 37; |
65a64eb3 | 250 | const Int_t ptNbins = 68; |
ca2d9973 | 251 | const Int_t etaNbins = 30; |
252 | const Int_t zvNbins = 12; | |
253 | ||
51ce74a4 | 254 | Double_t binsMult[multNbins+1] = { |
255 | -0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5, | |
256 | 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, | |
257 | 19.5, 20.5, 30.5, 40.5 , 50.5 , 60.5 , 70.5 , 80.5 , 90.5 , 100.5, | |
258 | 200.5, 300.5, 400.5, 500.5, 600.5, 700.5, 800.5, 900.5, 1000.5, 2000.5, | |
259 | 3000.5, 4000.5, 5000.5, 6000.5, 7000.5, 8000.5, 9000.5, 10000.5 }; // forPbPb | |
ca2d9973 | 260 | |
515964cb | 261 | Double_t binsPtTrackEventCorr[ptNbinsTrackEventCorr+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,3.0,4.0,20.0,50.0}; |
ca2d9973 | 262 | |
51ce74a4 | 263 | Double_t binsPt[ptNbins+1] = { |
264 | 0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, | |
265 | 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, | |
266 | 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, | |
267 | 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, | |
268 | 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0, | |
269 | 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0, | |
270 | 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0 }; | |
271 | ||
272 | Double_t binsEta[etaNbins+1] = { | |
273 | -1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6, | |
274 | -0.5, -0.4, -0.3, -0.2, -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, | |
275 | 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, | |
276 | 1.5}; | |
ca2d9973 | 277 | |
278 | Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.}; | |
279 | ||
515964cb | 280 | Int_t binsTrackEventCorrMatrix[3]={zvNbins,ptNbinsTrackEventCorr,etaNbins}; |
281 | Int_t binsTrackEvent[3]={zvNbins,ptNbins,etaNbins}; | |
ca2d9973 | 282 | Int_t binsTrackPtCorrelationMatrix[3]={ptNbins,ptNbins,etaNbins}; |
283 | ||
51ce74a4 | 284 | |
ca2d9973 | 285 | fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta",3,binsTrackPtCorrelationMatrix); |
286 | fTrackPtCorrelationMatrix->SetBinEdges(0,binsPt); | |
287 | fTrackPtCorrelationMatrix->SetBinEdges(1,binsPt); | |
288 | fTrackPtCorrelationMatrix->SetBinEdges(2,binsEta); | |
289 | fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)"); | |
290 | fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); | |
291 | fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta"); | |
292 | fTrackPtCorrelationMatrix->Sumw2(); | |
293 | ||
294 | // | |
295 | // Efficiency and contamination correction matrices | |
296 | // | |
297 | Int_t binsEventMatrix[2]={zvNbins,multNbins}; | |
298 | Double_t minEventMatrix[2]={-30.,-0.5}; | |
299 | Double_t maxEventMatrix[2]={30.,10000.5 }; | |
300 | ||
301 | fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix); | |
302 | fGenEventMatrix->SetBinEdges(0,binsZv); | |
303 | fGenEventMatrix->SetBinEdges(1,binsMult); | |
304 | fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
305 | fGenEventMatrix->GetAxis(1)->SetTitle("multiplicity MB"); | |
306 | fGenEventMatrix->Sumw2(); | |
307 | // | |
308 | fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix); | |
309 | fTriggerEventMatrix->SetBinEdges(0,binsZv); | |
310 | fTriggerEventMatrix->SetBinEdges(1,binsMult); | |
311 | fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
312 | fTriggerEventMatrix->GetAxis(1)->SetTitle("multiplicity MB"); | |
313 | fTriggerEventMatrix->Sumw2(); | |
314 | // | |
315 | fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix); | |
316 | fRecEventMatrix->SetBinEdges(0,binsZv); | |
317 | fRecEventMatrix->SetBinEdges(1,binsMult); | |
318 | fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
319 | fRecEventMatrix->GetAxis(1)->SetTitle("multiplicity MB"); | |
320 | fRecEventMatrix->Sumw2(); | |
321 | ||
322 | // | |
323 | // track to event corrections | |
324 | // | |
325 | fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); | |
326 | fGenTrackEventMatrix->SetBinEdges(0,binsZv); | |
515964cb | 327 | fGenTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr); |
ca2d9973 | 328 | fGenTrackEventMatrix->SetBinEdges(2,binsEta); |
329 | fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
330 | fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); | |
331 | fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); | |
332 | fGenTrackEventMatrix->Sumw2(); | |
333 | // | |
334 | fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); | |
335 | fTriggerTrackEventMatrix->SetBinEdges(0,binsZv); | |
515964cb | 336 | fTriggerTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr); |
ca2d9973 | 337 | fTriggerTrackEventMatrix->SetBinEdges(2,binsEta); |
338 | fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
339 | fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); | |
340 | fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); | |
341 | fTriggerTrackEventMatrix->Sumw2(); | |
342 | // | |
343 | fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); | |
344 | fRecTrackEventMatrix->SetBinEdges(0,binsZv); | |
515964cb | 345 | fRecTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr); |
ca2d9973 | 346 | fRecTrackEventMatrix->SetBinEdges(2,binsEta); |
347 | fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
348 | fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); | |
349 | fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); | |
350 | fRecTrackEventMatrix->Sumw2(); | |
351 | ||
352 | // | |
353 | // tracks correction matrices | |
354 | // | |
355 | fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); | |
356 | fGenTrackMatrix->SetBinEdges(0,binsZv); | |
515964cb | 357 | fGenTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr); |
ca2d9973 | 358 | fGenTrackMatrix->SetBinEdges(2,binsEta); |
359 | fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
360 | fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); | |
361 | fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta"); | |
362 | fGenTrackMatrix->Sumw2(); | |
363 | ||
364 | fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); | |
365 | fGenPrimTrackMatrix->SetBinEdges(0,binsZv); | |
515964cb | 366 | fGenPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr); |
ca2d9973 | 367 | fGenPrimTrackMatrix->SetBinEdges(2,binsEta); |
368 | fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
369 | fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); | |
370 | fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta"); | |
371 | fGenPrimTrackMatrix->Sumw2(); | |
372 | ||
373 | ||
374 | fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); | |
375 | fRecPrimTrackMatrix->SetBinEdges(0,binsZv); | |
515964cb | 376 | fRecPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr); |
ca2d9973 | 377 | fRecPrimTrackMatrix->SetBinEdges(2,binsEta); |
378 | fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
379 | fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); | |
380 | fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta"); | |
381 | fRecPrimTrackMatrix->Sumw2(); | |
382 | ||
383 | // | |
384 | fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); | |
385 | fRecTrackMatrix->SetBinEdges(0,binsZv); | |
515964cb | 386 | fRecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr); |
ca2d9973 | 387 | fRecTrackMatrix->SetBinEdges(2,binsEta); |
388 | fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
51ce74a4 | 389 | fRecTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); |
390 | fRecTrackMatrix->GetAxis(2)->SetTitle("mcEta"); | |
ca2d9973 | 391 | fRecTrackMatrix->Sumw2(); |
392 | ||
393 | fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); | |
394 | fRecSecTrackMatrix->SetBinEdges(0,binsZv); | |
515964cb | 395 | fRecSecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr); |
ca2d9973 | 396 | fRecSecTrackMatrix->SetBinEdges(2,binsEta); |
397 | fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
398 | fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)"); | |
399 | fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta"); | |
400 | fRecSecTrackMatrix->Sumw2(); | |
401 | ||
402 | // | |
403 | fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); | |
404 | fRecMultTrackMatrix->SetBinEdges(0,binsZv); | |
515964cb | 405 | fRecMultTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr); |
ca2d9973 | 406 | fRecMultTrackMatrix->SetBinEdges(2,binsEta); |
407 | fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); | |
408 | fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); | |
409 | fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta"); | |
410 | fRecMultTrackMatrix->Sumw2(); | |
411 | ||
412 | // | |
413 | // Control analysis histograms | |
414 | // | |
415 | Int_t binsMCEventHist1[3]={100,100,zvNbins}; | |
416 | Double_t minMCEventHist1[3]={-0.1,-0.1,-30.}; | |
417 | Double_t maxMCEventHist1[3]={0.1,0.1,30.}; | |
418 | fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1); | |
419 | fMCEventHist1->SetBinEdges(2,binsZv); | |
420 | fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)"); | |
421 | fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)"); | |
422 | fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)"); | |
423 | fMCEventHist1->Sumw2(); | |
424 | ||
425 | // | |
426 | Int_t binsRecEventHist1[3]={100,100,zvNbins}; | |
427 | Double_t minRecEventHist1[3]={-3.,-3.,-30.}; | |
428 | Double_t maxRecEventHist1[3]={3.,3.,30.}; | |
429 | ||
430 | fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1); | |
431 | fRecEventHist1->SetBinEdges(2,binsZv); | |
432 | fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)"); | |
433 | fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)"); | |
434 | fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)"); | |
435 | fRecEventHist1->Sumw2(); | |
436 | ||
437 | // | |
51ce74a4 | 438 | Int_t binsRecEventHist2[2]={zvNbins,multNbins}; |
439 | Double_t minRecEventHist2[2]={-30.,-0.5}; | |
440 | Double_t maxRecEventHist2[2]={30.,10000.5}; | |
ca2d9973 | 441 | |
51ce74a4 | 442 | fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB",2,binsRecEventHist2,minRecEventHist2,maxRecEventHist2); |
ca2d9973 | 443 | fRecEventHist2->SetBinEdges(0,binsZv); |
444 | fRecEventHist2->SetBinEdges(1,binsMult); | |
ca2d9973 | 445 | fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)"); |
446 | fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB"); | |
ca2d9973 | 447 | fRecEventHist2->Sumw2(); |
448 | ||
449 | // | |
450 | Double_t kFact = 0.1; | |
451 | Int_t binsRecMCEventHist1[3]={100,100,100}; | |
452 | Double_t minRecMCEventHist1[3]={-10.0*kFact,-10.0*kFact,-10.0*kFact}; | |
453 | Double_t maxRecMCEventHist1[3]={10.0*kFact,10.0*kFact,10.0*kFact}; | |
454 | ||
455 | fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv",3,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1); | |
ca2d9973 | 456 | fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); |
457 | fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)"); | |
458 | fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)"); | |
459 | fRecMCEventHist1->Sumw2(); | |
460 | ||
461 | // | |
462 | Int_t binsRecMCEventHist2[3]={100,100,multNbins}; | |
463 | Double_t minRecMCEventHist2[3]={-10.0*kFact,-10.0*kFact,-0.5}; | |
464 | Double_t maxRecMCEventHist2[3]={10.0*kFact,10.0*kFact,10000.5}; | |
465 | ||
466 | fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:mult",3,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2); | |
467 | fRecMCEventHist2->SetBinEdges(2,binsMult); | |
468 | fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); | |
469 | fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)"); | |
470 | fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity"); | |
471 | fRecMCEventHist2->Sumw2(); | |
472 | // | |
473 | char name[256]; | |
474 | char title[256]; | |
475 | for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) | |
476 | { | |
477 | // THnSparse track histograms | |
478 | ||
479 | Int_t binsMCTrackHist1[3]= {ptNbins, etaNbins, 90}; | |
480 | Double_t minMCTrackHist1[3]={0.,-1.5,0.}; | |
51ce74a4 | 481 | Double_t maxMCTrackHist1[3]={50,1.5,2.*TMath::Pi()}; |
ca2d9973 | 482 | sprintf(name,"fMCTrackHist1_%d",i); |
483 | sprintf(title,"mcPt:mcEta:mcPhi"); | |
484 | ||
485 | fMCTrackHist1[i] = new THnSparseF(name,title,3,binsMCTrackHist1,minMCTrackHist1,maxMCTrackHist1); | |
486 | fMCTrackHist1[i]->SetBinEdges(0,binsPt); | |
487 | fMCTrackHist1[i]->SetBinEdges(1,binsEta); | |
488 | fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); | |
489 | fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); | |
490 | fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)"); | |
491 | fMCTrackHist1[i]->Sumw2(); | |
492 | ||
493 | Int_t binsMCPrimTrackHist1[5]= {ptNbins,etaNbins,6,20,4000}; | |
494 | Double_t minMCPrimTrackHist1[5]={0.,-1.5,0.,0.,0.}; | |
51ce74a4 | 495 | Double_t maxMCPrimTrackHist1[5]={50.,1.5,6.,20.,4000.}; |
ca2d9973 | 496 | sprintf(name,"fMCPrimTrackHist1_%d",i); |
497 | sprintf(title,"mcPt:mcEta:pid:mech:mother"); | |
498 | ||
499 | fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1); | |
500 | fMCPrimTrackHist1[i]->SetBinEdges(0,binsPt); | |
501 | fMCPrimTrackHist1[i]->SetBinEdges(1,binsEta); | |
502 | fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); | |
503 | fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); | |
504 | fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid"); | |
505 | fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech"); | |
506 | fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother"); | |
507 | fMCPrimTrackHist1[i]->Sumw2(); | |
508 | ||
509 | Int_t binsMCPrimTrackHist2[5]= {4000,20,4000}; | |
510 | Double_t minMCPrimTrackHist2[5]={0.,0.,0.}; | |
511 | Double_t maxMCPrimTrackHist2[5]={4000.,20.,4000.}; | |
512 | sprintf(name,"fMCPrimTrackHist2_%d",i); | |
513 | sprintf(title,"pdg:mech:mother"); | |
514 | ||
515 | fMCPrimTrackHist2[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2); | |
516 | fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg"); | |
517 | fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech"); | |
518 | fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother"); | |
519 | fMCPrimTrackHist2[i]->Sumw2(); | |
520 | ||
521 | Int_t binsMCSecTrackHist1[5]= {ptNbins,etaNbins,6,20,4000}; | |
522 | Double_t minMCSecTrackHist1[5]={0.,-1.5,0.,0.,0.}; | |
51ce74a4 | 523 | Double_t maxMCSecTrackHist1[5]={50.,1.5,6.,20.,4000.}; |
ca2d9973 | 524 | sprintf(name,"fMCSecTrackHist1_%d",i); |
525 | sprintf(title,"mcPt:mcEta:mcPhi:pid:mech:mother"); | |
526 | ||
527 | fMCSecTrackHist1[i] = new THnSparseF(name,title,5,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1); | |
528 | fMCSecTrackHist1[i]->SetBinEdges(0,binsPt); | |
529 | fMCSecTrackHist1[i]->SetBinEdges(1,binsEta); | |
530 | fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); | |
531 | fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); | |
532 | fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid"); | |
533 | fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech"); | |
534 | fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother"); | |
535 | fMCSecTrackHist1[i]->Sumw2(); | |
536 | ||
537 | Int_t binsRecTrackHist1[3]={ptNbins,etaNbins,90}; | |
538 | Double_t minRecTrackHist1[3]={0.,-1.5,0.}; | |
51ce74a4 | 539 | Double_t maxRecTrackHist1[3]={50.,1.5,2.*TMath::Pi()}; |
ca2d9973 | 540 | sprintf(name,"fRecTrackHist1_%d",i); |
541 | sprintf(title,"Pt:Eta:Phi"); | |
542 | fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1); | |
543 | fRecTrackHist1[i]->SetBinEdges(0,binsPt); | |
544 | fRecTrackHist1[i]->SetBinEdges(1,binsEta); | |
545 | fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)"); | |
546 | fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta"); | |
547 | fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)"); | |
548 | fRecTrackHist1[i]->Sumw2(); | |
549 | ||
51ce74a4 | 550 | sprintf(name,"fRecTrackHist2_%d",i); |
551 | sprintf(title,"Zv:Pt:Eta"); | |
515964cb | 552 | fRecTrackHist2[i] = new THnSparseF(name,title,3,binsTrackEvent); |
51ce74a4 | 553 | fRecTrackHist2[i]->SetBinEdges(0,binsZv); |
554 | fRecTrackHist2[i]->SetBinEdges(1,binsPt); | |
555 | fRecTrackHist2[i]->SetBinEdges(2,binsEta); | |
556 | fRecTrackHist2[i]->GetAxis(0)->SetTitle("Zv (cm)"); | |
557 | fRecTrackHist2[i]->GetAxis(1)->SetTitle("p_{T} (GeV/c)"); | |
558 | fRecTrackHist2[i]->GetAxis(2)->SetTitle("#eta"); | |
559 | fRecTrackHist2[i]->Sumw2(); | |
560 | ||
ca2d9973 | 561 | // |
562 | Int_t binsRecTrackMultHist1[2]={ptNbins,multNbins}; | |
563 | Double_t minRecTrackMultHist1[2]={0.,-0.5}; | |
51ce74a4 | 564 | Double_t maxRecTrackMultHist1[2]={50.,10000.5}; |
ca2d9973 | 565 | sprintf(name,"fRecTrackMultHist_%d",i); |
566 | sprintf(title,"Pt:Mult"); | |
567 | fRecTrackMultHist1[i] = new THnSparseF(name,title,2,binsRecTrackMultHist1,minRecTrackMultHist1,maxRecTrackMultHist1); | |
568 | fRecTrackMultHist1[i]->SetBinEdges(0,binsPt); | |
569 | fRecTrackMultHist1[i]->SetBinEdges(1,binsMult); | |
570 | fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); | |
571 | fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity"); | |
572 | fRecTrackMultHist1[i]->Sumw2(); | |
573 | } | |
574 | ||
575 | Int_t binsRecMCTrackHist1[4] = {ptNbins,etaNbins,100,100}; | |
576 | Double_t minRecMCTrackHist1[4]={0.,-1.5,-0.5,-0.5}; | |
51ce74a4 | 577 | Double_t maxRecMCTrackHist1[4]={50.,1.5,0.5,0.5}; |
ca2d9973 | 578 | |
579 | sprintf(name,"fRecMCTrackHist1"); | |
580 | sprintf(title,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)"); | |
581 | fRecMCTrackHist1 = new THnSparseF(name,title,4,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1); | |
582 | fRecMCTrackHist1->SetBinEdges(0,binsPt); | |
583 | fRecMCTrackHist1->SetBinEdges(1,binsEta); | |
584 | fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); | |
585 | fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta"); | |
586 | fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt"); | |
587 | fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta"); | |
588 | ||
589 | Int_t binsMCMultRecTrackHist1[3] = {ptNbins,etaNbins,6}; | |
590 | Double_t minMCMultRecTrackHist1[3]={0.,-1.5,0.}; | |
51ce74a4 | 591 | Double_t maxMCMultRecTrackHist1[3]={50.,1.5,6.}; |
ca2d9973 | 592 | sprintf(name,"fMCMultRecTrackHist1"); |
593 | sprintf(title,"mcPt:mcEta:pid"); | |
594 | fMCMultRecTrackHist1 = new THnSparseF(name,title,3,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1); | |
595 | fMCMultRecTrackHist1->SetBinEdges(0,binsPt); | |
596 | fMCMultRecTrackHist1->SetBinEdges(1,binsEta); | |
597 | fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); | |
598 | fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta"); | |
599 | fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid"); | |
600 | ||
601 | //nClust:chi2PerClust:pt:eta:phi | |
51ce74a4 | 602 | Int_t binsRecTrackHist3[5]={160,100,ptNbins,etaNbins,90}; |
603 | Double_t minRecTrackHist3[5]={0., 0., 0., -1.5, 0.}; | |
604 | Double_t maxRecRecTrackHist3[5]={160.,10., 50., 1.5, 2.*TMath::Pi()}; | |
605 | ||
606 | fRecTrackHist3 = new THnSparseF("fRecTrackHist3","nClust:chi2PerClust:pt:eta:phi",5,binsRecTrackHist3,minRecTrackHist3,maxRecRecTrackHist3); | |
607 | fRecTrackHist3->SetBinEdges(2,binsPt); | |
608 | fRecTrackHist3->SetBinEdges(3,binsEta); | |
609 | fRecTrackHist3->GetAxis(0)->SetTitle("nClust"); | |
610 | fRecTrackHist3->GetAxis(1)->SetTitle("chi2PerClust"); | |
611 | fRecTrackHist3->GetAxis(2)->SetTitle("p_{T} (GeV/c)"); | |
612 | fRecTrackHist3->GetAxis(3)->SetTitle("#eta"); | |
613 | fRecTrackHist3->GetAxis(4)->SetTitle("#phi (rad)"); | |
614 | fRecTrackHist3->Sumw2(); | |
615 | ||
ca2d9973 | 616 | |
617 | // init folder | |
618 | fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); | |
619 | } | |
620 | ||
621 | //_____________________________________________________________________________ | |
622 | void AlidNdPtAnalysisPbPb::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent) | |
623 | { | |
624 | // | |
625 | // Process real and/or simulated events | |
626 | // | |
627 | if(!esdEvent) { | |
628 | AliDebug(AliLog::kError, "esdEvent not available"); | |
629 | return; | |
630 | } | |
631 | ||
632 | ||
633 | // get selection cuts | |
634 | AlidNdPtEventCuts *evtCuts = GetEventCuts(); | |
635 | AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); | |
636 | AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); | |
637 | ||
638 | if(!evtCuts || !accCuts || !esdTrackCuts) { | |
639 | AliDebug(AliLog::kError, "cuts not available"); | |
640 | return; | |
641 | } | |
642 | ||
643 | // trigger selection | |
644 | Bool_t isEventTriggered = kTRUE; | |
645 | AliPhysicsSelection *trigSel = NULL; | |
646 | AliTriggerAnalysis *trigAna = NULL; | |
647 | ||
648 | if(evtCuts->IsTriggerRequired()) | |
649 | { | |
650 | // | |
651 | trigSel = GetPhysicsTriggerSelection(); | |
652 | if(!trigSel) { | |
653 | printf("cannot get trigSel \n"); | |
654 | return; | |
655 | } | |
656 | ||
657 | // | |
658 | if(IsUseMCInfo()) | |
659 | { | |
660 | trigSel->SetAnalyzeMC(); | |
661 | ||
662 | ||
663 | isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); | |
664 | ||
665 | if(GetTrigger() == AliTriggerAnalysis::kV0AND) | |
666 | { | |
667 | trigAna = trigSel->GetTriggerAnalysis(); | |
668 | if(!trigAna) | |
669 | return; | |
670 | ||
671 | isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); | |
672 | }//if(GetTrigger() == AliTriggerAnalysis::kV0AND) | |
673 | }//if(IsUseMCInfo()) | |
674 | }//if(evtCuts->IsTriggerRequired()) | |
675 | ||
676 | ||
677 | ||
678 | // use MC information | |
679 | AliHeader* header = 0; | |
680 | AliGenEventHeader* genHeader = 0; | |
681 | AliStack* stack = 0; | |
682 | TArrayF vtxMC(3); | |
683 | ||
684 | Int_t multMCTrueTracks = 0; | |
685 | if(IsUseMCInfo()) | |
686 | { | |
687 | // | |
688 | if(!mcEvent) { | |
689 | AliDebug(AliLog::kError, "mcEvent not available"); | |
690 | return; | |
691 | } | |
692 | // get MC event header | |
693 | header = mcEvent->Header(); | |
694 | if (!header) { | |
695 | AliDebug(AliLog::kError, "Header not available"); | |
696 | return; | |
697 | } | |
698 | // MC particle stack | |
699 | stack = mcEvent->Stack(); | |
700 | if (!stack) { | |
701 | AliDebug(AliLog::kError, "Stack not available"); | |
702 | return; | |
703 | } | |
704 | ||
705 | // get MC vertex | |
706 | genHeader = header->GenEventHeader(); | |
707 | if (!genHeader) { | |
708 | AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); | |
709 | return; | |
710 | } | |
711 | genHeader->PrimaryVertex(vtxMC); | |
712 | ||
713 | Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]}; | |
714 | fMCEventHist1->Fill(vMCEventHist1); | |
715 | ||
716 | // multipliticy of all MC primary tracks | |
717 | // in Zv, pt and eta ranges) | |
718 | multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); | |
719 | ||
720 | } // end bUseMC | |
721 | ||
722 | // get reconstructed vertex | |
723 | const AliESDVertex* vtxESD = 0; | |
ca2d9973 | 724 | if(evtCuts->IsRecVertexRequired()) |
725 | { | |
ca2d9973 | 726 | if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { |
727 | vtxESD = esdEvent->GetPrimaryVertexTPC(); | |
82292e7f | 728 | } |
729 | else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { | |
730 | vtxESD = esdEvent->GetPrimaryVertexTracks(); | |
731 | } | |
732 | else { | |
733 | return; | |
ca2d9973 | 734 | } |
735 | } | |
736 | ||
82292e7f | 737 | Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); |
ca2d9973 | 738 | //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); |
739 | //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); | |
740 | ||
741 | // vertex contributors | |
742 | Int_t multMBTracks = 0; | |
743 | if(GetAnalysisMode() == AlidNdPtHelper::kTPC) | |
744 | { | |
82292e7f | 745 | if(vtxESD->GetStatus()) { |
ca2d9973 | 746 | multMBTracks = vtxESD->GetNContributors(); |
747 | } | |
748 | } | |
82292e7f | 749 | else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { |
750 | if(vtxESD->GetStatus()) { | |
751 | multMBTracks = vtxESD->GetNContributors(); | |
752 | } | |
753 | } | |
ca2d9973 | 754 | else { |
755 | AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode())); | |
756 | return; | |
757 | } | |
758 | ||
759 | TObjArray *allChargedTracks=0; | |
760 | //Int_t multAll=0, multAcc=0, multRec=0; | |
761 | Int_t multAll=0, multRec=0; | |
762 | Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0; | |
763 | ||
764 | // check event cuts | |
765 | if(isEventOK && isEventTriggered) | |
766 | { | |
767 | ||
768 | // get all charged tracks | |
769 | allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); | |
770 | if(!allChargedTracks) return; | |
771 | ||
772 | Int_t entries = allChargedTracks->GetEntries(); | |
773 | ||
774 | labelsAll = new Int_t[entries]; | |
775 | labelsAcc = new Int_t[entries]; | |
776 | labelsRec = new Int_t[entries]; | |
777 | for(Int_t i=0; i<entries;++i) | |
778 | { | |
779 | AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i); | |
780 | ||
ca2d9973 | 781 | if(!track) continue; |
782 | if(track->Charge()==0) continue; | |
783 | ||
784 | ||
ca2d9973 | 785 | // only postive charged |
786 | if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) | |
787 | continue; | |
788 | ||
789 | // only negative charged | |
790 | if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) | |
791 | continue; | |
792 | ||
793 | // | |
51ce74a4 | 794 | Double_t values[3] = {vtxESD->GetZv(),track->Pt(),track->Eta()}; |
795 | ||
796 | fRecTrackHist2[AlidNdPtHelper::kAllTracks]->Fill(values); | |
ca2d9973 | 797 | FillHistograms(track,stack,AlidNdPtHelper::kAllTracks); |
798 | labelsAll[multAll] = TMath::Abs(track->GetLabel()); | |
799 | ||
800 | multAll++; | |
801 | ||
802 | if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track)) { | |
803 | ||
51ce74a4 | 804 | fRecTrackHist2[AlidNdPtHelper::kRecTracks]->Fill(values); |
ca2d9973 | 805 | FillHistograms(track,stack,AlidNdPtHelper::kRecTracks); |
806 | labelsRec[multRec] = TMath::Abs(track->GetLabel()); | |
807 | ||
808 | multRec++; | |
809 | ||
810 | } | |
811 | }//loop over entries | |
812 | ||
813 | ||
814 | // fill track multiplicity histograms | |
815 | //FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec); | |
816 | ||
817 | Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()}; | |
818 | fRecEventHist1->Fill(vRecEventHist1); | |
819 | ||
51ce74a4 | 820 | Double_t vRecEventHist2[2] = {vtxESD->GetZv(),multMBTracks}; |
ca2d9973 | 821 | fRecEventHist2->Fill(vRecEventHist2); |
822 | ||
823 | } // triggered and event vertex | |
824 | ||
825 | if(IsUseMCInfo()) | |
826 | { | |
827 | ||
828 | //Double_t vMultTrueEventMatrix[2] = { multRec, multMCTrueTracks }; | |
829 | ||
830 | // | |
831 | // event level corrections (zv,N_MB) | |
832 | // | |
833 | // all inelastic | |
834 | Double_t vEventMatrix[2] = {vtxMC[2],multMBTracks}; | |
835 | fGenEventMatrix->Fill(vEventMatrix); | |
836 | if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix); | |
837 | if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix); | |
838 | ||
839 | // | |
840 | // track-event level corrections (zv,pt,eta) | |
841 | // | |
842 | for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) | |
843 | { | |
844 | TParticle* particle = stack->Particle(iMc); | |
845 | if (!particle) | |
846 | continue; | |
847 | ||
848 | // only charged particles | |
849 | if(!particle->GetPDG()) continue; | |
850 | Double_t charge = particle->GetPDG()->Charge()/3.; | |
851 | if ( TMath::Abs(charge) < 0.001 ) | |
852 | continue; | |
853 | ||
854 | // only postive charged | |
855 | if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) | |
856 | continue; | |
857 | ||
858 | // only negative charged | |
859 | if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) | |
860 | continue; | |
861 | ||
862 | // physical primary | |
863 | Bool_t prim = stack->IsPhysicalPrimary(iMc); | |
864 | if(!prim) continue; | |
865 | ||
866 | // checked accepted | |
867 | if(accCuts->AcceptTrack(particle)) | |
868 | { | |
84794c5b | 869 | Double_t vTrackEventMatrix[3] = {vtxMC[2], particle->Pt(), particle->Eta()}; |
870 | fGenTrackEventMatrix->Fill(vTrackEventMatrix); | |
871 | ||
872 | if(!isEventTriggered) continue; | |
873 | fTriggerTrackEventMatrix->Fill(vTrackEventMatrix); | |
874 | ||
875 | if(!isEventOK) continue; | |
876 | fRecTrackEventMatrix->Fill(vTrackEventMatrix); | |
ca2d9973 | 877 | |
84794c5b | 878 | }// if(accCuts->AcceptTrack(particle)) |
879 | }// for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) | |
ca2d9973 | 880 | |
881 | // | |
882 | // track-level corrections (zv,pt,eta) | |
883 | // | |
884 | if(isEventOK && isEventTriggered) | |
885 | { | |
886 | ||
887 | // fill MC and rec event control histograms | |
888 | if(fHistogramsOn) { | |
889 | Double_t vRecMCEventHist1[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2]}; | |
890 | fRecMCEventHist1->Fill(vRecMCEventHist1);// | |
891 | ||
892 | Double_t vRecMCEventHist2[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks}; | |
893 | fRecMCEventHist2->Fill(vRecMCEventHist2); | |
894 | ||
895 | }// | |
896 | ||
897 | // | |
898 | // MC histograms for track efficiency studies | |
899 | // | |
900 | for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) | |
901 | { | |
902 | TParticle* particle = stack->Particle(iMc); | |
903 | if (!particle) | |
904 | continue; | |
905 | ||
906 | Double_t vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()}; | |
907 | ||
908 | // only charged particles | |
909 | if(!particle->GetPDG()) continue; | |
910 | Double_t charge = particle->GetPDG()->Charge()/3.; | |
911 | if (TMath::Abs(charge) < 0.001) | |
912 | continue; | |
913 | ||
914 | // only postive charged | |
915 | if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) | |
916 | continue; | |
917 | ||
918 | // only negative charged | |
919 | if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) | |
920 | continue; | |
921 | ||
922 | // physical primary | |
923 | Bool_t prim = stack->IsPhysicalPrimary(iMc); | |
924 | ||
925 | // check accepted | |
926 | if(accCuts->AcceptTrack(particle)) | |
927 | { | |
928 | ||
929 | if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) | |
930 | fGenPrimTrackMatrix->Fill(vTrackMatrix); | |
931 | ||
932 | // fill control histograms | |
933 | if(fHistogramsOn) | |
934 | FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks); | |
935 | ||
936 | // check multiple found tracks | |
937 | Int_t multCount = 0; | |
938 | for(Int_t iRec=0; iRec<multRec; ++iRec) | |
939 | { | |
940 | if(iMc == labelsRec[iRec]) | |
941 | { | |
942 | multCount++; | |
943 | if(multCount>1) | |
944 | { | |
945 | fRecMultTrackMatrix->Fill(vTrackMatrix); | |
946 | ||
947 | // fill control histogram | |
948 | if(fHistogramsOn) { | |
949 | Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); | |
950 | Double_t vMCMultRecTrackHist1[3] = {particle->Pt(), particle->Eta(), pid}; | |
951 | fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1); | |
952 | } | |
953 | } | |
954 | } | |
955 | } | |
956 | ||
957 | // check reconstructed | |
958 | for(Int_t iRec=0; iRec<multRec; ++iRec) | |
959 | { | |
960 | if(iMc == labelsRec[iRec]) | |
961 | { | |
962 | fRecTrackMatrix->Fill(vTrackMatrix); | |
963 | ||
964 | if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) { | |
965 | fRecPrimTrackMatrix->Fill(vTrackMatrix); | |
966 | } | |
967 | if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix); | |
968 | ||
969 | // fill control histograms | |
970 | if(fHistogramsOn) | |
971 | FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks); | |
972 | ||
973 | break; | |
974 | }//if(iMc == labelsRec[iRec]) | |
975 | }//reco tracks | |
976 | }//accepted tracks | |
977 | }//stack loop | |
978 | }//is triggered | |
979 | } // end bUseMC | |
980 | ||
981 | if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; | |
982 | if(labelsAll) delete [] labelsAll; labelsAll = 0; | |
983 | if(labelsAcc) delete [] labelsAcc; labelsAcc = 0; | |
984 | if(labelsRec) delete [] labelsRec; labelsRec = 0; | |
985 | ||
986 | if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD; | |
987 | ||
988 | } | |
989 | ||
990 | //_____________________________________________________________________________ | |
991 | void AlidNdPtAnalysisPbPb::FillHistograms(TObjArray *const allChargedTracks,Int_t *const labelsAll,Int_t multAll,Int_t *const labelsAcc,Int_t multAcc,Int_t *const labelsRec,Int_t multRec) { | |
992 | // multiplicity histograms | |
993 | ||
994 | ||
995 | if(!allChargedTracks) return; | |
996 | if(!labelsAll) return; | |
997 | if(!labelsAcc) return; | |
998 | if(!labelsRec) return; | |
999 | ||
1000 | Int_t entries = allChargedTracks->GetEntries(); | |
1001 | for(Int_t i=0; i<entries; ++i) | |
1002 | { | |
1003 | AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i); | |
1004 | if(!track) continue; | |
1005 | if(track->Charge() == 0) continue; | |
1006 | ||
1007 | Int_t label = TMath::Abs(track->GetLabel()); | |
1008 | for(Int_t iAll=0; iAll<multAll; ++iAll) { | |
1009 | if(label == labelsAll[iAll]) { | |
1010 | Double_t v1[2] = {track->Pt(), multAll}; | |
1011 | fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1); | |
1012 | } | |
1013 | } | |
1014 | for(Int_t iAcc=0; iAcc<multAcc; ++iAcc) { | |
1015 | if(label == labelsAcc[iAcc]) { | |
1016 | Double_t v2[2] = {track->Pt(), multAcc}; | |
1017 | fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2); | |
1018 | } | |
1019 | } | |
1020 | for(Int_t iRec=0; iRec<multRec; ++iRec) { | |
1021 | if(label == labelsRec[iRec]) { | |
1022 | Double_t v3[2] = {track->Pt(), multRec}; | |
1023 | fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3); | |
1024 | }//out | |
1025 | } | |
1026 | } | |
1027 | } | |
1028 | ||
1029 | //_____________________________________________________________________________ | |
1030 | void AlidNdPtAnalysisPbPb::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, AlidNdPtHelper::TrackObject trackObj) | |
1031 | { | |
1032 | ||
1033 | // | |
1034 | // Fill ESD track and MC histograms | |
1035 | // | |
1036 | if(!esdTrack) return; | |
1037 | ||
1038 | Float_t q = esdTrack->Charge(); | |
1039 | if(TMath::Abs(q) < 0.001) return; | |
1040 | ||
1041 | Float_t pt = esdTrack->Pt(); | |
1042 | Float_t eta = esdTrack->Eta(); | |
1043 | Float_t phi = esdTrack->Phi(); | |
1044 | ||
1045 | Float_t dca[2], bCov[3]; | |
1046 | esdTrack->GetImpactParameters(dca,bCov); | |
1047 | ||
1048 | Int_t nClust = esdTrack->GetTPCclusters(0); | |
1049 | Float_t chi2PerCluster = 0.; | |
1050 | if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust); | |
1051 | ||
1052 | ||
1053 | // fill histograms | |
1054 | Double_t values[3] = {pt,eta,phi}; | |
1055 | fRecTrackHist1[trackObj]->Fill(values); | |
1056 | ||
1057 | // | |
1058 | // Fill rec vs MC information | |
1059 | // | |
1060 | if(!stack) return; | |
1061 | ||
1062 | Int_t label = TMath::Abs(esdTrack->GetLabel()); | |
1063 | //if(label == 0) return; | |
1064 | ||
1065 | TParticle* particle = stack->Particle(label); | |
1066 | if(!particle) return; | |
1067 | ||
1068 | Int_t motherPdg = -1; | |
1069 | TParticle* mother = 0; | |
1070 | ||
1071 | //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); | |
1072 | Int_t motherLabel = particle->GetMother(0); | |
1073 | if(motherLabel>0) mother = stack->Particle(motherLabel); | |
1074 | if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only | |
1075 | //Int_t mech = particle->GetUniqueID(); // production mechanism | |
1076 | ||
1077 | if(!particle->GetPDG()) return; | |
1078 | Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 | |
1079 | if(TMath::Abs(gq)<0.001) return; | |
1080 | Float_t gpt = particle->Pt(); | |
1081 | Float_t geta = particle->Eta(); | |
1082 | ||
1083 | Double_t dpt=0; | |
1084 | //printf("pt %f, gpt %f \n",pt,gpt); | |
1085 | if(gpt) dpt = (pt-gpt)/gpt; | |
1086 | Double_t deta = (eta-geta); | |
1087 | ||
1088 | // fill histograms | |
1089 | if(trackObj == AlidNdPtHelper::kRecTracks) //RecTracks??? | |
1090 | { | |
1091 | Double_t vTrackPtCorrelationMatrix[3]={pt,gpt,geta}; | |
1092 | fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix); | |
1093 | ||
1094 | Double_t vRecMCTrackHist1[4]={gpt,geta,dpt,deta}; | |
1095 | fRecMCTrackHist1->Fill(vRecMCTrackHist1); | |
1096 | } | |
1097 | } | |
1098 | ||
1099 | //_____________________________________________________________________________ | |
1100 | void AlidNdPtAnalysisPbPb::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj) | |
1101 | { | |
1102 | ||
1103 | // Fill MC histograms | |
1104 | if(!stack) return; | |
1105 | ||
1106 | TParticle* particle = stack->Particle(label); | |
1107 | if(!particle) return; | |
1108 | ||
1109 | Int_t motherPdg = -1; | |
1110 | TParticle* mother = 0; | |
1111 | ||
1112 | //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); | |
1113 | Int_t motherLabel = particle->GetMother(0); | |
1114 | if(motherLabel>0) mother = stack->Particle(motherLabel); | |
1115 | if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only | |
1116 | Int_t mech = particle->GetUniqueID(); // production mechanism | |
1117 | ||
1118 | if(!particle->GetPDG()) return; | |
1119 | Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 | |
1120 | if(TMath::Abs(gq) < 0.001) return; | |
1121 | ||
1122 | Float_t gpt = particle->Pt(); | |
1123 | //Float_t qgpt = particle->Pt() * gq; | |
1124 | Float_t geta = particle->Eta(); | |
1125 | Float_t gphi = particle->Phi(); | |
1126 | //Float_t gpz = particle->Pz(); | |
1127 | ||
1128 | Bool_t prim = stack->IsPhysicalPrimary(label); | |
1129 | //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz(); | |
1130 | ||
1131 | Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); | |
1132 | ||
1133 | //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech); | |
1134 | //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech); | |
1135 | ||
1136 | // | |
1137 | // fill histogram | |
1138 | // | |
1139 | Double_t vMCTrackHist1[3] = {gpt,geta,gphi}; | |
1140 | fMCTrackHist1[trackObj]->Fill(vMCTrackHist1); | |
1141 | ||
1142 | Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg}; | |
1143 | Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg}; | |
1144 | ||
1145 | //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); | |
1146 | ||
1147 | if(prim) { | |
1148 | fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); | |
1149 | if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2); | |
1150 | } | |
1151 | else { | |
1152 | fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); | |
1153 | } | |
1154 | ||
1155 | } | |
1156 | ||
1157 | //_____________________________________________________________________________ | |
1158 | Long64_t AlidNdPtAnalysisPbPb::Merge(TCollection* const list) | |
1159 | { | |
1160 | // Merge list of objects (needed by PROOF) | |
1161 | ||
1162 | if (!list) | |
1163 | return 0; | |
1164 | ||
1165 | if (list->IsEmpty()) | |
1166 | return 1; | |
1167 | ||
1168 | TIterator* iter = list->MakeIterator(); | |
1169 | TObject* obj = 0; | |
1170 | ||
1171 | // | |
1172 | TList *collPhysSelection = new TList; | |
1173 | ||
1174 | // collection of generated histograms | |
1175 | ||
1176 | Int_t count=0; | |
1177 | while((obj = iter->Next()) != 0) { | |
1178 | AlidNdPtAnalysisPbPb* entry = dynamic_cast<AlidNdPtAnalysisPbPb*>(obj); | |
1179 | if (entry == 0) continue; | |
1180 | ||
1181 | // physics selection | |
1182 | //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection()); | |
2bb3bb70 | 1183 | AliPhysicsSelection *physSel = entry->GetPhysicsTriggerSelection(); |
1184 | if( physSel ) collPhysSelection->Add(physSel); | |
ca2d9973 | 1185 | |
1186 | // | |
1187 | fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix); | |
1188 | ||
1189 | // | |
1190 | fGenEventMatrix->Add(entry->fGenEventMatrix); | |
1191 | ||
1192 | fTriggerEventMatrix->Add(entry->fTriggerEventMatrix); | |
1193 | ||
1194 | fRecEventMatrix->Add(entry->fRecEventMatrix); | |
1195 | // | |
1196 | fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix); | |
1197 | ||
1198 | fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix); | |
1199 | ||
1200 | fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix); | |
1201 | ||
1202 | // | |
1203 | fGenTrackMatrix->Add(entry->fGenTrackMatrix); | |
1204 | fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix); | |
1205 | fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix); | |
1206 | // | |
1207 | fRecTrackMatrix->Add(entry->fRecTrackMatrix); | |
1208 | fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix); | |
1209 | // | |
1210 | fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix); | |
1211 | ||
1212 | // | |
1213 | // control analysis histograms | |
1214 | // | |
1215 | fMCEventHist1->Add(entry->fMCEventHist1); | |
1216 | fRecEventHist1->Add(entry->fRecEventHist1); | |
1217 | fRecEventHist2->Add(entry->fRecEventHist2); | |
1218 | fRecMCEventHist1->Add(entry->fRecMCEventHist1); | |
1219 | fRecMCEventHist2->Add(entry->fRecMCEventHist2); | |
1220 | ||
1221 | ||
1222 | for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { | |
1223 | fMCTrackHist1[i]->Add(entry->fMCTrackHist1[i]); | |
1224 | ||
1225 | fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]); | |
1226 | fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]); | |
1227 | fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]); | |
1228 | ||
1229 | fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]); | |
51ce74a4 | 1230 | fRecTrackHist2[i]->Add(entry->fRecTrackHist2[i]); |
ca2d9973 | 1231 | fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]); |
1232 | } | |
1233 | fRecMCTrackHist1->Add(entry->fRecMCTrackHist1); | |
1234 | fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1); | |
51ce74a4 | 1235 | fRecTrackHist3->Add(entry->fRecTrackHist3); |
ca2d9973 | 1236 | |
1237 | count++; | |
1238 | } | |
1239 | ||
1240 | AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection(); | |
2bb3bb70 | 1241 | if( trigSelection ) trigSelection->Merge(collPhysSelection); |
ca2d9973 | 1242 | if(collPhysSelection) delete collPhysSelection; |
1243 | ||
1244 | return count; | |
1245 | } | |
1246 | ||
1247 | ||
1248 | ||
1249 | //_____________________________________________________________________________ | |
1250 | void AlidNdPtAnalysisPbPb::Analyse() | |
1251 | { | |
1252 | // Analyse histograms | |
1253 | // | |
1254 | TH1::AddDirectory(kFALSE); | |
1255 | TH1 *h=0, *h1=0, *h2=0, *h2c = 0; | |
1256 | THnSparse *hs=0; | |
1257 | TH2 *h2D=0; | |
1258 | ||
1259 | char name[256]; | |
1260 | TObjArray *aFolderObj = new TObjArray; | |
1261 | ||
1262 | // | |
1263 | // LHC backgraund in all and 0-bins | |
1264 | // | |
1265 | AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection(); | |
1266 | trigSel->SaveHistograms("physics_selection"); | |
1267 | ||
1268 | // | |
1269 | // Reconstructed event vertex | |
1270 | // | |
1271 | h = fRecEventHist1->Projection(0); | |
1272 | h->SetName("Xv"); | |
1273 | aFolderObj->Add(h); | |
1274 | ||
1275 | h = fRecEventHist1->Projection(1); | |
1276 | h->SetName("Yv"); | |
1277 | aFolderObj->Add(h); | |
1278 | ||
1279 | h = fRecEventHist1->Projection(2); | |
1280 | h->SetName("Zv"); | |
1281 | aFolderObj->Add(h); | |
1282 | ||
1283 | // | |
1284 | // multiplicity | |
1285 | // | |
1286 | h = fRecEventHist2->Projection(1); | |
1287 | h->SetName("multMB"); | |
1288 | aFolderObj->Add(h); | |
1289 | ||
ca2d9973 | 1290 | h2D = fRecEventHist2->Projection(0,1); |
1291 | h2D->SetName("Zv_vs_multiplicity_MB"); | |
1292 | aFolderObj->Add(h2D); | |
1293 | ||
1294 | // | |
1295 | // reconstructed pt histograms | |
1296 | // | |
1297 | h = fRecTrackHist1[0]->Projection(0); | |
1298 | h->Scale(1.,"width"); | |
1299 | h->SetName("pt_all_ch"); | |
1300 | aFolderObj->Add(h); | |
1301 | ||
1302 | h = fRecTrackHist1[1]->Projection(0); | |
1303 | h->Scale(1.,"width"); | |
1304 | h->SetName("pt_acc"); | |
1305 | aFolderObj->Add(h); | |
1306 | ||
1307 | h = fRecTrackHist1[2]->Projection(0); | |
1308 | h->Scale(1.,"width"); | |
1309 | h->SetName("pt_rec"); | |
1310 | aFolderObj->Add(h); | |
1311 | ||
1312 | // | |
1313 | // reconstructed eta histograms | |
1314 | // | |
1315 | h = fRecTrackHist1[0]->Projection(1); | |
1316 | h->SetName("eta_all_ch"); | |
1317 | aFolderObj->Add(h); | |
1318 | ||
1319 | h = fRecTrackHist1[1]->Projection(1); | |
1320 | h->SetName("eta_acc"); | |
1321 | aFolderObj->Add(h); | |
1322 | ||
1323 | h = fRecTrackHist1[2]->Projection(1); | |
1324 | h->SetName("eta_rec"); | |
1325 | aFolderObj->Add(h); | |
1326 | ||
1327 | // | |
1328 | // reconstructed phi histograms | |
1329 | // | |
1330 | h = fRecTrackHist1[0]->Projection(2); | |
1331 | h->SetName("phi_all_ch"); | |
1332 | aFolderObj->Add(h); | |
1333 | ||
1334 | h = fRecTrackHist1[1]->Projection(2); | |
1335 | h->SetName("phi_acc"); | |
1336 | aFolderObj->Add(h); | |
1337 | ||
1338 | h = fRecTrackHist1[2]->Projection(2); | |
1339 | h->SetName("phi_rec"); | |
1340 | aFolderObj->Add(h); | |
1341 | ||
1342 | // | |
1343 | // reconstructed eta:pt histograms | |
1344 | // | |
1345 | h2D = fRecTrackHist1[0]->Projection(1,0); | |
1346 | h2D->SetName("pt_eta_all_ch"); | |
1347 | aFolderObj->Add(h2D); | |
1348 | ||
1349 | h2D = fRecTrackHist1[1]->Projection(1,0); | |
1350 | h2D->SetName("pt_eta_acc"); | |
1351 | aFolderObj->Add(h2D); | |
1352 | ||
1353 | h2D = fRecTrackHist1[2]->Projection(1,0); | |
1354 | h2D->SetName("pt_eta_rec"); | |
1355 | aFolderObj->Add(h2D); | |
1356 | ||
1357 | // | |
1358 | // reconstructed phi:pt histograms | |
1359 | // | |
1360 | h2D = fRecTrackHist1[0]->Projection(2,0); | |
1361 | h2D->SetName("pt_phi_all_ch"); | |
1362 | aFolderObj->Add(h2D); | |
1363 | ||
1364 | h2D = fRecTrackHist1[1]->Projection(2,0); | |
1365 | h2D->SetName("pt_phi_acc"); | |
1366 | aFolderObj->Add(h2D); | |
1367 | ||
1368 | h2D = fRecTrackHist1[2]->Projection(2,0); | |
1369 | h2D->SetName("pt_phi_rec"); | |
1370 | aFolderObj->Add(h2D); | |
1371 | ||
1372 | // | |
1373 | // reconstructed phi:eta histograms | |
1374 | // | |
1375 | h2D = fRecTrackHist1[0]->Projection(2,1); | |
1376 | h2D->SetName("eta_phi_all_ch"); | |
1377 | aFolderObj->Add(h2D); | |
1378 | ||
1379 | h2D = fRecTrackHist1[1]->Projection(2,1); | |
1380 | h2D->SetName("eta_phi_acc"); | |
1381 | aFolderObj->Add(h2D); | |
1382 | ||
1383 | h2D = fRecTrackHist1[2]->Projection(2,1); | |
1384 | h2D->SetName("eta_phi_rec"); | |
1385 | aFolderObj->Add(h2D); | |
1386 | ||
1387 | // | |
1388 | // reconstructed nClust, chi2 vs pt, eta, phi | |
1389 | // | |
1390 | if(fHistogramsOn) { | |
1391 | ||
51ce74a4 | 1392 | h2D = fRecTrackHist3->Projection(0,1); |
ca2d9973 | 1393 | h2D->SetName("nClust_chi2_rec"); |
1394 | aFolderObj->Add(h2D); | |
1395 | ||
51ce74a4 | 1396 | h2D = fRecTrackHist3->Projection(0,2); |
ca2d9973 | 1397 | h2D->SetName("nClust_pt_rec"); |
1398 | aFolderObj->Add(h2D); | |
1399 | ||
51ce74a4 | 1400 | h2D = fRecTrackHist3->Projection(0,3); |
ca2d9973 | 1401 | h2D->SetName("nClust_eta_rec"); |
1402 | aFolderObj->Add(h2D); | |
1403 | ||
51ce74a4 | 1404 | h2D = fRecTrackHist3->Projection(0,4); |
ca2d9973 | 1405 | h2D->SetName("nClust_phi_rec"); |
1406 | aFolderObj->Add(h2D); | |
1407 | ||
51ce74a4 | 1408 | h2D = fRecTrackHist3->Projection(1,2); |
ca2d9973 | 1409 | h2D->SetName("chi2_pt_rec"); |
1410 | aFolderObj->Add(h2D); | |
1411 | ||
51ce74a4 | 1412 | h2D = fRecTrackHist3->Projection(1,3); |
ca2d9973 | 1413 | h2D->SetName("chi2_eta_rec"); |
1414 | aFolderObj->Add(h2D); | |
1415 | ||
51ce74a4 | 1416 | h2D = fRecTrackHist3->Projection(1,4); |
ca2d9973 | 1417 | h2D->SetName("chi2_phi_rec"); |
1418 | aFolderObj->Add(h2D); | |
1419 | ||
1420 | } | |
1421 | ||
1422 | // | |
1423 | // calculate corrections for empty events | |
1424 | // with multMB==0 | |
1425 | // | |
1426 | ||
1427 | // | |
1428 | // normalised zv to generate zv for triggered events | |
1429 | // | |
1430 | h = fRecEventHist2->Projection(0); | |
1431 | if( h->Integral() ) h->Scale(1./h->Integral()); | |
1432 | h->SetName("zv_distribution_norm"); | |
1433 | aFolderObj->Add(h); | |
1434 | ||
1435 | // | |
1436 | // MC available | |
1437 | // | |
1438 | if(IsUseMCInfo()) { | |
1439 | ||
1440 | // | |
1441 | // Event vertex resolution | |
1442 | // | |
1443 | h2D = fRecMCEventHist2->Projection(0,2); | |
1444 | h2D->SetName("DeltaXv_vs_mult"); | |
1445 | aFolderObj->Add(h2D); | |
1446 | ||
1447 | h2D = fRecMCEventHist2->Projection(1,2); | |
1448 | h2D->SetName("DeltaZv_vs_mult"); | |
1449 | aFolderObj->Add(h2D); | |
1450 | ||
1451 | // | |
1452 | // normalised zv to get trigger/trigger+vertex event differences | |
1453 | // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv) | |
1454 | // | |
1455 | fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.); | |
1456 | h = fTriggerEventMatrix->Projection(0); | |
1457 | h2D = fTriggerEventMatrix->Projection(0,1); | |
1458 | if(h2D->Integral()) h->Scale(1./h2D->Integral()); | |
1459 | ||
1460 | h1 = fRecEventMatrix->Projection(0); | |
1461 | h2D = fRecEventMatrix->Projection(0,1); | |
1462 | if(h2D->Integral()) h1->Scale(1./h2D->Integral()); | |
1463 | ||
1464 | h->Divide(h1); | |
1465 | h->SetName("zv_empty_events_norm"); | |
1466 | aFolderObj->Add(h); | |
1467 | ||
1468 | fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins()); | |
1469 | ||
1470 | // | |
1471 | // rec. vs true track pt correlation matrix | |
1472 | // | |
1473 | hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix"); | |
1474 | aFolderObj->Add(hs); | |
1475 | ||
1476 | // | |
1477 | // trigger efficiency for INEL | |
1478 | // | |
1479 | h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix"); | |
1480 | aFolderObj->Add(h); | |
1481 | ||
1482 | ||
1483 | // | |
1484 | // trigger bias correction (MB to INEL) | |
1485 | // | |
1486 | hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix"); | |
1487 | aFolderObj->Add(hs); | |
1488 | ||
1489 | h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix"); | |
1490 | aFolderObj->Add(h); | |
1491 | ||
1492 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D"); | |
1493 | aFolderObj->Add(h2D); | |
1494 | ||
1495 | ||
1496 | h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix"); | |
1497 | aFolderObj->Add(h); | |
1498 | ||
1499 | ||
1500 | // | |
1501 | // event vertex reconstruction correction (MB) | |
1502 | // | |
1503 | hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix"); | |
1504 | aFolderObj->Add(hs); | |
1505 | ||
1506 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D"); | |
1507 | aFolderObj->Add(h2D); | |
1508 | ||
1509 | ||
1510 | h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix"); | |
1511 | aFolderObj->Add(h); | |
1512 | ||
1513 | ||
1514 | h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix"); | |
1515 | aFolderObj->Add(h); | |
1516 | ||
1517 | ||
1518 | ||
1519 | // | |
1520 | // track-event trigger bias correction (MB to INEL) | |
1521 | // | |
1522 | hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix"); | |
1523 | aFolderObj->Add(hs); | |
1524 | ||
1525 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix"); | |
1526 | aFolderObj->Add(h2D); | |
1527 | ||
1528 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix"); | |
1529 | aFolderObj->Add(h2D); | |
1530 | ||
1531 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix"); | |
1532 | aFolderObj->Add(h2D); | |
1533 | ||
1534 | // efficiency | |
1535 | ||
1536 | h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix"); | |
1537 | aFolderObj->Add(h); | |
1538 | ||
1539 | ||
1540 | // | |
1541 | // track-event vertex reconstruction correction (MB) | |
1542 | // | |
1543 | hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix"); | |
1544 | aFolderObj->Add(hs); | |
1545 | ||
1546 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix"); | |
1547 | aFolderObj->Add(h2D); | |
1548 | ||
1549 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix"); | |
1550 | aFolderObj->Add(h2D); | |
1551 | ||
1552 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix"); | |
1553 | aFolderObj->Add(h2D); | |
1554 | ||
1555 | // efficiency | |
1556 | ||
1557 | h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix"); | |
1558 | aFolderObj->Add(h); | |
1559 | ||
1560 | ||
1561 | // | |
1562 | // track rec. efficiency correction | |
1563 | // | |
1564 | hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix"); | |
1565 | aFolderObj->Add(hs); | |
1566 | ||
1567 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix"); | |
1568 | aFolderObj->Add(h2D); | |
1569 | ||
1570 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix"); | |
1571 | aFolderObj->Add(h2D); | |
1572 | ||
1573 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix"); | |
1574 | aFolderObj->Add(h2D); | |
1575 | ||
1576 | ||
1577 | h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix"); | |
1578 | aFolderObj->Add(h); | |
1579 | ||
1580 | h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix"); | |
1581 | aFolderObj->Add(h); | |
1582 | ||
1583 | // efficiency | |
1584 | ||
1585 | h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix"); | |
1586 | aFolderObj->Add(h); | |
1587 | ||
1588 | h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix"); | |
1589 | aFolderObj->Add(h); | |
1590 | ||
1591 | // | |
1592 | // secondary track contamination correction | |
1593 | // | |
1594 | //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix"); | |
1595 | hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix"); | |
1596 | aFolderObj->Add(hs); | |
1597 | ||
1598 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix"); | |
1599 | aFolderObj->Add(h2D); | |
1600 | ||
1601 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix"); | |
1602 | aFolderObj->Add(h2D); | |
1603 | ||
1604 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix"); | |
1605 | aFolderObj->Add(h2D); | |
1606 | ||
1607 | h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix"); | |
1608 | aFolderObj->Add(h); | |
1609 | ||
1610 | ||
1611 | h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix"); | |
1612 | aFolderObj->Add(h); | |
1613 | ||
1614 | h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix"); | |
1615 | aFolderObj->Add(h); | |
1616 | ||
1617 | // | |
1618 | // multiple track reconstruction correction | |
1619 | // | |
1620 | //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix"); | |
1621 | hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix"); | |
1622 | aFolderObj->Add(hs); | |
1623 | ||
1624 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix"); | |
1625 | aFolderObj->Add(h2D); | |
1626 | ||
1627 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix"); | |
1628 | aFolderObj->Add(h2D); | |
1629 | ||
1630 | h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix"); | |
1631 | aFolderObj->Add(h2D); | |
1632 | ||
1633 | h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix"); | |
1634 | aFolderObj->Add(h); | |
1635 | ||
1636 | h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix"); | |
1637 | aFolderObj->Add(h); | |
1638 | ||
1639 | h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix"); | |
1640 | aFolderObj->Add(h); | |
1641 | ||
1642 | // | |
1643 | // Control histograms | |
1644 | // | |
1645 | ||
1646 | if(fHistogramsOn) { | |
1647 | ||
1648 | // Efficiency electrons, muons, pions, kaons, protons, all | |
1649 | fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1); | |
1650 | fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1); | |
1651 | h1 = fMCPrimTrackHist1[1]->Projection(0); | |
1652 | h2 = fMCPrimTrackHist1[2]->Projection(0); | |
1653 | h2c = (TH1D *)h2->Clone(); | |
1654 | h2c->Divide(h1); | |
1655 | h2c->SetName("eff_pt_electrons"); | |
1656 | aFolderObj->Add(h2c); | |
1657 | ||
1658 | fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2); | |
1659 | fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2); | |
1660 | h1 = fMCPrimTrackHist1[1]->Projection(0); | |
1661 | h2 = fMCPrimTrackHist1[2]->Projection(0); | |
1662 | h2c = (TH1D *)h2->Clone(); | |
1663 | h2c->Divide(h1); | |
1664 | h2c->SetName("eff_pt_muons"); | |
1665 | aFolderObj->Add(h2c); | |
1666 | ||
1667 | fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3); | |
1668 | fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3); | |
1669 | h1 = fMCPrimTrackHist1[1]->Projection(0); | |
1670 | h2 = fMCPrimTrackHist1[2]->Projection(0); | |
1671 | h2c = (TH1D *)h2->Clone(); | |
1672 | h2c->Divide(h1); | |
1673 | h2c->SetName("eff_pt_pions"); | |
1674 | aFolderObj->Add(h2c); | |
1675 | ||
1676 | fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4); | |
1677 | fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4); | |
1678 | h1 = fMCPrimTrackHist1[1]->Projection(0); | |
1679 | h2 = fMCPrimTrackHist1[2]->Projection(0); | |
1680 | h2c = (TH1D *)h2->Clone(); | |
1681 | h2c->Divide(h1); | |
1682 | h2c->SetName("eff_pt_kaons"); | |
1683 | aFolderObj->Add(h2c); | |
1684 | ||
1685 | fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5); | |
1686 | fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5); | |
1687 | h1 = fMCPrimTrackHist1[1]->Projection(0); | |
1688 | h2 = fMCPrimTrackHist1[2]->Projection(0); | |
1689 | h2c = (TH1D *)h2->Clone(); | |
1690 | h2c->Divide(h1); | |
1691 | h2c->SetName("eff_pt_protons"); | |
1692 | aFolderObj->Add(h2c); | |
1693 | ||
1694 | fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5); | |
1695 | fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5); | |
1696 | h1 = fMCPrimTrackHist1[1]->Projection(0); | |
1697 | h2 = fMCPrimTrackHist1[2]->Projection(0); | |
1698 | h2c = (TH1D *)h2->Clone(); | |
1699 | h2c->Divide(h1); | |
1700 | h2c->SetName("eff_pt_selected"); | |
1701 | aFolderObj->Add(h2c); | |
1702 | ||
1703 | fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6); | |
1704 | fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6); | |
1705 | h1 = fMCPrimTrackHist1[1]->Projection(0); | |
1706 | h2 = fMCPrimTrackHist1[2]->Projection(0); | |
1707 | h2c = (TH1D *)h2->Clone(); | |
1708 | h2c->Divide(h1); | |
1709 | h2c->SetName("eff_pt_all"); | |
1710 | aFolderObj->Add(h2c); | |
1711 | ||
1712 | fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins()); | |
1713 | fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins()); | |
1714 | ||
1715 | // pt spetra | |
1716 | // - rec, primaries, secondaries | |
1717 | // - primaries (pid) | |
1718 | // - secondaries (pid) | |
1719 | // - secondaries (mech) | |
1720 | // - secondaries (mother) | |
1721 | // | |
1722 | ||
1723 | TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0); | |
1724 | mcPtAccall->SetName("mc_pt_acc_all"); | |
1725 | aFolderObj->Add(mcPtAccall); | |
1726 | ||
1727 | TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0); | |
1728 | mcPtAccprim->SetName("mc_pt_acc_prim"); | |
1729 | aFolderObj->Add(mcPtAccprim); | |
1730 | ||
1731 | TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0); | |
1732 | mcPtRecall->SetName("mc_pt_rec_all"); | |
1733 | aFolderObj->Add(mcPtRecall); | |
1734 | ||
1735 | TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0); | |
1736 | mcPtRecprim->SetName("mc_pt_rec_prim"); | |
1737 | aFolderObj->Add(mcPtRecprim); | |
1738 | ||
1739 | TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0); | |
1740 | mcPtRecsec->SetName("mc_pt_rec_sec"); | |
1741 | aFolderObj->Add(mcPtRecsec); | |
1742 | ||
1743 | for(Int_t i = 0; i<6; i++) | |
1744 | { | |
1745 | sprintf(name,"mc_pt_rec_prim_pid_%d",i); | |
1746 | fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); | |
1747 | h = fMCPrimTrackHist1[2]->Projection(0); | |
1748 | h->SetName(name); | |
1749 | aFolderObj->Add(h); | |
1750 | ||
1751 | sprintf(name,"mc_pt_rec_sec_pid_%d",i); | |
1752 | fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); | |
1753 | h = fMCSecTrackHist1[2]->Projection(0); | |
1754 | h->SetName(name); | |
1755 | aFolderObj->Add(h); | |
1756 | ||
1757 | // production mechanisms for given pid | |
1758 | fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); | |
1759 | ||
1760 | for(Int_t j=0; j<20; j++) { | |
1761 | if(j == 4) { | |
1762 | // decay | |
1763 | ||
1764 | sprintf(name,"mc_pt_rec_sec_pid_%d_decay",i); | |
1765 | fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); | |
1766 | h = fMCSecTrackHist1[2]->Projection(0); | |
1767 | h->SetName(name); | |
1768 | aFolderObj->Add(h); | |
1769 | ||
1770 | sprintf(name,"mc_eta_rec_sec_pid_%d_decay",i); | |
1771 | fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); | |
1772 | h = fMCSecTrackHist1[2]->Projection(1); | |
1773 | h->SetName(name); | |
1774 | aFolderObj->Add(h); | |
1775 | ||
1776 | sprintf(name,"mc_mother_rec_sec_pid_%d_decay",i); | |
1777 | fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); | |
1778 | h = fMCSecTrackHist1[2]->Projection(4); | |
1779 | h->SetName(name); | |
1780 | aFolderObj->Add(h); | |
1781 | ||
1782 | } else if (j == 5) { | |
1783 | // conversion | |
1784 | ||
1785 | sprintf(name,"mc_pt_rec_sec_pid_%d_conv",i); | |
1786 | fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); | |
1787 | h = fMCSecTrackHist1[2]->Projection(0); | |
1788 | h->SetName(name); | |
1789 | aFolderObj->Add(h); | |
1790 | ||
1791 | sprintf(name,"mc_eta_rec_sec_pid_%d_conv",i); | |
1792 | fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); | |
1793 | h = fMCSecTrackHist1[2]->Projection(1); | |
1794 | h->SetName(name); | |
1795 | aFolderObj->Add(h); | |
1796 | ||
1797 | sprintf(name,"mc_mother_rec_sec_pid_%d_conv",i); | |
1798 | fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); | |
1799 | h = fMCSecTrackHist1[2]->Projection(4); | |
1800 | h->SetName(name); | |
1801 | aFolderObj->Add(h); | |
1802 | ||
1803 | } else if (j == 13) { | |
1804 | // mat | |
1805 | ||
1806 | sprintf(name,"mc_pt_rec_sec_pid_%d_mat",i); | |
1807 | fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); | |
1808 | h = fMCSecTrackHist1[2]->Projection(0); | |
1809 | h->SetName(name); | |
1810 | aFolderObj->Add(h); | |
1811 | ||
1812 | sprintf(name,"mc_eta_rec_sec_pid_%d_mat",i); | |
1813 | fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); | |
1814 | h = fMCSecTrackHist1[2]->Projection(1); | |
1815 | h->SetName(name); | |
1816 | aFolderObj->Add(h); | |
1817 | ||
1818 | sprintf(name,"mc_eta_mother_rec_sec_pid_%d_mat",i); | |
1819 | fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); | |
1820 | h = fMCSecTrackHist1[2]->Projection(4,1); | |
1821 | h->SetName(name); | |
1822 | aFolderObj->Add(h); | |
1823 | ||
1824 | sprintf(name,"mc_mother_rec_sec_pid_%d_mat",i); | |
1825 | fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); | |
1826 | h = fMCSecTrackHist1[2]->Projection(4); | |
1827 | h->SetName(name); | |
1828 | aFolderObj->Add(h); | |
1829 | ||
1830 | sprintf(name,"mc_pt_mother_rec_sec_pid_%d_mat",i); | |
1831 | fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); | |
1832 | h = fMCSecTrackHist1[2]->Projection(4,0); | |
1833 | h->SetName(name); | |
1834 | aFolderObj->Add(h); | |
1835 | ||
1836 | } else { | |
1837 | continue; | |
1838 | } | |
1839 | } | |
1840 | ||
1841 | } | |
1842 | } // end fHistogramOn | |
1843 | ||
1844 | // | |
1845 | // resolution histograms | |
1846 | // only for reconstructed tracks | |
1847 | // | |
1848 | ||
1849 | TH2F *h2F=0; | |
1850 | TCanvas * c = new TCanvas("resol","resol"); | |
1851 | c->cd(); | |
1852 | ||
1853 | // | |
1854 | fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79); | |
1855 | ||
1856 | h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0); | |
1857 | h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); | |
1858 | h->SetXTitle("p_{tmc} (GeV/c)"); | |
1859 | h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution"); | |
1860 | h->Draw(); | |
1861 | h->SetName("pt_resolution_vs_mcpt"); | |
1862 | aFolderObj->Add(h); | |
1863 | ||
1864 | h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0); | |
1865 | h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); | |
1866 | h->SetXTitle("p_{tmc} (GeV/c)"); | |
1867 | h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean"); | |
1868 | h->Draw(); | |
1869 | h->SetName("dpt_mean_vs_mcpt"); | |
1870 | aFolderObj->Add(h); | |
1871 | ||
1872 | // | |
1873 | h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0); | |
1874 | h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); | |
1875 | h->SetXTitle("p_{tmc} (GeV/c)"); | |
1876 | h->SetYTitle("(#eta-#eta_{mc}) resolution"); | |
1877 | h->Draw(); | |
1878 | h->SetName("eta_resolution_vs_mcpt"); | |
1879 | aFolderObj->Add(h); | |
1880 | ||
1881 | h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0); | |
1882 | h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); | |
1883 | h->SetXTitle("p_{tmc} (GeV/c)"); | |
1884 | h->SetYTitle("(#eta-mc#eta) mean"); | |
1885 | h->Draw(); | |
1886 | h->SetName("deta_mean_vs_mcpt"); | |
1887 | aFolderObj->Add(h); | |
1888 | ||
1889 | // | |
1890 | fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins()); | |
1891 | ||
1892 | h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1); | |
1893 | h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); | |
1894 | h->SetXTitle("#eta_{mc}"); | |
1895 | h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution"); | |
1896 | h->Draw(); | |
1897 | h->SetName("pt_resolution_vs_mceta"); | |
1898 | aFolderObj->Add(h); | |
1899 | ||
1900 | h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1); | |
1901 | h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); | |
1902 | h->SetXTitle("#eta_{mc}"); | |
1903 | h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean"); | |
1904 | h->Draw(); | |
1905 | h->SetName("dpt_mean_vs_mceta"); | |
1906 | aFolderObj->Add(h); | |
1907 | ||
1908 | // | |
1909 | h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1); | |
1910 | h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); | |
1911 | h->SetXTitle("#eta_{mc}"); | |
1912 | h->SetYTitle("(#eta-#eta_{mc}) resolution"); | |
1913 | h->Draw(); | |
1914 | h->SetName("eta_resolution_vs_mceta"); | |
1915 | aFolderObj->Add(h); | |
1916 | ||
1917 | h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1); | |
1918 | h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); | |
1919 | h->SetXTitle("#eta_{mc}"); | |
1920 | h->SetYTitle("(#eta-mc#eta) mean"); | |
1921 | h->Draw(); | |
1922 | h->SetName("deta_mean_vs_mceta"); | |
1923 | aFolderObj->Add(h); | |
1924 | ||
1925 | fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins()); | |
1926 | ||
1927 | } // end use MC info | |
1928 | ||
1929 | // export objects to analysis folder | |
1930 | fAnalysisFolder = ExportToFolder(aFolderObj); | |
1931 | ||
1932 | // delete only TObjArray | |
1933 | if(aFolderObj) delete aFolderObj; | |
1934 | } | |
1935 | ||
1936 | //_____________________________________________________________________________ | |
1937 | TFolder* AlidNdPtAnalysisPbPb::ExportToFolder(TObjArray * const array) | |
1938 | { | |
1939 | // recreate folder avery time and export objects to new one | |
1940 | // | |
1941 | AlidNdPtAnalysisPbPb * comp=this; | |
1942 | TFolder *folder = comp->GetAnalysisFolder(); | |
1943 | ||
1944 | TString name, title; | |
1945 | TFolder *newFolder = 0; | |
1946 | Int_t i = 0; | |
1947 | Int_t size = array->GetSize(); | |
1948 | ||
1949 | if(folder) { | |
1950 | // get name and title from old folder | |
1951 | name = folder->GetName(); | |
1952 | title = folder->GetTitle(); | |
1953 | ||
1954 | // delete old one | |
1955 | delete folder; | |
1956 | ||
1957 | // create new one | |
1958 | newFolder = CreateFolder(name.Data(),title.Data()); | |
1959 | newFolder->SetOwner(); | |
1960 | ||
1961 | // add objects to folder | |
1962 | while(i < size) { | |
1963 | newFolder->Add(array->At(i)); | |
1964 | i++; | |
1965 | } | |
1966 | } | |
1967 | ||
1968 | return newFolder; | |
1969 | } | |
1970 | ||
1971 | //_____________________________________________________________________________ | |
1972 | TFolder* AlidNdPtAnalysisPbPb::CreateFolder(TString name,TString title) { | |
1973 | // create folder for analysed histograms | |
1974 | // | |
1975 | TFolder *folder = 0; | |
1976 | folder = new TFolder(name.Data(),title.Data()); | |
1977 | ||
1978 | return folder; | |
1979 | } |