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 //------------------------------------------------------------------------------
33 #include "THnSparse.h"
35 #include "AliHeader.h"
36 #include "AliGenEventHeader.h"
38 #include "AliESDEvent.h"
39 #include "AliMCEvent.h"
40 #include "AliESDtrackCuts.h"
42 #include "AliMultiplicity.h"
43 #include "AliTracker.h"
45 #include "AlidNdPtEventCuts.h"
46 #include "AlidNdPtAcceptanceCuts.h"
47 #include "AliPhysicsSelection.h"
48 #include "AliTriggerAnalysis.h"
50 #include "AliPWG0Helper.h"
51 #include "AlidNdPtHelper.h"
52 #include "AlidNdPtAnalysisPbPb.h"
57 ClassImp(AlidNdPtAnalysisPbPb)
59 //_____________________________________________________________________________
60 AlidNdPtAnalysisPbPb::AlidNdPtAnalysisPbPb(): AlidNdPt(),
62 fHistogramsOn(kFALSE),
64 // rec. track pt vs true track pt correlation matrix
65 fTrackPtCorrelationMatrix(0),
67 // event level correction
69 fTriggerEventMatrix(0),
73 // track-event level correction
75 fGenTrackEventMatrix(0),
77 fTriggerTrackEventMatrix(0),
79 fRecTrackEventMatrix(0),
81 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
83 fGenPrimTrackMatrix(0),
84 fRecPrimTrackMatrix(0),
86 // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)
88 fRecSecTrackMatrix(0),
90 // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix)
91 fRecMultTrackMatrix(0),
93 // event control histograms
100 // rec. pt and eta resolution w.r.t MC
103 //multple reconstructed tracks
104 fMCMultRecTrackHist1(0),
106 // rec. track control histograms
111 // default constructor
112 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
114 fMCPrimTrackHist1[i]=0;
115 fMCPrimTrackHist2[i]=0;
116 fMCSecTrackHist1[i]=0;
119 fRecTrackMultHist1[i]=0;
124 //_____________________________________________________________________________
125 AlidNdPtAnalysisPbPb::AlidNdPtAnalysisPbPb(Char_t* name, Char_t* title): AlidNdPt(name,title),
127 fHistogramsOn(kFALSE),
129 // rec. track pt vs true track pt correlation matrix
130 fTrackPtCorrelationMatrix(0),
132 // event level correction
134 fTriggerEventMatrix(0),
138 // track-event level correction
140 fGenTrackEventMatrix(0),
142 fTriggerTrackEventMatrix(0),
144 fRecTrackEventMatrix(0),
146 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
148 fGenPrimTrackMatrix(0),
149 fRecPrimTrackMatrix(0),
151 // secondary track contamination correction (fRecTrackMatrix - fRecSecTrackMatrix)
153 fRecSecTrackMatrix(0),
155 // multiple rec. track contamination corrections (fRecTrackMatrix - fRecMultTrackMatrix)
156 fRecMultTrackMatrix(0),
161 // event control histograms
168 // rec. pt and eta resolution w.r.t MC
171 //multiple reconstructed tracks
172 fMCMultRecTrackHist1(0),
174 // rec. track control histograms
182 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
184 fMCPrimTrackHist1[i]=0;
185 fMCPrimTrackHist2[i]=0;
186 fMCSecTrackHist1[i]=0;
189 fRecTrackMultHist1[i]=0;
195 //_____________________________________________________________________________
196 AlidNdPtAnalysisPbPb::~AlidNdPtAnalysisPbPb() {
200 if(fTrackPtCorrelationMatrix) delete fTrackPtCorrelationMatrix; fTrackPtCorrelationMatrix=0;
202 if(fGenEventMatrix) delete fGenEventMatrix; fGenEventMatrix=0;
203 if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;
204 if(fRecEventMatrix) delete fRecEventMatrix; fRecEventMatrix=0;
207 if(fGenTrackEventMatrix) delete fGenTrackEventMatrix; fGenTrackEventMatrix=0;
208 if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;
209 if(fRecTrackEventMatrix) delete fRecTrackEventMatrix; fRecTrackEventMatrix=0;
212 if(fGenTrackMatrix) delete fGenTrackMatrix; fGenTrackMatrix=0;
213 if(fGenPrimTrackMatrix) delete fGenPrimTrackMatrix; fGenPrimTrackMatrix=0;
214 if(fRecPrimTrackMatrix) delete fRecPrimTrackMatrix; fRecPrimTrackMatrix=0;
216 if(fRecTrackMatrix) delete fRecTrackMatrix; fRecTrackMatrix=0;
217 if(fRecSecTrackMatrix) delete fRecSecTrackMatrix; fRecSecTrackMatrix=0;
219 if(fRecMultTrackMatrix) delete fRecMultTrackMatrix; fRecMultTrackMatrix=0;
221 // Control histograms
223 if(fMCEventHist1) delete fMCEventHist1; fMCEventHist1=0;
224 if(fRecEventHist1) delete fRecEventHist1; fRecEventHist1=0;
225 if(fRecEventHist2) delete fRecEventHist2; fRecEventHist2=0;
226 if(fRecMCEventHist1) delete fRecMCEventHist1; fRecMCEventHist1=0;
227 if(fRecMCEventHist2) delete fRecMCEventHist2; fRecMCEventHist2=0;
230 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
231 if(fMCTrackHist1[i]) delete fMCTrackHist1[i]; fMCTrackHist1[i]=0;
232 if(fMCPrimTrackHist1[i]) delete fMCPrimTrackHist1[i]; fMCPrimTrackHist1[i]=0;
233 if(fMCPrimTrackHist2[i]) delete fMCPrimTrackHist2[i]; fMCPrimTrackHist2[i]=0;
234 if(fMCSecTrackHist1[i]) delete fMCSecTrackHist1[i]; fMCSecTrackHist1[i]=0;
235 if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;
236 if(fRecTrackHist2[i]) delete fRecTrackHist2[i]; fRecTrackHist2[i]=0;
237 if(fRecTrackMultHist1[i]) delete fRecTrackMultHist1[i]; fRecTrackMultHist1[i]=0;
239 if(fRecMCTrackHist1) delete fRecMCTrackHist1; fRecMCTrackHist1=0;
240 if(fMCMultRecTrackHist1) delete fMCMultRecTrackHist1; fMCMultRecTrackHist1=0;
241 if(fRecTrackHist3) delete fRecTrackHist3; fRecTrackHist3=0;
243 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
245 if (fTriggerAnalysis) delete fTriggerAnalysis; fTriggerAnalysis = 0;
248 //_____________________________________________________________________________
249 void AlidNdPtAnalysisPbPb::Init(){
254 const Int_t multNbins = 47;
255 const Int_t ptNbinsTrackEventCorr = 37;
256 const Int_t ptNbins = 68;
257 const Int_t etaNbins = 30;
258 const Int_t zvNbins = 12;
260 Double_t binsMult[multNbins+1] = {
261 -0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,
262 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,
263 19.5, 20.5, 30.5, 40.5 , 50.5 , 60.5 , 70.5 , 80.5 , 90.5 , 100.5,
264 200.5, 300.5, 400.5, 500.5, 600.5, 700.5, 800.5, 900.5, 1000.5, 2000.5,
265 3000.5, 4000.5, 5000.5, 6000.5, 7000.5, 8000.5, 9000.5, 10000.5 }; // forPbPb
267 Double_t binsPtTrackEventCorr[ptNbinsTrackEventCorr+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,20.0,50.0};
269 Double_t binsPt[ptNbins+1] = {
270 0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45,
271 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95,
272 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9,
273 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8,
274 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0,
275 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0,
276 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0 };
278 Double_t binsEta[etaNbins+1] = {
279 -1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6,
280 -0.5, -0.4, -0.3, -0.2, -0.1, 0.0, 0.1, 0.2, 0.3, 0.4,
281 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4,
284 Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
286 Int_t binsTrackEventCorrMatrix[3]={zvNbins,ptNbinsTrackEventCorr,etaNbins};
287 Int_t binsTrackEvent[3]={zvNbins,ptNbins,etaNbins};
288 Int_t binsTrackPtCorrelationMatrix[3]={ptNbins,ptNbins,etaNbins};
291 fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta",3,binsTrackPtCorrelationMatrix);
292 fTrackPtCorrelationMatrix->SetBinEdges(0,binsPt);
293 fTrackPtCorrelationMatrix->SetBinEdges(1,binsPt);
294 fTrackPtCorrelationMatrix->SetBinEdges(2,binsEta);
295 fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)");
296 fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
297 fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta");
298 fTrackPtCorrelationMatrix->Sumw2();
301 // Efficiency and contamination correction matrices
303 Int_t binsEventMatrix[2]={zvNbins,multNbins};
304 Double_t minEventMatrix[2]={-30.,-0.5};
305 Double_t maxEventMatrix[2]={30.,10000.5 };
307 fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
308 fGenEventMatrix->SetBinEdges(0,binsZv);
309 fGenEventMatrix->SetBinEdges(1,binsMult);
310 fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
311 fGenEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
312 fGenEventMatrix->Sumw2();
314 fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
315 fTriggerEventMatrix->SetBinEdges(0,binsZv);
316 fTriggerEventMatrix->SetBinEdges(1,binsMult);
317 fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
318 fTriggerEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
319 fTriggerEventMatrix->Sumw2();
321 fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
322 fRecEventMatrix->SetBinEdges(0,binsZv);
323 fRecEventMatrix->SetBinEdges(1,binsMult);
324 fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
325 fRecEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
326 fRecEventMatrix->Sumw2();
329 // track to event corrections
331 fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
332 fGenTrackEventMatrix->SetBinEdges(0,binsZv);
333 fGenTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
334 fGenTrackEventMatrix->SetBinEdges(2,binsEta);
335 fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
336 fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
337 fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
338 fGenTrackEventMatrix->Sumw2();
340 fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
341 fTriggerTrackEventMatrix->SetBinEdges(0,binsZv);
342 fTriggerTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
343 fTriggerTrackEventMatrix->SetBinEdges(2,binsEta);
344 fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
345 fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
346 fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
347 fTriggerTrackEventMatrix->Sumw2();
349 fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
350 fRecTrackEventMatrix->SetBinEdges(0,binsZv);
351 fRecTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
352 fRecTrackEventMatrix->SetBinEdges(2,binsEta);
353 fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
354 fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
355 fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
356 fRecTrackEventMatrix->Sumw2();
359 // tracks correction matrices
361 fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
362 fGenTrackMatrix->SetBinEdges(0,binsZv);
363 fGenTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
364 fGenTrackMatrix->SetBinEdges(2,binsEta);
365 fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
366 fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
367 fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta");
368 fGenTrackMatrix->Sumw2();
370 fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
371 fGenPrimTrackMatrix->SetBinEdges(0,binsZv);
372 fGenPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
373 fGenPrimTrackMatrix->SetBinEdges(2,binsEta);
374 fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
375 fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
376 fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");
377 fGenPrimTrackMatrix->Sumw2();
380 fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
381 fRecPrimTrackMatrix->SetBinEdges(0,binsZv);
382 fRecPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
383 fRecPrimTrackMatrix->SetBinEdges(2,binsEta);
384 fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
385 fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
386 fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");
387 fRecPrimTrackMatrix->Sumw2();
390 fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
391 fRecTrackMatrix->SetBinEdges(0,binsZv);
392 fRecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
393 fRecTrackMatrix->SetBinEdges(2,binsEta);
394 fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
395 fRecTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
396 fRecTrackMatrix->GetAxis(2)->SetTitle("mcEta");
397 fRecTrackMatrix->Sumw2();
399 fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
400 fRecSecTrackMatrix->SetBinEdges(0,binsZv);
401 fRecSecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
402 fRecSecTrackMatrix->SetBinEdges(2,binsEta);
403 fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
404 fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");
405 fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta");
406 fRecSecTrackMatrix->Sumw2();
409 fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
410 fRecMultTrackMatrix->SetBinEdges(0,binsZv);
411 fRecMultTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
412 fRecMultTrackMatrix->SetBinEdges(2,binsEta);
413 fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
414 fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
415 fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta");
416 fRecMultTrackMatrix->Sumw2();
419 // Control analysis histograms
421 Int_t binsMCEventHist1[3]={100,100,zvNbins};
422 Double_t minMCEventHist1[3]={-0.1,-0.1,-30.};
423 Double_t maxMCEventHist1[3]={0.1,0.1,30.};
424 fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1);
425 fMCEventHist1->SetBinEdges(2,binsZv);
426 fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)");
427 fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)");
428 fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)");
429 fMCEventHist1->Sumw2();
432 Int_t binsRecEventHist1[3]={100,100,zvNbins};
433 Double_t minRecEventHist1[3]={-3.,-3.,-30.};
434 Double_t maxRecEventHist1[3]={3.,3.,30.};
436 fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1);
437 fRecEventHist1->SetBinEdges(2,binsZv);
438 fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)");
439 fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)");
440 fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)");
441 fRecEventHist1->Sumw2();
444 Int_t binsRecEventHist2[2]={zvNbins,multNbins};
445 Double_t minRecEventHist2[2]={-30.,-0.5};
446 Double_t maxRecEventHist2[2]={30.,10000.5};
448 fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB",2,binsRecEventHist2,minRecEventHist2,maxRecEventHist2);
449 fRecEventHist2->SetBinEdges(0,binsZv);
450 fRecEventHist2->SetBinEdges(1,binsMult);
451 fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)");
452 fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB");
453 fRecEventHist2->Sumw2();
456 Double_t kFact = 0.1;
457 Int_t binsRecMCEventHist1[3]={100,100,100};
458 Double_t minRecMCEventHist1[3]={-10.0*kFact,-10.0*kFact,-10.0*kFact};
459 Double_t maxRecMCEventHist1[3]={10.0*kFact,10.0*kFact,10.0*kFact};
461 fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv",3,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1);
462 fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)");
463 fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)");
464 fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)");
465 fRecMCEventHist1->Sumw2();
468 Int_t binsRecMCEventHist2[3]={100,100,multNbins};
469 Double_t minRecMCEventHist2[3]={-10.0*kFact,-10.0*kFact,-0.5};
470 Double_t maxRecMCEventHist2[3]={10.0*kFact,10.0*kFact,10000.5};
472 fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:mult",3,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2);
473 fRecMCEventHist2->SetBinEdges(2,binsMult);
474 fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)");
475 fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)");
476 fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity");
477 fRecMCEventHist2->Sumw2();
481 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++)
483 // THnSparse track histograms
485 Int_t binsMCTrackHist1[3]= {ptNbins, etaNbins, 90};
486 Double_t minMCTrackHist1[3]={0.,-1.5,0.};
487 Double_t maxMCTrackHist1[3]={50,1.5,2.*TMath::Pi()};
488 sprintf(name,"fMCTrackHist1_%d",i);
489 sprintf(title,"mcPt:mcEta:mcPhi");
491 fMCTrackHist1[i] = new THnSparseF(name,title,3,binsMCTrackHist1,minMCTrackHist1,maxMCTrackHist1);
492 fMCTrackHist1[i]->SetBinEdges(0,binsPt);
493 fMCTrackHist1[i]->SetBinEdges(1,binsEta);
494 fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
495 fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
496 fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)");
497 fMCTrackHist1[i]->Sumw2();
499 Int_t binsMCPrimTrackHist1[5]= {ptNbins,etaNbins,6,20,4000};
500 Double_t minMCPrimTrackHist1[5]={0.,-1.5,0.,0.,0.};
501 Double_t maxMCPrimTrackHist1[5]={50.,1.5,6.,20.,4000.};
502 sprintf(name,"fMCPrimTrackHist1_%d",i);
503 sprintf(title,"mcPt:mcEta:pid:mech:mother");
505 fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1);
506 fMCPrimTrackHist1[i]->SetBinEdges(0,binsPt);
507 fMCPrimTrackHist1[i]->SetBinEdges(1,binsEta);
508 fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
509 fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
510 fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid");
511 fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech");
512 fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother");
513 fMCPrimTrackHist1[i]->Sumw2();
515 Int_t binsMCPrimTrackHist2[5]= {4000,20,4000};
516 Double_t minMCPrimTrackHist2[5]={0.,0.,0.};
517 Double_t maxMCPrimTrackHist2[5]={4000.,20.,4000.};
518 sprintf(name,"fMCPrimTrackHist2_%d",i);
519 sprintf(title,"pdg:mech:mother");
521 fMCPrimTrackHist2[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2);
522 fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg");
523 fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech");
524 fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother");
525 fMCPrimTrackHist2[i]->Sumw2();
527 Int_t binsMCSecTrackHist1[5]= {ptNbins,etaNbins,6,20,4000};
528 Double_t minMCSecTrackHist1[5]={0.,-1.5,0.,0.,0.};
529 Double_t maxMCSecTrackHist1[5]={50.,1.5,6.,20.,4000.};
530 sprintf(name,"fMCSecTrackHist1_%d",i);
531 sprintf(title,"mcPt:mcEta:mcPhi:pid:mech:mother");
533 fMCSecTrackHist1[i] = new THnSparseF(name,title,5,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1);
534 fMCSecTrackHist1[i]->SetBinEdges(0,binsPt);
535 fMCSecTrackHist1[i]->SetBinEdges(1,binsEta);
536 fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
537 fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
538 fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid");
539 fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech");
540 fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother");
541 fMCSecTrackHist1[i]->Sumw2();
543 Int_t binsRecTrackHist1[3]={ptNbins,etaNbins,90};
544 Double_t minRecTrackHist1[3]={0.,-1.5,0.};
545 Double_t maxRecTrackHist1[3]={50.,1.5,2.*TMath::Pi()};
546 sprintf(name,"fRecTrackHist1_%d",i);
547 sprintf(title,"Pt:Eta:Phi");
548 fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1);
549 fRecTrackHist1[i]->SetBinEdges(0,binsPt);
550 fRecTrackHist1[i]->SetBinEdges(1,binsEta);
551 fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)");
552 fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta");
553 fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)");
554 fRecTrackHist1[i]->Sumw2();
556 sprintf(name,"fRecTrackHist2_%d",i);
557 sprintf(title,"Zv:Pt:Eta");
558 fRecTrackHist2[i] = new THnSparseF(name,title,3,binsTrackEvent);
559 fRecTrackHist2[i]->SetBinEdges(0,binsZv);
560 fRecTrackHist2[i]->SetBinEdges(1,binsPt);
561 fRecTrackHist2[i]->SetBinEdges(2,binsEta);
562 fRecTrackHist2[i]->GetAxis(0)->SetTitle("Zv (cm)");
563 fRecTrackHist2[i]->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
564 fRecTrackHist2[i]->GetAxis(2)->SetTitle("#eta");
565 fRecTrackHist2[i]->Sumw2();
568 Int_t binsRecTrackMultHist1[2]={ptNbins,multNbins};
569 Double_t minRecTrackMultHist1[2]={0.,-0.5};
570 Double_t maxRecTrackMultHist1[2]={50.,10000.5};
571 sprintf(name,"fRecTrackMultHist_%d",i);
572 sprintf(title,"Pt:Mult");
573 fRecTrackMultHist1[i] = new THnSparseF(name,title,2,binsRecTrackMultHist1,minRecTrackMultHist1,maxRecTrackMultHist1);
574 fRecTrackMultHist1[i]->SetBinEdges(0,binsPt);
575 fRecTrackMultHist1[i]->SetBinEdges(1,binsMult);
576 fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
577 fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");
578 fRecTrackMultHist1[i]->Sumw2();
581 Int_t binsRecMCTrackHist1[4] = {ptNbins,etaNbins,100,100};
582 Double_t minRecMCTrackHist1[4]={0.,-1.5,-0.5,-0.5};
583 Double_t maxRecMCTrackHist1[4]={50.,1.5,0.5,0.5};
585 sprintf(name,"fRecMCTrackHist1");
586 sprintf(title,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)");
587 fRecMCTrackHist1 = new THnSparseF(name,title,4,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1);
588 fRecMCTrackHist1->SetBinEdges(0,binsPt);
589 fRecMCTrackHist1->SetBinEdges(1,binsEta);
590 fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
591 fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta");
592 fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt");
593 fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta");
595 Int_t binsMCMultRecTrackHist1[3] = {ptNbins,etaNbins,6};
596 Double_t minMCMultRecTrackHist1[3]={0.,-1.5,0.};
597 Double_t maxMCMultRecTrackHist1[3]={50.,1.5,6.};
598 sprintf(name,"fMCMultRecTrackHist1");
599 sprintf(title,"mcPt:mcEta:pid");
600 fMCMultRecTrackHist1 = new THnSparseF(name,title,3,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1);
601 fMCMultRecTrackHist1->SetBinEdges(0,binsPt);
602 fMCMultRecTrackHist1->SetBinEdges(1,binsEta);
603 fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
604 fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta");
605 fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid");
607 //nClust:chi2PerClust:pt:eta:phi
608 Int_t binsRecTrackHist3[5]={160,100,ptNbins,etaNbins,90};
609 Double_t minRecTrackHist3[5]={0., 0., 0., -1.5, 0.};
610 Double_t maxRecRecTrackHist3[5]={160.,10., 50., 1.5, 2.*TMath::Pi()};
612 fRecTrackHist3 = new THnSparseF("fRecTrackHist3","nClust:chi2PerClust:pt:eta:phi",5,binsRecTrackHist3,minRecTrackHist3,maxRecRecTrackHist3);
613 fRecTrackHist3->SetBinEdges(2,binsPt);
614 fRecTrackHist3->SetBinEdges(3,binsEta);
615 fRecTrackHist3->GetAxis(0)->SetTitle("nClust");
616 fRecTrackHist3->GetAxis(1)->SetTitle("chi2PerClust");
617 fRecTrackHist3->GetAxis(2)->SetTitle("p_{T} (GeV/c)");
618 fRecTrackHist3->GetAxis(3)->SetTitle("#eta");
619 fRecTrackHist3->GetAxis(4)->SetTitle("#phi (rad)");
620 fRecTrackHist3->Sumw2();
624 fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder");
626 // init trigger analysis (for zdc cut)
627 fTriggerAnalysis = new AliTriggerAnalysis;
630 //_____________________________________________________________________________
631 void AlidNdPtAnalysisPbPb::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent)
634 // Process real and/or simulated events
637 AliDebug(AliLog::kError, "esdEvent not available");
641 // zdc cut not for MC
643 if (!fTriggerAnalysis->ZDCTimeTrigger(esdEvent)) {
648 // track cuts from Jochen
649 const AliESDVertex* vtxESDTPC = esdEvent->GetPrimaryVertexTPC();
650 if( vtxESDTPC->GetNContributors() < 1 ) {
654 // francesco prino cut
655 const AliMultiplicity* multESD = esdEvent->GetMultiplicity();
656 if( vtxESDTPC->GetNContributors() < (-10.+0.25*multESD->GetNumberOfITSClusters(0)) ) {
660 // get selection cuts
661 AlidNdPtEventCuts *evtCuts = GetEventCuts();
662 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
663 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
665 if(!evtCuts || !accCuts || !esdTrackCuts) {
666 AliDebug(AliLog::kError, "cuts not available");
671 Bool_t isEventTriggered = kTRUE;
672 AliPhysicsSelection *trigSel = NULL;
673 AliTriggerAnalysis *trigAna = NULL;
675 if(evtCuts->IsTriggerRequired())
678 trigSel = GetPhysicsTriggerSelection();
680 printf("cannot get trigSel \n");
687 trigSel->SetAnalyzeMC();
690 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
692 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
694 trigAna = trigSel->GetTriggerAnalysis();
698 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
699 }//if(GetTrigger() == AliTriggerAnalysis::kV0AND)
701 }//if(evtCuts->IsTriggerRequired())
705 // use MC information
706 AliHeader* header = 0;
707 AliGenEventHeader* genHeader = 0;
711 Int_t multMCTrueTracks = 0;
716 AliDebug(AliLog::kError, "mcEvent not available");
719 // get MC event header
720 header = mcEvent->Header();
722 AliDebug(AliLog::kError, "Header not available");
726 stack = mcEvent->Stack();
728 AliDebug(AliLog::kError, "Stack not available");
733 genHeader = header->GenEventHeader();
735 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
738 genHeader->PrimaryVertex(vtxMC);
740 Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};
741 fMCEventHist1->Fill(vMCEventHist1);
743 // multipliticy of all MC primary tracks
744 // in Zv, pt and eta ranges)
745 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
749 // get reconstructed vertex
750 const AliESDVertex* vtxESD = 0;
751 if(evtCuts->IsRecVertexRequired())
753 if(GetAnalysisMode() == AlidNdPtHelper::kTPC) {
754 vtxESD = esdEvent->GetPrimaryVertexTPC();
756 else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) {
757 vtxESD = esdEvent->GetPrimaryVertexTracks();
764 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD);
765 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);
766 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());
768 // vertex contributors
769 Int_t multMBTracks = 0;
770 if(GetAnalysisMode() == AlidNdPtHelper::kTPC)
772 if(vtxESD->GetStatus()) {
773 multMBTracks = vtxESD->GetNContributors();
776 else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) {
777 if(vtxESD->GetStatus()) {
778 multMBTracks = vtxESD->GetNContributors();
782 AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));
786 TObjArray *allChargedTracks=0;
787 //Int_t multAll=0, multAcc=0, multRec=0;
788 Int_t multAll=0, multRec=0;
789 Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0;
792 if(isEventOK && isEventTriggered)
795 // get all charged tracks
796 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());
797 if(!allChargedTracks) return;
799 Int_t entries = allChargedTracks->GetEntries();
801 labelsAll = new Int_t[entries];
802 labelsAcc = new Int_t[entries];
803 labelsRec = new Int_t[entries];
804 for(Int_t i=0; i<entries;++i)
806 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
809 if(track->Charge()==0) continue;
812 // only postive charged
813 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
816 // only negative charged
817 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
821 Double_t values[3] = {vtxESD->GetZv(),track->Pt(),track->Eta()};
823 fRecTrackHist2[AlidNdPtHelper::kAllTracks]->Fill(values);
824 FillHistograms(track,stack,AlidNdPtHelper::kAllTracks);
825 labelsAll[multAll] = TMath::Abs(track->GetLabel());
829 if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track)) {
831 fRecTrackHist2[AlidNdPtHelper::kRecTracks]->Fill(values);
832 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks);
833 labelsRec[multRec] = TMath::Abs(track->GetLabel());
841 // fill track multiplicity histograms
842 //FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec);
844 Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};
845 fRecEventHist1->Fill(vRecEventHist1);
847 Double_t vRecEventHist2[2] = {vtxESD->GetZv(),multMBTracks};
848 fRecEventHist2->Fill(vRecEventHist2);
850 } // triggered and event vertex
855 //Double_t vMultTrueEventMatrix[2] = { multRec, multMCTrueTracks };
858 // event level corrections (zv,N_MB)
861 Double_t vEventMatrix[2] = {vtxMC[2],multMBTracks};
862 fGenEventMatrix->Fill(vEventMatrix);
863 if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix);
864 if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix);
867 // track-event level corrections (zv,pt,eta)
869 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
871 TParticle* particle = stack->Particle(iMc);
875 // only charged particles
876 if(!particle->GetPDG()) continue;
877 Double_t charge = particle->GetPDG()->Charge()/3.;
878 if ( TMath::Abs(charge) < 0.001 )
881 // only postive charged
882 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
885 // only negative charged
886 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
890 Bool_t prim = stack->IsPhysicalPrimary(iMc);
894 if(accCuts->AcceptTrack(particle))
896 Double_t vTrackEventMatrix[3] = {vtxMC[2], particle->Pt(), particle->Eta()};
897 fGenTrackEventMatrix->Fill(vTrackEventMatrix);
899 if(!isEventTriggered) continue;
900 fTriggerTrackEventMatrix->Fill(vTrackEventMatrix);
902 if(!isEventOK) continue;
903 fRecTrackEventMatrix->Fill(vTrackEventMatrix);
905 }// if(accCuts->AcceptTrack(particle))
906 }// for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
909 // track-level corrections (zv,pt,eta)
911 if(isEventOK && isEventTriggered)
914 // fill MC and rec event control histograms
916 Double_t vRecMCEventHist1[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2]};
917 fRecMCEventHist1->Fill(vRecMCEventHist1);//
919 Double_t vRecMCEventHist2[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks};
920 fRecMCEventHist2->Fill(vRecMCEventHist2);
925 // MC histograms for track efficiency studies
927 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
929 TParticle* particle = stack->Particle(iMc);
933 Double_t vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()};
935 // only charged particles
936 if(!particle->GetPDG()) continue;
937 Double_t charge = particle->GetPDG()->Charge()/3.;
938 if (TMath::Abs(charge) < 0.001)
941 // only postive charged
942 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
945 // only negative charged
946 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
950 Bool_t prim = stack->IsPhysicalPrimary(iMc);
953 if(accCuts->AcceptTrack(particle))
956 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) )
957 fGenPrimTrackMatrix->Fill(vTrackMatrix);
959 // fill control histograms
961 FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks);
963 // check multiple found tracks
965 for(Int_t iRec=0; iRec<multRec; ++iRec)
967 if(iMc == labelsRec[iRec])
972 fRecMultTrackMatrix->Fill(vTrackMatrix);
974 // fill control histogram
976 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
977 Double_t vMCMultRecTrackHist1[3] = {particle->Pt(), particle->Eta(), pid};
978 fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1);
984 // check reconstructed
985 for(Int_t iRec=0; iRec<multRec; ++iRec)
987 if(iMc == labelsRec[iRec])
989 fRecTrackMatrix->Fill(vTrackMatrix);
991 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) {
992 fRecPrimTrackMatrix->Fill(vTrackMatrix);
994 if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix);
996 // fill control histograms
998 FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks);
1001 }//if(iMc == labelsRec[iRec])
1008 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;
1009 if(labelsAll) delete [] labelsAll; labelsAll = 0;
1010 if(labelsAcc) delete [] labelsAcc; labelsAcc = 0;
1011 if(labelsRec) delete [] labelsRec; labelsRec = 0;
1013 if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;
1017 //_____________________________________________________________________________
1018 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) {
1019 // multiplicity histograms
1022 if(!allChargedTracks) return;
1023 if(!labelsAll) return;
1024 if(!labelsAcc) return;
1025 if(!labelsRec) return;
1027 Int_t entries = allChargedTracks->GetEntries();
1028 for(Int_t i=0; i<entries; ++i)
1030 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
1031 if(!track) continue;
1032 if(track->Charge() == 0) continue;
1034 Int_t label = TMath::Abs(track->GetLabel());
1035 for(Int_t iAll=0; iAll<multAll; ++iAll) {
1036 if(label == labelsAll[iAll]) {
1037 Double_t v1[2] = {track->Pt(), multAll};
1038 fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1);
1041 for(Int_t iAcc=0; iAcc<multAcc; ++iAcc) {
1042 if(label == labelsAcc[iAcc]) {
1043 Double_t v2[2] = {track->Pt(), multAcc};
1044 fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2);
1047 for(Int_t iRec=0; iRec<multRec; ++iRec) {
1048 if(label == labelsRec[iRec]) {
1049 Double_t v3[2] = {track->Pt(), multRec};
1050 fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3);
1056 //_____________________________________________________________________________
1057 void AlidNdPtAnalysisPbPb::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, AlidNdPtHelper::TrackObject trackObj)
1061 // Fill ESD track and MC histograms
1063 if(!esdTrack) return;
1065 Float_t q = esdTrack->Charge();
1066 if(TMath::Abs(q) < 0.001) return;
1068 Float_t pt = esdTrack->Pt();
1069 Float_t eta = esdTrack->Eta();
1070 Float_t phi = esdTrack->Phi();
1072 Float_t dca[2], bCov[3];
1073 esdTrack->GetImpactParameters(dca,bCov);
1075 Int_t nClust = esdTrack->GetTPCclusters(0);
1076 Float_t chi2PerCluster = 0.;
1077 if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust);
1081 Double_t values[3] = {pt,eta,phi};
1082 fRecTrackHist1[trackObj]->Fill(values);
1085 // Fill rec vs MC information
1089 Int_t label = TMath::Abs(esdTrack->GetLabel());
1090 //if(label == 0) return;
1092 TParticle* particle = stack->Particle(label);
1093 if(!particle) return;
1095 Int_t motherPdg = -1;
1096 TParticle* mother = 0;
1098 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
1099 Int_t motherLabel = particle->GetMother(0);
1100 if(motherLabel>0) mother = stack->Particle(motherLabel);
1101 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
1102 //Int_t mech = particle->GetUniqueID(); // production mechanism
1104 if(!particle->GetPDG()) return;
1105 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
1106 if(TMath::Abs(gq)<0.001) return;
1107 Float_t gpt = particle->Pt();
1108 Float_t geta = particle->Eta();
1111 //printf("pt %f, gpt %f \n",pt,gpt);
1112 if(gpt) dpt = (pt-gpt)/gpt;
1113 Double_t deta = (eta-geta);
1116 if(trackObj == AlidNdPtHelper::kRecTracks) //RecTracks???
1118 Double_t vTrackPtCorrelationMatrix[3]={pt,gpt,geta};
1119 fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix);
1121 Double_t vRecMCTrackHist1[4]={gpt,geta,dpt,deta};
1122 fRecMCTrackHist1->Fill(vRecMCTrackHist1);
1126 //_____________________________________________________________________________
1127 void AlidNdPtAnalysisPbPb::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj)
1130 // Fill MC histograms
1133 TParticle* particle = stack->Particle(label);
1134 if(!particle) return;
1136 Int_t motherPdg = -1;
1137 TParticle* mother = 0;
1139 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
1140 Int_t motherLabel = particle->GetMother(0);
1141 if(motherLabel>0) mother = stack->Particle(motherLabel);
1142 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
1143 Int_t mech = particle->GetUniqueID(); // production mechanism
1145 if(!particle->GetPDG()) return;
1146 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
1147 if(TMath::Abs(gq) < 0.001) return;
1149 Float_t gpt = particle->Pt();
1150 //Float_t qgpt = particle->Pt() * gq;
1151 Float_t geta = particle->Eta();
1152 Float_t gphi = particle->Phi();
1153 //Float_t gpz = particle->Pz();
1155 Bool_t prim = stack->IsPhysicalPrimary(label);
1156 //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();
1158 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
1160 //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech);
1161 //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech);
1166 Double_t vMCTrackHist1[3] = {gpt,geta,gphi};
1167 fMCTrackHist1[trackObj]->Fill(vMCTrackHist1);
1169 Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg};
1170 Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg};
1172 //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
1175 fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
1176 if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2);
1179 fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
1184 //_____________________________________________________________________________
1185 Long64_t AlidNdPtAnalysisPbPb::Merge(TCollection* const list)
1187 // Merge list of objects (needed by PROOF)
1192 if (list->IsEmpty())
1195 TIterator* iter = list->MakeIterator();
1199 TList *collPhysSelection = new TList;
1201 // collection of generated histograms
1204 while((obj = iter->Next()) != 0) {
1205 AlidNdPtAnalysisPbPb* entry = dynamic_cast<AlidNdPtAnalysisPbPb*>(obj);
1206 if (entry == 0) continue;
1208 // physics selection
1209 //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection());
1210 AliPhysicsSelection *physSel = entry->GetPhysicsTriggerSelection();
1211 if( physSel ) collPhysSelection->Add(physSel);
1214 fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix);
1217 fGenEventMatrix->Add(entry->fGenEventMatrix);
1219 fTriggerEventMatrix->Add(entry->fTriggerEventMatrix);
1221 fRecEventMatrix->Add(entry->fRecEventMatrix);
1223 fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix);
1225 fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix);
1227 fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix);
1230 fGenTrackMatrix->Add(entry->fGenTrackMatrix);
1231 fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix);
1232 fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix);
1234 fRecTrackMatrix->Add(entry->fRecTrackMatrix);
1235 fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix);
1237 fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix);
1240 // control analysis histograms
1242 fMCEventHist1->Add(entry->fMCEventHist1);
1243 fRecEventHist1->Add(entry->fRecEventHist1);
1244 fRecEventHist2->Add(entry->fRecEventHist2);
1245 fRecMCEventHist1->Add(entry->fRecMCEventHist1);
1246 fRecMCEventHist2->Add(entry->fRecMCEventHist2);
1249 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
1250 fMCTrackHist1[i]->Add(entry->fMCTrackHist1[i]);
1252 fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]);
1253 fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]);
1254 fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]);
1256 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);
1257 fRecTrackHist2[i]->Add(entry->fRecTrackHist2[i]);
1258 fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]);
1260 fRecMCTrackHist1->Add(entry->fRecMCTrackHist1);
1261 fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1);
1262 fRecTrackHist3->Add(entry->fRecTrackHist3);
1267 AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();
1268 if( trigSelection ) trigSelection->Merge(collPhysSelection);
1269 if(collPhysSelection) delete collPhysSelection;
1276 //_____________________________________________________________________________
1277 void AlidNdPtAnalysisPbPb::Analyse()
1279 // Analyse histograms
1281 TH1::AddDirectory(kFALSE);
1282 TH1 *h=0, *h1=0, *h2=0, *h2c = 0;
1287 TObjArray *aFolderObj = new TObjArray;
1290 // LHC backgraund in all and 0-bins
1292 AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();
1293 trigSel->SaveHistograms("physics_selection");
1296 // Reconstructed event vertex
1298 h = fRecEventHist1->Projection(0);
1302 h = fRecEventHist1->Projection(1);
1306 h = fRecEventHist1->Projection(2);
1313 h = fRecEventHist2->Projection(1);
1314 h->SetName("multMB");
1317 h2D = fRecEventHist2->Projection(0,1);
1318 h2D->SetName("Zv_vs_multiplicity_MB");
1319 aFolderObj->Add(h2D);
1322 // reconstructed pt histograms
1324 h = fRecTrackHist1[0]->Projection(0);
1325 h->Scale(1.,"width");
1326 h->SetName("pt_all_ch");
1329 h = fRecTrackHist1[1]->Projection(0);
1330 h->Scale(1.,"width");
1331 h->SetName("pt_acc");
1334 h = fRecTrackHist1[2]->Projection(0);
1335 h->Scale(1.,"width");
1336 h->SetName("pt_rec");
1340 // reconstructed eta histograms
1342 h = fRecTrackHist1[0]->Projection(1);
1343 h->SetName("eta_all_ch");
1346 h = fRecTrackHist1[1]->Projection(1);
1347 h->SetName("eta_acc");
1350 h = fRecTrackHist1[2]->Projection(1);
1351 h->SetName("eta_rec");
1355 // reconstructed phi histograms
1357 h = fRecTrackHist1[0]->Projection(2);
1358 h->SetName("phi_all_ch");
1361 h = fRecTrackHist1[1]->Projection(2);
1362 h->SetName("phi_acc");
1365 h = fRecTrackHist1[2]->Projection(2);
1366 h->SetName("phi_rec");
1370 // reconstructed eta:pt histograms
1372 h2D = fRecTrackHist1[0]->Projection(1,0);
1373 h2D->SetName("pt_eta_all_ch");
1374 aFolderObj->Add(h2D);
1376 h2D = fRecTrackHist1[1]->Projection(1,0);
1377 h2D->SetName("pt_eta_acc");
1378 aFolderObj->Add(h2D);
1380 h2D = fRecTrackHist1[2]->Projection(1,0);
1381 h2D->SetName("pt_eta_rec");
1382 aFolderObj->Add(h2D);
1385 // reconstructed phi:pt histograms
1387 h2D = fRecTrackHist1[0]->Projection(2,0);
1388 h2D->SetName("pt_phi_all_ch");
1389 aFolderObj->Add(h2D);
1391 h2D = fRecTrackHist1[1]->Projection(2,0);
1392 h2D->SetName("pt_phi_acc");
1393 aFolderObj->Add(h2D);
1395 h2D = fRecTrackHist1[2]->Projection(2,0);
1396 h2D->SetName("pt_phi_rec");
1397 aFolderObj->Add(h2D);
1400 // reconstructed phi:eta histograms
1402 h2D = fRecTrackHist1[0]->Projection(2,1);
1403 h2D->SetName("eta_phi_all_ch");
1404 aFolderObj->Add(h2D);
1406 h2D = fRecTrackHist1[1]->Projection(2,1);
1407 h2D->SetName("eta_phi_acc");
1408 aFolderObj->Add(h2D);
1410 h2D = fRecTrackHist1[2]->Projection(2,1);
1411 h2D->SetName("eta_phi_rec");
1412 aFolderObj->Add(h2D);
1415 // reconstructed nClust, chi2 vs pt, eta, phi
1419 h2D = fRecTrackHist3->Projection(0,1);
1420 h2D->SetName("nClust_chi2_rec");
1421 aFolderObj->Add(h2D);
1423 h2D = fRecTrackHist3->Projection(0,2);
1424 h2D->SetName("nClust_pt_rec");
1425 aFolderObj->Add(h2D);
1427 h2D = fRecTrackHist3->Projection(0,3);
1428 h2D->SetName("nClust_eta_rec");
1429 aFolderObj->Add(h2D);
1431 h2D = fRecTrackHist3->Projection(0,4);
1432 h2D->SetName("nClust_phi_rec");
1433 aFolderObj->Add(h2D);
1435 h2D = fRecTrackHist3->Projection(1,2);
1436 h2D->SetName("chi2_pt_rec");
1437 aFolderObj->Add(h2D);
1439 h2D = fRecTrackHist3->Projection(1,3);
1440 h2D->SetName("chi2_eta_rec");
1441 aFolderObj->Add(h2D);
1443 h2D = fRecTrackHist3->Projection(1,4);
1444 h2D->SetName("chi2_phi_rec");
1445 aFolderObj->Add(h2D);
1450 // calculate corrections for empty events
1455 // normalised zv to generate zv for triggered events
1457 h = fRecEventHist2->Projection(0);
1458 if( h->Integral() ) h->Scale(1./h->Integral());
1459 h->SetName("zv_distribution_norm");
1468 // Event vertex resolution
1470 h2D = fRecMCEventHist2->Projection(0,2);
1471 h2D->SetName("DeltaXv_vs_mult");
1472 aFolderObj->Add(h2D);
1474 h2D = fRecMCEventHist2->Projection(1,2);
1475 h2D->SetName("DeltaZv_vs_mult");
1476 aFolderObj->Add(h2D);
1479 // normalised zv to get trigger/trigger+vertex event differences
1480 // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv)
1482 fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.);
1483 h = fTriggerEventMatrix->Projection(0);
1484 h2D = fTriggerEventMatrix->Projection(0,1);
1485 if(h2D->Integral()) h->Scale(1./h2D->Integral());
1487 h1 = fRecEventMatrix->Projection(0);
1488 h2D = fRecEventMatrix->Projection(0,1);
1489 if(h2D->Integral()) h1->Scale(1./h2D->Integral());
1492 h->SetName("zv_empty_events_norm");
1495 fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins());
1498 // rec. vs true track pt correlation matrix
1500 hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix");
1501 aFolderObj->Add(hs);
1504 // trigger efficiency for INEL
1506 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix");
1511 // trigger bias correction (MB to INEL)
1513 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix");
1514 aFolderObj->Add(hs);
1516 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix");
1519 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D");
1520 aFolderObj->Add(h2D);
1523 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix");
1528 // event vertex reconstruction correction (MB)
1530 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix");
1531 aFolderObj->Add(hs);
1533 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D");
1534 aFolderObj->Add(h2D);
1537 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix");
1541 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix");
1547 // track-event trigger bias correction (MB to INEL)
1549 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix");
1550 aFolderObj->Add(hs);
1552 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix");
1553 aFolderObj->Add(h2D);
1555 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix");
1556 aFolderObj->Add(h2D);
1558 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix");
1559 aFolderObj->Add(h2D);
1563 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix");
1568 // track-event vertex reconstruction correction (MB)
1570 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix");
1571 aFolderObj->Add(hs);
1573 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix");
1574 aFolderObj->Add(h2D);
1576 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix");
1577 aFolderObj->Add(h2D);
1579 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix");
1580 aFolderObj->Add(h2D);
1584 h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix");
1589 // track rec. efficiency correction
1591 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix");
1592 aFolderObj->Add(hs);
1594 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix");
1595 aFolderObj->Add(h2D);
1597 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix");
1598 aFolderObj->Add(h2D);
1600 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix");
1601 aFolderObj->Add(h2D);
1604 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix");
1607 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix");
1612 h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix");
1615 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix");
1619 // secondary track contamination correction
1621 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
1622 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
1623 aFolderObj->Add(hs);
1625 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix");
1626 aFolderObj->Add(h2D);
1628 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix");
1629 aFolderObj->Add(h2D);
1631 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix");
1632 aFolderObj->Add(h2D);
1634 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix");
1638 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix");
1641 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix");
1645 // multiple track reconstruction correction
1647 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
1648 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
1649 aFolderObj->Add(hs);
1651 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix");
1652 aFolderObj->Add(h2D);
1654 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix");
1655 aFolderObj->Add(h2D);
1657 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix");
1658 aFolderObj->Add(h2D);
1660 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix");
1663 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix");
1666 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix");
1670 // Control histograms
1675 // Efficiency electrons, muons, pions, kaons, protons, all
1676 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1);
1677 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1);
1678 h1 = fMCPrimTrackHist1[1]->Projection(0);
1679 h2 = fMCPrimTrackHist1[2]->Projection(0);
1680 h2c = (TH1D *)h2->Clone();
1682 h2c->SetName("eff_pt_electrons");
1683 aFolderObj->Add(h2c);
1685 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2);
1686 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2);
1687 h1 = fMCPrimTrackHist1[1]->Projection(0);
1688 h2 = fMCPrimTrackHist1[2]->Projection(0);
1689 h2c = (TH1D *)h2->Clone();
1691 h2c->SetName("eff_pt_muons");
1692 aFolderObj->Add(h2c);
1694 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3);
1695 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3);
1696 h1 = fMCPrimTrackHist1[1]->Projection(0);
1697 h2 = fMCPrimTrackHist1[2]->Projection(0);
1698 h2c = (TH1D *)h2->Clone();
1700 h2c->SetName("eff_pt_pions");
1701 aFolderObj->Add(h2c);
1703 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4);
1704 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4);
1705 h1 = fMCPrimTrackHist1[1]->Projection(0);
1706 h2 = fMCPrimTrackHist1[2]->Projection(0);
1707 h2c = (TH1D *)h2->Clone();
1709 h2c->SetName("eff_pt_kaons");
1710 aFolderObj->Add(h2c);
1712 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5);
1713 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5);
1714 h1 = fMCPrimTrackHist1[1]->Projection(0);
1715 h2 = fMCPrimTrackHist1[2]->Projection(0);
1716 h2c = (TH1D *)h2->Clone();
1718 h2c->SetName("eff_pt_protons");
1719 aFolderObj->Add(h2c);
1721 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5);
1722 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5);
1723 h1 = fMCPrimTrackHist1[1]->Projection(0);
1724 h2 = fMCPrimTrackHist1[2]->Projection(0);
1725 h2c = (TH1D *)h2->Clone();
1727 h2c->SetName("eff_pt_selected");
1728 aFolderObj->Add(h2c);
1730 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6);
1731 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6);
1732 h1 = fMCPrimTrackHist1[1]->Projection(0);
1733 h2 = fMCPrimTrackHist1[2]->Projection(0);
1734 h2c = (TH1D *)h2->Clone();
1736 h2c->SetName("eff_pt_all");
1737 aFolderObj->Add(h2c);
1739 fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins());
1740 fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins());
1743 // - rec, primaries, secondaries
1744 // - primaries (pid)
1745 // - secondaries (pid)
1746 // - secondaries (mech)
1747 // - secondaries (mother)
1750 TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0);
1751 mcPtAccall->SetName("mc_pt_acc_all");
1752 aFolderObj->Add(mcPtAccall);
1754 TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0);
1755 mcPtAccprim->SetName("mc_pt_acc_prim");
1756 aFolderObj->Add(mcPtAccprim);
1758 TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0);
1759 mcPtRecall->SetName("mc_pt_rec_all");
1760 aFolderObj->Add(mcPtRecall);
1762 TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0);
1763 mcPtRecprim->SetName("mc_pt_rec_prim");
1764 aFolderObj->Add(mcPtRecprim);
1766 TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0);
1767 mcPtRecsec->SetName("mc_pt_rec_sec");
1768 aFolderObj->Add(mcPtRecsec);
1770 for(Int_t i = 0; i<6; i++)
1772 sprintf(name,"mc_pt_rec_prim_pid_%d",i);
1773 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
1774 h = fMCPrimTrackHist1[2]->Projection(0);
1778 sprintf(name,"mc_pt_rec_sec_pid_%d",i);
1779 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
1780 h = fMCSecTrackHist1[2]->Projection(0);
1784 // production mechanisms for given pid
1785 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
1787 for(Int_t j=0; j<20; j++) {
1791 sprintf(name,"mc_pt_rec_sec_pid_%d_decay",i);
1792 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1793 h = fMCSecTrackHist1[2]->Projection(0);
1797 sprintf(name,"mc_eta_rec_sec_pid_%d_decay",i);
1798 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1799 h = fMCSecTrackHist1[2]->Projection(1);
1803 sprintf(name,"mc_mother_rec_sec_pid_%d_decay",i);
1804 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1805 h = fMCSecTrackHist1[2]->Projection(4);
1809 } else if (j == 5) {
1812 sprintf(name,"mc_pt_rec_sec_pid_%d_conv",i);
1813 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1814 h = fMCSecTrackHist1[2]->Projection(0);
1818 sprintf(name,"mc_eta_rec_sec_pid_%d_conv",i);
1819 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1820 h = fMCSecTrackHist1[2]->Projection(1);
1824 sprintf(name,"mc_mother_rec_sec_pid_%d_conv",i);
1825 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1826 h = fMCSecTrackHist1[2]->Projection(4);
1830 } else if (j == 13) {
1833 sprintf(name,"mc_pt_rec_sec_pid_%d_mat",i);
1834 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1835 h = fMCSecTrackHist1[2]->Projection(0);
1839 sprintf(name,"mc_eta_rec_sec_pid_%d_mat",i);
1840 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1841 h = fMCSecTrackHist1[2]->Projection(1);
1845 sprintf(name,"mc_eta_mother_rec_sec_pid_%d_mat",i);
1846 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1847 h = fMCSecTrackHist1[2]->Projection(4,1);
1851 sprintf(name,"mc_mother_rec_sec_pid_%d_mat",i);
1852 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1853 h = fMCSecTrackHist1[2]->Projection(4);
1857 sprintf(name,"mc_pt_mother_rec_sec_pid_%d_mat",i);
1858 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
1859 h = fMCSecTrackHist1[2]->Projection(4,0);
1869 } // end fHistogramOn
1872 // resolution histograms
1873 // only for reconstructed tracks
1877 TCanvas * c = new TCanvas("resol","resol");
1881 fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79);
1883 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
1884 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
1885 h->SetXTitle("p_{tmc} (GeV/c)");
1886 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
1888 h->SetName("pt_resolution_vs_mcpt");
1891 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
1892 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
1893 h->SetXTitle("p_{tmc} (GeV/c)");
1894 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
1896 h->SetName("dpt_mean_vs_mcpt");
1900 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
1901 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
1902 h->SetXTitle("p_{tmc} (GeV/c)");
1903 h->SetYTitle("(#eta-#eta_{mc}) resolution");
1905 h->SetName("eta_resolution_vs_mcpt");
1908 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
1909 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
1910 h->SetXTitle("p_{tmc} (GeV/c)");
1911 h->SetYTitle("(#eta-mc#eta) mean");
1913 h->SetName("deta_mean_vs_mcpt");
1917 fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins());
1919 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
1920 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
1921 h->SetXTitle("#eta_{mc}");
1922 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
1924 h->SetName("pt_resolution_vs_mceta");
1927 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
1928 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
1929 h->SetXTitle("#eta_{mc}");
1930 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
1932 h->SetName("dpt_mean_vs_mceta");
1936 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
1937 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
1938 h->SetXTitle("#eta_{mc}");
1939 h->SetYTitle("(#eta-#eta_{mc}) resolution");
1941 h->SetName("eta_resolution_vs_mceta");
1944 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
1945 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
1946 h->SetXTitle("#eta_{mc}");
1947 h->SetYTitle("(#eta-mc#eta) mean");
1949 h->SetName("deta_mean_vs_mceta");
1952 fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins());
1954 } // end use MC info
1956 // export objects to analysis folder
1957 fAnalysisFolder = ExportToFolder(aFolderObj);
1959 // delete only TObjArray
1960 if(aFolderObj) delete aFolderObj;
1963 //_____________________________________________________________________________
1964 TFolder* AlidNdPtAnalysisPbPb::ExportToFolder(TObjArray * const array)
1966 // recreate folder avery time and export objects to new one
1968 AlidNdPtAnalysisPbPb * comp=this;
1969 TFolder *folder = comp->GetAnalysisFolder();
1971 TString name, title;
1972 TFolder *newFolder = 0;
1974 Int_t size = array->GetSize();
1977 // get name and title from old folder
1978 name = folder->GetName();
1979 title = folder->GetTitle();
1985 newFolder = CreateFolder(name.Data(),title.Data());
1986 newFolder->SetOwner();
1988 // add objects to folder
1990 newFolder->Add(array->At(i));
1998 //_____________________________________________________________________________
1999 TFolder* AlidNdPtAnalysisPbPb::CreateFolder(TString name,TString title) {
2000 // create folder for analysed histograms
2002 TFolder *folder = 0;
2003 folder = new TFolder(name.Data(),title.Data());