18 #include <TDatabasePDG.h> 24 #include "AliMCEvent.h" 26 #include "AliVTrack.h" 27 #include "AliVParticle.h" 28 #include "AliAODTrack.h" 29 #include "AliAODEvent.h" 30 #include "AliESDEvent.h" 41 fFillTrackBCHistograms(0), fFillVertexBC0Histograms(0),
42 fFillEtaPhiRegionHistograms(0),
43 fFillTrackMultHistograms(0),
44 fFillTrackDCAHistograms(0),
47 fhNTracks(0), fhSumPtTracks(0),
48 fhPt(0), fhPtNoCut(0),
49 fhPtCutDCA(0), fhPtCutDCABCOK(0),
50 fhPtNotPrimary(), fhPtNotSharedClusterCut(0),
51 fhPhiNeg(0), fhEtaNeg(0),
52 fhPhiPos(0), fhEtaPos(0),
53 fhEtaPhiPos(0), fhEtaPhiNeg(0),
55 fhPtVtxOutBC0(0), fhEtaPhiVtxOutBC0(0),
56 fhPtVtxInBC0(0), fhEtaPhiVtxInBC0(0),
57 fhPtSPDRefit(0), fhPtNoSPDRefit(0), fhPtNoSPDNoRefit(0),
58 fhEtaPhiSPDRefit(0), fhEtaPhiNoSPDRefit(0), fhEtaPhiNoSPDNoRefit(0),
59 fhEtaPhiSPDRefitPt02(0), fhEtaPhiNoSPDRefitPt02(0), fhEtaPhiNoSPDNoRefitPt02(0),
60 fhEtaPhiSPDRefitPt3(0), fhEtaPhiNoSPDRefitPt3(0), fhEtaPhiNoSPDNoRefitPt3(0),
62 fhTOFSignal(0), fhTOFSignalPtCut(0), fhTOFSignalBCOK(0),
63 fhPtTOFSignal(0), fhPtTOFSignalDCACut(0),
64 fhPtTOFSignalVtxOutBC0(0), fhPtTOFSignalVtxInBC0(0),
65 fhPtTOFStatus0(0), fhEtaPhiTOFStatus0(0),
66 fhEtaPhiTOFBC0(0), fhEtaPhiTOFBCPlus(0), fhEtaPhiTOFBCMinus(0),
67 fhEtaPhiTOFBC0PileUpSPD(0),
68 fhEtaPhiTOFBCPlusPileUpSPD(0),
69 fhEtaPhiTOFBCMinusPileUpSPD(0),
70 fhProductionVertexBC(0),
71 fhPtNPileUpSPDVtx(0), fhPtNPileUpTrkVtx(0),
72 fhPtNPileUpSPDVtxBC0(0), fhPtNPileUpTrkVtxBC0(0)
74 for(
Int_t i = 0; i < 7; i++)
83 for(
Int_t i = 0; i < 3; i++)
108 for(
Int_t i = 0; i < 18; i++)
110 for(
Int_t j = 0; j < 2; j++)
118 for(
Int_t imcPart = 0; imcPart < 6; imcPart++)
128 for(
Int_t icut = 0; icut < 10; icut++)
143 if ( !
GetMC() )
return;
148 AliVParticle * primary = 0;
150 for(
Int_t i=0 ; i < nprim; i++)
152 if ( !
GetReader()->AcceptParticleMCLabel( i ) ) continue ;
154 primary =
GetMC()->GetTrack(i) ;
157 AliWarning(
"Primaries pointer not available!!");
161 if( primary->MCStatusCode() != 1 )
continue;
165 if(TMath::Abs(primary->Charge()) == 0 )
continue;
167 pdg = TMath::Abs(primary->PdgCode());
170 if ( primary->E() == TMath::Abs(primary->Pz()) ||
171 (primary->E() - primary->Pz()) < 1e-3 ||
172 (primary->E() + primary->Pz()) < 0 ) continue ;
178 if (pdg==211 ) mcType =
kmcPion;
180 else if(pdg==321 ) mcType =
kmcKaon;
182 else if(pdg==13 ) mcType =
kmcMuon;
189 if(phiPrim < 0) phiPrim+=TMath::TwoPi();
208 outputContainer->SetName(
"ChargedParticleHistos") ;
229 Form(
"Number of tracks per event with |#eta|<%2.2f",
GetReader()->GetTrackMultiplicityEtaCut()),
230 nmultbin,multmin,multmax, nptcuts,0,nptcuts);
232 fhNTracks->SetYTitle(
"#it{p}_{min, T} GeV/#it{c}");
233 for(
Int_t icut = 0; icut<nptcuts; icut++)
234 fhNTracks->GetYaxis()->SetBinLabel(icut+1 ,Form(
"%2.2f",
GetReader()->GetTrackMultiplicityPtCut(icut)));
239 Form(
"#Sigma #it{p}_{T} per event with |#eta|<%2.2f",
GetReader()->GetTrackMultiplicityEtaCut()),
240 nsumbin,summin,summax, nptcuts,0,nptcuts);
243 for(
Int_t icut = 0; icut<nptcuts; icut++)
244 fhSumPtTracks->GetYaxis()->SetBinLabel(icut+1 ,Form(
"%2.2f",
GetReader()->GetTrackMultiplicityPtCut(icut)));
249 for(
Int_t icut = 0; icut < nptcuts; icut++)
252 (Form(
"hPtTrackNTracks_PtCut%d",icut),
253 Form(
"Number of tracks per event with |#eta|<%2.2f and #it{p}_{T} > %2.2f GeV/#it{c}",
254 GetReader()->GetTrackMultiplicityEtaCut(),
GetReader()->GetTrackMultiplicityPtCut(icut)),
255 nptbins,ptmin,ptmax, nmultbin,multmin,multmax);
261 (Form(
"hPtTrackSumPtTracks_PtCut%d",icut),
262 Form(
"#Sigma #it{p}_{T} per event with |#eta|<%2.2f and #it{p}_{T} > %2.2f GeV/#it{c}",
263 GetReader()->GetTrackMultiplicityEtaCut(),
GetReader()->GetTrackMultiplicityPtCut(icut)),
264 nptbins,ptmin,ptmax, nsumbin,summin,summax);
271 fhPt =
new TH1F (
"hPt",
"#it{p}_{T} distribution", nptbins,ptmin,ptmax);
272 fhPt->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
273 outputContainer->Add(
fhPt);
277 for(
Int_t i = 0; i < 18; i++)
279 for(
Int_t j = 0; j < 2; j++)
282 (Form(
"hPt_Sector%d_Side%d",i,j),
283 Form(
"#it{p}_{T} distribution per region (%d,%d)",i,j),
284 nptbins,ptmin,ptmax);
289 (Form(
"hSumPt_Sector%d_Side%d",i,j),
290 Form(
"#Sigma #it{p}_{T} distribution per region (%d,%d)",i,j),
291 nptbins,ptmin,ptmax);
298 fhPtNoCut =
new TH1F (
"hPtNoCut",
"#it{p}_{T} distribution, raw tracks", nptbins,ptmin,ptmax);
299 fhPtNoCut->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
306 fhPtCutDCA =
new TH1F (
"hPtCutDCA",
"#it{p}_{T} distribution, cut DCA", nptbins,ptmin,ptmax);
307 fhPtCutDCA->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
313 fhPtCutDCABCOK =
new TH1F (
"hPtCutDCABCOK",
"#it{p}_{T} distribution, DCA cut, track BC=0 or -100", nptbins,ptmin,ptmax);
321 fhPtNotPrimary =
new TH1F (
"hPtNotPrimary",
"#it{p}_{T} distribution, not primary", nptbins,ptmin,ptmax);
325 fhPtNotSharedClusterCut =
new TH1F (
"hPtNotSharedClusterCut",
"#it{p}_{T} distribution, shared clusters cut out", nptbins,ptmin,ptmax);
330 fhPhiNeg =
new TH2F (
"hPhiNegative",
"#varphi of negative charges distribution",
331 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
332 fhPhiNeg->SetYTitle(
"#varphi (rad)");
333 fhPhiNeg->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
336 fhEtaNeg =
new TH2F (
"hEtaNegative",
"#eta of negative charges distribution",
337 nptbins,ptmin,ptmax, netabins,etamin,etamax);
339 fhEtaNeg->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
342 fhPhiPos =
new TH2F (
"hPhiPositive",
"#varphi of positive charges distribution",
343 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
344 fhPhiPos->SetYTitle(
"#varphi (rad)");
345 fhPhiPos->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
348 fhEtaPos =
new TH2F (
"hEtaPositive",
"#eta of positive charges distribution",
349 nptbins,ptmin,ptmax, netabins,etamin,etamax);
351 fhEtaPos->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
354 fhEtaPhiPos =
new TH2F (
"hEtaPhiPositive",
"#eta vs #varphi of positive charge",netabins,etamin,etamax, nphibins,phimin,phimax);
359 fhEtaPhiNeg =
new TH2F (
"hEtaPhiNegative",
"#eta vs #varphi of negative charge",netabins,etamin,etamax, nphibins,phimin,phimax);
366 fhTrackResolution =
new TH2F (
"hTrackResolution",
"Track resolution: #sigma_{#it{p}_{T}} vs #it{p}_{T}, ESDs",
367 nptbins,ptmin,ptmax,600,0,0.3);
375 fhPtVtxOutBC0 =
new TH1F (
"hPtVtxOutBC0",
"#it{p}_{T} distribution, vertex in BC=0", nptbins,ptmin,ptmax);
379 fhEtaPhiVtxOutBC0 =
new TH2F (
"hEtaPhiVtxOutBC0",
"#eta vs #varphi of all charges with vertex in BC=0",netabins,etamin,etamax, nphibins,phimin,phimax);
384 fhPtVtxInBC0 =
new TH1F (
"hPtVtxInBC0",
"#it{p}_{T} distribution, vertex in BC=0", nptbins,ptmin,ptmax);
388 fhEtaPhiVtxInBC0 =
new TH2F (
"hEtaPhiVtxInBC0",
"#eta vs #varphi of all charges with vertex in BC=0",netabins,etamin,etamax, nphibins,phimin,phimax);
394 fhPtSPDRefit =
new TH1F (
"hPtSPDRefit",
"#it{p}_{T} distribution of tracks with SPD and ITS refit", nptbins,ptmin,ptmax);
398 fhEtaPhiSPDRefitPt02 =
new TH2F (
"hEtaPhiSPDRefitPt02",
"#eta vs #varphi of tracks with SPD and ITS refit, #it{p}_{T}< 2 GeV/#it{c}",
399 netabins,etamin,etamax, nphibins,phimin,phimax);
404 fhEtaPhiSPDRefit=
new TH2F (
"hEtaPhiSPDRefit",
"#eta vs #varphi of tracks with SPD and ITS refit",
405 netabins,etamin,etamax, nphibins,phimin,phimax);
410 fhEtaPhiSPDRefitPt3 =
new TH2F (
"hEtaPhiSPDRefitPt3",
"#eta vs #varphi of tracks with SPD and ITS refit, #it{p}_{T}> 3 GeV/#it{c}",
411 netabins,etamin,etamax, nphibins,phimin,phimax);
416 fhPtNoSPDRefit =
new TH1F (
"hPtNoSPDRefit",
"#it{p}_{T} distribution of constrained tracks no SPD and with ITSRefit",
417 nptbins,ptmin,ptmax);
421 fhEtaPhiNoSPDRefit =
new TH2F (
"hEtaPhiNoSPDRefit",
"#eta vs #varphi of constrained tracks no SPD and with ITSRefit",
422 netabins,etamin,etamax, nphibins,phimin,phimax);
427 fhEtaPhiNoSPDRefitPt02 =
new TH2F (
"hEtaPhiNoSPDRefitPt02",
"#eta vs #varphi of constrained tracks no SPD and with ITSRefit, #it{p}_{T}< 2 GeV/#it{c}",
428 netabins,etamin,etamax, nphibins,phimin,phimax);
433 fhEtaPhiNoSPDRefitPt3 =
new TH2F (
"hEtaPhiNoSPDRefitPt3",
"#eta vs #varphi of of constrained tracks no SPD and with ITSRefit, #it{p}_{T}> 3 GeV/#it{c}",
434 netabins,etamin,etamax, nphibins,phimin,phimax);
439 fhPtNoSPDNoRefit =
new TH1F (
"hPtNoSPDNoRefit",
"#it{p}_{T} distribution of constrained tracks with no SPD requierement and without ITSRefit",
440 nptbins,ptmin,ptmax);
445 "#eta vs #varphi of constrained tracks with no SPD requierement and without ITSRefit",
446 netabins,etamin,etamax, nphibins,phimin,phimax);
452 "#eta vs #varphi of constrained tracks with no SPD requierement and without ITSRefit, #it{p}_{T}< 2 GeV/#it{c}",
453 netabins,etamin,etamax, nphibins,phimin,phimax);
459 "#eta vs #varphi of constrained tracks with no SPD requierement and without ITSRefit, #it{p}_{T}> 3 GeV/#it{c}",
460 netabins,etamin,etamax, nphibins,phimin,phimax);
467 fhProductionVertexBC =
new TH1F(
"hProductionVertexBC",
"tracks production vertex bunch crossing ", 41 , -20 , 20 ) ;
473 fhTOFSignal =
new TH1F (
"hTOFSignal",
"TOF signal", ntofbins,mintof,maxtof);
479 fhTOFSignalBCOK =
new TH1F (
"hTOFSignalBCOK",
"TOF signal", ntofbins,mintof,maxtof);
484 fhTOFSignalPtCut =
new TH1F (
"hTOFSignalPtCut",
"TOF signal", ntofbins,mintof,maxtof);
488 fhPtTOFSignal =
new TH2F (
"hPtTOFSignal",
"TOF signal", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
495 fhPtTOFSignalDCACut =
new TH2F (
"hPtTOFSignalDCACut",
"TOF signal after DCA cut", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
503 fhPtTOFSignalVtxOutBC0 =
new TH2F (
"hPtTOFSignalVtxOutBC0",
"TOF signal, vtx BC!=0", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
508 fhPtTOFSignalVtxInBC0 =
new TH2F (
"hPtTOFSignalVtxInBC0",
"TOF signal, vtx BC=0", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
516 TString pileUpName[] = {
"SPD",
"EMCAL",
"SPDOrEMCAL",
"SPDAndEMCAL",
"SPDAndNotEMCAL",
"EMCALAndNotSPD",
"NotSPDAndNotEMCAL"} ;
518 for(
Int_t i = 0 ; i < 7 ; i++)
520 fhPtPileUp[i] =
new TH1F(Form(
"hPtPileUp%s",pileUpName[i].
Data()),
521 Form(
"Track #it{p}_{T}distribution, %s Pile-Up event",pileUpName[i].
Data()),
522 nptbins,ptmin,ptmax);
523 fhPtPileUp[i]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
527 Form(
"Track TOF vs #it{p}_{T}distribution, %s Pile-Up event",pileUpName[i].
Data()),
528 nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
536 Form(
"Track TOF vs #it{p}_{T}distribution, %s Pile-Up event, vtx BC!=0",pileUpName[i].
Data()),
537 nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
543 Form(
"Track TOF vs #it{p}_{T}distribution, %s Pile-Up event, vtx BC=0",pileUpName[i].
Data()),
544 nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
553 Form(
"tracks production vertex bunch crossing, %s Pile-Up event",pileUpName[i].
Data()),
563 fhEtaPhiTOFBC0 =
new TH2F (
"hEtaPhiTOFBC0",
"#eta vs #varphi for tracks with hit on TOF, and tof corresponding to BC=0",netabins,etamin,etamax, nphibins,phimin,phimax);
568 fhEtaPhiTOFBCPlus =
new TH2F (
"hEtaPhiTOFBCPlus",
"#eta vs #varphi for tracks with hit on TOF, and tof corresponding to BC>0",netabins,etamin,etamax, nphibins,phimin,phimax);
573 fhEtaPhiTOFBCMinus =
new TH2F (
"hEtaPhiTOFBCMinus",
"#eta vs #varphi for tracks with hit on TOF, and tof corresponding to BC<0",netabins,etamin,etamax, nphibins,phimin,phimax);
580 fhEtaPhiTOFBC0PileUpSPD =
new TH2F (
"hEtaPhiTOFBC0PileUpSPD",
"#eta vs #varphi for tracks with hit on TOF, and tof corresponding to BC=0, SPD pile-up",netabins,etamin,etamax, nphibins,phimin,phimax);
585 fhEtaPhiTOFBCPlusPileUpSPD =
new TH2F (
"hEtaPhiTOFBCPlusPileUpSPD",
"#eta vs #varphi for tracks with hit on TOF, and tof corresponding to BC>0, SPD pile-up",netabins,etamin,etamax, nphibins,phimin,phimax);
590 fhEtaPhiTOFBCMinusPileUpSPD =
new TH2F (
"hEtaPhiTOFBCMinusPileUpSPD",
"#eta vs #varphi for tracks with hit on TOF, and tof corresponding to BC<0, SPD pile-up",netabins,etamin,etamax, nphibins,phimin,phimax);
598 fhPtTOFStatus0 =
new TH1F (
"hPtTOFStatus0",
"#it{p}_{T} distribution of tracks not hitting TOF", nptbins,ptmin,ptmax);
602 fhEtaPhiTOFStatus0 =
new TH2F (
"hEtaPhiTOFStatus0",
"#eta vs #varphi for tracks without hit on TOF",netabins,etamin,etamax, nphibins,phimin,phimax);
607 TString dcaName[] = {
"xy",
"z",
"Cons"} ;
608 Int_t ndcabins = 800;
614 for(
Int_t i = 0 ; i < 3 ; i++)
617 Form(
"Track DCA%s vs #it{p}_{T}distribution",dcaName[i].
Data()),
618 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
619 fhPtDCA[i]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
620 fhPtDCA[i]->SetYTitle(Form(
"DCA_{%s}",dcaName[i].
Data()));
621 outputContainer->Add(
fhPtDCA[i]);
624 Form(
"Track DCA%s vs #it{p}_{T}distribution of tracks with SPD and ITS refit",dcaName[i].
Data()),
625 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
631 Form(
"Track DCA%s vs #it{p}_{T}distributionof constrained tracks no SPD and with ITSRefit",dcaName[i].
Data()),
632 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
638 Form(
"Track DCA%s vs #it{p}_{T}distribution, constrained tracks with no SPD requierement and without ITSRefit",dcaName[i].
Data()),
639 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
647 Form(
"Track DCA%s vs #it{p}_{T}distribution, BC=0",dcaName[i].
Data()),
648 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
654 Form(
"Track DCA%s vs #it{p}_{T}distribution, BC!=0",dcaName[i].
Data()),
655 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
662 Form(
"Track (no TOF hit) DCA%s vs #it{p}_{T}distribution",dcaName[i].
Data()),
663 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
671 Form(
"Track DCA%s vs #it{p}_{T}distribution, vertex with BC!=0",dcaName[i].
Data()),
672 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
678 Form(
"Track (no TOF hit) DCA%s vs #it{p}_{T}distribution, vertex with BC!=0",dcaName[i].
Data()),
679 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
685 Form(
"Track DCA%s vs #it{p}_{T}distribution, vertex with BC==0",dcaName[i].
Data()),
686 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
692 Form(
"Track (no TOF hit) DCA%s vs #it{p}_{T}distribution, vertex with BC==0",dcaName[i].
Data()),
693 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
702 Form(
"Track DCA%s vs #it{p}_{T}distribution, SPD Pile-Up",dcaName[i].
Data()),
703 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
711 Form(
"Track DCA%s vs #it{p}_{T}distribution",dcaName[i].
Data()),
712 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
719 Form(
"Track (no TOF hit) DCA%s vs #it{p}_{T}distribution, SPD Pile-Up, vertex with BC!=0",dcaName[i].
Data()),
720 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
728 Form(
"Track DCA%s vs #it{p}_{T}distribution, SPD Pile-Up, vertex with BC!=0",dcaName[i].
Data()),
729 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
735 Form(
"Track (no TOF hit) DCA%s vs #it{p}_{T}distribution, SPD Pile-Up, vertex with BC!=0",dcaName[i].
Data()),
736 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
742 Form(
"Track DCA%s vs #it{p}_{T}distribution, SPD Pile-Up,vertex with BC==0",dcaName[i].
Data()),
743 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
749 Form(
"Track (no TOF hit) DCA%s vs #it{p}_{T}distribution, SPD Pile-Up, vertex with BC==0",dcaName[i].
Data()),
750 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
763 TString histoName[] = {
"Pion",
"Proton",
"Kaon",
"Muon",
"Electron",
"Unknown"};
764 TString titleName[] = {
"#pi^{#pm}",
"p^{#pm}",
"K^{#pm}",
"#mu^{#pm}",
"e^{#pm}",
"x^{#pm}"};
766 for(
Int_t imcPart = 0; imcPart < 6; imcPart++)
768 fhPtMCPart[imcPart] =
new TH1F (Form(
"hPtMC%s",histoName[imcPart].
Data()),
769 Form(
"reconstructed #it{p}_{T} distribution from %s",titleName[imcPart].
Data()),
770 nptbins,ptmin,ptmax);
771 fhPtMCPart[imcPart]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
775 Form(
"reconstructed #varphi vs #it{p}_{T} distribution from %s",titleName[imcPart].
Data()),
776 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
778 fhPhiMCPart[imcPart]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
782 Form(
"reconstructed #eta vs #it{p}_{T} distribution from %s",titleName[imcPart].
Data()),
783 nptbins,ptmin,ptmax, netabins,etamin,etamax);
785 fhEtaMCPart[imcPart]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
789 Form(
"generated #it{p}_{T} distribution from %s",titleName[imcPart].
Data()),
790 nptbins,ptmin,ptmax);
795 Form(
"generated #varphi vs #it{p}_{T} distribution from %s",titleName[imcPart].
Data()),
796 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
802 Form(
"generated #eta vs #it{p}_{T} distribution from %s",titleName[imcPart].
Data()),
803 nptbins,ptmin,ptmax, netabins,etamin,etamax);
811 nptbins,ptmin,ptmax,20,0,20);
816 fhPtNPileUpTrkVtx =
new TH2F (
"hPt_NPileUpVertTracks",
"#it{p}_{T} of track vs N pile-up Tracks vertex",
817 nptbins,ptmin,ptmax, 20,0,20 );
825 nptbins,ptmin,ptmax,20,0,20);
831 nptbins,ptmin,ptmax, 20,0,20 );
837 return outputContainer;
859 printf(
"**** Print %s %s ****\n", GetName(), GetTitle() ) ;
862 printf(
"Min Pt = %3.2f\n",
GetMinPt());
863 printf(
"Max Pt = %3.2f\n",
GetMaxPt());
872 AliFatal(
"STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!");
886 AliDebug(1,Form(
"In CTS aod entries %d", ntracks));
917 nVtxSPD = esdEv->GetNumberOfPileupVerticesSPD();
918 nVtxTrk = esdEv->GetNumberOfPileupVerticesTracks();
922 nVtxSPD = aodEv->GetNumberOfPileupVerticesSPD();
923 nVtxTrk = aodEv->GetNumberOfPileupVerticesTracks();
935 for(
Int_t i = 0; i < ntracks; i++)
937 AliVTrack * track = (AliVTrack*) (
GetCTSTracks()->At(i));
948 AliAODTrack * aodTrack =
dynamic_cast<AliAODTrack*
>(track);
949 AliESDtrack * esdTrack =
dynamic_cast<AliESDtrack*
>(track);
968 ULong_t status = track->GetStatus();
969 Bool_t okTOF = (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ;
970 Double32_t tof = track->GetTOFsignal()*1e-3;
972 Int_t trackBC = 1000;
980 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
988 trackBC = track->GetTOFBunchCrossing(bz);
998 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
1022 dcaCons = aodTrack->DCA();
1026 track->PropagateToDCA(
GetReader()->GetInputEvent()->GetPrimaryVertex(),bz,100.,dca,covar);
1046 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
1083 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
1123 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
1158 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
1212 else if(trackBC!=AliVTrack::kTOFBCNA)
1246 else if (trackBC < 0 )
1252 else if (trackBC > 0)
1262 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
1287 fMomentum.SetPxPyPzE(track->Px(),track->Py(),track->Pz(),0);
1290 AliDebug(1,Form(
"Track pt %2.2f, eta %2.2f, phi %2.2f in fiducial cut %d",pt,eta,phi,in));
1305 Bool_t bITSRefit = (status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit;
1306 Bool_t bConstrained = kFALSE;
1307 if (aodTrack) bConstrained = aodTrack->IsGlobalConstrained();
1308 else if(esdTrack) bConstrained = (!esdTrack->HasPointOnITSLayer(0) && !esdTrack->HasPointOnITSLayer(1));
1388 AliDebug(1,Form(
"Final aod branch entries %d",
GetOutputAODBranch()->GetEntriesFast()));
1409 AliDebug(1,Form(
"AOD branch entries %d", naod));
1416 for(
Int_t i = 0; i < 18; i++)
1417 for(
Int_t j = 0; j < 2; j++)
1420 for(
Int_t iaod = 0; iaod < naod ; iaod++)
1440 if ( pt >
GetReader()->GetTrackMultiplicityPtCut(icut) ) shift = 0;
1454 sum[sector][side]+=pt;
1489 AliVParticle * mom =
GetMC()->GetTrack(label);
1490 mompdg =TMath::Abs(mom->PdgCode());
1494 if (mompdg==211 ) mcType =
kmcPion;
1495 else if(mompdg==2212) mcType =
kmcProton;
1496 else if(mompdg==321 ) mcType =
kmcKaon;
1498 else if(mompdg==13 ) mcType =
kmcMuon;
1510 for(
Int_t i = 0; i < 18; i++)
1512 for(
Int_t j = 0; j < 2; j++)
virtual Bool_t IsFiducialCutOn() const
Float_t GetHistoPtMax() const
virtual Double_t Eta() const
TH2F * fhPtDCAVtxInBC0PileUpNoTOFHit[3]
! DCA (xy,z,constrained) of all tracks, vertex BC=0, SPD pile-up, no hit in TOF
virtual Double_t Pt() const
Float_t GetHistoPtMin() const
TH2F * fhEtaPhiSPDRefit
! eta-phi distribution of tracks with SPD and ITS refit
virtual TObjArray * GetCTSTracks() const
virtual Float_t GetMaxPt() const
TH2F * fhPtDCANoTOFHit[3]
! DCA (xy,z,constrained) of all tracks, no hit in TOF
TH2F * fhPtDCAPileUpNoTOFHit[3]
! DCA (xy,z,constrained) of all tracks, SPD pile-up, no hit in TOF
TH2F * fhPtDCATOFBCOut[3]
! DCA (xy,z,constrained) of all tracks, hit in TOF and BC!=0
virtual Int_t GetTrackMultiplicity() const
Bool_t fFillTrackBCHistograms
Fill histograms for tracks with TOF BC=0 or not related histograms.
TH2F * fhPtTOFSignalVtxInBC0
! TOF signal vs track pT, good status
Int_t GetTrackSector(Float_t trackPhi) const
TH1F * fhPtNotSharedClusterCut
! pT spectra of tracks not passing the shared clusters cut (AOD)
virtual void AddAODParticle(AliCaloTrackParticle part)
virtual void AddToHistogramsName(TString add)
Bool_t GetTrackSide(Float_t trackEta) const
TH2F * fhPtTOFSignalVtxInBC0PileUp[7]
! TOF signal vs track pT, good status, pile-up
TH1F * fhTOFSignalPtCut
! TOF signal pt and acceptance cut
TH2F * fhEtaPhiNoSPDNoRefit
! eta-phi distribution of constrained tracks with no SPD requierement and without ITSRefit ...
TH2F * fhPtDCAVtxOutBC0PileUp[3]
! DCA (xy,z,constrained) of all tracks, vertex BC!=0, SPD pile-up
TH2F * fhPtDCAVtxOutBC0NoTOFHit[3]
! DCA (xy,z,constrained) of all tracks, vertex BC!=0, no hit in TOF
virtual Bool_t IsDataMC() const
TH2F * fhPtTrackSumPtTracks[10]
! Track sum pT distribution per event vs track pT, different pT cuts
TH2F * fhPtTOFSignalPileUp[7]
! TOF signal vs track pT, good status, pile-up
virtual void GetVertex(Double_t vertex[3]) const
Int_t GetHistoTrackMultiplicityMax() const
TH2F * fhPtTOFSignalDCACut
! TOF signal vs track pT, good status
TH2F * fhPtNPileUpSPDVtx
! cluster pt vs number of spd pile-up vertices
virtual Int_t GetLabel() const
Int_t GetVertexBC(const AliVVertex *vtx)
virtual AliVEvent * GetInputEvent() const
TH1F * fhProductionVertexBCPileUp[7]
! Check BC of production vertex, pile-up
TH2F * fhEtaPhiNoSPDRefitPt3
! eta-phi distribution of constrained tracks no SPD and with ITSRefit, pT > 3 GeV ...
TH2F * fhEtaPhiTOFBCMinusPileUpSPD
! eta/phi of tracks passing TOF status selection, tracks in BC<0, pile-up spd
TH2F * fhPhiMCPart[6]
! phi distribution vs pT, 6 hadron ID
virtual Float_t GetZvertexCut() const
Maximal number of events for mixin.
TH2F * fhEtaPhiPos
! eta vs phi distribution of positive charge
void MakeAnalysisFillAOD()
TH2F * fhEtaPhiNoSPDRefitPt02
! eta-phi distribution of constrained tracks no SPD and with ITSRefit, 0 < pT < 2 GeV ...
void FillPrimaryHistograms()
Fill primary generated particles histograms if MC data is available.
TH2F * fhPtTOFSignalVtxOutBC0PileUp[7]
! TOF signal vs track pT, good status, pile-up
virtual Bool_t IsPileUpAnalysisOn() const
Bool_t fFillTrackMultHistograms
Fill track pT spectrum histograms vs track multiplicity or track sum pt.
virtual void SetOutputAODClassName(TString name)
TH2F * fhSumPtTracks
! Track sum pT distribution per event, different pT cuts
TH2F * fhEtaMCPrimPart[6]
! Number of generated charged hadrons vs eta coming from MC particle, 6 hadron ID ...
TH2F * fhEtaPhiTOFStatus0
! eta/phi of tracks not passing TOF status selection
Int_t GetHistoPhiBins() const
TH2F * fhEtaPhiNeg
! eta vs phi distribution of negative charge
TH2F * fhPtDCAVtxInBC0NoTOFHit[3]
! DCA (xy,z,constrained) of all tracks, vertex BC=0, no hit in TOF
TH2F * fhPtDCA[3]
! DCA (xy,z,constrained) of all tracks
Bool_t fFillTrackDCAHistograms
Fill track DCA histograms.
virtual void SetDetectorTag(UInt_t d)
TH2F * fhPtDCAPileUp[3]
! DCA (xy,z,constrained) of all tracks, SPD pile-up
Int_t GetHistoTrackMultiplicityMin() const
TH1F * fhPt
! pT distribution
virtual TClonesArray * GetOutputAODBranch() const
TH2F * fhEtaPhiTOFBC0PileUpSPD
! eta/phi of tracks passing TOF status selection, tracks in BC=0, pile-up spd
TH1F * fhPtPileUp[7]
! pT distribution, pile-up defined events
TH2F * fhPtTOFSignalVtxOutBC0
! TOF signal vs track pT, good status
Float_t GetHistoPhiMin() const
TH2F * fhPhiNeg
! phi distribution vs pT, negative
void MakeAnalysisFillHistograms()
Fill histograms for the selected tracks.
virtual void SetOutputAODName(TString name)
TH1F * fhPtNoSPDRefit
! pT distribution of constrained tracks no SPD and with ITSRefit
TH2F * fhEtaPhiTOFBCPlusPileUpSPD
! eta/phi of tracks passing TOF status selection, tracks in BC>0, pile-up spd
Base class for CaloTrackCorr analysis algorithms.
void Init()
Init. Check that tracks are read, if not abort.
virtual Bool_t GetChargedBit() const
virtual AliFiducialCut * GetFiducialCut()
Container for input particle information on CaloTrackCorr package.
TH1F * fhPtNotPrimary
! pT spectra of tracks not declared as primary (AOD)
TH1F * fhPtVtxInBC0
! pT distribution of tracks from a vertex with BC=0
TH2F * fhPtNPileUpTrkVtx
! cluster pt vs number of track pile-up vertices
virtual AliHistogramRanges * GetHistogramRanges()
TH2F * fhEtaNeg
! eta distribution vs pT, negative
TH2F * fhPtDCAVtxOutBC0PileUpNoTOFHit[3]
! DCA (xy,z,constrained) of all tracks, vertex BC!=0, SPD pile-up, no hit in TOF
TH2F * fhEtaPhiSPDRefitPt3
! eta-phi distribution of tracks with SPD and ITS refit, pT > 3 GeV
TH1F * fhPtTOFStatus0
! pT of tracks not passing TOF status selection
Bool_t IsInFiducialCut(Float_t eta, Float_t phi, Int_t det) const
virtual void SetTrackLabel(Int_t a, Int_t b)
TH2F * fhEtaPhiNoSPDNoRefitPt3
! eta-phi distribution of constrained tracks with no SPD requierement and without ITSRefit...
TH1F * fhSumPtPerRegion[18][2]
! pT distribution in TPC regions
void Print(const Option_t *opt) const
Print some relevant parameters set for the analysis.
TH2F * fhEtaPhiTOFBC0
! eta/phi of tracks passing TOF status selection, tracks in BC=0
TH2F * fhPhiMCPrimPart[6]
! Number of generated charged hadrons vs phi coming from MC particle, 6 hadron ID ...
TH1F * fhPtVtxOutBC0
! pT distribution of tracks from a vertex with BC!=0
Int_t GetHistoNPtSumBins() const
TH2F * fhPtNPileUpSPDVtxBC0
! cluster pt vs number of spd pile-up vertices, track in BC=0
virtual Float_t GetTPCSharedClusterFraction() const
Bool_t fFillEtaPhiRegionHistograms
Fill track pT spectrum histograms in different eta-phi windows.
virtual Double_t GetEventWeight() const
TH2F * fhPtTOFSignal
! TOF signal vs track pT, good status
TH1F * fhProductionVertexBC
! Check BC of production vertex
Int_t GetHistoTrackMultiplicityBins() const
TH2F * fhPtDCAPileUpTOFBC0[3]
! DCA (xy,z,constrained) of all tracks, hit in TOF and BC=0
virtual void SetChargedBit(Bool_t ch)
Float_t GetHistoEtaMin() const
virtual void SetLabel(Int_t l)
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
virtual AliMCEvent * GetMC() const
TH1F * fhTOFSignal
! TOF signal
TH1F * fhPtCutDCA
! pT distribution, Apply DCA cut
Float_t GetHistoPtSumMin() const
TH2F * fhPtDCATOFBC0[3]
! DCA (xy,z,constrained) of all tracks, hit in TOF and BC=0
TH2F * fhNTracks
! Track multiplicity distribution per event, different pT cuts
TH2F * fhEtaMCPart[6]
! eta distribution vs pT, 6 hadron ID
TH1F * fhPtNoSPDNoRefit
! pT distribution of constrained tracks with no SPD requierement and without ITSRefit ...
void InitParameters()
Initialize the parameters of the analysis.
Float_t GetHistoEtaMax() const
Int_t GetHistoPtBins() const
TH1F * fhPtMCPart[6]
! pT distribution, 6 hadron ID
Track selection for correlation analysis.
Bool_t fFillVertexBC0Histograms
Fill histograms for tracks with vertex BC=0 or not related histograms.
TH2F * fhEtaPhiVtxInBC0
! eta/phi distribution of tracks from a vertex with BC=0
TH2F * fhPhiPos
! phi distribution vs pT, positive
TH1F * fhPtMCPrimPart[6]
! Number of generated charged hadrons vs pT coming from MC particle, 6 hadron ID
TH2F * fhEtaPos
! eta distribution vs pT, positive
TH2F * fhPtDCANoSPDRefit[3]
! DCA (xy,z,constrained) of constrained tracks no SPD and with ITSRefit
TH1F * fhPtCutDCABCOK
! pT distribution, Apply DCA cut, BC=0 or -100
virtual Double_t Phi() const
TH2F * fhPtTrackNTracks[10]
! Track multiplicity distribution per event vs track pT, different pT cuts
TH2F * fhPtDCAVtxInBC0[3]
! DCA (xy,z,constrained) of all tracks, vertex BC==0
virtual Float_t GetMinPt() const
TH2F * fhEtaPhiNoSPDNoRefitPt02
! eta-phi distribution of constrained tracks with no SPD requierement and without ITSRefit...
virtual void Print(const Option_t *) const
Print some relevant parameters set for the analysis.
Int_t GetHistoTimeBins() const
TH1F * fhTOFSignalBCOK
! TOF signal pt and acceptance cut
TH2F * fhEtaPhiSPDRefitPt02
! eta-phi distribution of tracks with SPD and ITS refit, 0 < pT < 2 GeV
TH2F * fhPtDCAVtxInBC0PileUp[3]
! DCA (xy,z,constrained) of all tracks, vertex BC==0, SPD pile-up
Float_t GetHistoTimeMax() const
TH2F * fhPtNPileUpTrkVtxBC0
! cluster pt vs number of track pile-up vertices, track in BC=0
Float_t GetHistoTimeMin() const
Float_t GetHistoPhiMax() const
AliAnaChargedParticles()
Default constructor. Initialize parameters with default values.
virtual AliCaloTrackReader * GetReader() const
Int_t GetHistoEtaBins() const
TH2F * fhEtaPhiTOFBCMinus
! eta/phi of tracks passing TOF status selection, tracks in BC<0
TH1F * fhPtSPDRefit
! pT distribution of tracks with SPD and ITS refit
TH2F * fhPtDCASPDRefit[3]
! DCA (xy,z,constrained) of tracks with SPD and ITS refit
TH2F * fhEtaPhiTOFBCPlus
! eta/phi of tracks passing TOF status selection, tracks in BC>0
TH2F * fhEtaPhiVtxOutBC0
! eta/phi distribution of tracks from a vertex with BC!=0
TH2F * fhPtDCAVtxOutBC0[3]
! DCA (xy,z,constrained) of all tracks, vertex BC!=0
TLorentzVector fMomentum
! Temporary momentum container
Float_t GetHistoPtSumMax() const
TH1F * fhPtPerRegion[18][2]
! pT distribution in TPC regions
TH2F * fhPtDCANoSPDNoRefit[3]
! DCA (xy,z,constrained) of constrained tracks with no SPD requierement and without ITSRefit ...
TH2F * fhEtaPhiNoSPDRefit
! eta-phi distribution of constrained tracks no SPD and with ITSRefit
Int_t GetTrackMultiplicityNPtCut() const
TH1F * fhPtNoCut
! pT distribution, no cut
virtual AliMixedEvent * GetMixedEvent() const
TH2F * fhTrackResolution
! track resolution sigma pT vs pT, ESDs
TList * GetCreateOutputObjects()