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 // last change: 2011-04-04 by M.Knichel
29 //------------------------------------------------------------------------------
34 #include "THnSparse.h"
36 #include "AliHeader.h"
37 #include "AliGenEventHeader.h"
38 #include "AliInputEventHandler.h"
39 #include "AliAnalysisManager.h"
41 #include "AliESDEvent.h"
42 #include "AliMCEvent.h"
43 #include "AliESDtrackCuts.h"
45 #include "AliMultiplicity.h"
46 #include "AliTracker.h"
48 #include "AliCentrality.h"
50 #include "AlidNdPtEventCuts.h"
51 #include "AlidNdPtAcceptanceCuts.h"
52 #include "AliPhysicsSelection.h"
53 #include "AliTriggerAnalysis.h"
55 #include "AliPWG0Helper.h"
56 #include "AlidNdPtHelper.h"
57 #include "AlidNdPtAnalysisPbPb.h"
62 ClassImp(AlidNdPtAnalysisPbPb)
64 //_____________________________________________________________________________
65 AlidNdPtAnalysisPbPb::AlidNdPtAnalysisPbPb(): AlidNdPt(),
67 fHistogramsOn(kFALSE),
69 // rec. track pt vs true track pt correlation matrix
70 fTrackPtCorrelationMatrix(0),
72 // event level correction
74 fTriggerEventMatrix(0),
78 // track-event level correction
80 fGenTrackEventMatrix(0),
82 fTriggerTrackEventMatrix(0),
84 fRecTrackEventMatrix(0),
86 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
88 fGenPrimTrackMatrix(0),
89 fRecPrimTrackMatrix(0),
91 // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)
93 fRecSecTrackMatrix(0),
95 // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix)
96 fRecMultTrackMatrix(0),
98 // event control histograms
105 // rec. pt and eta resolution w.r.t MC
108 //multple reconstructed tracks
109 fMCMultRecTrackHist1(0),
111 // rec. track control histograms
116 fCentralityEstimator(0),
133 // default constructor
134 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
136 fMCPrimTrackHist1[i]=0;
137 fMCPrimTrackHist2[i]=0;
138 fMCSecTrackHist1[i]=0;
141 fRecTrackMultHist1[i]=0;
144 SetCentralityEstimator();
147 //_____________________________________________________________________________
148 AlidNdPtAnalysisPbPb::AlidNdPtAnalysisPbPb(Char_t* name, Char_t* title): AlidNdPt(name,title),
150 fHistogramsOn(kFALSE),
152 // rec. track pt vs true track pt correlation matrix
153 fTrackPtCorrelationMatrix(0),
155 // event level correction
157 fTriggerEventMatrix(0),
161 // track-event level correction
163 fGenTrackEventMatrix(0),
165 fTriggerTrackEventMatrix(0),
167 fRecTrackEventMatrix(0),
169 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
171 fGenPrimTrackMatrix(0),
172 fRecPrimTrackMatrix(0),
174 // secondary track contamination correction (fRecTrackMatrix - fRecSecTrackMatrix)
176 fRecSecTrackMatrix(0),
178 // multiple rec. track contamination corrections (fRecTrackMatrix - fRecMultTrackMatrix)
179 fRecMultTrackMatrix(0),
184 // event control histograms
191 // rec. pt and eta resolution w.r.t MC
194 //multiple reconstructed tracks
195 fMCMultRecTrackHist1(0),
197 // rec. track control histograms
202 fCentralityEstimator(0),
223 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
225 fMCPrimTrackHist1[i]=0;
226 fMCPrimTrackHist2[i]=0;
227 fMCSecTrackHist1[i]=0;
230 fRecTrackMultHist1[i]=0;
234 SetCentralityEstimator();
237 //_____________________________________________________________________________
238 AlidNdPtAnalysisPbPb::~AlidNdPtAnalysisPbPb() {
242 if(fTrackPtCorrelationMatrix) delete fTrackPtCorrelationMatrix; fTrackPtCorrelationMatrix=0;
244 if(fGenEventMatrix) delete fGenEventMatrix; fGenEventMatrix=0;
245 if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;
246 if(fRecEventMatrix) delete fRecEventMatrix; fRecEventMatrix=0;
249 if(fGenTrackEventMatrix) delete fGenTrackEventMatrix; fGenTrackEventMatrix=0;
250 if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;
251 if(fRecTrackEventMatrix) delete fRecTrackEventMatrix; fRecTrackEventMatrix=0;
254 if(fGenTrackMatrix) delete fGenTrackMatrix; fGenTrackMatrix=0;
255 if(fGenPrimTrackMatrix) delete fGenPrimTrackMatrix; fGenPrimTrackMatrix=0;
256 if(fRecPrimTrackMatrix) delete fRecPrimTrackMatrix; fRecPrimTrackMatrix=0;
258 if(fRecTrackMatrix) delete fRecTrackMatrix; fRecTrackMatrix=0;
259 if(fRecSecTrackMatrix) delete fRecSecTrackMatrix; fRecSecTrackMatrix=0;
261 if(fRecMultTrackMatrix) delete fRecMultTrackMatrix; fRecMultTrackMatrix=0;
263 // Control histograms
265 if(fMCEventHist1) delete fMCEventHist1; fMCEventHist1=0;
266 if(fRecEventHist1) delete fRecEventHist1; fRecEventHist1=0;
267 if(fRecEventHist2) delete fRecEventHist2; fRecEventHist2=0;
268 if(fRecMCEventHist1) delete fRecMCEventHist1; fRecMCEventHist1=0;
269 if(fRecMCEventHist2) delete fRecMCEventHist2; fRecMCEventHist2=0;
272 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
273 if(fMCTrackHist1[i]) delete fMCTrackHist1[i]; fMCTrackHist1[i]=0;
274 if(fMCPrimTrackHist1[i]) delete fMCPrimTrackHist1[i]; fMCPrimTrackHist1[i]=0;
275 if(fMCPrimTrackHist2[i]) delete fMCPrimTrackHist2[i]; fMCPrimTrackHist2[i]=0;
276 if(fMCSecTrackHist1[i]) delete fMCSecTrackHist1[i]; fMCSecTrackHist1[i]=0;
277 if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;
278 if(fRecTrackHist2[i]) delete fRecTrackHist2[i]; fRecTrackHist2[i]=0;
279 if(fRecTrackMultHist1[i]) delete fRecTrackMultHist1[i]; fRecTrackMultHist1[i]=0;
281 if(fRecMCTrackHist1) delete fRecMCTrackHist1; fRecMCTrackHist1=0;
282 if(fMCMultRecTrackHist1) delete fMCMultRecTrackHist1; fMCMultRecTrackHist1=0;
283 if(fRecTrackHist3) delete fRecTrackHist3; fRecTrackHist3=0;
285 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
287 if (fTriggerAnalysis) delete fTriggerAnalysis; fTriggerAnalysis = 0;
289 if (fBinsMult) delete fBinsMult; fBinsMult=0;
290 if (fBinsPt) delete fBinsPt; fBinsPt=0;
291 if (fBinsPtCorr) delete fBinsPtCorr; fBinsPtCorr=0;
292 if (fBinsEta) delete fBinsEta; fBinsEta=0;
293 if (fBinsZv) delete fBinsZv; fBinsZv=0;
294 if (fBinsCentrality) delete fBinsCentrality; fBinsCentrality=0;
297 //_____________________________________________________________________________
298 void AlidNdPtAnalysisPbPb::Init() {
300 Int_t multNbins = 47;
301 Int_t ptNbinsTrackEventCorr = 37;
305 Int_t centralityBins = 11;
307 Double_t binsMultDefault[48] = {
308 -0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,
309 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,
310 19.5, 20.5, 30.5, 40.5 , 50.5 , 60.5 , 70.5 , 80.5 , 90.5 , 100.5,
311 200.5, 300.5, 400.5, 500.5, 600.5, 700.5, 800.5, 900.5, 1000.5, 2000.5,
312 3000.5, 4000.5, 5000.5, 6000.5, 7000.5, 8000.5, 9000.5, 10000.5 }; // forPbPb
313 Double_t binsPtTrackEventCorrDefault[38] = {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};
314 Double_t binsPtDefault[69] = {
315 0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45,
316 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95,
317 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9,
318 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8,
319 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0,
320 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0,
321 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0 };
323 Double_t binsEtaDefault[31] = {
324 -1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6,
325 -0.5, -0.4, -0.3, -0.2, -0.1, 0.0, 0.1, 0.2, 0.3, 0.4,
326 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4,
329 Double_t binsZvDefault[13] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
331 Double_t binsCentralityDefault[12] = {0., 5., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.};
333 Double_t* binsMult = binsMultDefault;
334 Double_t* binsPtTrackEventCorr = binsPtTrackEventCorrDefault;
335 Double_t* binsPt = binsPtDefault;
336 Double_t* binsEta = binsEtaDefault;
337 Double_t* binsZv = binsZvDefault;
338 Double_t* binsCentrality = binsCentralityDefault;
340 if (fMultNbins > 0) { multNbins = fMultNbins; binsMult = fBinsMult; }
341 if (fPtNbins > 0) { ptNbins = fPtNbins; binsPt = fBinsPt; }
342 if (fPtCorrNbins > 0) { ptNbinsTrackEventCorr = fPtCorrNbins; binsPtTrackEventCorr = fBinsPtCorr; }
343 if (fEtaNbins > 0) { etaNbins = fEtaNbins; binsEta = fBinsEta; }
344 if (fZvNbins > 0) { zvNbins = fZvNbins; binsZv = fBinsZv; }
345 if (fCentralityNbins > 0) { centralityBins = fCentralityNbins; binsCentrality = fBinsCentrality; }
347 Int_t binsTrackEventCorrMatrix[4]={zvNbins,ptNbinsTrackEventCorr,etaNbins,centralityBins};
348 Int_t binsTrackEvent[4]={zvNbins,ptNbins,etaNbins,centralityBins};
349 Int_t binsTrackPtCorrelationMatrix[4]={ptNbins,ptNbins,etaNbins,centralityBins};
352 fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta:Centrality",4,binsTrackPtCorrelationMatrix);
353 fTrackPtCorrelationMatrix->SetBinEdges(0,binsPt);
354 fTrackPtCorrelationMatrix->SetBinEdges(1,binsPt);
355 fTrackPtCorrelationMatrix->SetBinEdges(2,binsEta);
356 fTrackPtCorrelationMatrix->SetBinEdges(3,binsCentrality);
357 fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)");
358 fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
359 fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta");
360 fTrackPtCorrelationMatrix->GetAxis(3)->SetTitle("Centrality");
361 fTrackPtCorrelationMatrix->Sumw2();
364 // Efficiency and contamination correction matrices
366 Int_t binsEventMatrix[3]={zvNbins,multNbins,centralityBins};
367 Double_t minEventMatrix[3]={-30.,-0.5,0.};
368 Double_t maxEventMatrix[3]={30.,10000.5,100.};
370 fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multMB:Centrality",3,binsEventMatrix,minEventMatrix,maxEventMatrix);
371 fGenEventMatrix->SetBinEdges(0,binsZv);
372 fGenEventMatrix->SetBinEdges(1,binsMult);
373 fGenEventMatrix->SetBinEdges(2,binsCentrality);
374 fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
375 fGenEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
376 fGenEventMatrix->GetAxis(2)->SetTitle("Centrality");
377 fGenEventMatrix->Sumw2();
379 fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multMB:Centrality",3,binsEventMatrix,minEventMatrix,maxEventMatrix);
380 fTriggerEventMatrix->SetBinEdges(0,binsZv);
381 fTriggerEventMatrix->SetBinEdges(1,binsMult);
382 fTriggerEventMatrix->SetBinEdges(2,binsCentrality);
383 fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
384 fTriggerEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
385 fTriggerEventMatrix->GetAxis(2)->SetTitle("Centrality");
386 fTriggerEventMatrix->Sumw2();
388 fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multMB:Centrality",3,binsEventMatrix,minEventMatrix,maxEventMatrix);
389 fRecEventMatrix->SetBinEdges(0,binsZv);
390 fRecEventMatrix->SetBinEdges(1,binsMult);
391 fRecEventMatrix->SetBinEdges(2,binsCentrality);
392 fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
393 fRecEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
394 fRecEventMatrix->GetAxis(2)->SetTitle("Centrality");
395 fRecEventMatrix->Sumw2();
398 // track to event corrections
400 fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
401 fGenTrackEventMatrix->SetBinEdges(0,binsZv);
402 fGenTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
403 fGenTrackEventMatrix->SetBinEdges(2,binsEta);
404 fGenTrackEventMatrix->SetBinEdges(3,binsCentrality);
405 fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
406 fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
407 fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
408 fGenTrackEventMatrix->GetAxis(3)->SetTitle("Centrality");
409 fGenTrackEventMatrix->Sumw2();
411 fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
412 fTriggerTrackEventMatrix->SetBinEdges(0,binsZv);
413 fTriggerTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
414 fTriggerTrackEventMatrix->SetBinEdges(2,binsEta);
415 fTriggerTrackEventMatrix->SetBinEdges(3,binsCentrality);
416 fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
417 fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
418 fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
419 fTriggerTrackEventMatrix->GetAxis(3)->SetTitle("Centrality");
420 fTriggerTrackEventMatrix->Sumw2();
422 fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
423 fRecTrackEventMatrix->SetBinEdges(0,binsZv);
424 fRecTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
425 fRecTrackEventMatrix->SetBinEdges(2,binsEta);
426 fRecTrackEventMatrix->SetBinEdges(3,binsCentrality);
427 fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
428 fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
429 fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
430 fRecTrackEventMatrix->GetAxis(3)->SetTitle("Centrality");
431 fRecTrackEventMatrix->Sumw2();
434 // tracks correction matrices
436 fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
437 fGenTrackMatrix->SetBinEdges(0,binsZv);
438 fGenTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
439 fGenTrackMatrix->SetBinEdges(2,binsEta);
440 fGenTrackMatrix->SetBinEdges(3,binsCentrality);
441 fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
442 fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
443 fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta");
444 fGenTrackMatrix->GetAxis(3)->SetTitle("Centrality");
445 fGenTrackMatrix->Sumw2();
447 fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
448 fGenPrimTrackMatrix->SetBinEdges(0,binsZv);
449 fGenPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
450 fGenPrimTrackMatrix->SetBinEdges(2,binsEta);
451 fGenPrimTrackMatrix->SetBinEdges(3,binsCentrality);
452 fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
453 fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
454 fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");
455 fGenPrimTrackMatrix->GetAxis(3)->SetTitle("Centrality");
456 fGenPrimTrackMatrix->Sumw2();
459 fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
460 fRecPrimTrackMatrix->SetBinEdges(0,binsZv);
461 fRecPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
462 fRecPrimTrackMatrix->SetBinEdges(2,binsEta);
463 fRecPrimTrackMatrix->SetBinEdges(3,binsCentrality);
464 fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
465 fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
466 fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");
467 fRecPrimTrackMatrix->GetAxis(3)->SetTitle("Centrality");
468 fRecPrimTrackMatrix->Sumw2();
471 fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
472 fRecTrackMatrix->SetBinEdges(0,binsZv);
473 fRecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
474 fRecTrackMatrix->SetBinEdges(2,binsEta);
475 fRecTrackMatrix->SetBinEdges(3,binsCentrality);
476 fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
477 fRecTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
478 fRecTrackMatrix->GetAxis(2)->SetTitle("mcEta");
479 fRecTrackMatrix->GetAxis(3)->SetTitle("Centrality");
480 fRecTrackMatrix->Sumw2();
482 fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
483 fRecSecTrackMatrix->SetBinEdges(0,binsZv);
484 fRecSecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
485 fRecSecTrackMatrix->SetBinEdges(2,binsEta);
486 fRecSecTrackMatrix->SetBinEdges(3,binsCentrality);
487 fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
488 fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");
489 fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta");
490 fRecSecTrackMatrix->GetAxis(3)->SetTitle("Centrality");
491 fRecSecTrackMatrix->Sumw2();
494 fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrix);
495 fRecMultTrackMatrix->SetBinEdges(0,binsZv);
496 fRecMultTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
497 fRecMultTrackMatrix->SetBinEdges(2,binsEta);
498 fRecMultTrackMatrix->SetBinEdges(3,binsCentrality);
499 fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
500 fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
501 fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta");
502 fRecMultTrackMatrix->GetAxis(3)->SetTitle("Centrality");
503 fRecMultTrackMatrix->Sumw2();
506 // Control analysis histograms
508 Int_t binsMCEventHist1[4]={100,100,zvNbins,centralityBins};
509 Double_t minMCEventHist1[4]={-0.1,-0.1,-30.,0.};
510 Double_t maxMCEventHist1[4]={0.1,0.1,30.,100.};
511 fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv:Centrality",4,binsMCEventHist1,minMCEventHist1,maxMCEventHist1);
512 fMCEventHist1->SetBinEdges(2,binsZv);
513 fMCEventHist1->SetBinEdges(3,binsCentrality);
514 fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)");
515 fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)");
516 fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)");
517 fMCEventHist1->GetAxis(3)->SetTitle("Centrality");
518 fMCEventHist1->Sumw2();
521 Int_t binsRecEventHist1[4]={100,100,zvNbins,centralityBins};
522 Double_t minRecEventHist1[4]={-3.,-3.,-30.,0.};
523 Double_t maxRecEventHist1[4]={3.,3.,30.,100.};
525 fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv:Centrality",4,binsRecEventHist1,minRecEventHist1,maxRecEventHist1);
526 fRecEventHist1->SetBinEdges(2,binsZv);
527 fRecEventHist1->SetBinEdges(3,binsCentrality);
528 fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)");
529 fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)");
530 fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)");
531 fRecEventHist1->GetAxis(3)->SetTitle("Centrality");
532 fRecEventHist1->Sumw2();
535 Int_t binsRecEventHist2[3]={zvNbins, multNbins, centralityBins};
536 Double_t minRecEventHist2[3]={-30., -0.5, 0.};
537 Double_t maxRecEventHist2[3]={30., 10000.5, 100.};
539 fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB:Centrality",3,binsRecEventHist2,minRecEventHist2,maxRecEventHist2);
540 fRecEventHist2->SetBinEdges(0,binsZv);
541 fRecEventHist2->SetBinEdges(1,binsMult);
542 fRecEventHist2->SetBinEdges(2,binsCentrality);
543 fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)");
544 fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB");
545 fRecEventHist2->GetAxis(2)->SetTitle("Centrality");
546 fRecEventHist2->Sumw2();
549 Double_t kFact = 0.1;
550 Int_t binsRecMCEventHist1[4]={100,100,100, centralityBins};
551 Double_t minRecMCEventHist1[4]={-10.0*kFact,-10.0*kFact,-10.0*kFact, 0.};
552 Double_t maxRecMCEventHist1[4]={10.0*kFact,10.0*kFact,10.0*kFact, 100.};
554 fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv:Centrality",4,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1);
555 fRecMCEventHist1->SetBinEdges(3,binsCentrality);
556 fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)");
557 fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)");
558 fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)");
559 fRecMCEventHist1->GetAxis(3)->SetTitle("Centrality");
561 fRecMCEventHist1->Sumw2();
564 Int_t binsRecMCEventHist2[4]={100,100,multNbins, centralityBins};
565 Double_t minRecMCEventHist2[4]={-10.0*kFact,-10.0*kFact,-0.5, 0.};
566 Double_t maxRecMCEventHist2[4]={10.0*kFact,10.0*kFact,10000.5, 100.};
568 fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:mult:Centrality",4,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2);
569 fRecMCEventHist2->SetBinEdges(2,binsMult);
570 fRecMCEventHist2->SetBinEdges(3,binsCentrality);
571 fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)");
572 fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)");
573 fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity");
574 fRecMCEventHist2->GetAxis(3)->SetTitle("Centrality");
575 fRecMCEventHist2->Sumw2();
579 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++)
581 // THnSparse track histograms
583 Int_t binsMCTrackHist1[4]= {ptNbins, etaNbins, 90, centralityBins};
584 Double_t minMCTrackHist1[4]={0.,-1.5,0., 0.};
585 Double_t maxMCTrackHist1[4]={50,1.5,2.*TMath::Pi(), 100.};
586 sprintf(name,"fMCTrackHist1_%d",i);
587 sprintf(title,"mcPt:mcEta:mcPhi:Centrality");
589 fMCTrackHist1[i] = new THnSparseF(name,title,4,binsMCTrackHist1,minMCTrackHist1,maxMCTrackHist1);
590 fMCTrackHist1[i]->SetBinEdges(0,binsPt);
591 fMCTrackHist1[i]->SetBinEdges(1,binsEta);
592 fMCTrackHist1[i]->SetBinEdges(3,binsCentrality);
593 fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
594 fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
595 fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)");
596 fMCTrackHist1[i]->GetAxis(3)->SetTitle("Centrality");
597 fMCTrackHist1[i]->Sumw2();
599 Int_t binsMCPrimTrackHist1[6]= {ptNbins,etaNbins,6,20,4000, centralityBins};
600 Double_t minMCPrimTrackHist1[6]={0.,-1.5,0.,0.,0., 0.};
601 Double_t maxMCPrimTrackHist1[6]={50.,1.5,6.,20.,4000., 100.};
602 sprintf(name,"fMCPrimTrackHist1_%d",i);
603 sprintf(title,"mcPt:mcEta:pid:mech:mother:Centrality");
605 fMCPrimTrackHist1[i] = new THnSparseF(name,title,6,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1);
606 fMCPrimTrackHist1[i]->SetBinEdges(0,binsPt);
607 fMCPrimTrackHist1[i]->SetBinEdges(1,binsEta);
608 fMCPrimTrackHist1[i]->SetBinEdges(5,binsCentrality);
609 fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
610 fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
611 fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid");
612 fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech");
613 fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother");
614 fMCPrimTrackHist1[i]->GetAxis(5)->SetTitle("Centrality");
615 fMCPrimTrackHist1[i]->Sumw2();
617 Int_t binsMCPrimTrackHist2[4]= {4000,20,4000,centralityBins};
618 Double_t minMCPrimTrackHist2[4]={0.,0.,0., 0.};
619 Double_t maxMCPrimTrackHist2[4]={4000.,20.,4000., 100.};
620 sprintf(name,"fMCPrimTrackHist2_%d",i);
621 sprintf(title,"pdg:mech:mother:Centrality");
623 fMCPrimTrackHist2[i] = new THnSparseF(name,title,4,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2);
624 fMCPrimTrackHist2[i]->SetBinEdges(3,binsCentrality);
625 fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg");
626 fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech");
627 fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother");
628 fMCPrimTrackHist2[i]->GetAxis(3)->SetTitle("Centrality");
629 fMCPrimTrackHist2[i]->Sumw2();
631 Int_t binsMCSecTrackHist1[6]= {ptNbins,etaNbins,6,20,4000, centralityBins};
632 Double_t minMCSecTrackHist1[6]={0.,-1.5,0.,0.,0., 0.};
633 Double_t maxMCSecTrackHist1[6]={50.,1.5,6.,20.,4000., 100.};
634 sprintf(name,"fMCSecTrackHist1_%d",i);
635 sprintf(title,"mcPt:mcEta:pid:mech:mother:Centrality");
637 fMCSecTrackHist1[i] = new THnSparseF(name,title,6,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1);
638 fMCSecTrackHist1[i]->SetBinEdges(0,binsPt);
639 fMCSecTrackHist1[i]->SetBinEdges(1,binsEta);
640 fMCSecTrackHist1[i]->SetBinEdges(5,binsCentrality);
641 fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
642 fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
643 fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid");
644 fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech");
645 fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother");
646 fMCSecTrackHist1[i]->GetAxis(5)->SetTitle("Centrality");
647 fMCSecTrackHist1[i]->Sumw2();
649 Int_t binsRecTrackHist1[4]={ptNbins,etaNbins,90, centralityBins};
650 Double_t minRecTrackHist1[4]={0.,-1.5,0., 0.};
651 Double_t maxRecTrackHist1[4]={50.,1.5,2.*TMath::Pi(), 100.};
652 sprintf(name,"fRecTrackHist1_%d",i);
653 sprintf(title,"Pt:Eta:Phi:Centrality");
654 fRecTrackHist1[i] = new THnSparseF(name,title,4,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1);
655 fRecTrackHist1[i]->SetBinEdges(0,binsPt);
656 fRecTrackHist1[i]->SetBinEdges(1,binsEta);
657 fRecTrackHist1[i]->SetBinEdges(3,binsCentrality);
658 fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)");
659 fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta");
660 fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)");
661 fRecTrackHist1[i]->GetAxis(3)->SetTitle("Centrality");
662 fRecTrackHist1[i]->Sumw2();
664 sprintf(name,"fRecTrackHist2_%d",i);
665 sprintf(title,"Zv:Pt:Eta:Centrality");
666 fRecTrackHist2[i] = new THnSparseF(name,title,4,binsTrackEvent);
667 fRecTrackHist2[i]->SetBinEdges(0,binsZv);
668 fRecTrackHist2[i]->SetBinEdges(1,binsPt);
669 fRecTrackHist2[i]->SetBinEdges(2,binsEta);
670 fRecTrackHist2[i]->SetBinEdges(3,binsCentrality);
671 fRecTrackHist2[i]->GetAxis(0)->SetTitle("Zv (cm)");
672 fRecTrackHist2[i]->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
673 fRecTrackHist2[i]->GetAxis(2)->SetTitle("#eta");
674 fRecTrackHist2[i]->GetAxis(3)->SetTitle("Centrality");
675 fRecTrackHist2[i]->Sumw2();
678 Int_t binsRecTrackMultHist1[3]={ptNbins,multNbins, centralityBins};
679 Double_t minRecTrackMultHist1[3]={0.,-0.5, -0.};
680 Double_t maxRecTrackMultHist1[3]={50.,10000.5, 100.};
681 sprintf(name,"fRecTrackMultHist_%d",i);
682 sprintf(title,"Pt:Mult:Centrality");
683 fRecTrackMultHist1[i] = new THnSparseF(name,title,3,binsRecTrackMultHist1,minRecTrackMultHist1,maxRecTrackMultHist1);
684 fRecTrackMultHist1[i]->SetBinEdges(0,binsPt);
685 fRecTrackMultHist1[i]->SetBinEdges(1,binsMult);
686 fRecTrackMultHist1[i]->SetBinEdges(2,binsCentrality);
687 fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
688 fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");
689 fRecTrackMultHist1[i]->GetAxis(2)->SetTitle("Centrality");
690 fRecTrackMultHist1[i]->Sumw2();
693 Int_t binsRecMCTrackHist1[5] = {ptNbins,etaNbins,100,100, centralityBins};
694 Double_t minRecMCTrackHist1[5]={0.,-1.5,-0.5,-0.5, 0.};
695 Double_t maxRecMCTrackHist1[5]={50.,1.5,0.5,0.5, 100.};
697 sprintf(name,"fRecMCTrackHist1");
698 sprintf(title,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta):Centrality");
699 fRecMCTrackHist1 = new THnSparseF(name,title,5,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1);
700 fRecMCTrackHist1->SetBinEdges(0,binsPt);
701 fRecMCTrackHist1->SetBinEdges(1,binsEta);
702 fRecMCTrackHist1->SetBinEdges(4,binsCentrality);
703 fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
704 fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta");
705 fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt");
706 fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta");
707 fRecMCTrackHist1->GetAxis(4)->SetTitle("Centrality");
709 Int_t binsMCMultRecTrackHist1[4] = {ptNbins,etaNbins,6, centralityBins};
710 Double_t minMCMultRecTrackHist1[4]={0.,-1.5,0., 0.};
711 Double_t maxMCMultRecTrackHist1[4]={50.,1.5,6., 100.};
712 sprintf(name,"fMCMultRecTrackHist1");
713 sprintf(title,"mcPt:mcEta:pid:Centrality");
714 fMCMultRecTrackHist1 = new THnSparseF(name,title,4,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1);
715 fMCMultRecTrackHist1->SetBinEdges(0,binsPt);
716 fMCMultRecTrackHist1->SetBinEdges(1,binsEta);
717 fMCMultRecTrackHist1->SetBinEdges(3,binsCentrality);
718 fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
719 fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta");
720 fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid");
721 fMCMultRecTrackHist1->GetAxis(3)->SetTitle("Centrality");
723 //nClust:chi2PerClust:pt:eta:phi:Centrality
724 Int_t binsRecTrackHist3[6]={160,100,ptNbins,etaNbins,90, centralityBins};
725 Double_t minRecTrackHist3[6]={0., 0., 0., -1.5, 0., 0.};
726 Double_t maxRecRecTrackHist3[6]={160.,10., 50., 1.5, 2.*TMath::Pi(), 100.};
728 fRecTrackHist3 = new THnSparseF("fRecTrackHist3","nClust:chi2PerClust:pt:eta:phi:Centrality",6,binsRecTrackHist3,minRecTrackHist3,maxRecRecTrackHist3);
729 fRecTrackHist3->SetBinEdges(2,binsPt);
730 fRecTrackHist3->SetBinEdges(3,binsEta);
731 fRecTrackHist3->SetBinEdges(5,binsCentrality);
732 fRecTrackHist3->GetAxis(0)->SetTitle("nClust");
733 fRecTrackHist3->GetAxis(1)->SetTitle("chi2PerClust");
734 fRecTrackHist3->GetAxis(2)->SetTitle("p_{T} (GeV/c)");
735 fRecTrackHist3->GetAxis(3)->SetTitle("#eta");
736 fRecTrackHist3->GetAxis(4)->SetTitle("#phi (rad)");
737 fRecTrackHist3->GetAxis(5)->SetTitle("Centrality");
738 fRecTrackHist3->Sumw2();
742 fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder");
744 // init trigger analysis (for zdc cut)
745 fTriggerAnalysis = new AliTriggerAnalysis;
751 //_____________________________________________________________________________
752 void AlidNdPtAnalysisPbPb::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent)
754 // init if not done already
755 if (!fIsInit) { Init(); }
757 // Process real and/or simulated events
760 AliDebug(AliLog::kError, "esdEvent not available");
764 // get selection cuts
765 AlidNdPtEventCuts *evtCuts = GetEventCuts();
766 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
767 AlidNdPtAcceptanceCuts *recCuts = GetRecAcceptanceCuts();
768 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
770 if(!evtCuts || !accCuts || !esdTrackCuts) {
771 AliDebug(AliLog::kError, "cuts not available");
774 if (0 == recCuts) { recCuts = accCuts;}
777 Bool_t isEventTriggered = kTRUE;
778 AliPhysicsSelection *physicsSelection = NULL;
779 AliTriggerAnalysis* triggerAnalysis = NULL;
782 AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
785 Printf("ERROR: Could not receive input handler");
789 if(evtCuts->IsTriggerRequired())
792 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;
794 physicsSelection = static_cast<AliPhysicsSelection*> (inputHandler->GetEventSelection());
795 if(!physicsSelection) return;
796 //SetPhysicsTriggerSelection(physicsSelection);
798 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
799 // set trigger (V0AND)
800 triggerAnalysis = physicsSelection->GetTriggerAnalysis();
801 if(!triggerAnalysis) return;
802 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());
807 // centrality determination
808 Float_t centralityF = -1.;
809 AliCentrality *esdCentrality = esdEvent->GetCentrality();
810 centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());
812 // use MC information
813 AliHeader* header = 0;
814 AliGenEventHeader* genHeader = 0;
818 Int_t multMCTrueTracks = 0;
823 AliDebug(AliLog::kError, "mcEvent not available");
826 // get MC event header
827 header = mcEvent->Header();
829 AliDebug(AliLog::kError, "Header not available");
833 stack = mcEvent->Stack();
835 AliDebug(AliLog::kError, "Stack not available");
840 genHeader = header->GenEventHeader();
842 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
845 genHeader->PrimaryVertex(vtxMC);
847 Double_t vMCEventHist1[4]={vtxMC[0],vtxMC[1],vtxMC[2],centralityF};
848 fMCEventHist1->Fill(vMCEventHist1);
850 // multipliticy of all MC primary tracks
851 // in Zv, pt and eta ranges)
852 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
856 // get reconstructed vertex
857 const AliESDVertex* vtxESD = 0;
858 if(evtCuts->IsRecVertexRequired())
860 if(GetAnalysisMode() == AlidNdPtHelper::kTPC) {
861 vtxESD = esdEvent->GetPrimaryVertexTPC();
863 else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) {
864 vtxESD = esdEvent->GetPrimaryVertexTracks();
871 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD);
872 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);
873 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());
875 // vertex contributors
876 Int_t multMBTracks = 0;
877 if(GetAnalysisMode() == AlidNdPtHelper::kTPC || GetAnalysisMode() == AlidNdPtHelper::kTPCITS)
879 if(vtxESD->GetStatus()) {
880 multMBTracks = vtxESD->GetNContributors();
884 AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));
888 TObjArray *allChargedTracks=0;
889 //Int_t multAll=0, multAcc=0, multRec=0;
890 Int_t multAll=0, multRec=0;
891 Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0;
894 if(isEventOK && isEventTriggered)
897 // get all charged tracks
898 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());
899 if(!allChargedTracks) return;
901 Int_t entries = allChargedTracks->GetEntries();
903 labelsAll = new Int_t[entries];
904 labelsAcc = new Int_t[entries];
905 labelsRec = new Int_t[entries];
906 for(Int_t i=0; i<entries;++i)
908 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
911 if(track->Charge()==0) continue;
914 // only postive charged
915 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
918 // only negative charged
919 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
923 Double_t values[4] = {vtxESD->GetZv(),track->Pt(),track->Eta(), centralityF};
925 fRecTrackHist2[AlidNdPtHelper::kAllTracks]->Fill(values);
926 FillHistograms(track,stack,AlidNdPtHelper::kAllTracks,centralityF);
927 labelsAll[multAll] = TMath::Abs(track->GetLabel());
930 if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && recCuts->AcceptTrackLocalTPC(track)) {
932 fRecTrackHist2[AlidNdPtHelper::kRecTracks]->Fill(values);
933 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,centralityF);
934 labelsRec[multRec] = TMath::Abs(track->GetLabel());
942 // fill track multiplicity histograms
943 //FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec);
945 Double_t vRecEventHist1[4] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),centralityF};
946 fRecEventHist1->Fill(vRecEventHist1);
948 Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,centralityF};
949 fRecEventHist2->Fill(vRecEventHist2);
951 } // triggered and event vertex
956 // event level corrections (zv,N_MB)
959 Double_t vEventMatrix[3] = {vtxMC[2],multMBTracks,centralityF};
960 fGenEventMatrix->Fill(vEventMatrix);
961 if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix);
962 if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix);
965 // track-event level corrections (zv,pt,eta)
967 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
969 TParticle* particle = stack->Particle(iMc);
973 // only charged particles
974 if(!particle->GetPDG()) continue;
975 Double_t charge = particle->GetPDG()->Charge()/3.;
976 if ( TMath::Abs(charge) < 0.001 )
979 // only postive charged
980 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
983 // only negative charged
984 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
988 Bool_t prim = stack->IsPhysicalPrimary(iMc);
992 if(accCuts->AcceptTrack(particle))
994 Double_t vTrackEventMatrix[4] = {vtxMC[2], particle->Pt(), particle->Eta(), centralityF};
995 fGenTrackEventMatrix->Fill(vTrackEventMatrix);
997 if(!isEventTriggered) continue;
998 fTriggerTrackEventMatrix->Fill(vTrackEventMatrix);
1000 if(!isEventOK) continue;
1001 fRecTrackEventMatrix->Fill(vTrackEventMatrix);
1003 }// if(accCuts->AcceptTrack(particle))
1004 }// for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
1007 // track-level corrections (zv,pt,eta)
1009 if(isEventOK && isEventTriggered)
1012 // fill MC and rec event control histograms
1014 Double_t vRecMCEventHist1[4] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2], centralityF};
1015 fRecMCEventHist1->Fill(vRecMCEventHist1);//
1017 Double_t vRecMCEventHist2[4] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks, centralityF};
1018 fRecMCEventHist2->Fill(vRecMCEventHist2);
1023 // MC histograms for track efficiency studies
1025 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
1027 TParticle* particle = stack->Particle(iMc);
1031 Double_t vTrackMatrix[4] = {vtxMC[2],particle->Pt(),particle->Eta(),centralityF};
1033 // only charged particles
1034 if(!particle->GetPDG()) continue;
1035 Double_t charge = particle->GetPDG()->Charge()/3.;
1036 if (TMath::Abs(charge) < 0.001)
1039 // only postive charged
1040 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
1043 // only negative charged
1044 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
1048 Bool_t prim = stack->IsPhysicalPrimary(iMc);
1051 if(accCuts->AcceptTrack(particle))
1054 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) )
1055 fGenPrimTrackMatrix->Fill(vTrackMatrix);
1057 // fill control histograms
1059 FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks, centralityF);
1061 // check multiple found tracks
1062 Int_t multCount = 0;
1063 for(Int_t iRec=0; iRec<multRec; ++iRec)
1065 if(iMc == labelsRec[iRec])
1070 fRecMultTrackMatrix->Fill(vTrackMatrix);
1072 // fill control histogram
1074 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
1075 Double_t vMCMultRecTrackHist1[4] = {particle->Pt(), particle->Eta(), pid, centralityF};
1076 fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1);
1082 // check reconstructed
1083 for(Int_t iRec=0; iRec<multRec; ++iRec)
1085 if(iMc == labelsRec[iRec])
1087 fRecTrackMatrix->Fill(vTrackMatrix);
1089 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) {
1090 fRecPrimTrackMatrix->Fill(vTrackMatrix);
1092 if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix);
1094 // fill control histograms
1096 FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks, centralityF);
1099 }//if(iMc == labelsRec[iRec])
1106 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;
1107 if(labelsAll) delete [] labelsAll; labelsAll = 0;
1108 if(labelsAcc) delete [] labelsAcc; labelsAcc = 0;
1109 if(labelsRec) delete [] labelsRec; labelsRec = 0;
1113 //_____________________________________________________________________________
1114 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) {
1115 // multiplicity histograms
1118 if(!allChargedTracks) return;
1119 if(!labelsAll) return;
1120 if(!labelsAcc) return;
1121 if(!labelsRec) return;
1123 Int_t entries = allChargedTracks->GetEntries();
1124 for(Int_t i=0; i<entries; ++i)
1126 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
1127 if(!track) continue;
1128 if(track->Charge() == 0) continue;
1130 Int_t label = TMath::Abs(track->GetLabel());
1131 for(Int_t iAll=0; iAll<multAll; ++iAll) {
1132 if(label == labelsAll[iAll]) {
1133 Double_t v1[3] = {track->Pt(), multAll, centralityF};
1134 fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1);
1137 for(Int_t iAcc=0; iAcc<multAcc; ++iAcc) {
1138 if(label == labelsAcc[iAcc]) {
1139 Double_t v2[3] = {track->Pt(), multAcc, centralityF};
1140 fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2);
1143 for(Int_t iRec=0; iRec<multRec; ++iRec) {
1144 if(label == labelsRec[iRec]) {
1145 Double_t v3[3] = {track->Pt(), multRec, centralityF};
1146 fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3);
1152 //_____________________________________________________________________________
1153 void AlidNdPtAnalysisPbPb::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, AlidNdPtHelper::TrackObject trackObj, Float_t centralityF)
1157 // Fill ESD track and MC histograms
1159 if(!esdTrack) return;
1161 Float_t q = esdTrack->Charge();
1162 if(TMath::Abs(q) < 0.001) return;
1164 Float_t pt = esdTrack->Pt();
1165 Float_t eta = esdTrack->Eta();
1166 Float_t phi = esdTrack->Phi();
1168 Float_t dca[2], bCov[3];
1169 esdTrack->GetImpactParameters(dca,bCov);
1171 Int_t nClust = esdTrack->GetTPCclusters(0);
1172 Float_t chi2PerCluster = 0.;
1173 if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust);
1177 Double_t values[4] = {pt,eta,phi,centralityF};
1178 fRecTrackHist1[trackObj]->Fill(values);
1181 // Fill rec vs MC information
1185 Int_t label = TMath::Abs(esdTrack->GetLabel());
1186 //if(label == 0) return;
1188 TParticle* particle = stack->Particle(label);
1189 if(!particle) return;
1191 Int_t motherPdg = -1;
1192 TParticle* mother = 0;
1194 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
1195 Int_t motherLabel = particle->GetMother(0);
1196 if(motherLabel>0) mother = stack->Particle(motherLabel);
1197 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
1198 //Int_t mech = particle->GetUniqueID(); // production mechanism
1200 if(!particle->GetPDG()) return;
1201 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
1202 if(TMath::Abs(gq)<0.001) return;
1203 Float_t gpt = particle->Pt();
1204 Float_t geta = particle->Eta();
1207 //printf("pt %f, gpt %f \n",pt,gpt);
1208 if(gpt) dpt = (pt-gpt)/gpt;
1209 Double_t deta = (eta-geta);
1212 if(trackObj == AlidNdPtHelper::kRecTracks) //RecTracks???
1214 Double_t vTrackPtCorrelationMatrix[4]={pt,gpt,geta,centralityF};
1215 fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix);
1217 Double_t vRecMCTrackHist1[5]={gpt,geta,dpt,deta,centralityF};
1218 fRecMCTrackHist1->Fill(vRecMCTrackHist1);
1222 //_____________________________________________________________________________
1223 void AlidNdPtAnalysisPbPb::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj, Float_t centralityF)
1226 // Fill MC histograms
1229 TParticle* particle = stack->Particle(label);
1230 if(!particle) return;
1232 Int_t motherPdg = -1;
1233 TParticle* mother = 0;
1235 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
1236 Int_t motherLabel = particle->GetMother(0);
1237 if(motherLabel>0) mother = stack->Particle(motherLabel);
1238 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
1239 Int_t mech = particle->GetUniqueID(); // production mechanism
1241 if(!particle->GetPDG()) return;
1242 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
1243 if(TMath::Abs(gq) < 0.001) return;
1245 Float_t gpt = particle->Pt();
1246 //Float_t qgpt = particle->Pt() * gq;
1247 Float_t geta = particle->Eta();
1248 Float_t gphi = particle->Phi();
1249 //Float_t gpz = particle->Pz();
1251 Bool_t prim = stack->IsPhysicalPrimary(label);
1252 //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();
1254 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
1256 //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech);
1257 //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech);
1262 Double_t vMCTrackHist1[4] = {gpt,geta,gphi,centralityF};
1263 fMCTrackHist1[trackObj]->Fill(vMCTrackHist1);
1265 Double_t vMCPrimTrackHist1[6] = {gpt,geta,pid,mech,motherPdg,centralityF};
1266 Double_t vMCPrimTrackHist2[4] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg,centralityF};
1268 //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
1271 fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
1272 if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2);
1275 fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
1280 //_____________________________________________________________________________
1281 Long64_t AlidNdPtAnalysisPbPb::Merge(TCollection* const list)
1283 // Merge list of objects (needed by PROOF)
1285 // init if not done already
1286 if (!fIsInit) { Init(); }
1291 if (list->IsEmpty())
1294 TIterator* iter = list->MakeIterator();
1298 //TList *collPhysSelection = new TList;
1300 // collection of generated histograms
1303 while((obj = iter->Next()) != 0) {
1304 AlidNdPtAnalysisPbPb* entry = dynamic_cast<AlidNdPtAnalysisPbPb*>(obj);
1305 if (entry == 0) continue;
1307 // physics selection
1308 //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection());
1309 //AliPhysicsSelection *physSel = entry->GetPhysicsTriggerSelection();
1310 //if( physSel ) collPhysSelection->Add(physSel);
1313 fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix);
1316 fGenEventMatrix->Add(entry->fGenEventMatrix);
1318 fTriggerEventMatrix->Add(entry->fTriggerEventMatrix);
1320 fRecEventMatrix->Add(entry->fRecEventMatrix);
1322 fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix);
1324 fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix);
1326 fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix);
1329 fGenTrackMatrix->Add(entry->fGenTrackMatrix);
1330 fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix);
1331 fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix);
1333 fRecTrackMatrix->Add(entry->fRecTrackMatrix);
1334 fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix);
1336 fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix);
1339 // control analysis histograms
1341 fMCEventHist1->Add(entry->fMCEventHist1);
1342 fRecEventHist1->Add(entry->fRecEventHist1);
1343 fRecEventHist2->Add(entry->fRecEventHist2);
1344 fRecMCEventHist1->Add(entry->fRecMCEventHist1);
1345 fRecMCEventHist2->Add(entry->fRecMCEventHist2);
1348 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
1349 fMCTrackHist1[i]->Add(entry->fMCTrackHist1[i]);
1351 fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]);
1352 fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]);
1353 fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]);
1355 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);
1356 fRecTrackHist2[i]->Add(entry->fRecTrackHist2[i]);
1357 fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]);
1359 fRecMCTrackHist1->Add(entry->fRecMCTrackHist1);
1360 fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1);
1361 fRecTrackHist3->Add(entry->fRecTrackHist3);
1366 //AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();
1367 //if( trigSelection ) trigSelection->Merge(collPhysSelection);
1368 //if(collPhysSelection) delete collPhysSelection;
1375 //_____________________________________________________________________________
1376 void AlidNdPtAnalysisPbPb::Analyse()
1379 // init if not done already
1380 if (!fIsInit) { Init(); }
1382 // Analyse histograms
1384 TH1::AddDirectory(kFALSE);
1385 TH1 *h=0, *h1=0, *h2=0, *h2c = 0;
1390 TObjArray *aFolderObj = new TObjArray;
1393 // LHC backgraund in all and 0-bins
1395 //AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();
1396 //trigSel->SaveHistograms("physics_selection");
1399 // Reconstructed event vertex
1401 h = fRecEventHist1->Projection(0);
1405 h = fRecEventHist1->Projection(1);
1409 h = fRecEventHist1->Projection(2);
1416 h = fRecEventHist2->Projection(1);
1417 h->SetName("multMB");
1420 h2D = fRecEventHist2->Projection(0,1);
1421 h2D->SetName("Zv_vs_multiplicity_MB");
1422 aFolderObj->Add(h2D);
1425 // reconstructed pt histograms
1427 h = fRecTrackHist1[0]->Projection(0);
1428 h->Scale(1.,"width");
1429 h->SetName("pt_all_ch");
1432 h = fRecTrackHist1[1]->Projection(0);
1433 h->Scale(1.,"width");
1434 h->SetName("pt_acc");
1437 h = fRecTrackHist1[2]->Projection(0);
1438 h->Scale(1.,"width");
1439 h->SetName("pt_rec");
1443 // reconstructed eta histograms
1445 h = fRecTrackHist1[0]->Projection(1);
1446 h->SetName("eta_all_ch");
1449 h = fRecTrackHist1[1]->Projection(1);
1450 h->SetName("eta_acc");
1453 h = fRecTrackHist1[2]->Projection(1);
1454 h->SetName("eta_rec");
1458 // reconstructed phi histograms
1460 h = fRecTrackHist1[0]->Projection(2);
1461 h->SetName("phi_all_ch");
1464 h = fRecTrackHist1[1]->Projection(2);
1465 h->SetName("phi_acc");
1468 h = fRecTrackHist1[2]->Projection(2);
1469 h->SetName("phi_rec");
1473 // reconstructed eta:pt histograms
1475 h2D = fRecTrackHist1[0]->Projection(1,0);
1476 h2D->SetName("pt_eta_all_ch");
1477 aFolderObj->Add(h2D);
1479 h2D = fRecTrackHist1[1]->Projection(1,0);
1480 h2D->SetName("pt_eta_acc");
1481 aFolderObj->Add(h2D);
1483 h2D = fRecTrackHist1[2]->Projection(1,0);
1484 h2D->SetName("pt_eta_rec");
1485 aFolderObj->Add(h2D);
1488 // reconstructed phi:pt histograms
1490 h2D = fRecTrackHist1[0]->Projection(2,0);
1491 h2D->SetName("pt_phi_all_ch");
1492 aFolderObj->Add(h2D);
1494 h2D = fRecTrackHist1[1]->Projection(2,0);
1495 h2D->SetName("pt_phi_acc");
1496 aFolderObj->Add(h2D);
1498 h2D = fRecTrackHist1[2]->Projection(2,0);
1499 h2D->SetName("pt_phi_rec");
1500 aFolderObj->Add(h2D);
1503 // reconstructed phi:eta histograms
1505 h2D = fRecTrackHist1[0]->Projection(2,1);
1506 h2D->SetName("eta_phi_all_ch");
1507 aFolderObj->Add(h2D);
1509 h2D = fRecTrackHist1[1]->Projection(2,1);
1510 h2D->SetName("eta_phi_acc");
1511 aFolderObj->Add(h2D);
1513 h2D = fRecTrackHist1[2]->Projection(2,1);
1514 h2D->SetName("eta_phi_rec");
1515 aFolderObj->Add(h2D);
1518 // reconstructed nClust, chi2 vs pt, eta, phi
1522 h2D = fRecTrackHist3->Projection(0,1);
1523 h2D->SetName("nClust_chi2_rec");
1524 aFolderObj->Add(h2D);
1526 h2D = fRecTrackHist3->Projection(0,2);
1527 h2D->SetName("nClust_pt_rec");
1528 aFolderObj->Add(h2D);
1530 h2D = fRecTrackHist3->Projection(0,3);
1531 h2D->SetName("nClust_eta_rec");
1532 aFolderObj->Add(h2D);
1534 h2D = fRecTrackHist3->Projection(0,4);
1535 h2D->SetName("nClust_phi_rec");
1536 aFolderObj->Add(h2D);
1538 h2D = fRecTrackHist3->Projection(1,2);
1539 h2D->SetName("chi2_pt_rec");
1540 aFolderObj->Add(h2D);
1542 h2D = fRecTrackHist3->Projection(1,3);
1543 h2D->SetName("chi2_eta_rec");
1544 aFolderObj->Add(h2D);
1546 h2D = fRecTrackHist3->Projection(1,4);
1547 h2D->SetName("chi2_phi_rec");
1548 aFolderObj->Add(h2D);
1553 // calculate corrections for empty events
1558 // normalised zv to generate zv for triggered events
1560 h = fRecEventHist2->Projection(0);
1561 if( h->Integral() ) h->Scale(1./h->Integral());
1562 h->SetName("zv_distribution_norm");
1571 // Event vertex resolution
1573 h2D = fRecMCEventHist2->Projection(0,2);
1574 h2D->SetName("DeltaXv_vs_mult");
1575 aFolderObj->Add(h2D);
1577 h2D = fRecMCEventHist2->Projection(1,2);
1578 h2D->SetName("DeltaZv_vs_mult");
1579 aFolderObj->Add(h2D);
1582 // normalised zv to get trigger/trigger+vertex event differences
1583 // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv)
1585 fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.);
1586 h = fTriggerEventMatrix->Projection(0);
1587 h2D = fTriggerEventMatrix->Projection(0,1);
1588 if(h2D->Integral()) h->Scale(1./h2D->Integral());
1590 h1 = fRecEventMatrix->Projection(0);
1591 h2D = fRecEventMatrix->Projection(0,1);
1592 if(h2D->Integral()) h1->Scale(1./h2D->Integral());
1595 h->SetName("zv_empty_events_norm");
1598 fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins());
1601 // rec. vs true track pt correlation matrix
1603 hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix");
1604 aFolderObj->Add(hs);
1607 // trigger efficiency for INEL
1609 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix");
1614 // trigger bias correction (MB to INEL)
1616 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix");
1617 aFolderObj->Add(hs);
1619 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix");
1622 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D");
1623 aFolderObj->Add(h2D);
1626 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix");
1631 // event vertex reconstruction correction (MB)
1633 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix");
1634 aFolderObj->Add(hs);
1636 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D");
1637 aFolderObj->Add(h2D);
1640 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix");
1644 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix");
1650 // track-event trigger bias correction (MB to INEL)
1652 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix");
1653 aFolderObj->Add(hs);
1655 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix");
1656 aFolderObj->Add(h2D);
1658 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix");
1659 aFolderObj->Add(h2D);
1661 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix");
1662 aFolderObj->Add(h2D);
1666 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix");
1671 // track-event vertex reconstruction correction (MB)
1673 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix");
1674 aFolderObj->Add(hs);
1676 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix");
1677 aFolderObj->Add(h2D);
1679 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix");
1680 aFolderObj->Add(h2D);
1682 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix");
1683 aFolderObj->Add(h2D);
1687 h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix");
1692 // track rec. efficiency correction
1694 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix");
1695 aFolderObj->Add(hs);
1697 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix");
1698 aFolderObj->Add(h2D);
1700 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix");
1701 aFolderObj->Add(h2D);
1703 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix");
1704 aFolderObj->Add(h2D);
1707 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix");
1710 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix");
1715 h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix");
1718 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix");
1722 // secondary track contamination correction
1724 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
1725 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
1726 aFolderObj->Add(hs);
1728 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix");
1729 aFolderObj->Add(h2D);
1731 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix");
1732 aFolderObj->Add(h2D);
1734 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix");
1735 aFolderObj->Add(h2D);
1737 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix");
1741 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix");
1744 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix");
1748 // multiple track reconstruction correction
1750 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
1751 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
1752 aFolderObj->Add(hs);
1754 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix");
1755 aFolderObj->Add(h2D);
1757 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix");
1758 aFolderObj->Add(h2D);
1760 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix");
1761 aFolderObj->Add(h2D);
1763 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix");
1766 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix");
1769 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix");
1773 // Control histograms
1778 // Efficiency electrons, muons, pions, kaons, protons, all
1779 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1);
1780 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1);
1781 h1 = fMCPrimTrackHist1[1]->Projection(0);
1782 h2 = fMCPrimTrackHist1[2]->Projection(0);
1783 h2c = (TH1D *)h2->Clone();
1785 h2c->SetName("eff_pt_electrons");
1786 aFolderObj->Add(h2c);
1788 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2);
1789 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2);
1790 h1 = fMCPrimTrackHist1[1]->Projection(0);
1791 h2 = fMCPrimTrackHist1[2]->Projection(0);
1792 h2c = (TH1D *)h2->Clone();
1794 h2c->SetName("eff_pt_muons");
1795 aFolderObj->Add(h2c);
1797 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3);
1798 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3);
1799 h1 = fMCPrimTrackHist1[1]->Projection(0);
1800 h2 = fMCPrimTrackHist1[2]->Projection(0);
1801 h2c = (TH1D *)h2->Clone();
1803 h2c->SetName("eff_pt_pions");
1804 aFolderObj->Add(h2c);
1806 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4);
1807 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4);
1808 h1 = fMCPrimTrackHist1[1]->Projection(0);
1809 h2 = fMCPrimTrackHist1[2]->Projection(0);
1810 h2c = (TH1D *)h2->Clone();
1812 h2c->SetName("eff_pt_kaons");
1813 aFolderObj->Add(h2c);
1815 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5);
1816 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5);
1817 h1 = fMCPrimTrackHist1[1]->Projection(0);
1818 h2 = fMCPrimTrackHist1[2]->Projection(0);
1819 h2c = (TH1D *)h2->Clone();
1821 h2c->SetName("eff_pt_protons");
1822 aFolderObj->Add(h2c);
1824 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5);
1825 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5);
1826 h1 = fMCPrimTrackHist1[1]->Projection(0);
1827 h2 = fMCPrimTrackHist1[2]->Projection(0);
1828 h2c = (TH1D *)h2->Clone();
1830 h2c->SetName("eff_pt_selected");
1831 aFolderObj->Add(h2c);
1833 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6);
1834 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6);
1835 h1 = fMCPrimTrackHist1[1]->Projection(0);
1836 h2 = fMCPrimTrackHist1[2]->Projection(0);
1837 h2c = (TH1D *)h2->Clone();
1839 h2c->SetName("eff_pt_all");
1840 aFolderObj->Add(h2c);
1842 fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins());
1843 fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins());
1846 // - rec, primaries, secondaries
1847 // - primaries (pid)
1848 // - secondaries (pid)
1849 // - secondaries (mech)
1850 // - secondaries (mother)
1853 TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0);
1854 mcPtAccall->SetName("mc_pt_acc_all");
1855 aFolderObj->Add(mcPtAccall);
1857 TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0);
1858 mcPtAccprim->SetName("mc_pt_acc_prim");
1859 aFolderObj->Add(mcPtAccprim);
1861 TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0);
1862 mcPtRecall->SetName("mc_pt_rec_all");
1863 aFolderObj->Add(mcPtRecall);
1865 TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0);
1866 mcPtRecprim->SetName("mc_pt_rec_prim");
1867 aFolderObj->Add(mcPtRecprim);
1869 TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0);
1870 mcPtRecsec->SetName("mc_pt_rec_sec");
1871 aFolderObj->Add(mcPtRecsec);
1873 for(Int_t i = 0; i<6; i++)
1875 sprintf(name,"mc_pt_rec_prim_pid_%d",i);
1876 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
1877 h = fMCPrimTrackHist1[2]->Projection(0);
1881 sprintf(name,"mc_pt_rec_sec_pid_%d",i);
1882 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
1883 h = fMCSecTrackHist1[2]->Projection(0);
1887 // production mechanisms for given pid
1888 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
1890 for(Int_t j=0; j<20; j++) {
1894 sprintf(name,"mc_pt_rec_sec_pid_%d_decay",i);
1895 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1896 h = fMCSecTrackHist1[2]->Projection(0);
1900 sprintf(name,"mc_eta_rec_sec_pid_%d_decay",i);
1901 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1902 h = fMCSecTrackHist1[2]->Projection(1);
1906 sprintf(name,"mc_mother_rec_sec_pid_%d_decay",i);
1907 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1908 h = fMCSecTrackHist1[2]->Projection(4);
1912 } else if (j == 5) {
1915 sprintf(name,"mc_pt_rec_sec_pid_%d_conv",i);
1916 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1917 h = fMCSecTrackHist1[2]->Projection(0);
1921 sprintf(name,"mc_eta_rec_sec_pid_%d_conv",i);
1922 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1923 h = fMCSecTrackHist1[2]->Projection(1);
1927 sprintf(name,"mc_mother_rec_sec_pid_%d_conv",i);
1928 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1929 h = fMCSecTrackHist1[2]->Projection(4);
1933 } else if (j == 13) {
1936 sprintf(name,"mc_pt_rec_sec_pid_%d_mat",i);
1937 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1938 h = fMCSecTrackHist1[2]->Projection(0);
1942 sprintf(name,"mc_eta_rec_sec_pid_%d_mat",i);
1943 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1944 h = fMCSecTrackHist1[2]->Projection(1);
1948 sprintf(name,"mc_eta_mother_rec_sec_pid_%d_mat",i);
1949 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1950 h = fMCSecTrackHist1[2]->Projection(4,1);
1954 sprintf(name,"mc_mother_rec_sec_pid_%d_mat",i);
1955 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1956 h = fMCSecTrackHist1[2]->Projection(4);
1960 sprintf(name,"mc_pt_mother_rec_sec_pid_%d_mat",i);
1961 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1962 h = fMCSecTrackHist1[2]->Projection(4,0);
1972 } // end fHistogramOn
1975 // resolution histograms
1976 // only for reconstructed tracks
1980 TCanvas * c = new TCanvas("resol","resol");
1984 fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79);
1986 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
1987 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
1988 h->SetXTitle("p_{tmc} (GeV/c)");
1989 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
1991 h->SetName("pt_resolution_vs_mcpt");
1994 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
1995 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
1996 h->SetXTitle("p_{tmc} (GeV/c)");
1997 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
1999 h->SetName("dpt_mean_vs_mcpt");
2003 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
2004 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
2005 h->SetXTitle("p_{tmc} (GeV/c)");
2006 h->SetYTitle("(#eta-#eta_{mc}) resolution");
2008 h->SetName("eta_resolution_vs_mcpt");
2011 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
2012 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
2013 h->SetXTitle("p_{tmc} (GeV/c)");
2014 h->SetYTitle("(#eta-mc#eta) mean");
2016 h->SetName("deta_mean_vs_mcpt");
2020 fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins());
2022 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
2023 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
2024 h->SetXTitle("#eta_{mc}");
2025 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
2027 h->SetName("pt_resolution_vs_mceta");
2030 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
2031 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
2032 h->SetXTitle("#eta_{mc}");
2033 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
2035 h->SetName("dpt_mean_vs_mceta");
2039 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
2040 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
2041 h->SetXTitle("#eta_{mc}");
2042 h->SetYTitle("(#eta-#eta_{mc}) resolution");
2044 h->SetName("eta_resolution_vs_mceta");
2047 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
2048 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
2049 h->SetXTitle("#eta_{mc}");
2050 h->SetYTitle("(#eta-mc#eta) mean");
2052 h->SetName("deta_mean_vs_mceta");
2055 fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins());
2057 } // end use MC info
2059 // export objects to analysis folder
2060 fAnalysisFolder = ExportToFolder(aFolderObj);
2062 // delete only TObjArray
2063 if(aFolderObj) delete aFolderObj;
2066 //_____________________________________________________________________________
2067 TFolder* AlidNdPtAnalysisPbPb::ExportToFolder(TObjArray * const array)
2069 // recreate folder avery time and export objects to new one
2071 AlidNdPtAnalysisPbPb * comp=this;
2072 TFolder *folder = comp->GetAnalysisFolder();
2074 TString name, title;
2075 TFolder *newFolder = 0;
2077 Int_t size = array->GetSize();
2080 // get name and title from old folder
2081 name = folder->GetName();
2082 title = folder->GetTitle();
2088 newFolder = CreateFolder(name.Data(),title.Data());
2089 newFolder->SetOwner();
2091 // add objects to folder
2093 newFolder->Add(array->At(i));
2101 //_____________________________________________________________________________
2102 TFolder* AlidNdPtAnalysisPbPb::CreateFolder(TString name,TString title) {
2103 // create folder for analysed histograms
2105 TFolder *folder = 0;
2106 folder = new TFolder(name.Data(),title.Data());