23 #include "TClonesArray.h"
24 #include "TObjString.h"
25 #include "TDatabasePDG.h"
33 #include "TParticle.h"
34 #include "AliVEvent.h"
35 #include "AliESDCaloCluster.h"
36 #include "AliESDEvent.h"
37 #include "AliAODEvent.h"
39 #include "AliMixedEvent.h"
40 #include "AliAODMCParticle.h"
41 #include "AliMCEvent.h"
44 #include "AliPHOSGeoUtils.h"
45 #include "AliEMCALGeometry.h"
57 fUseAngleCut(kFALSE), fUseAngleEDepCut(kFALSE), fAngleCut(0), fAngleMaxCut(0.),
58 fMultiCutAna(kFALSE), fMultiCutAnaSim(kFALSE), fMultiCutAnaAcc(kFALSE),
59 fNPtCuts(0), fNAsymCuts(0), fNCellNCuts(0), fNPIDBits(0), fNAngleCutBins(0),
60 fMakeInvPtPlots(kFALSE), fSameSM(kFALSE),
61 fFillSMCombinations(kFALSE), fCheckConversion(kFALSE),
62 fFillBadDistHisto(kFALSE), fFillSSCombinations(kFALSE),
63 fFillAngleHisto(kFALSE), fFillAsymmetryHisto(kFALSE), fFillOriginHisto(0),
64 fFillArmenterosThetaStar(0), fFillOnlyMCAcceptanceHisto(0),
65 fFillSecondaryCellTiming(0), fFillOpAngleCutHisto(0), fCheckAccInSector(0),
66 fPairWithOtherDetector(0), fOtherDetectorInputName(
""),
67 fPhotonMom1(), fPhotonMom1Boost(), fPhotonMom2(), fMCPrimMesonMom(),
71 fhReMod(0x0), fhReSameSideEMCALMod(0x0), fhReSameSectorEMCALMod(0x0), fhReDiffPHOSMod(0x0),
72 fhReSameSectorDCALPHOSMod(0),fhReDiffSectorDCALPHOSMod(0),
73 fhMiMod(0x0), fhMiSameSideEMCALMod(0x0), fhMiSameSectorEMCALMod(0x0), fhMiDiffPHOSMod(0x0),
74 fhMiSameSectorDCALPHOSMod(0),fhMiDiffSectorDCALPHOSMod(0),
75 fhReConv(0x0), fhMiConv(0x0), fhReConv2(0x0), fhMiConv2(0x0),
76 fhRe1(0x0), fhMi1(0x0), fhRe2(0x0), fhMi2(0x0),
77 fhRe3(0x0), fhMi3(0x0), fhReInvPt1(0x0), fhMiInvPt1(0x0),
78 fhReInvPt2(0x0), fhMiInvPt2(0x0), fhReInvPt3(0x0), fhMiInvPt3(0x0),
79 fhRePtNCellAsymCuts(0x0), fhMiPtNCellAsymCuts(0x0), fhRePtNCellAsymCutsSM(),
80 fhRePtNCellAsymCutsOpAngle(0x0), fhMiPtNCellAsymCutsOpAngle(0x0),
81 fhRePtAsym(0x0), fhRePtAsymPi0(0x0), fhRePtAsymEta(0x0),
82 fhMiPtAsym(0x0), fhMiPtAsymPi0(0x0), fhMiPtAsymEta(0x0),
83 fhEventBin(0), fhEventMixBin(0),
84 fhCentrality(0x0), fhCentralityNoPair(0x0),
85 fhEventPlaneResolution(0x0),
86 fhRealOpeningAngle(0x0), fhRealCosOpeningAngle(0x0), fhMixedOpeningAngle(0x0), fhMixedCosOpeningAngle(0x0),
88 fhPrimPi0E(0x0), fhPrimPi0Pt(0x0),
89 fhPrimPi0AccE(0x0), fhPrimPi0AccPt(0x0), fhPrimPi0AccPtPhotonCuts(0x0),
90 fhPrimPi0Y(0x0), fhPrimPi0AccY(0x0),
91 fhPrimPi0Yeta(0x0), fhPrimPi0YetaYcut(0x0), fhPrimPi0AccYeta(0x0),
92 fhPrimPi0Phi(0x0), fhPrimPi0AccPhi(0x0),
93 fhPrimPi0OpeningAngle(0x0), fhPrimPi0OpeningAnglePhotonCuts(0x0),
94 fhPrimPi0OpeningAngleAsym(0x0),fhPrimPi0CosOpeningAngle(0x0),
95 fhPrimPi0PtCentrality(0), fhPrimPi0PtEventPlane(0),
96 fhPrimPi0AccPtCentrality(0), fhPrimPi0AccPtEventPlane(0),
97 fhPrimEtaE(0x0), fhPrimEtaPt(0x0),
98 fhPrimEtaAccE(0x0), fhPrimEtaAccPt(0x0), fhPrimEtaAccPtPhotonCuts(0x0),
99 fhPrimEtaY(0x0), fhPrimEtaAccY(0x0),
100 fhPrimEtaYeta(0x0), fhPrimEtaYetaYcut(0x0), fhPrimEtaAccYeta(0x0),
101 fhPrimEtaPhi(0x0), fhPrimEtaAccPhi(0x0),
102 fhPrimEtaOpeningAngle(0x0), fhPrimEtaOpeningAnglePhotonCuts(0x0),
103 fhPrimEtaOpeningAngleAsym(0x0),fhPrimEtaCosOpeningAngle(0x0),
104 fhPrimEtaPtCentrality(0), fhPrimEtaPtEventPlane(0),
105 fhPrimEtaAccPtCentrality(0), fhPrimEtaAccPtEventPlane(0),
106 fhPrimPi0PtOrigin(0x0), fhPrimEtaPtOrigin(0x0),
107 fhPrimNotResonancePi0PtOrigin(0x0), fhPrimPi0PtStatus(0x0),
108 fhMCPi0MassPtRec(0x0), fhMCPi0MassPtTrue(0x0),
109 fhMCPi0PtTruePtRec(0x0), fhMCPi0PtTruePtRecMassCut(0x0),
110 fhMCEtaMassPtRec(0x0), fhMCEtaMassPtTrue(0x0),
111 fhMCEtaPtTruePtRec(0x0), fhMCEtaPtTruePtRecMassCut(0x0),
113 fhMCPi0PtTruePtRecRat(0), fhMCPi0PtTruePtRecDif(0), fhMCPi0PtRecOpenAngle(0),
114 fhMCEtaPtTruePtRecRat(0), fhMCEtaPtTruePtRecDif(0), fhMCEtaPtRecOpenAngle(0),
115 fhMCPi0PtTruePtRecRatMassCut(0), fhMCPi0PtTruePtRecDifMassCut(0), fhMCPi0PtRecOpenAngleMassCut(0),
116 fhMCEtaPtTruePtRecRatMassCut(0), fhMCEtaPtTruePtRecDifMassCut(0), fhMCEtaPtRecOpenAngleMassCut(0),
117 fhMCPi0PtOrigin(0), fhMCEtaPtOrigin(0),
118 fhMCNotResonancePi0PtOrigin(0),fhMCPi0PtStatus(0x0),
119 fhMCPi0ProdVertex(0), fhMCEtaProdVertex(0),
120 fhPrimPi0ProdVertex(0), fhPrimEtaProdVertex(0),
121 fhReMCFromConversion(0), fhReMCFromNotConversion(0), fhReMCFromMixConversion(0),
122 fhCosThStarPrimPi0(0), fhCosThStarPrimEta(0),
124 fhReSecondaryCellInTimeWindow(0), fhMiSecondaryCellInTimeWindow(0),
125 fhReSecondaryCellOutTimeWindow(0), fhMiSecondaryCellOutTimeWindow(0)
130 for(
Int_t i = 0; i < 4; i++)
136 for(
Int_t ism = 0; ism < 20; ism++)
142 for(
Int_t icut = 0; icut < 10; icut++)
185 for(
Int_t igen = 0; igen < 10; igen++)
187 for(
Int_t itag = 0; itag < 10; itag++)
301 const Int_t buffersize = 255;
302 char onePar[buffersize] ;
303 snprintf(onePar,buffersize,
"--- AliAnaPi0 ---:") ;
305 snprintf(onePar,buffersize,
"Number of bins in Centrality: %d;",
GetNCentrBin()) ;
307 snprintf(onePar,buffersize,
"Number of bins in Z vert. pos: %d;",
GetNZvertBin()) ;
309 snprintf(onePar,buffersize,
"Number of bins in Reac. Plain: %d;",
GetNRPBin()) ;
311 snprintf(onePar,buffersize,
"Depth of event buffer: %d;",
GetNMaxEvMix()) ;
315 snprintf(onePar,buffersize,
" Asymmetry cuts: n = %d, asymmetry < ",
fNAsymCuts) ;
318 snprintf(onePar,buffersize,
" PID selection bits: n = %d, PID bit =",
fNPIDBits) ;
321 snprintf(onePar,buffersize,
"Cuts:") ;
327 snprintf(onePar,buffersize,
"Number of modules: %d:",
fNModules) ;
331 snprintf(onePar, buffersize,
" pT cuts: n = %d, pt > ",
fNPtCuts) ;
334 snprintf(onePar,buffersize,
" N cell in cluster cuts: n = %d, nCell > ",
fNCellNCuts) ;
339 return new TObjString(parList) ;
349 outputContainer->SetName(GetName());
352 const Int_t buffersize = 255;
353 char key[buffersize] ;
354 char title[buffersize] ;
394 Int_t netabinsopen = TMath::Nint(netabins*4/(etamax-etamin));
395 Int_t nphibinsopen = TMath::Nint(nphibins*TMath::TwoPi()/(phimax-phimin));
403 fhPrimPi0E =
new TH1F(
"hPrimPi0E",
"Primary #pi^{0} E, |#it{Y}|<1",
404 nptbins,ptmin,ptmax) ;
408 fhPrimPi0Pt =
new TH1F(
"hPrimPi0Pt",
"Primary #pi^{0} #it{p}_{T} , |#it{Y}|<1",
409 nptbins,ptmin,ptmax) ;
410 fhPrimPi0Pt ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
413 fhPrimPi0Y =
new TH2F(
"hPrimPi0Rapidity",
"Rapidity of primary #pi^{0}",
414 nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
416 fhPrimPi0Y ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
419 fhPrimPi0Yeta =
new TH2F(
"hPrimPi0PseudoRapidity",
"PseudoRapidity of primary #pi^{0}",
420 nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
425 fhPrimPi0YetaYcut =
new TH2F(
"hPrimPi0PseudoRapidityYcut",
"PseudoRapidity of primary #pi^{0}, |#it{Y}|<1",
426 nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
431 fhPrimPi0Phi =
new TH2F(
"hPrimPi0Phi",
"#phi of primary #pi^{0}, |#it{Y}|<1",
432 nptbins,ptmin,ptmax,nphibinsopen,0,360) ;
439 fhPrimPi0AccE =
new TH1F(
"hPrimPi0AccE",
"Primary #pi^{0} #it{E} with both photons in acceptance",
440 nptbins,ptmin,ptmax) ;
444 fhPrimPi0AccPt =
new TH1F(
"hPrimPi0AccPt",
"Primary #pi^{0} #it{p}_{T} with both photons in acceptance",
445 nptbins,ptmin,ptmax) ;
449 fhPrimPi0AccPtPhotonCuts =
new TH1F(
"hPrimPi0AccPtPhotonCuts",
"Primary #pi^{0} #it{p}_{T} with both photons in acceptance",
450 nptbins,ptmin,ptmax) ;
454 fhPrimPi0AccY =
new TH2F(
"hPrimPi0AccRapidity",
"Rapidity of primary #pi^{0} with accepted daughters",
455 nptbins,ptmin,ptmax,netabins,etamin,etamax) ;
460 fhPrimPi0AccYeta =
new TH2F(
"hPrimPi0AccPseudoRapidity",
"PseudoRapidity of primary #pi^{0} with accepted daughters",
461 nptbins,ptmin,ptmax,netabins,etamin,etamax) ;
466 fhPrimPi0AccPhi =
new TH2F(
"hPrimPi0AccPhi",
"#phi of primary #pi^{0} with accepted daughters",
468 nphibins,phimin*TMath::RadToDeg(),phimax*TMath::RadToDeg()) ;
476 fhPrimEtaE =
new TH1F(
"hPrimEtaE",
"Primary eta E",
477 nptbins,ptmin,ptmax) ;
481 fhPrimEtaPt =
new TH1F(
"hPrimEtaPt",
"Primary #eta #it{p}_{T}",
482 nptbins,ptmin,ptmax) ;
483 fhPrimEtaPt ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
486 fhPrimEtaY =
new TH2F(
"hPrimEtaRapidity",
"Rapidity of primary #eta",
487 nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
489 fhPrimEtaY->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
492 fhPrimEtaYeta =
new TH2F(
"hPrimEtaPseudoRapidityEta",
"PseudoRapidity of primary #eta",
493 nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
498 fhPrimEtaYetaYcut =
new TH2F(
"hPrimEtaPseudoRapidityEtaYcut",
"PseudoRapidity of primary #eta, |#it{Y}|<1",
499 nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
505 nptbins,ptmin,ptmax, nphibinsopen,0,360) ;
512 fhPrimEtaAccE =
new TH1F(
"hPrimEtaAccE",
"Primary #eta #it{E} with both photons in acceptance",
513 nptbins,ptmin,ptmax) ;
517 fhPrimEtaAccPt =
new TH1F(
"hPrimEtaAccPt",
"Primary eta #it{p}_{T} with both photons in acceptance",
518 nptbins,ptmin,ptmax) ;
522 fhPrimEtaAccPtPhotonCuts =
new TH1F(
"hPrimEtaAccPtPhotonCuts",
"Primary eta #it{p}_{T} with both photons in acceptance",
523 nptbins,ptmin,ptmax) ;
527 fhPrimEtaAccPhi =
new TH2F(
"hPrimEtaAccPhi",
"Azimuthal of primary #eta with accepted daughters",
528 nptbins,ptmin,ptmax, nphibins,phimin*TMath::RadToDeg(),phimax*TMath::RadToDeg()) ;
534 nptbins,ptmin,ptmax, netabins,etamin,etamax) ;
540 nptbins,ptmin,ptmax, netabins,etamin,etamax) ;
550 nptbins,ptmin,ptmax, 100, 0, 100) ;
556 nptbins,ptmin,ptmax, 100, 0, 100) ;
562 fhPrimPi0PtEventPlane =
new TH2F(
"hPrimPi0PtEventPlane",
"Primary #pi^{0} #it{p}_{T} vs reco event plane angle, |#it{Y}|<1",
563 nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
570 nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
577 fhPrimPi0AccPtCentrality =
new TH2F(
"hPrimPi0AccPtCentrality",
"Primary #pi^{0} with both photons in acceptance #it{p}_{T} vs reco centrality",
578 nptbins,ptmin,ptmax, 100, 0, 100) ;
583 fhPrimEtaAccPtCentrality =
new TH2F(
"hPrimEtaAccPtCentrality",
"Primary #eta with both photons in acceptance #it{p}_{T} vs reco centrality",
584 nptbins,ptmin,ptmax, 100, 0, 100) ;
589 fhPrimPi0AccPtEventPlane =
new TH2F(
"hPrimPi0AccPtEventPlane",
"Primary #pi^{0} with both photons in acceptance #it{p}_{T} vs reco event plane angle",
590 nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
595 fhPrimEtaAccPtEventPlane =
new TH2F(
"hPrimEtaAccPtEventPlane",
"Primary #eta with both #gamma_{decay} in acceptance #it{p}_{T} vs reco event plane angle",
596 nptbins,ptmin,ptmax, 100, 0, TMath::Pi()) ;
606 (
"hPrimPi0OpeningAngle",
"Angle between all primary #gamma pair vs E_{#pi^{0}}, in acceptance",
607 nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax);
613 (
"hPrimPi0OpeningAnglePhotonCuts",
"Angle between all primary #gamma pair vs E_{#pi^{0}} in acceptance",
614 nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax);
620 (
"hPrimPi0OpeningAngleAsym",
"Angle between all primary #gamma pair vs #it{Asymmetry}, in acceptance, #it{p}_{T}>5 GeV/#it{c}",
621 100,0,1,nopanbins,opanmin,opanmax);
627 (
"hPrimPi0CosOpeningAngle",
"Cosinus of angle between all primary #gamma pair vs E_{#pi^{0}}, in acceptance",
628 nptbins,ptmin,ptmax,100,-1,1);
634 (
"hPrimEtaOpeningAngle",
"Angle between all primary #gamma pair vs E_{#eta}, in acceptance",
635 nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax);
641 (
"hPrimEtaOpeningAnglePhotonCuts",
"Angle between all primary #gamma pair vs E_{#eta}, in acceptance",
642 nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax);
648 (
"hPrimEtaOpeningAngleAsym",
"Angle between all primary #gamma pair vs #it{Asymmetry}, #it{p}_{T}>5 GeV/#it{c}, in acceptance",
649 100,0,1,nopanbins,opanmin,opanmax);
655 (
"hPrimEtaCosOpeningAngle",
"Cosinus of angle between all primary #gamma pair vs E_{#eta}, in acceptance",
656 nptbins,ptmin,ptmax,100,-1,1);
666 fhPrimPi0PtOrigin =
new TH2F(
"hPrimPi0PtOrigin",
"Primary #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,11,0,11) ;
696 fhPrimPi0PtStatus =
new TH2F(
"hPrimPi0PtStatus",
"Primary #pi^{0} #it{p}_{T} vs status",nptbins,ptmin,ptmax,101,-50,50) ;
702 fhPrimEtaPtOrigin =
new TH2F(
"hPrimEtaPtOrigin",
"Primary #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,7,0,7) ;
715 200,0.,20.,5000,0,500) ;
721 200,0.,20.,5000,0,500) ;
729 TString ebin[] = {
"8 < E < 12 GeV",
"12 < E < 16 GeV",
"16 < E < 20 GeV",
"E > 20 GeV" };
730 Int_t narmbins = 400;
734 for(
Int_t i = 0; i < 4; i++)
737 Form(
"Armenteros of primary #pi^{0}, %s",ebin[i].
Data()),
738 200, -1, 1, narmbins,armmin,armmax);
744 Form(
"Armenteros of primary #eta, %s",ebin[i].
Data()),
745 200, -1, 1, narmbins,armmin,armmax);
753 (
"hCosThStarPrimPi0",
"cos(#theta *) for primary #pi^{0}",nptbins,ptmin,ptmax,200,-1,1);
759 (
"hCosThStarPrimEta",
"cos(#theta *) for primary #eta",nptbins,ptmin,ptmax,200,-1,1);
840 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
846 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
854 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
860 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
870 fhReConv =
new TH2F(
"hReConv",
"Real Pair with one recombined conversion ",nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
871 fhReConv->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
872 fhReConv->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
875 fhReConv2 =
new TH2F(
"hReConv2",
"Real Pair with 2 recombined conversion ",nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
876 fhReConv2->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
877 fhReConv2->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
882 fhMiConv =
new TH2F(
"hMiConv",
"Mixed Pair with one recombined conversion ",nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
883 fhMiConv->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
884 fhMiConv->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
887 fhMiConv2 =
new TH2F(
"hMiConv2",
"Mixed Pair with 2 recombined conversion ",nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
888 fhMiConv2->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
889 fhMiConv2->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
903 snprintf(key, buffersize,
"hRe_cen%d_pidbit%d_asy%d_dist1",ic,ipid,iasym) ;
904 snprintf(title, buffersize,
"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
906 fhRe1[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
907 fhRe1[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
908 fhRe1[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
910 outputContainer->Add(
fhRe1[index]) ;
915 snprintf(key, buffersize,
"hRe_cen%d_pidbit%d_asy%d_dist2",ic,ipid,iasym) ;
916 snprintf(title, buffersize,
"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
918 fhRe2[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
919 fhRe2[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
920 fhRe2[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
921 outputContainer->Add(
fhRe2[index]) ;
924 snprintf(key, buffersize,
"hRe_cen%d_pidbit%d_asy%d_dist3",ic,ipid,iasym) ;
925 snprintf(title, buffersize,
"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 3",
927 fhRe3[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
928 fhRe3[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
929 fhRe3[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
930 outputContainer->Add(
fhRe3[index]) ;
937 snprintf(key, buffersize,
"hReInvPt_cen%d_pidbit%d_asy%d_dist1",ic,ipid,iasym) ;
938 snprintf(title, buffersize,
"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
940 fhReInvPt1[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
941 fhReInvPt1[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
942 fhReInvPt1[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
947 snprintf(key, buffersize,
"hReInvPt_cen%d_pidbit%d_asy%d_dist2",ic,ipid,iasym) ;
948 snprintf(title, buffersize,
"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
950 fhReInvPt2[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
951 fhReInvPt2[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
952 fhReInvPt2[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
956 snprintf(key, buffersize,
"hReInvPt_cen%d_pidbit%d_asy%d_dist3",ic,ipid,iasym) ;
957 snprintf(title, buffersize,
"Real #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 3",
959 fhReInvPt3[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
960 fhReInvPt3[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
961 fhReInvPt3[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
969 snprintf(key, buffersize,
"hMi_cen%d_pidbit%d_asy%d_dist1",ic,ipid,iasym) ;
970 snprintf(title, buffersize,
"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
972 fhMi1[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
973 fhMi1[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
974 fhMi1[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
975 outputContainer->Add(
fhMi1[index]) ;
978 snprintf(key, buffersize,
"hMi_cen%d_pidbit%d_asy%d_dist2",ic,ipid,iasym) ;
979 snprintf(title, buffersize,
"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
981 fhMi2[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
982 fhMi2[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
983 fhMi2[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
984 outputContainer->Add(
fhMi2[index]) ;
987 snprintf(key, buffersize,
"hMi_cen%d_pidbit%d_asy%d_dist3",ic,ipid,iasym) ;
988 snprintf(title, buffersize,
"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 3",
990 fhMi3[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
991 fhMi3[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
992 fhMi3[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
993 outputContainer->Add(
fhMi3[index]) ;
1000 snprintf(key, buffersize,
"hMiInvPt_cen%d_pidbit%d_asy%d_dist1",ic,ipid,iasym) ;
1001 snprintf(title, buffersize,
"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 1",
1003 fhMiInvPt1[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1004 fhMiInvPt1[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1005 fhMiInvPt1[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1009 snprintf(key, buffersize,
"hMiInvPt_cen%d_pidbit%d_asy%d_dist2",ic,ipid,iasym) ;
1010 snprintf(title, buffersize,
"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f, dist bad 2",
1012 fhMiInvPt2[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1013 fhMiInvPt2[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1014 fhMiInvPt2[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1018 snprintf(key, buffersize,
"hMiInvPt_cen%d_pidbit%d_asy%d_dist3",ic,ipid,iasym) ;
1019 snprintf(title, buffersize,
"Mixed #it{M}_{#gamma#gamma} distr. for centrality=%d, PID bit=%d and asymmetry %1.2f,dist bad 3",
1021 fhMiInvPt3[index] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1022 fhMiInvPt3[index]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1023 fhMiInvPt3[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1032 fhEPairDiffTime =
new TH2F(
"hEPairDiffTime",
"cluster pair time difference vs #it{p}_{T}",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1039 fhRePtAsym =
new TH2F(
"hRePtAsym",
"#it{Asymmetry} vs #it{p}_{T}, for pairs",
1040 nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
1041 fhRePtAsym->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1045 fhRePtAsymPi0 =
new TH2F(
"hRePtAsymPi0",Form(
"#it{Asymmetry} vs #it{p}_{T}, for pairs %2.2f<M<%2.2f MeV/#it{c}^{2}",
1047 nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
1052 fhRePtAsymEta =
new TH2F(
"hRePtAsymEta",Form(
"#it{Asymmetry} vs #it{p}_{T}, for pairs %2.2f<M<%2.2f MeV/#it{c}^{2}",
1054 nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
1061 fhMiPtAsym =
new TH2F(
"hMiPtAsym",
"#it{Asymmetry} vs #it{p}_{T}, for mixed pairs",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
1062 fhMiPtAsym->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1066 fhMiPtAsymPi0 =
new TH2F(
"hMiPtAsymPi0",Form(
"#it{Asymmetry} vs #it{p}_{T}, for mixed pairs %2.2f<M<%2.2f MeV/#it{c}^{2}",
1068 nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
1074 Form(
"#it{Asymmetry} vs #it{p}_{T}, for mixed pairs %2.2f<M<%2.2f MeV/#it{c}^{2}",
1076 nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
1088 (Form(
"hPtBin%d_Cluster_EtaPhi",ipt),
1089 Form(
"#eta vs #phi, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fPtCuts[ipt],
fPtCuts[ipt+1]),
1090 netabins,etamin,etamax,nphibins,phimin,phimax);
1096 (Form(
"hPtBin%d_Cluster_ColRow",ipt),
1097 Form(
"column vs row, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fPtCuts[ipt],
fPtCuts[ipt+1]),
1098 96+2,-1.5,96+0.5,(8*24+2*8)+2,-1.5,(8*24+2*8)+0.5);
1131 snprintf(key, buffersize,
"hRe_pt%d_cell%d_asym%d",ipt,icell,iasym) ;
1132 snprintf(title, buffersize,
"Real #it{M}_{#gamma#gamma} distr. for %1.1f< #it{p}_{T} < %1.1f, ncell>%d and asym<%1.2f ",
1145 snprintf(key, buffersize,
"hMi_pt%d_cell%d_asym%d",ipt,icell,iasym) ;
1146 snprintf(title, buffersize,
"Mixed #it{M}_{#gamma#gamma} distr. for %1.1f< #it{p}_{T} < %1.1f, ncell>%d and asym<%1.2f",
1160 snprintf(key, buffersize,
"hRe_pt%d_cell%d_asym%d_SM%d",ipt,icell,iasym,iSM) ;
1161 snprintf(title, buffersize,
"Real #it{M}_{#gamma#gamma} distr. for %1.1f< #it{p}_{T} < %1.1f, ncell>%d and asym<%1.2f, SM %d ",
1171 snprintf(key, buffersize,
"hReOpAngle_pt%d_cell%d_asym%d",ipt,icell,iasym) ;
1172 snprintf(title, buffersize,
"Real #theta_{#gamma#gamma} distr. for %1.1f< #it{p}_{T} < %1.1f, ncell>%d and asym<%1.2f ",
1185 snprintf(key, buffersize,
"hMiOpAngle_pt%d_cell%d_asym%d",ipt,icell,iasym) ;
1186 snprintf(title, buffersize,
"Mixed #theta_{#gamma#gamma} distr. for %1.1f< #it{p}_{T} < %1.1f, ncell>%d and asym<%1.2f",
1199 snprintf(key, buffersize,
"hReOpAngle_pt%d_cell%d_asym%d_SM%d",ipt,icell,iasym,iSM) ;
1200 snprintf(title, buffersize,
"Real #it{M}_{#gamma#gamma} distr. for %1.1f< #it{p}_{T} < %1.1f, ncell>%d and asym<%1.2f, SM %d ",
1218 fhReSS[0] =
new TH2F(
"hRe_SS_Tight",
" 0.01 < #lambda_{0}^{2} < 0.4",
1219 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
1220 fhReSS[0]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1221 fhReSS[0]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1222 outputContainer->Add(
fhReSS[0]) ;
1225 fhReSS[1] =
new TH2F(
"hRe_SS_Loose",
" #lambda_{0}^{2} > 0.4",
1226 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
1227 fhReSS[1]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1228 fhReSS[1]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1229 outputContainer->Add(
fhReSS[1]) ;
1232 fhReSS[2] =
new TH2F(
"hRe_SS_Both",
" cluster_{1} #lambda_{0}^{2} > 0.4; cluster_{2} 0.01 < #lambda_{0}^{2} < 0.4",
1233 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
1234 fhReSS[2]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1235 fhReSS[2]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1236 outputContainer->Add(
fhReSS[2]) ;
1241 fhEventBin=
new TH1I(
"hEventBin",
"Number of real pairs per bin(cen,vz,rp)",
1248 fhEventMixBin=
new TH1I(
"hEventMixBin",
"Number of mixed pairs per bin(cen,vz,rp)",
1274 (
"hRealOpeningAngle",
"Angle between all #gamma pair vs E_{#pi^{0}}",nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax);
1280 (
"hRealCosOpeningAngle",
"Cosinus of angle between all #gamma pair vs E_{#pi^{0}}",nptbins,ptmin,ptmax,100,0,1);
1288 (
"hMixedOpeningAngle",
"Angle between all #gamma pair vs E_{#pi^{0}}, Mixed pairs",nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax);
1294 (
"hMixedCosOpeningAngle",
"Cosinus of angle between all #gamma pair vs E_{#pi^{0}}, Mixed pairs",nptbins,ptmin,ptmax,100,0,1);
1302 for(
Int_t ism = 0; ism < 20; ism++)
1305 (Form(
"hRealOpeningAngleMod_%d",ism),
1306 Form(
"Angle between all #gamma pair vs E_{#pi^{0}}, SM %d",ism),
1307 nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax);
1315 (Form(
"hMixedOpeningAngleMod_%d",ism),
1316 Form(
"Angle between all #gamma pair vs E_{#pi^{0}}, Mixed pairs, SM %d",ism),
1317 nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax);
1330 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
1336 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
1342 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
1349 fhMCPi0PtOrigin =
new TH2F(
"hMCPi0PtOrigin",
"Reconstructed pair from generated #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,11,0,11) ;
1364 fhMCNotResonancePi0PtOrigin =
new TH2F(
"hMCNotResonancePi0PtOrigin",
"Reconstructed pair from generated #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,11,0,11) ;
1379 fhMCPi0PtStatus =
new TH2F(
"hMCPi0PtStatus",
"Reconstructed pair from generated #pi^{0} #it{p}_{T} vs status",nptbins,ptmin,ptmax,101,-50,50) ;
1386 fhMCEtaPtOrigin =
new TH2F(
"hMCEtaPtOrigin",
"Reconstructed pair from generated #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,7,0,7) ;
1397 fhMCPi0ProdVertex =
new TH2F(
"hMCPi0ProdVertex",
"Selected reco pair from generated #pi^{0} #it{p}_{T} vs production vertex",
1398 200,0.,20.,5000,0,500) ;
1403 fhMCEtaProdVertex =
new TH2F(
"hMCEtaProdVertex",
"Selected reco pair from generated #eta #it{p}_{T} vs production vertex",
1404 200,0.,20.,5000,0,500) ;
1410 TString ancestorTitle[] = {
"Photon",
"Electron",
"Pi0",
"Eta",
"AntiProton",
"AntiNeutron",
"Muon & converted stable particles",
1411 "Resonances",
"Strings",
"Initial state interaction",
"Final state radiations",
"Colliding protons",
"not found"};
1413 for(
Int_t i = 0; i<13; i++)
1415 fhMCOrgMass[i] =
new TH2F(Form(
"hMCOrgMass_%d",i),Form(
"#it{M} vs #it{p}_{T}, ancestor %s",ancestorTitle[i].
Data()),
1416 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1417 fhMCOrgMass[i]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1418 fhMCOrgMass[i]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1421 fhMCOrgAsym[i]=
new TH2F(Form(
"hMCOrgAsym_%d",i),Form(
"#it{Asymmetry} vs #it{p}_{T}, ancestor %s",ancestorTitle[i].
Data()),
1422 nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax) ;
1423 fhMCOrgAsym[i]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1427 fhMCOrgDeltaEta[i] =
new TH2F(Form(
"hMCOrgDeltaEta_%d",i),Form(
"#Delta #eta of pair vs #it{p}_{T}, ancestor %s",ancestorTitle[i].
Data()),
1428 nptbins,ptmin,ptmax,netabins,-1.4,1.4) ;
1433 fhMCOrgDeltaPhi[i]=
new TH2F(Form(
"hMCOrgDeltaPhi_%d",i),Form(
"#Delta #phi of pair vs #it{p}_{T}, ancestor %s",ancestorTitle[i].
Data()),
1434 nptbins,ptmin,ptmax,nphibins,-0.7,0.7) ;
1461 Form(
"Reconstructed #it{M} vs reconstructed #it{p}_{T} of true #pi^{0} cluster pairs for %1.1f<#it{p}_{T}<%1.1f, #it{N}^{cluster}_{cell}>%d and |#it{A}|<%1.2f",
1463 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1464 fhMCPi0MassPtRec[index]->SetXTitle(
"#it{p}_{T, reconstructed} (GeV/#it{c})");
1465 fhMCPi0MassPtRec[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1469 Form(
"Reconstructed #it{M} vs generated #it{p}_{T} of true #pi^{0} cluster pairs for %1.1f<#it{p}_{T}<%1.1f, #it{N}^{cluster}_{cell}>%d and |#it{A}|<%1.2f",
1471 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1477 Form(
"Generated vs reconstructed #it{p}_{T} of true #pi^{0} cluster pairs for %1.1f<#it{p}_{T}<%1.1f, #it{N}^{cluster}_{cell}>%d and |#it{A}|>%1.2f",
1479 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
1485 Form(
"Generated vs reconstructed #it{p}_{T} of true #pi^{0} cluster pairs, %2.2f < rec. mass < %2.2f MeV/#it{c}^{2} for %1.1f<#it{p}_{T}<%1.1f, #it{N}^{cluster}_{cell}>%d and |#it{A}|>%1.2f",
1487 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
1493 Form(
"Reconstructed #it{M} vs reconstructed #it{p}_{T} of true #eta cluster pairs for %1.1f<#it{p}_{T}<%1.1f, #it{N}^{cluster}_{cell}>%d and |#it{A}|<%1.2f",
1495 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1497 fhMCEtaMassPtRec[index]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1501 Form(
"Reconstructed #it{M} vs generated #it{p}_{T} of true #eta cluster pairs for %1.1f<#it{p}_{T}<%1.1f, #it{N}^{cluster}_{cell}>%d and |#it{A}|<%1.2f",
1503 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1509 Form(
"Generated vs reconstructed #it{p}_{T} of true #eta cluster pairs for %1.1f<#it{p}_{T}<%1.1f, ncell>%d and asym<%1.2f",
1511 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
1518 Form(
"Generated vs reconstructed #it{p}_{T} of true #eta cluster pairs, %2.2f < rec. mass < %2.2f MeV/#it{c}^{2} for %1.1f<#it{p}_{T}<%1.1f, ncell>%d and asym<%1.2f",
1520 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
1540 fhMCPi0MassPtTrue[0] =
new TH2F(
"hMCPi0MassPtTrue",
"Reconstructed Mass vs generated #it{p}_{T} of true #pi^{0} cluster pairs",
1541 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1546 fhMCPi0MassPtRec[0] =
new TH2F(
"hMCPi0MassPtRec",
"Reconstructed Mass vs reconstructed #it{p}_{T} of true #pi^{0} cluster pairs",
1547 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1552 fhMCPi0PtTruePtRec[0]=
new TH2F(
"hMCPi0PtTruePtRec",
"Generated vs reconstructed #it{p}_{T} of true #pi^{0} cluster pairs",
1553 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
1559 Form(
"Generated vs reconstructed #it{p}_{T} of true #pi^{0} cluster pairs, %2.2f < rec. mass < %2.2f MeV/#it{c}^{2}",
fPi0MassWindow[0],
fPi0MassWindow[1]),
1560 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
1565 fhMCEtaMassPtTrue[0] =
new TH2F(
"hMCEtaMassPtTrue",
"Reconstructed Mass vs generated #it{p}_{T} of true #eta cluster pairs",
1566 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1571 fhMCEtaMassPtRec[0] =
new TH2F(
"hMCEtaMassPtRec",
"Reconstructed Mass vs reconstructed #it{p}_{T} of true #eta cluster pairs",
1572 nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1577 fhMCEtaPtTruePtRec[0]=
new TH2F(
"hMCEtaPtTruePtRec",
"Generated vs reconstructed #it{p}_{T} of true #eta cluster pairs",
1578 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
1584 Form(
"Generated vs reconstructed #it{p}_{T} of true #eta cluster pairs, %2.2f < rec. mass < %2.2f MeV/#it{c}^{2}",
1586 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax) ;
1592 fhMCPi0PtTruePtRecRat =
new TH2F(
"hMCPi0PtTruePtRecRat",
"Reconstructed / generated #it{p}_{T} of true #pi^{0} cluster pairs",
1593 nptbins,ptmin,ptmax,nratbins,ratmin,ratmax) ;
1599 Form(
"Reconstructed / generated #it{p}_{T} of true #pi^{0} cluster pairs, %2.2f < rec. mass < %2.2f MeV/#it{c}^{2}",
1601 nptbins,ptmin,ptmax,nratbins,ratmin,ratmax) ;
1606 fhMCEtaPtTruePtRecRat =
new TH2F(
"hMCEtaPtTruePtRecRat",
"Reconstructed / generated #it{p}_{T} of true #eta cluster pairs",
1607 nptbins,ptmin,ptmax,nratbins,ratmin,ratmax) ;
1613 Form(
"Reconstructed / generated #it{p}_{T} of true #eta cluster pairs, %2.2f < rec. mass < %2.2f MeV/#it{c}^{2}",
1615 nptbins,ptmin,ptmax,nratbins,ratmin,ratmax) ;
1620 fhMCPi0PtTruePtRecDif =
new TH2F(
"hMCPi0PtTruePtRecDif",
"Generated - reconstructed #it{p}_{T} of true #pi^{0} cluster pairs",
1621 nptbins,ptmin,ptmax,ndifbins,difmin,difmax) ;
1627 Form(
"Generated - reconstructed #it{p}_{T} of true #pi^{0} cluster pairs, %2.2f < rec. mass < %2.2f MeV/#it{c}^{2}",
1629 nptbins,ptmin,ptmax,ndifbins,difmin,difmax) ;
1634 fhMCEtaPtTruePtRecDif =
new TH2F(
"hMCEtaPtTruePtRecDif",
"Generated - reconstructed #it{p}_{T} of true #eta cluster pairs",
1635 nptbins,ptmin,ptmax,ndifbins,difmin,difmax) ;
1641 Form(
"Generated - reconstructed #it{p}_{T} of true #eta cluster pairs, %2.2f < rec. mass < %2.2f MeV/#it{c}^{2}",
1643 nptbins,ptmin,ptmax,ndifbins,difmin,difmax) ;
1649 nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax) ;
1655 Form(
"Opening angle of true #pi^{0} cluster pairs, %2.2f < rec. mass < %2.2f MeV/#it{c}^{2}",
1657 nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax) ;
1663 nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax) ;
1669 Form(
"Opening angle of true #eta cluster pairs, %2.2f < rec. mass < %2.2f MeV/#it{c}^{2}",
1671 nptbins,ptmin,ptmax,nopanbins,opanmin,opanmax) ;
1682 TString pairnamePHOS[] = {
"(0-1)",
"(0-2)",
"(1-2)",
"(0-3)",
"(0-4)",
"(1-3)",
"(1-4)",
"(2-3)",
"(2-4)",
"(3-4)"};
1686 snprintf(key, buffersize,
"hReMod_%d",imod) ;
1687 snprintf(title, buffersize,
"Real #it{M}_{#gamma#gamma} distr. for Module %d",imod) ;
1688 fhReMod[imod] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1689 fhReMod[imod]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1690 fhReMod[imod]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1691 outputContainer->Add(
fhReMod[imod]) ;
1694 snprintf(key, buffersize,
"hReDiffPHOSMod_%d",imod) ;
1695 snprintf(title, buffersize,
"Real pairs PHOS, clusters in different Modules: %s",(pairnamePHOS[imod]).
Data()) ;
1696 fhReDiffPHOSMod[imod] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1698 fhReDiffPHOSMod[imod]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1703 if(imod<fNModules/2)
1705 snprintf(key, buffersize,
"hReSameSectorEMCAL_%d",imod) ;
1706 snprintf(title, buffersize,
"Real pairs EMCAL, clusters in same sector, SM(%d,%d)",imod*2,imod*2+1) ;
1712 if(imod<fNModules-2)
1714 snprintf(key, buffersize,
"hReSameSideEMCAL_%d",imod) ;
1715 snprintf(title, buffersize,
"Real pairs EMCAL, clusters in same side SM(%d,%d)",imod, imod+2) ;
1725 snprintf(key, buffersize,
"hMiMod_%d",imod) ;
1726 snprintf(title, buffersize,
"Mixed #it{M}_{#gamma#gamma} distr. for Module %d",imod) ;
1727 fhMiMod[imod] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1728 fhMiMod[imod]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1729 fhMiMod[imod]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1730 outputContainer->Add(
fhMiMod[imod]) ;
1734 snprintf(key, buffersize,
"hMiDiffPHOSMod_%d",imod) ;
1735 snprintf(title, buffersize,
"Mixed pairs PHOS, clusters in different Modules: %s",(pairnamePHOS[imod]).
Data()) ;
1736 fhMiDiffPHOSMod[imod] =
new TH2F(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ;
1738 fhMiDiffPHOSMod[imod]->SetYTitle(
"#it{M}_{#gamma,#gamma} (GeV/#it{c}^{2})");
1743 if(imod<fNModules/2)
1745 snprintf(key, buffersize,
"hMiSameSectorEMCALMod_%d",imod) ;
1746 snprintf(title, buffersize,
"Mixed pairs EMCAL, clusters in same sector, SM(%d,%d)",imod*2,imod*2+1) ;
1752 if(imod<fNModules-2){
1754 snprintf(key, buffersize,
"hMiSameSideEMCALMod_%d",imod) ;
1755 snprintf(title, buffersize,
"Mixed pairs EMCAL, clusters in same side SM(%d,%d)",imod, imod+2) ;
1767 Int_t dcSameSM[6] = {12,13,14,15,16,17};
1768 Int_t phSameSM[6] = {3, 3, 2, 2, 1, 1};
1770 Int_t dcDiffSM[8] = {12,13,14,15,16,17,0,0};
1771 Int_t phDiffSM[8] = {2, 2, 1, 1, 3, 3,0,0};
1773 for(
Int_t icombi = 0; icombi < 8; icombi++)
1775 snprintf(key, buffersize,
"hReDiffSectorDCALPHOS_%d",icombi) ;
1776 snprintf(title, buffersize,
"Real pairs DCAL-PHOS, clusters in different sector, SM(%d,%d)",dcDiffSM[icombi],phDiffSM[icombi]) ;
1783 snprintf(key, buffersize,
"hMiDiffSectorDCALPHOS_%d",icombi) ;
1784 snprintf(title, buffersize,
"Mixed pairs DCAL-PHOS, clusters in different sector, SM(%d,%d)",dcDiffSM[icombi],phDiffSM[icombi]) ;
1791 if(icombi > 5) continue ;
1793 snprintf(key, buffersize,
"hReSameSectorDCALPHOS_%d",icombi) ;
1794 snprintf(title, buffersize,
"Real pairs DCAL-PHOS, clusters in same sector, SM(%d,%d)",dcSameSM[icombi],phSameSM[icombi]) ;
1801 snprintf(key, buffersize,
"hMiSameSectorDCALPHOS_%d",icombi) ;
1802 snprintf(title, buffersize,
"Mixed pairs DCAL-PHOS, clusters in same sector, SM(%d,%d)",dcSameSM[icombi],phSameSM[icombi]) ;
1819 (Form(
"hReOpAngleBin%d_ClusterMin_EtaPhi",icut),
1821 netabins,etamin,etamax,nphibins,phimin,phimax);
1827 (Form(
"hReOpAngleBin%d_ClusterMax_EtaPhi",icut),
1829 netabins,etamin,etamax,nphibins,phimin,phimax);
1835 (Form(
"hReOpAngleBin%d_ClusterMin_ColRow",icut),
1837 96+2,-1.5,96+0.5,(8*24+2*8)+2,-1.5,(8*24+2*8)+0.5);
1843 (Form(
"hReOpAngleBin%d_ClusterMax_ColRow",icut),
1845 96+2,-1.5,96+0.5,(8*24+2*8)+2,-1.5,(8*24+2*8)+0.5);
1851 (Form(
"hReOpAngleBin%d_ClusterMin_EPerSM",icut),
1853 nptbins,ptmin,ptmax,20,0,20);
1859 (Form(
"hReOpAngleBin%d_ClusterMax_EPerSM",icut),
1861 nptbins,ptmin,ptmax,20,0,20);
1867 (Form(
"hReOpAngleBin%d_ClusterMin_TimePerSM",icut),
1869 ntimebins,timemin,timemax,20,0,20);
1875 (Form(
"hReOpAngleBin%d_ClusterMax_TimePerSM",icut),
1877 ntimebins,timemin,timemax,20,0,20);
1883 (Form(
"hReOpAngleBin%d_ClusterMin_NCellPerSM",icut),
1891 (Form(
"hReOpAngleBin%d_ClusterMax_NCellPerSM",icut),
1899 (Form(
"hReOpAngleBin%d_PairCluster_RatioPerSM",icut),
1907 (Form(
"hReOpAngleBin%d_PairCluster_MassPerSM",icut),
1909 nmassbins,massmin,massmax,20,0,20);
1915 (Form(
"hReOpAngleBin%d_PairCluster_Mass",icut),
1917 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
1927 (Form(
"hReOpAngleBin%d_PairCluster_MassMCTruePi0",icut),
1929 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
1935 (Form(
"hReOpAngleBin%d_PairCluster_MassMCTrueEta",icut),
1937 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
1944 (Form(
"hPrimPi0AccPt_OpAngleBin%d",icut),
1946 nptbins,ptmin,ptmax) ;
1951 (Form(
"hPrimEtaAccPt_OpAngleBin%d",icut),
1953 nptbins,ptmin,ptmax) ;
1970 (Form(
"hMiOpAngleBin%d_ClusterMin_EtaPhi",icut),
1972 netabins,etamin,etamax,nphibins,phimin,phimax);
1978 (Form(
"hMiOpAngleBin%d_ClusterMax_EtaPhi",icut),
1980 netabins,etamin,etamax,nphibins,phimin,phimax);
2002 (Form(
"hMiOpAngleBin%d_ClusterMin_EPerSM",icut),
2004 nptbins,ptmin,ptmax,20,0,20);
2010 (Form(
"hMiOpAngleBin%d_ClusterMax_EPerSM",icut),
2012 nptbins,ptmin,ptmax,20,0,20);
2018 (Form(
"hMiOpAngleBin%d_ClusterMin_TimePerSM",icut),
2020 ntimebins,timemin,timemax,20,0,20);
2026 (Form(
"hMiOpAngleBin%d_ClusterMax_TimePerSM",icut),
2028 ntimebins,timemin,timemax,20,0,20);
2034 (Form(
"hMiOpAngleBin%d_ClusterMin_NCellPerSM",icut),
2042 (Form(
"hMiOpAngleBin%d_ClusterMax_NCellPerSM",icut),
2050 (Form(
"hMiOpAngleBin%d_PairCluster_RatioPerSM",icut),
2058 (Form(
"hMiOpAngleBin%d_PairCluster_MassPerSM",icut),
2060 nmassbins,massmin,massmax,20,0,20);
2066 (Form(
"hMiOpAngleBin%d_PairCluster_Mass",icut),
2068 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2086 TString mcGenNames[] = {
"",
"_MC_Pi0Merged",
"_MC_Pi0Decay",
"_MC_EtaDecay",
"_MC_PhotonOther",
"_MC_Electron",
"_MC_Other"};
2087 TString mcGenTitle[] = {
"",
",MC Pi0-Merged",
",MC Pi0-Decay",
", MC Eta-Decay",
", MC Photon other sources",
", MC Electron",
", MC other sources"};
2090 "Clean",
"HijingBkg",
"NotHijingBkg",
"HijingAndOtherBkg",
2091 "Clean_HijingBkg",
"Clean_NotHijingBkg",
"Clean_HijingAndOtherBkg",
2092 "HijingBkg_NotHijingBkg",
"HijingBkg_HijingAndOtherBkg",
"NotHijingBkg_HijingAndOtherBkg" } ;
2094 "no overlap",
"pair Hijing Bkg",
"pair not Hijing bkg",
"pair Hijing and other bkg",
2095 "no overlap and hijing overlap",
"no overlap and generator overlap",
"no overlap and multiple overlap",
2096 "hijing overlap and gener overlap",
"hijing overlap and multiple overlap",
"gener overlap and multiple overlap" } ;
2108 nptbins,ptmin,ptmax) ;
2115 nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
2123 nptbins,ptmin,ptmax,nphibinsopen,0,360) ;
2132 Form(
"Primary #pi^{0} #it{p}_{T} with both photons in acceptance, generator %s",
GetCocktailGenNameToCheck(igen).Data()),
2133 nptbins,ptmin,ptmax) ;
2139 Form(
"Primary #pi^{0} #it{p}_{T} with both photons in acceptance, generator %s",
GetCocktailGenNameToCheck(igen).Data()),
2140 nptbins,ptmin,ptmax) ;
2150 nptbins,ptmin,ptmax) ;
2154 Int_t netabinsopen = TMath::Nint(netabins*4/(etamax-etamin));
2158 nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
2166 nptbins,ptmin,ptmax,nphibinsopen,0,360) ;
2176 nptbins,ptmin,ptmax) ;
2183 nptbins,ptmin,ptmax) ;
2190 for(
Int_t itag = 0; itag < 10; itag++)
2193 (Form(
"h%sGeneratorPairMass%s%s",
2195 Form(
"Pair Mass with generator%s, %s ",
2197 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2203 (Form(
"h%sGeneratorPairMass%s%s_MCPi0",
2205 Form(
"Pair Mass with contribution of true #pi^{0} generator%s, %s ",
2207 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2213 (Form(
"h%sGeneratorPairMass%s%s_MCEta",
2215 Form(
"Pair Mass with contribution of true #eta generator%s, %s ",
2217 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2223 (Form(
"h%sGeneratorPairEPrimRecoRatio%s%s_MCPi0",
2225 Form(
"#it{E}_{reco}/#it{E}_{gen} pair with contribution of true #pi^{0} generator%s, %s ",
2227 nptbins,ptmin,ptmax,nratbins,ratmin,ratmax);
2233 (Form(
"h%sGeneratorPairEPrimRecoRatio%s%s_MCEta",
2235 Form(
"#it{E}_{reco}/#it{E}_{gen} pair with contribution of true #eta generator%s, %s ",
2237 nptbins,ptmin,ptmax,nratbins,ratmin,ratmax);
2243 (Form(
"h%sGeneratorPairEPrimRecoDiff%s%s_MCPi0",
2245 Form(
"#it{E}_{reco}-#it{E}_{gen} pair with contribution of true #pi^{0} generator%s, %s ",
2247 nptbins,ptmin,ptmax,ndifbins,difmin,difmax);
2253 (Form(
"h%sGeneratorPairEPrimRecoDiff%s%s_MCEta",
2255 Form(
"#it{E}_{reco}-#it{E}_{gen} pair with contribution of true #eta generator%s, %s ",
2257 nptbins,ptmin,ptmax,ndifbins,difmin,difmax);
2263 (Form(
"h%sGeneratorPairEPrimRecoRatio%s%s_MCPi0MassCut",
2265 Form(
"#it{E}_{reco}/#it{E}_{gen} pair with contribution of true #pi^{0} generator%s, %s ",
2267 nptbins,ptmin,ptmax,nratbins,ratmin,ratmax);
2273 (Form(
"h%sGeneratorPairEPrimRecoRatio%s%s_MCEtaMassCut",
2275 Form(
"#it{E}_{reco}/#it{E}_{gen} pair with contribution of true #eta generator%s, %s ",
2277 nptbins,ptmin,ptmax,nratbins,ratmin,ratmax);
2283 (Form(
"h%sGeneratorPairEPrimRecoDiff%s%s_MCPi0MassCut",
2285 Form(
"#it{E}_{reco}-#it{E}_{gen} pair with contribution of true #pi^{0} generator%s, %s ",
2287 nptbins,ptmin,ptmax,ndifbins,difmin,difmax);
2293 (Form(
"h%sGeneratorPairEPrimRecoDiff%s%s_MCEtaMassCut",
2295 Form(
"#it{E}_{reco}-#it{E}_{gen} pair with contribution of true #eta generator%s, %s ",
2297 nptbins,ptmin,ptmax,ndifbins,difmin,difmax);
2311 return outputContainer;
2319 printf(
"**** Print %s %s ****\n", GetName(), GetTitle() ) ;
2322 printf(
"Number of bins in Centrality: %d \n",
GetNCentrBin()) ;
2323 printf(
"Number of bins in Z vert. pos: %d \n",
GetNZvertBin()) ;
2324 printf(
"Number of bins in Reac. Plain: %d \n",
GetNRPBin()) ;
2325 printf(
"Depth of event buffer: %d \n",
GetNMaxEvMix()) ;
2326 printf(
"Pair in same Module: %d \n",
fSameSM) ;
2327 printf(
"Cuts: \n") ;
2329 printf(
"Number of modules: %d \n",
fNModules) ;
2331 printf(
"Asymmetry cuts: n = %d, \n",
fNAsymCuts) ;
2332 printf(
"\tasymmetry < ");
2336 printf(
"PID selection bits: n = %d, \n",
fNPIDBits) ;
2337 printf(
"\tPID bit = ");
2343 printf(
"pT cuts: n = %d, \n",
fNPtCuts) ;
2351 printf(
"N cell in cluster cuts: n = %d, \n",
fNCellNCuts) ;
2352 printf(
"\tnCell > ");
2357 printf(
"------------------------------------------------------\n") ;
2380 TParticle * primStack = 0;
2381 AliAODMCParticle * primAOD = 0;
2386 AliStack * stack = 0;
2391 nprim = stack->GetNtrack();
2395 TClonesArray * mcparticles = 0;
2399 if( !mcparticles )
return;
2400 nprim = mcparticles->GetEntriesFast();
2403 for(
Int_t i=0 ; i < nprim; i++)
2405 if ( !
GetReader()->AcceptParticleMCLabel( i ) ) continue ;
2409 primStack = stack->Particle(i) ;
2412 AliWarning(
"ESD primaries pointer not available!!");
2417 if( primStack->Energy() < 0.4 )
continue;
2419 pdg = primStack->GetPdgCode();
2420 nDaught = primStack->GetNDaughters();
2421 iphot1 = primStack->GetDaughter(0) ;
2422 iphot2 = primStack->GetDaughter(1) ;
2425 if ( primStack->Energy() == TMath::Abs(primStack->Pz()) ||
2426 (primStack->Energy() - primStack->Pz()) < 1e-3 ||
2427 (primStack->Energy() + primStack->Pz()) < 0 ) continue ;
2435 mesonY = 0.5*TMath::Log((primStack->Energy()+primStack->Pz())/(primStack->Energy()-primStack->Pz())) ;
2439 primAOD = (AliAODMCParticle *) mcparticles->At(i);
2442 AliWarning(
"AOD primaries pointer not available!!");
2447 if( primAOD->E() < 0.4 )
continue;
2449 pdg = primAOD->GetPdgCode();
2450 nDaught = primAOD->GetNDaughters();
2451 iphot1 = primAOD->GetFirstDaughter() ;
2452 iphot2 = primAOD->GetLastDaughter() ;
2455 if ( primAOD->E() == TMath::Abs(primAOD->Pz()) ||
2456 (primAOD->E() - primAOD->Pz()) < 1e-3 ||
2457 (primAOD->E() + primAOD->Pz()) < 0 ) continue ;
2460 fMCPrimMesonMom.SetPxPyPzE(primAOD->Px(),primAOD->Py(),primAOD->Pz(),primAOD->E());
2462 mesonY = 0.5*TMath::Log((primAOD->E()+primAOD->Pz())/(primAOD->E()-primAOD->Pz())) ;
2466 if( pdg != 111 && pdg != 221) continue ;
2472 if( mesonPhi < 0 ) mesonPhi+=TMath::TwoPi();
2473 mesonPhi *= TMath::RadToDeg();
2494 if(TMath::Abs(mesonY) < 1.0)
2524 if(TMath::Abs(mesonY) < 1.0)
2555 Int_t momindex = -1;
2557 Int_t momstatus = -1;
2560 if(
GetReader()->ReadStack()) momindex = primStack->GetFirstMother();
2561 if(
GetReader()->ReadAODMCParticles()) momindex = primAOD ->GetMother();
2563 if(momindex >= 0 && momindex < nprim)
2567 status = primStack->GetStatusCode();
2568 TParticle* mother = stack->Particle(momindex);
2569 mompdg = TMath::Abs(mother->GetPdgCode());
2570 momstatus = mother->GetStatusCode();
2576 status = primAOD->GetStatus();
2577 AliAODMCParticle* mother = (AliAODMCParticle*) mcparticles->At(momindex);
2578 mompdg = TMath::Abs(mother->GetPdgCode());
2579 momstatus = mother->GetStatus();
2580 momR = TMath::Sqrt(mother->Xv()*mother->Xv()+mother->Yv()*mother->Yv());
2591 else if(mompdg > 2100 && mompdg < 2210)
2597 else if(mompdg >= 310 && mompdg <= 323)
2600 else if(momstatus == 11 || momstatus == 12 )
2611 else if(mompdg > 2100 && mompdg < 2210)
2617 else if(mompdg >= 310 && mompdg <= 323)
2620 else if(momstatus == 11 || momstatus == 12 )
2630 else if(mompdg > 2100 && mompdg < 2210)
2633 else if(momstatus == 11 || momstatus == 12 )
2647 if ( nDaught != 2 )
continue;
2649 if ( iphot1 < 0 || iphot1 >= nprim || iphot2 < 0 || iphot2 >= nprim ) continue ;
2653 Bool_t inacceptance1 = kTRUE;
2654 Bool_t inacceptance2 = kTRUE;
2658 TParticle * phot1 = stack->Particle(iphot1) ;
2659 TParticle * phot2 = stack->Particle(iphot2) ;
2661 if(!phot1 || !phot2) continue ;
2663 pdg1 = phot1->GetPdgCode();
2664 pdg2 = phot2->GetPdgCode();
2679 AliAODMCParticle * phot1 = (AliAODMCParticle *) mcparticles->At(iphot1) ;
2680 AliAODMCParticle * phot2 = (AliAODMCParticle *) mcparticles->At(iphot2) ;
2682 if(!phot1 || !phot2) continue ;
2684 pdg1 = phot1->GetPdgCode();
2685 pdg2 = phot2->GetPdgCode();
2687 fPhotonMom1.SetPxPyPzE(phot1->Px(),phot1->Py(),phot1->Pz(),phot1->E());
2688 fPhotonMom2.SetPxPyPzE(phot2->Px(),phot2->Py(),phot2->Pz(),phot2->E());
2698 if( pdg1 != 22 || pdg2 !=22) continue ;
2717 if(photonPhi1 < 0) photonPhi1+=TMath::TwoPi();
2718 if(photonPhi2 < 0) photonPhi2+=TMath::TwoPi();
2727 Bool_t sameSector = kFALSE;
2731 if((sm1==j && sm2==j+1) || (sm1==j+1 && sm2==j)) sameSector = kTRUE;
2734 if(sm1!=sm2 && !sameSector)
2736 inacceptance1 = kFALSE;
2737 inacceptance2 = kFALSE;
2744 AliDebug(2,Form(
"Accepted in %s?: m (%2.2f,%2.2f,%2.2f), p1 (%2.2f,%2.2f,%2.2f), p2 (%2.2f,%2.2f,%2.2f) : in1 %d, in2 %d",
2746 mesonPt,mesonYeta,mesonPhi,
2749 inacceptance1, inacceptance2));
2751 if(inacceptance1 && inacceptance2)
2756 Bool_t cutAngle = kFALSE;
2759 AliDebug(2,Form(
"\t ACCEPTED pdg %d: pt %2.2f, phi %2.2f, eta %2.2f",pdg,mesonPt,mesonPhi,mesonYeta));
2797 Int_t angleBin = -1;
2804 if( angleBin >= 0 && angleBin < fNAngleCutBins)
2845 Int_t angleBin = -1;
2852 if( angleBin >= 0 && angleBin < fNAngleCutBins)
2868 Float_t momentumDaughter1AlongMother = 0.;
2869 Float_t momentumDaughter2AlongMother = 0.;
2871 if (momentumSquaredMother > 0.)
2878 Float_t ptArmSquared = momentumSquaredDaughter1 - momentumDaughter1AlongMother*momentumDaughter1AlongMother;
2881 if (ptArmSquared > 0.)
2882 pTArm = sqrt(ptArmSquared);
2885 if(momentumDaughter1AlongMother + momentumDaughter2AlongMother > 0)
2886 alphaArm = (momentumDaughter1AlongMother -momentumDaughter2AlongMother) / (momentumDaughter1AlongMother + momentumDaughter2AlongMother);
2894 if(en > 8 && en <= 12) ebin = 0;
2895 if(en > 12 && en <= 16) ebin = 1;
2896 if(en > 16 && en <= 20) ebin = 2;
2897 if(en > 20) ebin = 3;
2898 if(ebin < 0 || ebin > 3) return ;
2936 Int_t ancStatus = 0;
2940 Int_t momindex = -1;
2942 Int_t momstatus = -1;
2950 AliDebug(1,Form(
"Common ancestor label %d, pdg %d, name %s, status %d",
2951 ancLabel,ancPDG,TDatabasePDG::Instance()->GetParticle(ancPDG)->GetName(),ancStatus));
2957 else if(TMath::Abs(ancPDG)==11)
2961 else if(ancPDG==111)
3014 TParticle* ancestor =
GetMCStack()->Particle(ancLabel);
3015 status = ancestor->GetStatusCode();
3016 momindex = ancestor->GetFirstMother();
3019 TParticle* mother =
GetMCStack()->Particle(momindex);
3020 mompdg = TMath::Abs(mother->GetPdgCode());
3021 momstatus = mother->GetStatusCode();
3022 prodR = mother->R();
3030 AliAODMCParticle* ancestor = (AliAODMCParticle *) mcparticles->At(ancLabel);
3031 status = ancestor->GetStatus();
3032 momindex = ancestor->GetMother();
3035 AliAODMCParticle* mother = (AliAODMCParticle *) mcparticles->At(momindex);
3036 mompdg = TMath::Abs(mother->GetPdgCode());
3037 momstatus = mother->GetStatus();
3038 prodR = TMath::Sqrt(mother->Xv()*mother->Xv()+mother->Yv()*mother->Yv());
3054 else if(mompdg > 2100 && mompdg < 2210)
3060 else if(mompdg >= 310 && mompdg <= 323)
3063 else if(momstatus == 11 || momstatus == 12 )
3071 else if(mompdg > 2100 && mompdg < 2210)
3077 else if(mompdg >= 310 && mompdg <= 323)
3080 else if(momstatus == 11 || momstatus == 12 )
3091 Int_t angleBin = -1;
3098 if( angleBin >= 0 && angleBin < fNAngleCutBins)
3103 else if(ancPDG==221)
3157 TParticle* ancestor =
GetMCStack()->Particle(ancLabel);
3158 momindex = ancestor->GetFirstMother();
3161 TParticle* mother =
GetMCStack()->Particle(momindex);
3162 mompdg = TMath::Abs(mother->GetPdgCode());
3163 momstatus = mother->GetStatusCode();
3164 prodR = mother->R();
3171 AliAODMCParticle* ancestor = (AliAODMCParticle *) mcparticles->At(ancLabel);
3172 momindex = ancestor->GetMother();
3175 AliAODMCParticle* mother = (AliAODMCParticle *) mcparticles->At(momindex);
3176 mompdg = TMath::Abs(mother->GetPdgCode());
3177 momstatus = mother->GetStatus();
3178 prodR = TMath::Sqrt(mother->Xv()*mother->Xv()+mother->Yv()*mother->Yv());
3189 else if(mompdg > 2100 && mompdg < 2210)
3192 else if(momstatus == 11 || momstatus == 12 )
3202 Int_t angleBin = -1;
3209 if( angleBin >= 0 && angleBin < fNAngleCutBins)
3213 else if(ancPDG==-2212)
3217 else if(ancPDG==-2112)
3221 else if(TMath::Abs(ancPDG)==13)
3225 else if (TMath::Abs(ancPDG) > 100 && ancLabel > 7)
3238 if(ancStatus==11 || ancStatus==12)
3242 else if (ancStatus==21)
3248 else if(ancLabel < 6)
3252 else if(ancLabel < 8)
3270 AliDebug(1,
"Common ancestor not found");
3275 if(mcIndex >= 0 && mcIndex < 13)
3290 if(!cluster2 || !cluster1)
3292 AliWarning(Form(
"Cluster1 %p or Cluster 2 %p not found!",cluster1,cluster2));
3298 TString genName1 =
"", genName2 =
"", genNameBkg1 =
"", genNameBkg2 =
"";
3300 if (genBkgTag1 == -1)
return;
3301 else if(genBkgTag1 > 3) printf(
"Bkg1 generator tag larger than 3; Main %s Bkg %s\n",genName1.Data(),genNameBkg1.Data());
3304 if (genBkgTag2 == -1)
return;
3305 else if(genBkgTag2 > 3) printf(
"Bkg2 generator tag larger than 3; Main %s Bkg %s\n",genName2.Data(),genNameBkg2.Data());
3308 if(genName1!=genName2)
return;
3324 if ( genBkgTag1 == genBkgTag2 )
3330 Int_t genBkgMin = -1;
3331 Int_t genBkgMax = -1;
3333 if(genBkgTag1 > genBkgTag2)
3335 genBkgMax = genBkgTag1;
3336 genBkgMin = genBkgTag2;
3340 genBkgMax = genBkgTag2;
3341 genBkgMin = genBkgTag1;
3344 if ( genBkgMin == 0 )
3346 if (genBkgMax == 1 ) tag = 4;
3347 else if(genBkgMax == 2 ) tag = 5;
3348 else if(genBkgMax == 3 ) tag = 6;
3350 else if ( genBkgMin == 1 )
3352 if ( genBkgMax == 2 ) tag = 7;
3353 else if ( genBkgMax == 3 ) tag = 8;
3355 else if ( genBkgMin == 2 ) tag = 9;
3360 printf(
"Combination not found, bkg1 tag %d, bkg2 tag %d\n",genBkgTag1,genBkgTag2);
3368 if ( ptPrim < 0.1 || pt < 0.5 )
return;
3393 else if( mcIndex==3 )
3438 AliFatal(Form(
"No input aod photons in AOD with name branch < %s >, STOP",
GetInputAODName().
Data()));
3450 Int_t nPhot2 = nPhot;
3451 Int_t minEntries = 2;
3464 if(!secondLoopInputData)
3470 nPhot2 = secondLoopInputData->GetEntriesFast() ;
3475 AliDebug(1,Form(
"Photon entries %d", nPhot));
3478 if ( nPhot < minEntries )
3503 Double_t vert[] = {0.0, 0.0, 0.0} ;
3504 Int_t evtIndex1 = 0 ;
3505 Int_t currentEvtIndex = -1;
3513 AliWarning(Form(
"Mix Bin not expected: cen bin %d, z bin %d, rp bin %d, total bin %d, Event Centrality %d, z vertex %2.3f, Reaction Plane %2.3f",
3526 for(
Int_t i1 = 0; i1 < nPhot-last; i1++)
3538 if ( evtIndex1 == -1 )
3540 if ( evtIndex1 == -2 )
3546 if (evtIndex1 != currentEvtIndex)
3559 currentEvtIndex = evtIndex1 ;
3565 fPhotonMom1.SetPxPyPzE(p1->Px(),p1->Py(),p1->Pz(),p1->E());
3568 module1 = p1->GetSModNumber();
3575 Int_t iclus1 = -1, iclus2 = -1 ;
3576 Float_t maxCellFraction1 = 0, maxCellFraction2 = 0;
3577 Int_t absIdMax1 = -1, absIdMax2 = -1;
3578 Int_t icol1 = -1, icol2 = -1, icolAbs1 = -1, icolAbs2 = -1;
3579 Int_t irow1 = -1, irow2 = -1, irowAbs1 = -1, irowAbs2 = -1;
3580 Int_t iRCU1 = -1, iRCU2 = -1;
3585 if(!cluster1) AliWarning(
"Cluster1 not found!");
3611 for(
Int_t i2 = first; i2 < nPhot2; i2++)
3614 AliAODPWG4Particle * p2 = (AliAODPWG4Particle*) (secondLoopInputData->At(i2)) ;
3623 if ( evtIndex2 == -1 )
3625 if ( evtIndex2 == -2 )
3672 Int_t ncell1 = p1->GetNCells();
3677 Int_t ncell2 = p2->GetNCells();
3689 fPhotonMom2.SetPxPyPzE(p2->Px(),p2->Py(),p2->Pz(),p2->E());
3692 module2 = p2->GetSModNumber();
3701 Double_t a = TMath::Abs(p1->E()-p2->E())/(p1->E()+p2->E()) ;
3703 AliDebug(2,Form(
"E: fPhotonMom1 %f, fPhotonMom2 %f; Pair: pT %f, mass %f, a %f", p1->E(), p2->E(), (
fPhotonMom1 +
fPhotonMom2).E(),m,a));
3729 if(module1==module2 && module1 >=0 && module1<
fNModules)
3785 if(module1!=module2) ok=kFALSE;
3814 if ( l01 > 0.01 && l01 < 0.4 &&
3836 if(index < 0 || index >= ncentr*fNPIDBits*fNAsymCuts) continue ;
3843 if(p1->DistToBad()>0 && p2->DistToBad()>0)
3848 if(p1->DistToBad()>1 && p2->DistToBad()>1)
3872 Int_t angleBin = -1;
3879 if( angleBin >= 0 && angleBin < fNAngleCutBins)
3896 Int_t mod1 = module1;
3897 Int_t mod2 = module2;
3901 if(!cluster2) AliWarning(
"Cluster2 not found!");
3925 Int_t tmp = absIdMax2;
3926 absIdMax2 = absIdMax1;
3968 if ( p1->GetFiducialArea() == 0 && p2->GetFiducialArea() == 0 )
3971 else if ( p1->GetFiducialArea() != 0 && p2->GetFiducialArea() != 0 )
3998 p1->GetCaloLabel(0), p2->GetCaloLabel(0),
3999 p1->GetTag(),p2->GetTag(),
4001 ncell1, ncell2, m, pt, a,deta, dphi, angle);
4047 if(eventbin < 0) return ;
4053 AliWarning(Form(
"Mix event list not available, bin %d",eventbin));
4057 Int_t nMixed = evMixList->GetSize() ;
4058 for(
Int_t ii=0; ii<nMixed; ii++)
4060 TClonesArray* ev2= (TClonesArray*) (evMixList->At(ii));
4061 Int_t nPhot2=ev2->GetEntriesFast() ;
4063 AliDebug(1,Form(
"Mixed event %d photon entries %d, centrality bin %d",ii, nPhot2,
GetEventCentralityBin()));
4070 for(
Int_t i1 = 0; i1 < nPhot; i1++)
4081 fPhotonMom1.SetPxPyPzE(p1->Px(),p1->Py(),p1->Pz(),p1->E());
4087 for(
Int_t i2 = 0; i2 < nPhot2; i2++)
4089 AliAODPWG4Particle * p2 = (AliAODPWG4Particle*) (ev2->At(i2)) ;
4095 fPhotonMom2.SetPxPyPzE(p2->Px(),p2->Py(),p2->Pz(),p2->E());
4098 Double_t a = TMath::Abs(p1->E()-p2->E())/(p1->E()+p2->E()) ;
4114 AliDebug(2,Form(
"Mixed Event: pT: fPhotonMom1 %2.2f, fPhotonMom2 %2.2f; Pair: pT %2.2f, mass %2.3f, a %2.3f",p1->Pt(), p2->Pt(), pt,m,a));
4126 if(module1==module2 && module1 >=0 && module1<
fNModules)
4181 if(module1!=module2) ok=kFALSE;
4221 if(index < 0 || index >= ncentr*fNPIDBits*fNAsymCuts) continue ;
4228 if(p1->DistToBad()>0 && p2->DistToBad()>0)
4233 if(p1->DistToBad()>1 && p2->DistToBad()>1)
4249 Int_t ncell1 = p1->GetNCells();
4250 Int_t ncell2 = p1->GetNCells();
4294 Int_t angleBin = -1;
4301 if( angleBin >= 0 && angleBin < fNAngleCutBins)
4318 Int_t mod1 = module1;
4319 Int_t mod2 = module2;
4396 if ( p1->GetFiducialArea() == 0 && p2->GetFiducialArea() == 0 )
4399 else if ( p1->GetFiducialArea() != 0 && p2->GetFiducialArea() != 0 )
4412 TClonesArray *currentEvent =
new TClonesArray(*secondLoopInputData);
4415 if( currentEvent->GetEntriesFast() > 0 )
4417 evMixList->AddFirst(currentEvent) ;
4421 TClonesArray * tmp = (TClonesArray*) (evMixList->Last()) ;
4422 evMixList->RemoveLast() ;
4428 delete currentEvent ;
4433 AliDebug(1,
"End fill histograms");
4443 Int_t evtIndex = -1 ;
4449 evtIndex =
GetMixedEvent()->EventIndexForCaloCluster(part->GetCaloLabel(0)) ;
virtual Bool_t IsFiducialCutOn() const
TH2F * fhPrimEtaY
! Rapidity distribution of primary particles vs pT
Float_t GetHistoPtMax() const
TH2F * fhPairGeneratorsBkgMassMCPi0[10][10]
! Mass for a pair of clusters with depending bkg type, pi0 true pairs
TH2F ** fhRe3
[GetNCentrBin()*fNPIDBits*fNAsymCuts]
TH2F * fhPrimEtaAccPtCentrality
! primary eta with accepted daughters reconstructed centrality vs pT
TH2F * fhMiOpAngleBinMinClusterEPerSM[10]
! energy of lowest energy cluster in pair, depending on opening angle cut, y axis is SM number...
TH2F * fhPairGeneratorsBkgEPrimRecoRatioMCEtaMassCut[10][10]
! pT reco / pT primary for a pair of clusters with depending bkg type, eta true pairs, eta mass window
TH2F * fhReOpAngleBinMaxClusterEPerSM[10]
! energy of highest energy cluster in pair, depending on opening angle cut, y axis is SM number ...
virtual AliMCEvent * GetMC() const
TH2F * fhPrimPi0Y
! Rapidity distribution of primary particles vs pT
TLorentzVector fPhotonMom1Boost
! Photon cluster momentum, temporary array
TH2F * fhMiOpAngleBinPairClusterRatioPerSM[10]
! lowest/highest energy cluster in pair, depending on opening angle cut, y axis is SM number...
Int_t fNModules
[GetNCentrBin()*GetNZvertBin()*GetNRPBin()]
TH2F * fhPrimEtaYetaYcut
! PseudoRapidity distribution of primary particles vs pT, Y<1
virtual Bool_t DoOwnMix() const
TH1F * fhPrimPi0AccPt
! Spectrum of primary with accepted daughters
Float_t GetHistoPtMin() const
virtual Float_t GetMaxPt() const
TH2F * fhPrimEtaAccPhi
! Azimutal distribution of primary with accepted daughters vs pT
TH1F * fhPrimPi0AccPtPerGenerator[10]
! Spectrum of primary with accepted daughters
TH2F * fhReMCFromMixConversion
! Invariant mass of 2 clusters one from conversion and the other not
Int_t fPIDBits[10]
Array with different PID bits.
TH2F * fhPairGeneratorsBkgEPrimRecoDiffMCPi0[10][10]
! pT reco - pT primary for a pair of clusters with depending bkg type, pi0 true pairs ...
virtual Int_t GetCalorimeter() const
TH2F * fhMiPtAsymPi0
! Mix two-photon pt vs asymmetry, close to pi0 mass
TH2F * fhMCPi0PtRecOpenAngleMassCut
! Real pi0 pairs, reco pT vs reco opening angle, inside a mass window
virtual void AddToHistogramsName(TString add)
virtual AliVCaloCells * GetEMCALCells() const
TH2F * fhReOpAngleBinPairClusterMassMCTrueEta[10]
! cluster pair mass vs pT, depending on opening angle cut, true eta decay pairs from MC ...
TH2F * fhMCPi0PtTruePtRecDif
! Real pi0 pairs, reco pT vs pT difference generated - reco
Bool_t fFillArmenterosThetaStar
Fill armenteros histograms.
Int_t fNPIDBits
Number of possible PID bit combinations.
TLorentzVector fPhotonMom2
! Photon cluster momentum, temporary array
TH2F * fhReOpAngleBinMaxClusterColRow[10]
! Column and row location of main cell of highest energy cluster in pair, depending on opening angle ...
TH2F ** fhMiDiffSectorDCALPHOSMod
[6]
virtual Bool_t IsDataMC() const
Int_t fCellNCuts[10]
Array with different cell number cluster cuts.
TH2F * fhMCOrgDeltaEta[13]
! Delta Eta vs pt of real pairs, check common origin of pair
TH2F * fhReSS[3]
[fNPtCuts*fNAsymCuts*fNCellNCuts]
TH2F * fhReOpAngleBinMaxClusterNCellPerSM[10]
! N cells of highest energy cluster in pair, depending on opening angle cut, y axis is SM number ...
TH2F * fhPrimEtaCosOpeningAngle
! Cosinus of opening angle of pair version pair energy, eta primaries
Int_t GetHistoEDiffBins() const
TH2F * fhPrimPi0PtStatus
! Spectrum of generated pi0 vs pi0 status
Bool_t fCheckConversion
Fill histograms with tagged photons as conversion.
virtual Int_t GetModuleNumberCellIndexesAbsCaloMap(Int_t absId, Int_t calo, Int_t &icol, Int_t &irow, Int_t &iRCU, Int_t &icolAbs, Int_t &irowAbs) const
TH2F * fhPtBinClusterEtaPhi[10]
! Eta-Phi location of cluster in different energy bins.
virtual Float_t GetPairTimeCut() const
Time cut in ns.
virtual AliStack * GetMCStack() const
virtual void GetVertex(Double_t vertex[3]) const
TH1F * fhPrimPi0E
! Spectrum of Primary
virtual TString GetInputAODName() const
TH1F * fhPrimEtaAccPtPhotonCutsPerGenerator[10]
! Spectrum of primary with accepted daughters, photon pt or angle cuts
Float_t GetPhi(Float_t phi) const
Shift phi angle in case of negative value 360 degrees. Example TLorenzVector::Phi defined in -pi to p...
Bool_t fUseAngleEDepCut
Select pairs depending on their opening angle.
TH2F * fhMCEtaPtTruePtRecRat
! Real pi0 pairs, reco pT vs pT ratio reco / generated
TH2F ** fhMiSameSectorEMCALMod
[fNModules-2]
TH2F * fhMixedOpeningAnglePerSM[20]
! Opening angle of pair versus pair energy, per SM
Selected photon clusters invariant mass analysis.
virtual AliVEvent * GetInputEvent() const
TH1F * fhCentrality
! Histogram with centrality bins with at least one pare
TH2F * fhMiSecondaryCellOutTimeWindow
! Combine clusters when at least one significant cells in cluster has t > 50 ns, different events ...
virtual void SetInputAODName(TString name)
Bool_t fPairWithOtherDetector
Pair (DCal and PHOS) or (PCM and (PHOS or DCAL or EMCAL))
Float_t DegToRad(Float_t deg) const
TH2F * fhPrimPi0PtCentrality
! primary pi0 reconstructed centrality vs pT
TH2F * fhPrimEtaPtCentrality
! primary eta reconstructed centrality vs pT
TH2F * fhPairGeneratorsBkgEPrimRecoRatioMCPi0[10][10]
! pT reco / pT primary for a pair of clusters with depending bkg type, pi0 true pairs ...
virtual Float_t GetZvertexCut() const
Maximal number of events for mixin.
TH2F * fhPrimPi0PhiPerGenerator[10]
! Azimutal distribution of primary particles vs pT
virtual Double_t GetEventPlaneAngle() const
TH1F * fhPrimEtaPtPerGenerator[10]
! Spectrum of primary with accepted daughters
Float_t GetHistoRatioMax() const
TH2F * fhMCPi0PtTruePtRecRat
[fNPtCuts*fNAsymCuts*fNCellNCuts]
TH2F * fhMCEtaPtRecOpenAngle
! Real pi0 pairs, reco pT vs reco opening angle
TH2F * fhReOpAngleBinPairClusterMassPerSM[10]
! cluster pair mass, depending on opening angle cut, y axis is SM number
TH2F * fhReMCFromConversion
! Invariant mass of 2 clusters originated in conversions
TH2F ** fhReSameSideEMCALMod
[fNModules]
TH1F * fhPrimPi0AccPtOpAngCuts[10]
! Spectrum of primary with accepted daughters, different opening angles
TH1F * fhPrimPi0AccPtPhotonCuts
! Spectrum of primary with accepted daughters, photon pt or angle cuts
TH2F * fhPrimPi0OpeningAngle
! Opening angle of pair versus pair energy, primaries
virtual AliNeutralMesonSelection * GetNeutralMesonSelection()
TH2F * fhRealOpeningAngle
! Opening angle of pair versus pair energy
TH2F * fhMCOrgMass[13]
! Mass vs pt of real pairs, check common origin of pair
TH2F * fhMiOpAngleBinMinClusterEtaPhi[10]
! Eta-Phi location of lowest energy cluster in pair, depending on opening angle cut, mixed event
TH2F * fhMiOpAngleBinPairClusterMass[10]
! cluster pair mass vs pT, depending on opening angle cut, mixed event
Int_t GetHistoMassBins() const
Int_t GetHistoPhiBins() const
TH2F * fhRePtAsymPi0
! REAL two-photon pt vs asymmetry, close to pi0 mass
TLorentzVector fPhotonMom1
! Photon cluster momentum, temporary array
TH2F * fhRealCosOpeningAngle
! Cosinus of opening angle of pair version pair energy
TH2F ** fhRe1
REAL two-photon invariant mass distribution for different centralities and Asymmetry.
Float_t GetHistoMassMin() const
TH2F * fhPrimPi0ProdVertex
! Spectrum of primary pi0 vs production vertex
TH2F ** fhReDiffPHOSMod
[fNModules/2]
Float_t RadToDeg(Float_t rad) const
TH2F * fhMiConv
! MIXED two-photon invariant mass distribution one of the pair was 2 clusters with small mass ...
TH2F * fhReOpAngleBinPairClusterMass[10]
! cluster pair mass vs pT, depending on opening angle cut
Float_t fAsymCuts[10]
Array with different assymetry cuts.
TString GetCocktailGenNameToCheck(Int_t i) const
TH2F * fhMCOrgAsym[13]
! Asymmetry vs pt of real pairs, check common origin of pair
virtual Int_t GetEventCentrality() const
TH2F ** fhRePtNCellAsymCuts
[GetNCentrBin()*fNPIDBits*fNAsymCuts]
TH2F * fhPrimPi0PtOrigin
! Spectrum of generated pi0 vs mother
Float_t GetHistoDiffTimeMin() const
virtual Int_t GetEventVzBin() const
Float_t fPtCuts[11]
Array with different pt cuts, minimum.
TH2F * fhRealOpeningAnglePerSM[20]
! Opening angle of pair versus pair energy, per SM
TH2F * fhMiOpAngleBinMaxClusterNCellPerSM[10]
! N cells of highest energy cluster in pair, depending on opening angle cut, y axis is SM number...
Bool_t IsMCParticleInCalorimeterAcceptance(Int_t calo, TParticle *particle)
TH2F ** fhMCPi0MassPtRec
Real pi0 pairs, recon