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