1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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.
19 // - fills analysis control histograms
20 // - fills generic correction matrices
21 // - generates correction matrices
24 // - generic correction matrices
25 // - control histograms
27 // Author: J.Otwinowski 04/11/2008
28 // changed by M.L.Knichel 2011-03-08
29 //------------------------------------------------------------------------------
34 #include "THnSparse.h"
36 #include "AliHeader.h"
37 #include "AliGenEventHeader.h"
39 #include "AliESDEvent.h"
40 #include "AliMCEvent.h"
41 #include "AliESDtrackCuts.h"
43 #include "AliMultiplicity.h"
44 #include "AliTracker.h"
46 #include "AliCentrality.h"
48 #include "AlidNdPtEventCuts.h"
49 #include "AlidNdPtAcceptanceCuts.h"
50 #include "AliPhysicsSelection.h"
51 #include "AliTriggerAnalysis.h"
53 #include "AliPWG0Helper.h"
54 #include "AlidNdPtHelper.h"
55 #include "AlidNdPtAnalysisPbPb.h"
60 ClassImp(AlidNdPtAnalysisPbPb)
62 //_____________________________________________________________________________
63 AlidNdPtAnalysisPbPb::AlidNdPtAnalysisPbPb(): AlidNdPt(),
65 fHistogramsOn(kFALSE),
67 // rec. track pt vs true track pt correlation matrix
68 fTrackPtCorrelationMatrix(0),
70 // event level correction
72 fTriggerEventMatrix(0),
76 // track-event level correction
78 fGenTrackEventMatrix(0),
80 fTriggerTrackEventMatrix(0),
82 fRecTrackEventMatrix(0),
84 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
86 fGenPrimTrackMatrix(0),
87 fRecPrimTrackMatrix(0),
89 // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)
91 fRecSecTrackMatrix(0),
93 // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix)
94 fRecMultTrackMatrix(0),
96 // event control histograms
103 // rec. pt and eta resolution w.r.t MC
106 //multple reconstructed tracks
107 fMCMultRecTrackHist1(0),
109 // rec. track control histograms
114 fCentralityEstimator(0)
116 // default constructor
117 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
119 fMCPrimTrackHist1[i]=0;
120 fMCPrimTrackHist2[i]=0;
121 fMCSecTrackHist1[i]=0;
124 fRecTrackMultHist1[i]=0;
129 //_____________________________________________________________________________
130 AlidNdPtAnalysisPbPb::AlidNdPtAnalysisPbPb(Char_t* name, Char_t* title): AlidNdPt(name,title),
132 fHistogramsOn(kFALSE),
134 // rec. track pt vs true track pt correlation matrix
135 fTrackPtCorrelationMatrix(0),
137 // event level correction
139 fTriggerEventMatrix(0),
143 // track-event level correction
145 fGenTrackEventMatrix(0),
147 fTriggerTrackEventMatrix(0),
149 fRecTrackEventMatrix(0),
151 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
153 fGenPrimTrackMatrix(0),
154 fRecPrimTrackMatrix(0),
156 // secondary track contamination correction (fRecTrackMatrix - fRecSecTrackMatrix)
158 fRecSecTrackMatrix(0),
160 // multiple rec. track contamination corrections (fRecTrackMatrix - fRecMultTrackMatrix)
161 fRecMultTrackMatrix(0),
166 // event control histograms
173 // rec. pt and eta resolution w.r.t MC
176 //multiple reconstructed tracks
177 fMCMultRecTrackHist1(0),
179 // rec. track control histograms
184 fCentralityEstimator(0)
189 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
191 fMCPrimTrackHist1[i]=0;
192 fMCPrimTrackHist2[i]=0;
193 fMCSecTrackHist1[i]=0;
196 fRecTrackMultHist1[i]=0;
202 //_____________________________________________________________________________
203 AlidNdPtAnalysisPbPb::~AlidNdPtAnalysisPbPb() {
207 if(fTrackPtCorrelationMatrix) delete fTrackPtCorrelationMatrix; fTrackPtCorrelationMatrix=0;
209 if(fGenEventMatrix) delete fGenEventMatrix; fGenEventMatrix=0;
210 if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;
211 if(fRecEventMatrix) delete fRecEventMatrix; fRecEventMatrix=0;
214 if(fGenTrackEventMatrix) delete fGenTrackEventMatrix; fGenTrackEventMatrix=0;
215 if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;
216 if(fRecTrackEventMatrix) delete fRecTrackEventMatrix; fRecTrackEventMatrix=0;
219 if(fGenTrackMatrix) delete fGenTrackMatrix; fGenTrackMatrix=0;
220 if(fGenPrimTrackMatrix) delete fGenPrimTrackMatrix; fGenPrimTrackMatrix=0;
221 if(fRecPrimTrackMatrix) delete fRecPrimTrackMatrix; fRecPrimTrackMatrix=0;
223 if(fRecTrackMatrix) delete fRecTrackMatrix; fRecTrackMatrix=0;
224 if(fRecSecTrackMatrix) delete fRecSecTrackMatrix; fRecSecTrackMatrix=0;
226 if(fRecMultTrackMatrix) delete fRecMultTrackMatrix; fRecMultTrackMatrix=0;
228 // Control histograms
230 if(fMCEventHist1) delete fMCEventHist1; fMCEventHist1=0;
231 if(fRecEventHist1) delete fRecEventHist1; fRecEventHist1=0;
232 if(fRecEventHist2) delete fRecEventHist2; fRecEventHist2=0;
233 if(fRecMCEventHist1) delete fRecMCEventHist1; fRecMCEventHist1=0;
234 if(fRecMCEventHist2) delete fRecMCEventHist2; fRecMCEventHist2=0;
237 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
238 if(fMCTrackHist1[i]) delete fMCTrackHist1[i]; fMCTrackHist1[i]=0;
239 if(fMCPrimTrackHist1[i]) delete fMCPrimTrackHist1[i]; fMCPrimTrackHist1[i]=0;
240 if(fMCPrimTrackHist2[i]) delete fMCPrimTrackHist2[i]; fMCPrimTrackHist2[i]=0;
241 if(fMCSecTrackHist1[i]) delete fMCSecTrackHist1[i]; fMCSecTrackHist1[i]=0;
242 if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;
243 if(fRecTrackHist2[i]) delete fRecTrackHist2[i]; fRecTrackHist2[i]=0;
244 if(fRecTrackMultHist1[i]) delete fRecTrackMultHist1[i]; fRecTrackMultHist1[i]=0;
246 if(fRecMCTrackHist1) delete fRecMCTrackHist1; fRecMCTrackHist1=0;
247 if(fMCMultRecTrackHist1) delete fMCMultRecTrackHist1; fMCMultRecTrackHist1=0;
248 if(fRecTrackHist3) delete fRecTrackHist3; fRecTrackHist3=0;
250 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
252 if (fTriggerAnalysis) delete fTriggerAnalysis; fTriggerAnalysis = 0;
255 //_____________________________________________________________________________
256 void AlidNdPtAnalysisPbPb::Init(){
258 // init centraliy (default: VZERO mult)
259 fCentralityEstimator = "V0M";
265 //const Int_t multNbins = 47;
266 const Int_t multNbins = 1;
267 //const Int_t ptNbinsTrackEventCorr = 37;
268 const Int_t ptNbinsTrackEventCorr = 68;
269 const Int_t ptNbins = 68;
270 const Int_t etaNbins = 30;
271 const Int_t zvNbins = 12;
272 const Int_t centralityBins = 3;
274 Double_t binsMult[multNbins+1] = {
275 -0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,
276 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,
277 19.5, 20.5, 30.5, 40.5 , 50.5 , 60.5 , 70.5 , 80.5 , 90.5 , 100.5,
278 200.5, 300.5, 400.5, 500.5, 600.5, 700.5, 800.5, 900.5, 1000.5, 2000.5,
279 3000.5, 4000.5, 5000.5, 6000.5, 7000.5, 8000.5, 9000.5, 10000.5 }; // forPbPb
281 Double_t binsMult[multNbins+1] = {-0.5, 10000.5 }; // forPbPb
285 // 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};
287 Double_t binsPtTrackEventCorr[ptNbinsTrackEventCorr+1] = {
288 0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45,
289 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95,
290 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9,
291 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8,
292 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0,
293 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0,
294 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0 };
296 Double_t binsPt[ptNbins+1] = {
297 0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45,
298 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95,
299 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9,
300 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8,
301 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0,
302 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0,
303 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0 };
305 Double_t binsEta[etaNbins+1] = {
306 -1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6,
307 -0.5, -0.4, -0.3, -0.2, -0.1, 0.0, 0.1, 0.2, 0.3, 0.4,
308 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4,
311 Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
313 //Double_t binsCentrality[centralityBins+1] = {0., 5., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.};
314 Double_t binsCentrality[centralityBins+1] = {0., 5., 70., 80.};
316 Int_t binsTrackEventCorrMatrix[4]={zvNbins,ptNbinsTrackEventCorr,etaNbins,centralityBins};
317 Int_t binsTrackEvent[4]={zvNbins,ptNbins,etaNbins,centralityBins};
318 Int_t binsTrackPtCorrelationMatrix[4]={ptNbins,ptNbins,etaNbins,centralityBins};
321 fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta:Centrality",4,binsTrackPtCorrelationMatrix);
322 fTrackPtCorrelationMatrix->SetBinEdges(0,binsPt);
323 fTrackPtCorrelationMatrix->SetBinEdges(1,binsPt);
324 fTrackPtCorrelationMatrix->SetBinEdges(2,binsEta);
325 fTrackPtCorrelationMatrix->SetBinEdges(3,binsCentrality);
326 fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)");
327 fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
328 fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta");
329 fTrackPtCorrelationMatrix->GetAxis(3)->SetTitle("Centrality");
330 fTrackPtCorrelationMatrix->Sumw2();
333 // Efficiency and contamination correction matrices
335 Int_t binsEventMatrix[3]={zvNbins,multNbins,centralityBins};
336 Double_t minEventMatrix[3]={-30.,-0.5,0.};
337 Double_t maxEventMatrix[3]={30.,10000.5,100.};
339 fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multMB:Centrality",3,binsEventMatrix,minEventMatrix,maxEventMatrix);
340 fGenEventMatrix->SetBinEdges(0,binsZv);
341 fGenEventMatrix->SetBinEdges(1,binsMult);
342 fGenEventMatrix->SetBinEdges(2,binsCentrality);
343 fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
344 fGenEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
345 fGenEventMatrix->GetAxis(2)->SetTitle("Centrality");
346 fGenEventMatrix->Sumw2();
348 fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multMB:Centrality",3,binsEventMatrix,minEventMatrix,maxEventMatrix);
349 fTriggerEventMatrix->SetBinEdges(0,binsZv);
350 fTriggerEventMatrix->SetBinEdges(1,binsMult);
351 fTriggerEventMatrix->SetBinEdges(2,binsCentrality);
352 fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
353 fTriggerEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
354 fTriggerEventMatrix->GetAxis(2)->SetTitle("Centrality");
355 fTriggerEventMatrix->Sumw2();
357 fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multMB:Centrality",3,binsEventMatrix,minEventMatrix,maxEventMatrix);
358 fRecEventMatrix->SetBinEdges(0,binsZv);
359 fRecEventMatrix->SetBinEdges(1,binsMult);
360 fRecEventMatrix->SetBinEdges(2,binsCentrality);
361 fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
362 fRecEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
363 fRecEventMatrix->GetAxis(2)->SetTitle("Centrality");
364 fRecEventMatrix->Sumw2();
367 // track to event corrections
369 fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
370 fGenTrackEventMatrix->SetBinEdges(0,binsZv);
371 fGenTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
372 fGenTrackEventMatrix->SetBinEdges(2,binsEta);
373 fGenTrackEventMatrix->SetBinEdges(3,binsCentrality);
374 fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
375 fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
376 fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
377 fGenTrackEventMatrix->GetAxis(3)->SetTitle("Centrality");
378 fGenTrackEventMatrix->Sumw2();
380 fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
381 fTriggerTrackEventMatrix->SetBinEdges(0,binsZv);
382 fTriggerTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
383 fTriggerTrackEventMatrix->SetBinEdges(2,binsEta);
384 fTriggerTrackEventMatrix->SetBinEdges(3,binsCentrality);
385 fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
386 fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
387 fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
388 fTriggerTrackEventMatrix->GetAxis(3)->SetTitle("Centrality");
389 fTriggerTrackEventMatrix->Sumw2();
391 fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
392 fRecTrackEventMatrix->SetBinEdges(0,binsZv);
393 fRecTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
394 fRecTrackEventMatrix->SetBinEdges(2,binsEta);
395 fRecTrackEventMatrix->SetBinEdges(3,binsCentrality);
396 fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
397 fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
398 fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
399 fRecTrackEventMatrix->GetAxis(3)->SetTitle("Centrality");
400 fRecTrackEventMatrix->Sumw2();
403 // tracks correction matrices
405 fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
406 fGenTrackMatrix->SetBinEdges(0,binsZv);
407 fGenTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
408 fGenTrackMatrix->SetBinEdges(2,binsEta);
409 fGenTrackMatrix->SetBinEdges(3,binsCentrality);
410 fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
411 fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
412 fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta");
413 fGenTrackMatrix->GetAxis(3)->SetTitle("Centrality");
414 fGenTrackMatrix->Sumw2();
416 fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
417 fGenPrimTrackMatrix->SetBinEdges(0,binsZv);
418 fGenPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
419 fGenPrimTrackMatrix->SetBinEdges(2,binsEta);
420 fGenPrimTrackMatrix->SetBinEdges(3,binsCentrality);
421 fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
422 fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
423 fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");
424 fGenPrimTrackMatrix->GetAxis(3)->SetTitle("Centrality");
425 fGenPrimTrackMatrix->Sumw2();
428 fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
429 fRecPrimTrackMatrix->SetBinEdges(0,binsZv);
430 fRecPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
431 fRecPrimTrackMatrix->SetBinEdges(2,binsEta);
432 fRecPrimTrackMatrix->SetBinEdges(3,binsCentrality);
433 fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
434 fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
435 fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");
436 fRecPrimTrackMatrix->GetAxis(3)->SetTitle("Centrality");
437 fRecPrimTrackMatrix->Sumw2();
440 fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
441 fRecTrackMatrix->SetBinEdges(0,binsZv);
442 fRecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
443 fRecTrackMatrix->SetBinEdges(2,binsEta);
444 fRecTrackMatrix->SetBinEdges(3,binsCentrality);
445 fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
446 fRecTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
447 fRecTrackMatrix->GetAxis(2)->SetTitle("mcEta");
448 fRecTrackMatrix->GetAxis(3)->SetTitle("Centrality");
449 fRecTrackMatrix->Sumw2();
451 fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
452 fRecSecTrackMatrix->SetBinEdges(0,binsZv);
453 fRecSecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
454 fRecSecTrackMatrix->SetBinEdges(2,binsEta);
455 fRecSecTrackMatrix->SetBinEdges(3,binsCentrality);
456 fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
457 fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");
458 fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta");
459 fRecSecTrackMatrix->GetAxis(3)->SetTitle("Centrality");
460 fRecSecTrackMatrix->Sumw2();
463 fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
464 fRecMultTrackMatrix->SetBinEdges(0,binsZv);
465 fRecMultTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
466 fRecMultTrackMatrix->SetBinEdges(2,binsEta);
467 fRecMultTrackMatrix->SetBinEdges(3,binsCentrality);
468 fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
469 fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
470 fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta");
471 fRecMultTrackMatrix->GetAxis(3)->SetTitle("Centrality");
472 fRecMultTrackMatrix->Sumw2();
475 // Control analysis histograms
477 Int_t binsMCEventHist1[4]={100,100,zvNbins,centralityBins};
478 Double_t minMCEventHist1[4]={-0.1,-0.1,-30.,0.};
479 Double_t maxMCEventHist1[4]={0.1,0.1,30.,100.};
480 fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv:Centrality",4,binsMCEventHist1,minMCEventHist1,maxMCEventHist1);
481 fMCEventHist1->SetBinEdges(2,binsZv);
482 fMCEventHist1->SetBinEdges(3,binsCentrality);
483 fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)");
484 fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)");
485 fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)");
486 fMCEventHist1->GetAxis(3)->SetTitle("Centrality");
487 fMCEventHist1->Sumw2();
490 Int_t binsRecEventHist1[4]={100,100,zvNbins,centralityBins};
491 Double_t minRecEventHist1[4]={-3.,-3.,-30.,0.};
492 Double_t maxRecEventHist1[4]={3.,3.,30.,100.};
494 fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv:Centrality",4,binsRecEventHist1,minRecEventHist1,maxRecEventHist1);
495 fRecEventHist1->SetBinEdges(2,binsZv);
496 fRecEventHist1->SetBinEdges(3,binsCentrality);
497 fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)");
498 fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)");
499 fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)");
500 fRecEventHist1->GetAxis(3)->SetTitle("Centrality");
501 fRecEventHist1->Sumw2();
504 Int_t binsRecEventHist2[3]={zvNbins, multNbins, centralityBins};
505 Double_t minRecEventHist2[3]={-30., -0.5, 0.};
506 Double_t maxRecEventHist2[3]={30., 10000.5, 100.};
508 fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB:Centrality",3,binsRecEventHist2,minRecEventHist2,maxRecEventHist2);
509 fRecEventHist2->SetBinEdges(0,binsZv);
510 fRecEventHist2->SetBinEdges(1,binsMult);
511 fRecEventHist2->SetBinEdges(2,binsCentrality);
512 fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)");
513 fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB");
514 fRecEventHist2->GetAxis(2)->SetTitle("Centrality");
515 fRecEventHist2->Sumw2();
518 Double_t kFact = 0.1;
519 Int_t binsRecMCEventHist1[4]={100,100,100, centralityBins};
520 Double_t minRecMCEventHist1[4]={-10.0*kFact,-10.0*kFact,-10.0*kFact, 0.};
521 Double_t maxRecMCEventHist1[4]={10.0*kFact,10.0*kFact,10.0*kFact, 100.};
523 fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv:Centrality",4,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1);
524 fRecMCEventHist1->SetBinEdges(3,binsCentrality);
525 fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)");
526 fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)");
527 fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)");
528 fRecMCEventHist1->GetAxis(3)->SetTitle("Centrality");
530 fRecMCEventHist1->Sumw2();
533 Int_t binsRecMCEventHist2[4]={100,100,multNbins, centralityBins};
534 Double_t minRecMCEventHist2[4]={-10.0*kFact,-10.0*kFact,-0.5, 0.};
535 Double_t maxRecMCEventHist2[4]={10.0*kFact,10.0*kFact,10000.5, 100.};
537 fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:mult:Centrality",4,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2);
538 fRecMCEventHist2->SetBinEdges(2,binsMult);
539 fRecMCEventHist2->SetBinEdges(3,binsCentrality);
540 fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)");
541 fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)");
542 fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity");
543 fRecMCEventHist2->GetAxis(3)->SetTitle("Centrality");
544 fRecMCEventHist2->Sumw2();
548 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++)
550 // THnSparse track histograms
552 Int_t binsMCTrackHist1[4]= {ptNbins, etaNbins, 90, centralityBins};
553 Double_t minMCTrackHist1[4]={0.,-1.5,0., 0.};
554 Double_t maxMCTrackHist1[4]={50,1.5,2.*TMath::Pi(), 100.};
555 sprintf(name,"fMCTrackHist1_%d",i);
556 sprintf(title,"mcPt:mcEta:mcPhi:Centrality");
558 fMCTrackHist1[i] = new THnSparseF(name,title,4,binsMCTrackHist1,minMCTrackHist1,maxMCTrackHist1);
559 fMCTrackHist1[i]->SetBinEdges(0,binsPt);
560 fMCTrackHist1[i]->SetBinEdges(1,binsEta);
561 fMCTrackHist1[i]->SetBinEdges(3,binsCentrality);
562 fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
563 fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
564 fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)");
565 fMCTrackHist1[i]->GetAxis(3)->SetTitle("Centrality");
566 fMCTrackHist1[i]->Sumw2();
568 Int_t binsMCPrimTrackHist1[6]= {ptNbins,etaNbins,6,20,4000, centralityBins};
569 Double_t minMCPrimTrackHist1[6]={0.,-1.5,0.,0.,0., 0.};
570 Double_t maxMCPrimTrackHist1[6]={50.,1.5,6.,20.,4000., 100.};
571 sprintf(name,"fMCPrimTrackHist1_%d",i);
572 sprintf(title,"mcPt:mcEta:pid:mech:mother:Centrality");
574 fMCPrimTrackHist1[i] = new THnSparseF(name,title,6,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1);
575 fMCPrimTrackHist1[i]->SetBinEdges(0,binsPt);
576 fMCPrimTrackHist1[i]->SetBinEdges(1,binsEta);
577 fMCPrimTrackHist1[i]->SetBinEdges(5,binsCentrality);
578 fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
579 fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
580 fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid");
581 fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech");
582 fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother");
583 fMCPrimTrackHist1[i]->GetAxis(5)->SetTitle("Centrality");
584 fMCPrimTrackHist1[i]->Sumw2();
586 Int_t binsMCPrimTrackHist2[4]= {4000,20,4000,centralityBins};
587 Double_t minMCPrimTrackHist2[4]={0.,0.,0., 0.};
588 Double_t maxMCPrimTrackHist2[4]={4000.,20.,4000., 100.};
589 sprintf(name,"fMCPrimTrackHist2_%d",i);
590 sprintf(title,"pdg:mech:mother:Centrality");
592 fMCPrimTrackHist2[i] = new THnSparseF(name,title,4,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2);
593 fMCPrimTrackHist2[i]->SetBinEdges(3,binsCentrality);
594 fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg");
595 fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech");
596 fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother");
597 fMCPrimTrackHist2[i]->GetAxis(3)->SetTitle("Centrality");
598 fMCPrimTrackHist2[i]->Sumw2();
600 Int_t binsMCSecTrackHist1[6]= {ptNbins,etaNbins,6,20,4000, centralityBins};
601 Double_t minMCSecTrackHist1[6]={0.,-1.5,0.,0.,0., 0.};
602 Double_t maxMCSecTrackHist1[6]={50.,1.5,6.,20.,4000., 100.};
603 sprintf(name,"fMCSecTrackHist1_%d",i);
604 sprintf(title,"mcPt:mcEta:pid:mech:mother:Centrality");
606 fMCSecTrackHist1[i] = new THnSparseF(name,title,6,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1);
607 fMCSecTrackHist1[i]->SetBinEdges(0,binsPt);
608 fMCSecTrackHist1[i]->SetBinEdges(1,binsEta);
609 fMCSecTrackHist1[i]->SetBinEdges(5,binsCentrality);
610 fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
611 fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
612 fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid");
613 fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech");
614 fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother");
615 fMCSecTrackHist1[i]->GetAxis(5)->SetTitle("Centrality");
616 fMCSecTrackHist1[i]->Sumw2();
618 Int_t binsRecTrackHist1[4]={ptNbins,etaNbins,90, centralityBins};
619 Double_t minRecTrackHist1[4]={0.,-1.5,0., 0.};
620 Double_t maxRecTrackHist1[4]={50.,1.5,2.*TMath::Pi(), 100.};
621 sprintf(name,"fRecTrackHist1_%d",i);
622 sprintf(title,"Pt:Eta:Phi:Centrality");
623 fRecTrackHist1[i] = new THnSparseF(name,title,4,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1);
624 fRecTrackHist1[i]->SetBinEdges(0,binsPt);
625 fRecTrackHist1[i]->SetBinEdges(1,binsEta);
626 fRecTrackHist1[i]->SetBinEdges(3,binsCentrality);
627 fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)");
628 fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta");
629 fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)");
630 fRecTrackHist1[i]->GetAxis(3)->SetTitle("Centrality");
631 fRecTrackHist1[i]->Sumw2();
633 sprintf(name,"fRecTrackHist2_%d",i);
634 sprintf(title,"Zv:Pt:Eta:Centrality");
635 fRecTrackHist2[i] = new THnSparseF(name,title,4,binsTrackEvent);
636 fRecTrackHist2[i]->SetBinEdges(0,binsZv);
637 fRecTrackHist2[i]->SetBinEdges(1,binsPt);
638 fRecTrackHist2[i]->SetBinEdges(2,binsEta);
639 fRecTrackHist2[i]->SetBinEdges(3,binsCentrality);
640 fRecTrackHist2[i]->GetAxis(0)->SetTitle("Zv (cm)");
641 fRecTrackHist2[i]->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
642 fRecTrackHist2[i]->GetAxis(2)->SetTitle("#eta");
643 fRecTrackHist2[i]->GetAxis(3)->SetTitle("Centrality");
644 fRecTrackHist2[i]->Sumw2();
647 Int_t binsRecTrackMultHist1[3]={ptNbins,multNbins, centralityBins};
648 Double_t minRecTrackMultHist1[3]={0.,-0.5, -0.};
649 Double_t maxRecTrackMultHist1[3]={50.,10000.5, 100.};
650 sprintf(name,"fRecTrackMultHist_%d",i);
651 sprintf(title,"Pt:Mult:Centrality");
652 fRecTrackMultHist1[i] = new THnSparseF(name,title,3,binsRecTrackMultHist1,minRecTrackMultHist1,maxRecTrackMultHist1);
653 fRecTrackMultHist1[i]->SetBinEdges(0,binsPt);
654 fRecTrackMultHist1[i]->SetBinEdges(1,binsMult);
655 fRecTrackMultHist1[i]->SetBinEdges(2,binsCentrality);
656 fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
657 fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");
658 fRecTrackMultHist1[i]->GetAxis(2)->SetTitle("Centrality");
659 fRecTrackMultHist1[i]->Sumw2();
662 Int_t binsRecMCTrackHist1[5] = {ptNbins,etaNbins,100,100, centralityBins};
663 Double_t minRecMCTrackHist1[5]={0.,-1.5,-0.5,-0.5, 0.};
664 Double_t maxRecMCTrackHist1[5]={50.,1.5,0.5,0.5, 100.};
666 sprintf(name,"fRecMCTrackHist1");
667 sprintf(title,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta):Centrality");
668 fRecMCTrackHist1 = new THnSparseF(name,title,5,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1);
669 fRecMCTrackHist1->SetBinEdges(0,binsPt);
670 fRecMCTrackHist1->SetBinEdges(1,binsEta);
671 fRecMCTrackHist1->SetBinEdges(4,binsCentrality);
672 fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
673 fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta");
674 fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt");
675 fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta");
676 fRecMCTrackHist1->GetAxis(4)->SetTitle("Centrality");
678 Int_t binsMCMultRecTrackHist1[4] = {ptNbins,etaNbins,6, centralityBins};
679 Double_t minMCMultRecTrackHist1[4]={0.,-1.5,0., 0.};
680 Double_t maxMCMultRecTrackHist1[4]={50.,1.5,6., 100.};
681 sprintf(name,"fMCMultRecTrackHist1");
682 sprintf(title,"mcPt:mcEta:pid:Centrality");
683 fMCMultRecTrackHist1 = new THnSparseF(name,title,4,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1);
684 fMCMultRecTrackHist1->SetBinEdges(0,binsPt);
685 fMCMultRecTrackHist1->SetBinEdges(1,binsEta);
686 fMCMultRecTrackHist1->SetBinEdges(3,binsCentrality);
687 fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
688 fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta");
689 fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid");
690 fMCMultRecTrackHist1->GetAxis(3)->SetTitle("Centrality");
692 //nClust:chi2PerClust:pt:eta:phi:Centrality
693 Int_t binsRecTrackHist3[6]={160,100,ptNbins,etaNbins,90, centralityBins};
694 Double_t minRecTrackHist3[6]={0., 0., 0., -1.5, 0., 0.};
695 Double_t maxRecRecTrackHist3[6]={160.,10., 50., 1.5, 2.*TMath::Pi(), 100.};
697 fRecTrackHist3 = new THnSparseF("fRecTrackHist3","nClust:chi2PerClust:pt:eta:phi:Centrality",6,binsRecTrackHist3,minRecTrackHist3,maxRecRecTrackHist3);
698 fRecTrackHist3->SetBinEdges(2,binsPt);
699 fRecTrackHist3->SetBinEdges(3,binsEta);
700 fRecTrackHist3->SetBinEdges(5,binsCentrality);
701 fRecTrackHist3->GetAxis(0)->SetTitle("nClust");
702 fRecTrackHist3->GetAxis(1)->SetTitle("chi2PerClust");
703 fRecTrackHist3->GetAxis(2)->SetTitle("p_{T} (GeV/c)");
704 fRecTrackHist3->GetAxis(3)->SetTitle("#eta");
705 fRecTrackHist3->GetAxis(4)->SetTitle("#phi (rad)");
706 fRecTrackHist3->GetAxis(5)->SetTitle("Centrality");
707 fRecTrackHist3->Sumw2();
711 fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder");
713 // init trigger analysis (for zdc cut)
714 fTriggerAnalysis = new AliTriggerAnalysis;
717 //_____________________________________________________________________________
718 void AlidNdPtAnalysisPbPb::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent)
721 // Process real and/or simulated events
724 AliDebug(AliLog::kError, "esdEvent not available");
728 // zdc cut not for MC
730 if (!fTriggerAnalysis->ZDCTimeTrigger(esdEvent)) {
735 // track cuts from Jochen
736 const AliESDVertex* vtxESDTPC = esdEvent->GetPrimaryVertexTPC();
737 if( vtxESDTPC->GetNContributors() < 1 ) {
741 // francesco prino cut
742 const AliMultiplicity* multESD = esdEvent->GetMultiplicity();
743 if( vtxESDTPC->GetNContributors() < (-10.+0.25*multESD->GetNumberOfITSClusters(0)) ) {
747 // get selection cuts
748 AlidNdPtEventCuts *evtCuts = GetEventCuts();
749 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
750 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
752 if(!evtCuts || !accCuts || !esdTrackCuts) {
753 AliDebug(AliLog::kError, "cuts not available");
758 Bool_t isEventTriggered = kTRUE;
759 AliPhysicsSelection *trigSel = NULL;
760 AliTriggerAnalysis *trigAna = NULL;
762 if(evtCuts->IsTriggerRequired())
765 trigSel = GetPhysicsTriggerSelection();
767 printf("cannot get trigSel \n");
774 trigSel->SetAnalyzeMC();
777 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
779 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
781 trigAna = trigSel->GetTriggerAnalysis();
785 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
786 }//if(GetTrigger() == AliTriggerAnalysis::kV0AND)
788 }//if(evtCuts->IsTriggerRequired())
791 // centrality determination
792 Float_t centralityF = 0;
793 AliCentrality *esdCentrality = esdEvent->GetCentrality();
794 centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());
795 if (centralityF == 0.) {
800 // use MC information
801 AliHeader* header = 0;
802 AliGenEventHeader* genHeader = 0;
806 Int_t multMCTrueTracks = 0;
811 AliDebug(AliLog::kError, "mcEvent not available");
814 // get MC event header
815 header = mcEvent->Header();
817 AliDebug(AliLog::kError, "Header not available");
821 stack = mcEvent->Stack();
823 AliDebug(AliLog::kError, "Stack not available");
828 genHeader = header->GenEventHeader();
830 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
833 genHeader->PrimaryVertex(vtxMC);
835 Double_t vMCEventHist1[4]={vtxMC[0],vtxMC[1],vtxMC[2],centralityF};
836 fMCEventHist1->Fill(vMCEventHist1);
838 // multipliticy of all MC primary tracks
839 // in Zv, pt and eta ranges)
840 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
844 // get reconstructed vertex
845 const AliESDVertex* vtxESD = 0;
846 if(evtCuts->IsRecVertexRequired())
848 if(GetAnalysisMode() == AlidNdPtHelper::kTPC) {
849 vtxESD = esdEvent->GetPrimaryVertexTPC();
851 else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) {
852 vtxESD = esdEvent->GetPrimaryVertexTracks();
859 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD);
860 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);
861 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());
863 // vertex contributors
864 Int_t multMBTracks = 0;
865 if(GetAnalysisMode() == AlidNdPtHelper::kTPC)
867 if(vtxESD->GetStatus()) {
868 multMBTracks = vtxESD->GetNContributors();
871 else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) {
872 if(vtxESD->GetStatus()) {
873 multMBTracks = vtxESD->GetNContributors();
877 AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));
881 TObjArray *allChargedTracks=0;
882 //Int_t multAll=0, multAcc=0, multRec=0;
883 Int_t multAll=0, multRec=0;
884 Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0;
887 if(isEventOK && isEventTriggered)
890 // get all charged tracks
891 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());
892 if(!allChargedTracks) return;
894 Int_t entries = allChargedTracks->GetEntries();
896 labelsAll = new Int_t[entries];
897 labelsAcc = new Int_t[entries];
898 labelsRec = new Int_t[entries];
899 for(Int_t i=0; i<entries;++i)
901 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
904 if(track->Charge()==0) continue;
907 // only postive charged
908 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
911 // only negative charged
912 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
916 Double_t values[4] = {vtxESD->GetZv(),track->Pt(),track->Eta(), centralityF};
918 fRecTrackHist2[AlidNdPtHelper::kAllTracks]->Fill(values);
919 FillHistograms(track,stack,AlidNdPtHelper::kAllTracks,centralityF);
920 labelsAll[multAll] = TMath::Abs(track->GetLabel());
924 if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track)) {
926 fRecTrackHist2[AlidNdPtHelper::kRecTracks]->Fill(values);
927 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,centralityF);
928 labelsRec[multRec] = TMath::Abs(track->GetLabel());
936 // fill track multiplicity histograms
937 //FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec);
939 Double_t vRecEventHist1[4] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),centralityF};
940 fRecEventHist1->Fill(vRecEventHist1);
942 Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,centralityF};
943 fRecEventHist2->Fill(vRecEventHist2);
945 } // triggered and event vertex
950 //Double_t vMultTrueEventMatrix[2] = { multRec, multMCTrueTracks };
953 // event level corrections (zv,N_MB)
956 Double_t vEventMatrix[3] = {vtxMC[2],multMBTracks,centralityF};
957 fGenEventMatrix->Fill(vEventMatrix);
958 if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix);
959 if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix);
962 // track-event level corrections (zv,pt,eta)
964 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
966 TParticle* particle = stack->Particle(iMc);
970 // only charged particles
971 if(!particle->GetPDG()) continue;
972 Double_t charge = particle->GetPDG()->Charge()/3.;
973 if ( TMath::Abs(charge) < 0.001 )
976 // only postive charged
977 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
980 // only negative charged
981 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
985 Bool_t prim = stack->IsPhysicalPrimary(iMc);
989 if(accCuts->AcceptTrack(particle))
991 Double_t vTrackEventMatrix[4] = {vtxMC[2], particle->Pt(), particle->Eta(), centralityF};
992 fGenTrackEventMatrix->Fill(vTrackEventMatrix);
994 if(!isEventTriggered) continue;
995 fTriggerTrackEventMatrix->Fill(vTrackEventMatrix);
997 if(!isEventOK) continue;
998 fRecTrackEventMatrix->Fill(vTrackEventMatrix);
1000 }// if(accCuts->AcceptTrack(particle))
1001 }// for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
1004 // track-level corrections (zv,pt,eta)
1006 if(isEventOK && isEventTriggered)
1009 // fill MC and rec event control histograms
1011 Double_t vRecMCEventHist1[4] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2], centralityF};
1012 fRecMCEventHist1->Fill(vRecMCEventHist1);//
1014 Double_t vRecMCEventHist2[4] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks, centralityF};
1015 fRecMCEventHist2->Fill(vRecMCEventHist2);
1020 // MC histograms for track efficiency studies
1022 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
1024 TParticle* particle = stack->Particle(iMc);
1028 Double_t vTrackMatrix[4] = {vtxMC[2],particle->Pt(),particle->Eta(),centralityF};
1030 // only charged particles
1031 if(!particle->GetPDG()) continue;
1032 Double_t charge = particle->GetPDG()->Charge()/3.;
1033 if (TMath::Abs(charge) < 0.001)
1036 // only postive charged
1037 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
1040 // only negative charged
1041 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
1045 Bool_t prim = stack->IsPhysicalPrimary(iMc);
1048 if(accCuts->AcceptTrack(particle))
1051 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) )
1052 fGenPrimTrackMatrix->Fill(vTrackMatrix);
1054 // fill control histograms
1056 FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks, centralityF);
1058 // check multiple found tracks
1059 Int_t multCount = 0;
1060 for(Int_t iRec=0; iRec<multRec; ++iRec)
1062 if(iMc == labelsRec[iRec])
1067 fRecMultTrackMatrix->Fill(vTrackMatrix);
1069 // fill control histogram
1071 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
1072 Double_t vMCMultRecTrackHist1[4] = {particle->Pt(), particle->Eta(), pid, centralityF};
1073 fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1);
1079 // check reconstructed
1080 for(Int_t iRec=0; iRec<multRec; ++iRec)
1082 if(iMc == labelsRec[iRec])
1084 fRecTrackMatrix->Fill(vTrackMatrix);
1086 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) {
1087 fRecPrimTrackMatrix->Fill(vTrackMatrix);
1089 if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix);
1091 // fill control histograms
1093 FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks, centralityF);
1096 }//if(iMc == labelsRec[iRec])
1103 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;
1104 if(labelsAll) delete [] labelsAll; labelsAll = 0;
1105 if(labelsAcc) delete [] labelsAcc; labelsAcc = 0;
1106 if(labelsRec) delete [] labelsRec; labelsRec = 0;
1108 if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;
1112 //_____________________________________________________________________________
1113 void AlidNdPtAnalysisPbPb::FillHistograms(TObjArray *const allChargedTracks,Int_t *const labelsAll,Int_t multAll,Int_t *const labelsAcc,Int_t multAcc,Int_t *const labelsRec,Int_t multRec, Float_t centralityF) {
1114 // multiplicity histograms
1117 if(!allChargedTracks) return;
1118 if(!labelsAll) return;
1119 if(!labelsAcc) return;
1120 if(!labelsRec) return;
1122 Int_t entries = allChargedTracks->GetEntries();
1123 for(Int_t i=0; i<entries; ++i)
1125 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
1126 if(!track) continue;
1127 if(track->Charge() == 0) continue;
1129 Int_t label = TMath::Abs(track->GetLabel());
1130 for(Int_t iAll=0; iAll<multAll; ++iAll) {
1131 if(label == labelsAll[iAll]) {
1132 Double_t v1[3] = {track->Pt(), multAll, centralityF};
1133 fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1);
1136 for(Int_t iAcc=0; iAcc<multAcc; ++iAcc) {
1137 if(label == labelsAcc[iAcc]) {
1138 Double_t v2[3] = {track->Pt(), multAcc, centralityF};
1139 fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2);
1142 for(Int_t iRec=0; iRec<multRec; ++iRec) {
1143 if(label == labelsRec[iRec]) {
1144 Double_t v3[3] = {track->Pt(), multRec, centralityF};
1145 fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3);
1151 //_____________________________________________________________________________
1152 void AlidNdPtAnalysisPbPb::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, AlidNdPtHelper::TrackObject trackObj, Float_t centralityF)
1156 // Fill ESD track and MC histograms
1158 if(!esdTrack) return;
1160 Float_t q = esdTrack->Charge();
1161 if(TMath::Abs(q) < 0.001) return;
1163 Float_t pt = esdTrack->Pt();
1164 Float_t eta = esdTrack->Eta();
1165 Float_t phi = esdTrack->Phi();
1167 Float_t dca[2], bCov[3];
1168 esdTrack->GetImpactParameters(dca,bCov);
1170 Int_t nClust = esdTrack->GetTPCclusters(0);
1171 Float_t chi2PerCluster = 0.;
1172 if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust);
1176 Double_t values[4] = {pt,eta,phi,centralityF};
1177 fRecTrackHist1[trackObj]->Fill(values);
1180 // Fill rec vs MC information
1184 Int_t label = TMath::Abs(esdTrack->GetLabel());
1185 //if(label == 0) return;
1187 TParticle* particle = stack->Particle(label);
1188 if(!particle) return;
1190 Int_t motherPdg = -1;
1191 TParticle* mother = 0;
1193 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
1194 Int_t motherLabel = particle->GetMother(0);
1195 if(motherLabel>0) mother = stack->Particle(motherLabel);
1196 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
1197 //Int_t mech = particle->GetUniqueID(); // production mechanism
1199 if(!particle->GetPDG()) return;
1200 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
1201 if(TMath::Abs(gq)<0.001) return;
1202 Float_t gpt = particle->Pt();
1203 Float_t geta = particle->Eta();
1206 //printf("pt %f, gpt %f \n",pt,gpt);
1207 if(gpt) dpt = (pt-gpt)/gpt;
1208 Double_t deta = (eta-geta);
1211 if(trackObj == AlidNdPtHelper::kRecTracks) //RecTracks???
1213 Double_t vTrackPtCorrelationMatrix[4]={pt,gpt,geta,centralityF};
1214 fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix);
1216 Double_t vRecMCTrackHist1[5]={gpt,geta,dpt,deta,centralityF};
1217 fRecMCTrackHist1->Fill(vRecMCTrackHist1);
1221 //_____________________________________________________________________________
1222 void AlidNdPtAnalysisPbPb::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj, Float_t centralityF)
1225 // Fill MC histograms
1228 TParticle* particle = stack->Particle(label);
1229 if(!particle) return;
1231 Int_t motherPdg = -1;
1232 TParticle* mother = 0;
1234 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
1235 Int_t motherLabel = particle->GetMother(0);
1236 if(motherLabel>0) mother = stack->Particle(motherLabel);
1237 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
1238 Int_t mech = particle->GetUniqueID(); // production mechanism
1240 if(!particle->GetPDG()) return;
1241 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
1242 if(TMath::Abs(gq) < 0.001) return;
1244 Float_t gpt = particle->Pt();
1245 //Float_t qgpt = particle->Pt() * gq;
1246 Float_t geta = particle->Eta();
1247 Float_t gphi = particle->Phi();
1248 //Float_t gpz = particle->Pz();
1250 Bool_t prim = stack->IsPhysicalPrimary(label);
1251 //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();
1253 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
1255 //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech);
1256 //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech);
1261 Double_t vMCTrackHist1[4] = {gpt,geta,gphi,centralityF};
1262 fMCTrackHist1[trackObj]->Fill(vMCTrackHist1);
1264 Double_t vMCPrimTrackHist1[6] = {gpt,geta,pid,mech,motherPdg,centralityF};
1265 Double_t vMCPrimTrackHist2[4] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg,centralityF};
1267 //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
1270 fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
1271 if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2);
1274 fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
1279 //_____________________________________________________________________________
1280 Long64_t AlidNdPtAnalysisPbPb::Merge(TCollection* const list)
1282 // Merge list of objects (needed by PROOF)
1287 if (list->IsEmpty())
1290 TIterator* iter = list->MakeIterator();
1294 TList *collPhysSelection = new TList;
1296 // collection of generated histograms
1299 while((obj = iter->Next()) != 0) {
1300 AlidNdPtAnalysisPbPb* entry = dynamic_cast<AlidNdPtAnalysisPbPb*>(obj);
1301 if (entry == 0) continue;
1303 // physics selection
1304 //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection());
1305 AliPhysicsSelection *physSel = entry->GetPhysicsTriggerSelection();
1306 if( physSel ) collPhysSelection->Add(physSel);
1309 fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix);
1312 fGenEventMatrix->Add(entry->fGenEventMatrix);
1314 fTriggerEventMatrix->Add(entry->fTriggerEventMatrix);
1316 fRecEventMatrix->Add(entry->fRecEventMatrix);
1318 fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix);
1320 fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix);
1322 fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix);
1325 fGenTrackMatrix->Add(entry->fGenTrackMatrix);
1326 fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix);
1327 fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix);
1329 fRecTrackMatrix->Add(entry->fRecTrackMatrix);
1330 fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix);
1332 fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix);
1335 // control analysis histograms
1337 fMCEventHist1->Add(entry->fMCEventHist1);
1338 fRecEventHist1->Add(entry->fRecEventHist1);
1339 fRecEventHist2->Add(entry->fRecEventHist2);
1340 fRecMCEventHist1->Add(entry->fRecMCEventHist1);
1341 fRecMCEventHist2->Add(entry->fRecMCEventHist2);
1344 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
1345 fMCTrackHist1[i]->Add(entry->fMCTrackHist1[i]);
1347 fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]);
1348 fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]);
1349 fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]);
1351 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);
1352 fRecTrackHist2[i]->Add(entry->fRecTrackHist2[i]);
1353 fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]);
1355 fRecMCTrackHist1->Add(entry->fRecMCTrackHist1);
1356 fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1);
1357 fRecTrackHist3->Add(entry->fRecTrackHist3);
1362 AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();
1363 if( trigSelection ) trigSelection->Merge(collPhysSelection);
1364 if(collPhysSelection) delete collPhysSelection;
1371 //_____________________________________________________________________________
1372 void AlidNdPtAnalysisPbPb::Analyse()
1374 // Analyse histograms
1376 TH1::AddDirectory(kFALSE);
1377 TH1 *h=0, *h1=0, *h2=0, *h2c = 0;
1382 TObjArray *aFolderObj = new TObjArray;
1385 // LHC backgraund in all and 0-bins
1387 AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();
1388 trigSel->SaveHistograms("physics_selection");
1391 // Reconstructed event vertex
1393 h = fRecEventHist1->Projection(0);
1397 h = fRecEventHist1->Projection(1);
1401 h = fRecEventHist1->Projection(2);
1408 h = fRecEventHist2->Projection(1);
1409 h->SetName("multMB");
1412 h2D = fRecEventHist2->Projection(0,1);
1413 h2D->SetName("Zv_vs_multiplicity_MB");
1414 aFolderObj->Add(h2D);
1417 // reconstructed pt histograms
1419 h = fRecTrackHist1[0]->Projection(0);
1420 h->Scale(1.,"width");
1421 h->SetName("pt_all_ch");
1424 h = fRecTrackHist1[1]->Projection(0);
1425 h->Scale(1.,"width");
1426 h->SetName("pt_acc");
1429 h = fRecTrackHist1[2]->Projection(0);
1430 h->Scale(1.,"width");
1431 h->SetName("pt_rec");
1435 // reconstructed eta histograms
1437 h = fRecTrackHist1[0]->Projection(1);
1438 h->SetName("eta_all_ch");
1441 h = fRecTrackHist1[1]->Projection(1);
1442 h->SetName("eta_acc");
1445 h = fRecTrackHist1[2]->Projection(1);
1446 h->SetName("eta_rec");
1450 // reconstructed phi histograms
1452 h = fRecTrackHist1[0]->Projection(2);
1453 h->SetName("phi_all_ch");
1456 h = fRecTrackHist1[1]->Projection(2);
1457 h->SetName("phi_acc");
1460 h = fRecTrackHist1[2]->Projection(2);
1461 h->SetName("phi_rec");
1465 // reconstructed eta:pt histograms
1467 h2D = fRecTrackHist1[0]->Projection(1,0);
1468 h2D->SetName("pt_eta_all_ch");
1469 aFolderObj->Add(h2D);
1471 h2D = fRecTrackHist1[1]->Projection(1,0);
1472 h2D->SetName("pt_eta_acc");
1473 aFolderObj->Add(h2D);
1475 h2D = fRecTrackHist1[2]->Projection(1,0);
1476 h2D->SetName("pt_eta_rec");
1477 aFolderObj->Add(h2D);
1480 // reconstructed phi:pt histograms
1482 h2D = fRecTrackHist1[0]->Projection(2,0);
1483 h2D->SetName("pt_phi_all_ch");
1484 aFolderObj->Add(h2D);
1486 h2D = fRecTrackHist1[1]->Projection(2,0);
1487 h2D->SetName("pt_phi_acc");
1488 aFolderObj->Add(h2D);
1490 h2D = fRecTrackHist1[2]->Projection(2,0);
1491 h2D->SetName("pt_phi_rec");
1492 aFolderObj->Add(h2D);
1495 // reconstructed phi:eta histograms
1497 h2D = fRecTrackHist1[0]->Projection(2,1);
1498 h2D->SetName("eta_phi_all_ch");
1499 aFolderObj->Add(h2D);
1501 h2D = fRecTrackHist1[1]->Projection(2,1);
1502 h2D->SetName("eta_phi_acc");
1503 aFolderObj->Add(h2D);
1505 h2D = fRecTrackHist1[2]->Projection(2,1);
1506 h2D->SetName("eta_phi_rec");
1507 aFolderObj->Add(h2D);
1510 // reconstructed nClust, chi2 vs pt, eta, phi
1514 h2D = fRecTrackHist3->Projection(0,1);
1515 h2D->SetName("nClust_chi2_rec");
1516 aFolderObj->Add(h2D);
1518 h2D = fRecTrackHist3->Projection(0,2);
1519 h2D->SetName("nClust_pt_rec");
1520 aFolderObj->Add(h2D);
1522 h2D = fRecTrackHist3->Projection(0,3);
1523 h2D->SetName("nClust_eta_rec");
1524 aFolderObj->Add(h2D);
1526 h2D = fRecTrackHist3->Projection(0,4);
1527 h2D->SetName("nClust_phi_rec");
1528 aFolderObj->Add(h2D);
1530 h2D = fRecTrackHist3->Projection(1,2);
1531 h2D->SetName("chi2_pt_rec");
1532 aFolderObj->Add(h2D);
1534 h2D = fRecTrackHist3->Projection(1,3);
1535 h2D->SetName("chi2_eta_rec");
1536 aFolderObj->Add(h2D);
1538 h2D = fRecTrackHist3->Projection(1,4);
1539 h2D->SetName("chi2_phi_rec");
1540 aFolderObj->Add(h2D);
1545 // calculate corrections for empty events
1550 // normalised zv to generate zv for triggered events
1552 h = fRecEventHist2->Projection(0);
1553 if( h->Integral() ) h->Scale(1./h->Integral());
1554 h->SetName("zv_distribution_norm");
1563 // Event vertex resolution
1565 h2D = fRecMCEventHist2->Projection(0,2);
1566 h2D->SetName("DeltaXv_vs_mult");
1567 aFolderObj->Add(h2D);
1569 h2D = fRecMCEventHist2->Projection(1,2);
1570 h2D->SetName("DeltaZv_vs_mult");
1571 aFolderObj->Add(h2D);
1574 // normalised zv to get trigger/trigger+vertex event differences
1575 // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv)
1577 fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.);
1578 h = fTriggerEventMatrix->Projection(0);
1579 h2D = fTriggerEventMatrix->Projection(0,1);
1580 if(h2D->Integral()) h->Scale(1./h2D->Integral());
1582 h1 = fRecEventMatrix->Projection(0);
1583 h2D = fRecEventMatrix->Projection(0,1);
1584 if(h2D->Integral()) h1->Scale(1./h2D->Integral());
1587 h->SetName("zv_empty_events_norm");
1590 fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins());
1593 // rec. vs true track pt correlation matrix
1595 hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix");
1596 aFolderObj->Add(hs);
1599 // trigger efficiency for INEL
1601 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix");
1606 // trigger bias correction (MB to INEL)
1608 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix");
1609 aFolderObj->Add(hs);
1611 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix");
1614 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D");
1615 aFolderObj->Add(h2D);
1618 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix");
1623 // event vertex reconstruction correction (MB)
1625 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix");
1626 aFolderObj->Add(hs);
1628 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D");
1629 aFolderObj->Add(h2D);
1632 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix");
1636 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix");
1642 // track-event trigger bias correction (MB to INEL)
1644 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix");
1645 aFolderObj->Add(hs);
1647 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix");
1648 aFolderObj->Add(h2D);
1650 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix");
1651 aFolderObj->Add(h2D);
1653 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix");
1654 aFolderObj->Add(h2D);
1658 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix");
1663 // track-event vertex reconstruction correction (MB)
1665 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix");
1666 aFolderObj->Add(hs);
1668 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix");
1669 aFolderObj->Add(h2D);
1671 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix");
1672 aFolderObj->Add(h2D);
1674 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix");
1675 aFolderObj->Add(h2D);
1679 h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix");
1684 // track rec. efficiency correction
1686 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix");
1687 aFolderObj->Add(hs);
1689 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix");
1690 aFolderObj->Add(h2D);
1692 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix");
1693 aFolderObj->Add(h2D);
1695 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix");
1696 aFolderObj->Add(h2D);
1699 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix");
1702 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix");
1707 h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix");
1710 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix");
1714 // secondary track contamination correction
1716 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
1717 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
1718 aFolderObj->Add(hs);
1720 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix");
1721 aFolderObj->Add(h2D);
1723 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix");
1724 aFolderObj->Add(h2D);
1726 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix");
1727 aFolderObj->Add(h2D);
1729 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix");
1733 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix");
1736 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix");
1740 // multiple track reconstruction correction
1742 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
1743 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
1744 aFolderObj->Add(hs);
1746 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix");
1747 aFolderObj->Add(h2D);
1749 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix");
1750 aFolderObj->Add(h2D);
1752 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix");
1753 aFolderObj->Add(h2D);
1755 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix");
1758 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix");
1761 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix");
1765 // Control histograms
1770 // Efficiency electrons, muons, pions, kaons, protons, all
1771 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1);
1772 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1);
1773 h1 = fMCPrimTrackHist1[1]->Projection(0);
1774 h2 = fMCPrimTrackHist1[2]->Projection(0);
1775 h2c = (TH1D *)h2->Clone();
1777 h2c->SetName("eff_pt_electrons");
1778 aFolderObj->Add(h2c);
1780 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2);
1781 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2);
1782 h1 = fMCPrimTrackHist1[1]->Projection(0);
1783 h2 = fMCPrimTrackHist1[2]->Projection(0);
1784 h2c = (TH1D *)h2->Clone();
1786 h2c->SetName("eff_pt_muons");
1787 aFolderObj->Add(h2c);
1789 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3);
1790 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3);
1791 h1 = fMCPrimTrackHist1[1]->Projection(0);
1792 h2 = fMCPrimTrackHist1[2]->Projection(0);
1793 h2c = (TH1D *)h2->Clone();
1795 h2c->SetName("eff_pt_pions");
1796 aFolderObj->Add(h2c);
1798 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4);
1799 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4);
1800 h1 = fMCPrimTrackHist1[1]->Projection(0);
1801 h2 = fMCPrimTrackHist1[2]->Projection(0);
1802 h2c = (TH1D *)h2->Clone();
1804 h2c->SetName("eff_pt_kaons");
1805 aFolderObj->Add(h2c);
1807 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5);
1808 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5);
1809 h1 = fMCPrimTrackHist1[1]->Projection(0);
1810 h2 = fMCPrimTrackHist1[2]->Projection(0);
1811 h2c = (TH1D *)h2->Clone();
1813 h2c->SetName("eff_pt_protons");
1814 aFolderObj->Add(h2c);
1816 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5);
1817 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5);
1818 h1 = fMCPrimTrackHist1[1]->Projection(0);
1819 h2 = fMCPrimTrackHist1[2]->Projection(0);
1820 h2c = (TH1D *)h2->Clone();
1822 h2c->SetName("eff_pt_selected");
1823 aFolderObj->Add(h2c);
1825 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6);
1826 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6);
1827 h1 = fMCPrimTrackHist1[1]->Projection(0);
1828 h2 = fMCPrimTrackHist1[2]->Projection(0);
1829 h2c = (TH1D *)h2->Clone();
1831 h2c->SetName("eff_pt_all");
1832 aFolderObj->Add(h2c);
1834 fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins());
1835 fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins());
1838 // - rec, primaries, secondaries
1839 // - primaries (pid)
1840 // - secondaries (pid)
1841 // - secondaries (mech)
1842 // - secondaries (mother)
1845 TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0);
1846 mcPtAccall->SetName("mc_pt_acc_all");
1847 aFolderObj->Add(mcPtAccall);
1849 TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0);
1850 mcPtAccprim->SetName("mc_pt_acc_prim");
1851 aFolderObj->Add(mcPtAccprim);
1853 TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0);
1854 mcPtRecall->SetName("mc_pt_rec_all");
1855 aFolderObj->Add(mcPtRecall);
1857 TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0);
1858 mcPtRecprim->SetName("mc_pt_rec_prim");
1859 aFolderObj->Add(mcPtRecprim);
1861 TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0);
1862 mcPtRecsec->SetName("mc_pt_rec_sec");
1863 aFolderObj->Add(mcPtRecsec);
1865 for(Int_t i = 0; i<6; i++)
1867 sprintf(name,"mc_pt_rec_prim_pid_%d",i);
1868 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
1869 h = fMCPrimTrackHist1[2]->Projection(0);
1873 sprintf(name,"mc_pt_rec_sec_pid_%d",i);
1874 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
1875 h = fMCSecTrackHist1[2]->Projection(0);
1879 // production mechanisms for given pid
1880 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
1882 for(Int_t j=0; j<20; j++) {
1886 sprintf(name,"mc_pt_rec_sec_pid_%d_decay",i);
1887 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1888 h = fMCSecTrackHist1[2]->Projection(0);
1892 sprintf(name,"mc_eta_rec_sec_pid_%d_decay",i);
1893 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1894 h = fMCSecTrackHist1[2]->Projection(1);
1898 sprintf(name,"mc_mother_rec_sec_pid_%d_decay",i);
1899 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1900 h = fMCSecTrackHist1[2]->Projection(4);
1904 } else if (j == 5) {
1907 sprintf(name,"mc_pt_rec_sec_pid_%d_conv",i);
1908 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1909 h = fMCSecTrackHist1[2]->Projection(0);
1913 sprintf(name,"mc_eta_rec_sec_pid_%d_conv",i);
1914 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1915 h = fMCSecTrackHist1[2]->Projection(1);
1919 sprintf(name,"mc_mother_rec_sec_pid_%d_conv",i);
1920 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1921 h = fMCSecTrackHist1[2]->Projection(4);
1925 } else if (j == 13) {
1928 sprintf(name,"mc_pt_rec_sec_pid_%d_mat",i);
1929 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1930 h = fMCSecTrackHist1[2]->Projection(0);
1934 sprintf(name,"mc_eta_rec_sec_pid_%d_mat",i);
1935 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1936 h = fMCSecTrackHist1[2]->Projection(1);
1940 sprintf(name,"mc_eta_mother_rec_sec_pid_%d_mat",i);
1941 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1942 h = fMCSecTrackHist1[2]->Projection(4,1);
1946 sprintf(name,"mc_mother_rec_sec_pid_%d_mat",i);
1947 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1948 h = fMCSecTrackHist1[2]->Projection(4);
1952 sprintf(name,"mc_pt_mother_rec_sec_pid_%d_mat",i);
1953 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1954 h = fMCSecTrackHist1[2]->Projection(4,0);
1964 } // end fHistogramOn
1967 // resolution histograms
1968 // only for reconstructed tracks
1972 TCanvas * c = new TCanvas("resol","resol");
1976 fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79);
1978 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
1979 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
1980 h->SetXTitle("p_{tmc} (GeV/c)");
1981 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
1983 h->SetName("pt_resolution_vs_mcpt");
1986 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
1987 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
1988 h->SetXTitle("p_{tmc} (GeV/c)");
1989 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
1991 h->SetName("dpt_mean_vs_mcpt");
1995 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
1996 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
1997 h->SetXTitle("p_{tmc} (GeV/c)");
1998 h->SetYTitle("(#eta-#eta_{mc}) resolution");
2000 h->SetName("eta_resolution_vs_mcpt");
2003 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
2004 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
2005 h->SetXTitle("p_{tmc} (GeV/c)");
2006 h->SetYTitle("(#eta-mc#eta) mean");
2008 h->SetName("deta_mean_vs_mcpt");
2012 fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins());
2014 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
2015 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
2016 h->SetXTitle("#eta_{mc}");
2017 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
2019 h->SetName("pt_resolution_vs_mceta");
2022 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
2023 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
2024 h->SetXTitle("#eta_{mc}");
2025 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
2027 h->SetName("dpt_mean_vs_mceta");
2031 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
2032 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
2033 h->SetXTitle("#eta_{mc}");
2034 h->SetYTitle("(#eta-#eta_{mc}) resolution");
2036 h->SetName("eta_resolution_vs_mceta");
2039 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
2040 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
2041 h->SetXTitle("#eta_{mc}");
2042 h->SetYTitle("(#eta-mc#eta) mean");
2044 h->SetName("deta_mean_vs_mceta");
2047 fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins());
2049 } // end use MC info
2051 // export objects to analysis folder
2052 fAnalysisFolder = ExportToFolder(aFolderObj);
2054 // delete only TObjArray
2055 if(aFolderObj) delete aFolderObj;
2058 //_____________________________________________________________________________
2059 TFolder* AlidNdPtAnalysisPbPb::ExportToFolder(TObjArray * const array)
2061 // recreate folder avery time and export objects to new one
2063 AlidNdPtAnalysisPbPb * comp=this;
2064 TFolder *folder = comp->GetAnalysisFolder();
2066 TString name, title;
2067 TFolder *newFolder = 0;
2069 Int_t size = array->GetSize();
2072 // get name and title from old folder
2073 name = folder->GetName();
2074 title = folder->GetTitle();
2080 newFolder = CreateFolder(name.Data(),title.Data());
2081 newFolder->SetOwner();
2083 // add objects to folder
2085 newFolder->Add(array->At(i));
2093 //_____________________________________________________________________________
2094 TFolder* AlidNdPtAnalysisPbPb::CreateFolder(TString name,TString title) {
2095 // create folder for analysed histograms
2097 TFolder *folder = 0;
2098 folder = new TFolder(name.Data(),title.Data());