]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG0/dNdPt/AlidNdPtAnalysisPbPb.cxx
move print to debug
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtAnalysisPbPb.cxx
CommitLineData
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
55using namespace std;
56
57ClassImp(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//_____________________________________________________________________________
123AlidNdPtAnalysisPbPb::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//_____________________________________________________________________________
192AlidNdPtAnalysisPbPb::~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//_____________________________________________________________________________
243void 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//_____________________________________________________________________________
622void 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//_____________________________________________________________________________
991void 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//_____________________________________________________________________________
1030void 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//_____________________________________________________________________________
1100void 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//_____________________________________________________________________________
1158Long64_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
1244return count;
1245}
1246
1247
1248
1249//_____________________________________________________________________________
1250void 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//_____________________________________________________________________________
1937TFolder* 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
1968return newFolder;
1969}
1970
1971//_____________________________________________________________________________
1972TFolder* AlidNdPtAnalysisPbPb::CreateFolder(TString name,TString title) {
1973// create folder for analysed histograms
1974//
1975TFolder *folder = 0;
1976 folder = new TFolder(name.Data(),title.Data());
1977
1978 return folder;
1979}