18 #include <TClonesArray.h>
19 #include <TObjString.h>
20 #include "TParticle.h"
21 #include "TDatabasePDG.h"
30 #include "AliVCluster.h"
31 #include "AliAODMCParticle.h"
32 #include "AliMixedEvent.h"
33 #include "AliAODEvent.h"
34 #include "AliESDEvent.h"
37 #include "AliPHOSGeoUtils.h"
38 #include "AliEMCALGeometry.h"
50 fMinDist(0.), fMinDist2(0.), fMinDist3(0.),
51 fRejectTrackMatch(0), fFillTMHisto(kFALSE),
52 fTimeCutMin(-10000), fTimeCutMax(10000),
54 fNLMCutMin(-1), fNLMCutMax(10),
55 fFillSSHistograms(kFALSE), fFillOnlySimpleSSHisto(1),
56 fNOriginHistograms(9), fNPrimaryHistograms(5),
57 fMomentum(), fPrimaryMom(), fProdVertex(),
61 fhNCellsE(0), fhCellsE(0),
62 fhMaxCellDiffClusterE(0), fhTimePt(0), fhEtaPhi(0),
64 fhEPhoton(0), fhPtPhoton(0),
65 fhPhiPhoton(0), fhEtaPhoton(0),
66 fhEtaPhiPhoton(0), fhEtaPhi05Photon(0),
67 fhPtCentralityPhoton(0), fhPtEventPlanePhoton(0),
71 fhDispE(0), fhLam0E(0), fhLam1E(0),
72 fhDispETRD(0), fhLam0ETRD(0), fhLam1ETRD(0),
73 fhDispETM(0), fhLam0ETM(0), fhLam1ETM(0),
74 fhDispETMTRD(0), fhLam0ETMTRD(0), fhLam1ETMTRD(0),
76 fhNCellsLam0LowE(0), fhNCellsLam1LowE(0), fhNCellsDispLowE(0),
77 fhNCellsLam0HighE(0), fhNCellsLam1HighE(0), fhNCellsDispHighE(0),
79 fhEtaLam0LowE(0), fhPhiLam0LowE(0),
80 fhEtaLam0HighE(0), fhPhiLam0HighE(0),
81 fhLam0DispLowE(0), fhLam0DispHighE(0),
82 fhLam1Lam0LowE(0), fhLam1Lam0HighE(0),
83 fhDispLam1LowE(0), fhDispLam1HighE(0),
84 fhDispEtaE(0), fhDispPhiE(0),
85 fhSumEtaE(0), fhSumPhiE(0), fhSumEtaPhiE(0),
86 fhDispEtaPhiDiffE(0), fhSphericityE(0),
87 fhDispSumEtaDiffE(0), fhDispSumPhiDiffE(0),
90 fhMCPhotonELambda0NoOverlap(0), fhMCPhotonELambda0TwoOverlap(0), fhMCPhotonELambda0NOverlap(0),
92 fhEmbeddedSignalFractionEnergy(0),
93 fhEmbedPhotonELambda0FullSignal(0), fhEmbedPhotonELambda0MostlySignal(0),
94 fhEmbedPhotonELambda0MostlyBkg(0), fhEmbedPhotonELambda0FullBkg(0),
95 fhEmbedPi0ELambda0FullSignal(0), fhEmbedPi0ELambda0MostlySignal(0),
96 fhEmbedPi0ELambda0MostlyBkg(0), fhEmbedPi0ELambda0FullBkg(0),
98 fhTimePtPhotonNoCut(0), fhTimePtPhotonSPD(0),
99 fhTimeNPileUpVertSPD(0), fhTimeNPileUpVertTrack(0),
100 fhPtPhotonNPileUpSPDVtx(0), fhPtPhotonNPileUpTrkVtx(0),
101 fhPtPhotonNPileUpSPDVtxTimeCut(0), fhPtPhotonNPileUpTrkVtxTimeCut(0),
102 fhPtPhotonNPileUpSPDVtxTimeCut2(0), fhPtPhotonNPileUpTrkVtxTimeCut2(0),
104 fhEClusterSM(0), fhEPhotonSM(0),
105 fhPtClusterSM(0), fhPtPhotonSM(0),
106 fhMCConversionVertex(0), fhMCConversionLambda0Rcut()
135 for(Int_t i = 0; i < 7; i++)
176 for(Int_t i = 0; i < 5; i++)
183 for(Int_t i = 0; i < 2; i++)
227 if(phicluster < 0) phicluster+=TMath::TwoPi();
231 AliDebug(2,Form(
"Current Event %d; Before selection : E %2.2f, pT %2.2f, phi %2.2f, eta %2.2f",
233 ecluster,ptcluster, phicluster*TMath::RadToDeg(),etacluster));
241 if(nSM <
GetCaloUtils()->GetNumberOfSuperModulesUsed() && nSM >=0)
251 AliDebug(2,Form(
"\t Cluster %d Pass E Cut",calo->GetID()));
258 Double_t tof = calo->GetTOF()*1e9;
259 if(tof < fTimeCutMin || tof >
fTimeCutMax)
return kFALSE;
261 AliDebug(2,Form(
"\t Cluster %d Pass Time Cut",calo->GetID()));
269 AliDebug(2,Form(
"\t Cluster %d Pass NCell Cut",calo->GetID()));
274 if(nMaxima < fNLMCutMin || nMaxima >
fNLMCutMax)
return kFALSE ;
275 AliDebug(2,Form(
"\t Cluster %d pass NLM %d of out of range",calo->GetID(), nMaxima));
285 if(! in )
return kFALSE ;
288 AliDebug(2,Form(
"\t Fiducial cut passed"));
303 AliDebug(2,
"\t Reject track-matched clusters");
307 AliDebug(2,
"\t Track-matching cut passed");
315 Double_t distBad=calo->GetDistanceToBadChannel() ;
316 if(distBad < 0.) distBad=9999. ;
321 else AliDebug(2,Form(
"\t Bad channel cut passed %4.2f > %2.2f",distBad,
fMinDist));
326 AliDebug(1,Form(
"Current Event %d; After selection : E %2.2f, pT %2.2f, phi %2.2f, eta %2.2f",
343 Double_t photonY = -100 ;
344 Double_t photonE = -1 ;
345 Double_t photonPt = -1 ;
346 Double_t photonPhi = 100 ;
347 Double_t photonEta = -1 ;
354 Bool_t inacceptance = kFALSE ;
356 TParticle * primStack = 0;
357 AliAODMCParticle * primAOD = 0;
360 AliStack * stack = 0;
366 AliFatal(
"Stack not available, is the MC handler called? STOP");
369 nprim = stack->GetNtrack();
373 TClonesArray * mcparticles = 0;
379 AliFatal(
"Standard MCParticles not available!");
382 nprim = mcparticles->GetEntriesFast();
385 for(Int_t i=0 ; i < nprim; i++)
387 if(
GetReader()->AcceptOnlyHIJINGLabels() && !
GetReader()->IsHIJINGLabel(i)) continue ;
391 primStack = stack->Particle(i) ;
394 AliWarning(
"ESD primaries pointer not available!!");
398 pdg = primStack->GetPdgCode();
399 status = primStack->GetStatusCode();
401 if(primStack->Energy() == TMath::Abs(primStack->Pz())) continue ;
409 photonY = 0.5*TMath::Log((primStack->Energy()+primStack->Pz())/(primStack->Energy()-primStack->Pz())) ;
413 primAOD = (AliAODMCParticle *) mcparticles->At(i);
416 AliWarning(
"AOD primaries pointer not available!!");
420 pdg = primAOD->GetPdgCode();
421 status = primAOD->GetStatus();
423 if(primAOD->E() == TMath::Abs(primAOD->Pz())) continue ;
426 fMomentum.SetPxPyPzE(primAOD->Px(),primAOD->Py(),primAOD->Pz(),primAOD->E());
428 photonY = 0.5*TMath::Log((primAOD->E()+primAOD->Pz())/(primAOD->E()-primAOD->Pz())) ;
432 if(pdg != 22 ) continue ;
443 if(photonPhi < 0) photonPhi+=TMath::TwoPi();
446 inacceptance = kTRUE;
476 if(status > 1) continue ;
478 Bool_t takeIt = kFALSE ;
516 if(!takeIt) continue ;
520 if(TMath::Abs(photonY) < 1.0)
541 if(TMath::Abs(photonY) < 1.0)
568 Float_t time = cluster->GetTOF()*1.e9;
588 if(cells->GetCellAmplitude(absIdMax) > 0.1 && TMath::Abs(time) < 30)
590 for (Int_t ipos = 0; ipos < cluster->GetNCells(); ipos++)
592 Int_t absId = cluster->GetCellsAbsId()[ipos];
594 if( absId == absIdMax ) continue ;
596 Double_t tcell = cells->GetCellTime(absId);
597 Float_t amp = cells->GetCellAmplitude(absId);
603 Float_t diff = (time-tcell);
605 if( cells->GetCellAmplitude(absIdMax) < 0.1 )
continue ;
618 AliESDEvent* esdEv =
dynamic_cast<AliESDEvent*
> (event);
619 AliAODEvent* aodEv =
dynamic_cast<AliAODEvent*
> (event);
630 nVtxSPD = esdEv->GetNumberOfPileupVerticesSPD();
631 nVtxTrk = esdEv->GetNumberOfPileupVerticesTracks();
636 nVtxSPD = aodEv->GetNumberOfPileupVerticesSPD();
637 nVtxTrk = aodEv->GetNumberOfPileupVerticesTracks();
649 if(TMath::Abs(time) < 25)
655 if(time < 75 && time > -25)
666 Int_t mcTag, Float_t maxCellFraction)
670 Float_t
energy = cluster->E();
671 Int_t ncells = cluster->GetNCells();
672 Float_t lambda0 = cluster->GetM02();
673 Float_t lambda1 = cluster->GetM20();
674 Float_t disp = cluster->GetDispersion()*cluster->GetDispersion();
678 if(phi < 0) phi+=TMath::TwoPi();
692 Float_t l0 = 0., l1 = 0.;
693 Float_t dispp= 0., dEta = 0., dPhi = 0.;
694 Float_t sEta = 0., sPhi = 0., sEtaPhi = 0.;
698 l0, l1, dispp, dEta, dPhi, sEta, sPhi, sEtaPhi);
715 if (energy < 2 ) ebin = 0;
716 else if (energy < 4 ) ebin = 1;
717 else if (energy < 6 ) ebin = 2;
718 else if (energy < 10) ebin = 3;
719 else if (energy < 15) ebin = 4;
720 else if (energy < 20) ebin = 5;
732 Float_t dZ = cluster->GetTrackDz();
733 Float_t dR = cluster->GetTrackDx();
740 if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
786 AliVCaloCells* cells = 0;
791 Float_t fraction = 0;
794 if(
GetReader()->IsEmbeddedClusterSelectionOn())
799 Float_t clusterE = 0;
801 for(Int_t icell = 0; icell < cluster->GetNCells(); icell++)
803 cellE = cells->GetCellAmplitude(cluster->GetCellAbsId(icell));
805 fraction+=cellE*cluster->GetCellAmplitudeFraction(icell);
811 AliDebug(1,Form(
"Energy fraction of embedded signal %2.3f, Energy %2.3f",fraction, clusterE));
827 if(!
GetReader()->IsEmbeddedClusterSelectionOn())
833 const UInt_t nlabels = cluster->GetNLabels();
834 Int_t overpdg[nlabels];
843 else if(noverlaps == 1)
847 else if(noverlaps > 1)
853 AliWarning(Form(
"n overlaps = %d!!", noverlaps));
858 if(
GetReader()->IsEmbeddedClusterSelectionOn())
864 else if(fraction > 0.5)
868 else if(fraction > 0.1)
895 if(
GetReader()->IsEmbeddedClusterSelectionOn())
901 else if(fraction > 0.5)
905 else if(fraction > 0.1)
959 if (energy < 2 ) ebin = 0;
960 else if (energy < 4 ) ebin = 1;
961 else if (energy < 6 ) ebin = 2;
962 else if (energy < 10) ebin = 3;
963 else if (energy < 15) ebin = 4;
964 else if (energy < 20) ebin = 5;
985 Float_t dZ = cluster->GetTrackDz();
986 Float_t dR = cluster->GetTrackDx();
996 Bool_t positive = kFALSE;
997 if(track) positive = (track->Charge()>0);
1032 if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
1036 Float_t dEdx = track->GetTPCsignal();
1037 Float_t eOverp = cluster->E()/track->P();
1049 AliWarning(Form(
"Residual OK but (dR, dZ)= (%2.4f,%2.4f) no track associated WHAT?", dR,dZ));
1072 if(cluster->GetNLabels()==1)
1122 const Int_t buffersize = 255;
1123 char onePar[buffersize] ;
1125 snprintf(onePar,buffersize,
"--- AliAnaPhoton ---:") ;
1129 snprintf(onePar,buffersize,
"fMinDist =%2.2f (Minimal distance to bad channel to accept cluster);",
fMinDist) ;
1131 snprintf(onePar,buffersize,
"fMinDist2=%2.2f (Cuts on Minimal distance to study acceptance evaluation);",
fMinDist2) ;
1133 snprintf(onePar,buffersize,
"fMinDist3=%2.2f (One more cut on distance used for acceptance-efficiency study);",
fMinDist3) ;
1147 return new TObjString(parList) ;
1156 TList * outputContainer =
new TList() ;
1157 outputContainer->SetName(
"PhotonHistos") ;
1180 Int_t bin[] = {0,2,4,6,10,15,20,100};
1182 TString cut[] = {
"Open",
"Reader",
"E",
"Time",
"NCells",
"NLM",
"Fidutial",
"Matching",
"Bad",
"PID"};
1183 for (Int_t i = 0; i < 10 ; i++)
1186 Form(
"Number of clusters that pass cuts <= %d, %s", i, cut[i].
Data()),
1187 nptbins,ptmin,ptmax);
1193 Form(
"Number of clusters that pass cuts <= %d, %s", i, cut[i].
Data()),
1194 nptbins,ptmin,ptmax);
1200 fhEClusterSM =
new TH2F(
"hEClusterSM",
"Raw clusters E and super-module number",
1201 nptbins,ptmin,ptmax,
1207 fhPtClusterSM =
new TH2F(
"hPtClusterSM",
"Raw clusters #it{p}_{T} and super-module number",
1208 nptbins,ptmin,ptmax,
1214 fhEPhotonSM =
new TH2F(
"hEPhotonSM",
"Selected clusters E and super-module number",
1215 nptbins,ptmin,ptmax,
1221 fhPtPhotonSM =
new TH2F(
"hPtPhotonSM",
"Selected clusters #it{p}_{T} and super-module number",
1222 nptbins,ptmin,ptmax,
1228 fhNCellsE =
new TH2F (
"hNCellsE",
"# of cells in cluster vs E of clusters", nptbins,ptmin,ptmax, nbins,nmin,nmax);
1230 fhNCellsE->SetYTitle(
"# of cells in cluster");
1233 fhCellsE =
new TH2F (
"hCellsE",
"energy of cells in cluster vs E of clusters", nptbins,ptmin,ptmax, nptbins*2,ptmin,ptmax);
1234 fhCellsE->SetXTitle(
"#it{E}_{cluster} (GeV)");
1235 fhCellsE->SetYTitle(
"#it{E}_{cell} (GeV)");
1238 fhTimePt =
new TH2F (
"hTimePt",
"time of cluster vs pT of clusters", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1239 fhTimePt->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1240 fhTimePt->SetYTitle(
"#it{time} (ns)");
1243 fhMaxCellDiffClusterE =
new TH2F (
"hMaxCellDiffClusterE",
"energy vs difference of cluster energy - max cell energy / cluster energy, good clusters",
1244 nptbins,ptmin,ptmax, 500,0,1.);
1249 fhEPhoton =
new TH1F(
"hEPhoton",
"Number of #gamma over calorimeter vs energy",nptbins,ptmin,ptmax);
1251 fhEPhoton->SetXTitle(
"#it{E}_{#gamma}(GeV)");
1254 fhPtPhoton =
new TH1F(
"hPtPhoton",
"Number of #gamma over calorimeter vs #it{p}_{T}",nptbins,ptmin,ptmax);
1256 fhPtPhoton->SetXTitle(
"p_{T #gamma}(GeV/#it{c})");
1261 fhPtCentralityPhoton =
new TH2F(
"hPtCentralityPhoton",
"centrality vs #it{p}_{T}",nptbins,ptmin,ptmax, 100,0,100);
1266 fhPtEventPlanePhoton =
new TH2F(
"hPtEventPlanePhoton",
"centrality vs #it{p}_{T}",nptbins,ptmin,ptmax, 100,0,TMath::Pi());
1273 (
"hEtaPhi",
"cluster,#it{E} > 0.5 GeV, #eta vs #phi",netabins,etamin,etamax,nphibins,phimin,phimax);
1279 (
"hPhiPhoton",
"#phi_{#gamma} vs #it{p}_{T}",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1281 fhPhiPhoton->SetXTitle(
"p_{T #gamma} (GeV/#it{c})");
1285 (
"hEtaPhoton",
"#eta_{#gamma} vs #it{p}_{T}",nptbins,ptmin,ptmax,netabins,etamin,etamax);
1287 fhEtaPhoton->SetXTitle(
"p_{T #gamma} (GeV/#it{c})");
1291 (
"hEtaPhiPhoton",
"#eta vs #phi",netabins,etamin,etamax,nphibins,phimin,phimax);
1298 (
"hEtaPhi05Photon",
"#eta vs #phi, E < 0.5",netabins,etamin,etamax,nphibins,phimin,phimax);
1304 fhNLocMax =
new TH2F(
"hNLocMax",
"Number of local maxima in cluster",
1305 nptbins,ptmin,ptmax,10,0,10);
1313 fhLam0E =
new TH2F (
"hLam0E",
"#lambda_{0}^{2} vs E", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1314 fhLam0E->SetYTitle(
"#lambda_{0}^{2}");
1315 fhLam0E->SetXTitle(
"#it{E} (GeV)");
1316 outputContainer->Add(
fhLam0E);
1318 fhLam1E =
new TH2F (
"hLam1E",
"#lambda_{1}^{2} vs E", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1319 fhLam1E->SetYTitle(
"#lambda_{1}^{2}");
1320 fhLam1E->SetXTitle(
"#it{E} (GeV)");
1321 outputContainer->Add(
fhLam1E);
1323 fhDispE =
new TH2F (
"hDispE",
" dispersion^{2} vs E", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1325 fhDispE->SetXTitle(
"#it{E} (GeV) ");
1326 outputContainer->Add(
fhDispE);
1330 fhLam0ETM =
new TH2F (
"hLam0ETM",
"#lambda_{0}^{2} vs E, cut on track-matching residual |#Delta #eta| < 0.05, |#Delta #phi| < 0.05", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1331 fhLam0ETM->SetYTitle(
"#lambda_{0}^{2}");
1335 fhLam1ETM =
new TH2F (
"hLam1ETM",
"#lambda_{1}^{2} vs E, cut on track-matching residual |#Delta #eta| < 0.05, |#Delta #phi| < 0.05", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1336 fhLam1ETM->SetYTitle(
"#lambda_{1}^{2}");
1340 fhDispETM =
new TH2F (
"hDispETM",
" dispersion^{2} vs E, cut on track-matching residual |#Delta #eta| < 0.05, |#Delta #phi| < 0.05", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1348 fhLam0ETRD =
new TH2F (
"hLam0ETRD",
"#lambda_{0}^{2} vs E, EMCAL SM covered by TRD", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1353 fhLam1ETRD =
new TH2F (
"hLam1ETRD",
"#lambda_{1}^{2} vs E, EMCAL SM covered by TRD", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1358 fhDispETRD =
new TH2F (
"hDispETRD",
" dispersion^{2} vs E, EMCAL SM covered by TRD", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1365 fhLam0ETMTRD =
new TH2F (
"hLam0ETMTRD",
"#lambda_{0}^{2} vs E, EMCAL SM covered by TRD, cut on track-matching residual |#Delta #eta| < 0.05, |#Delta #phi| < 0.05", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1370 fhLam1ETMTRD =
new TH2F (
"hLam1ETMTRD",
"#lambda_{1}^{2} vs E, EMCAL SM covered by TRD, cut on track-matching residual |#Delta #eta| < 0.05, |#Delta #phi| < 0.05", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1375 fhDispETMTRD =
new TH2F (
"hDispETMTRD",
" dispersion^{2} vs E, EMCAL SM covered by TRD, cut on track-matching residual |#Delta #eta| < 0.05, |#Delta #phi| < 0.05", nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1384 fhNCellsLam0LowE =
new TH2F (
"hNCellsLam0LowE",
"N_{cells} in cluster vs #lambda_{0}^{2}, E < 2 GeV", nbins,nmin, nmax, ssbins,ssmin,ssmax);
1389 fhNCellsLam0HighE =
new TH2F (
"hNCellsLam0HighE",
"N_{cells} in cluster vs #lambda_{0}^{2}, #it{E} > 2 GeV", nbins,nmin, nmax, ssbins,ssmin,ssmax);
1394 fhNCellsLam1LowE =
new TH2F (
"hNCellsLam1LowE",
"N_{cells} in cluster vs #lambda_{1}^{2}, E < 2 GeV", nbins,nmin, nmax, ssbins,ssmin,ssmax);
1399 fhNCellsLam1HighE =
new TH2F (
"hNCellsLam1HighE",
"N_{cells} in cluster vs #lambda_{1}^{2}, #it{E} > 2 GeV", nbins,nmin, nmax, ssbins,ssmin,ssmax);
1404 fhNCellsDispLowE =
new TH2F (
"hNCellsDispLowE",
"N_{cells} in cluster vs dispersion^{2}, E < 2 GeV", nbins,nmin, nmax, ssbins,ssmin,ssmax);
1409 fhNCellsDispHighE =
new TH2F (
"hNCellsDispHighE",
"N_{cells} in cluster vs dispersion^{2}, E < 2 GeV", nbins,nmin, nmax, ssbins,ssmin,ssmax);
1414 fhEtaLam0LowE =
new TH2F (
"hEtaLam0LowE",
"#eta vs #lambda_{0}^{2}, E < 2 GeV", netabins,etamin,etamax, ssbins,ssmin,ssmax);
1419 fhPhiLam0LowE =
new TH2F (
"hPhiLam0LowE",
"#phi vs #lambda_{0}^{2}, E < 2 GeV", nphibins,phimin,phimax, ssbins,ssmin,ssmax);
1424 fhEtaLam0HighE =
new TH2F (
"hEtaLam0HighE",
"#eta vs #lambda_{0}^{2}, #it{E} > 2 GeV", netabins,etamin,etamax, ssbins,ssmin,ssmax);
1429 fhPhiLam0HighE =
new TH2F (
"hPhiLam0HighE",
"#phi vs #lambda_{0}^{2}, #it{E} > 2 GeV", nphibins,phimin,phimax, ssbins,ssmin,ssmax);
1434 fhLam1Lam0LowE =
new TH2F (
"hLam1Lam0LowE",
"#lambda_{0}^{2} vs #lambda_{1}^{2} in cluster of E < 2 GeV", ssbins,ssmin,ssmax, ssbins,ssmin,ssmax);
1439 fhLam1Lam0HighE =
new TH2F (
"hLam1Lam0HighE",
"#lambda_{0}^{2} vs #lambda_{1}^{2} in cluster of #it{E} > 2 GeV", ssbins,ssmin,ssmax, ssbins,ssmin,ssmax);
1444 fhLam0DispLowE =
new TH2F (
"hLam0DispLowE",
"#lambda_{0}^{2} vs dispersion^{2} in cluster of E < 2 GeV", ssbins,ssmin,ssmax, ssbins,ssmin,ssmax);
1449 fhLam0DispHighE =
new TH2F (
"hLam0DispHighE",
"#lambda_{0}^{2} vs dispersion^{2} in cluster of #it{E} > 2 GeV", ssbins,ssmin,ssmax, ssbins,ssmin,ssmax);
1454 fhDispLam1LowE =
new TH2F (
"hDispLam1LowE",
"Dispersion^{2} vs #lambda_{1}^{2} in cluster of E < 2 GeV", ssbins,ssmin,ssmax, ssbins,ssmin,ssmax);
1459 fhDispLam1HighE =
new TH2F (
"hDispLam1HighE",
"Dispersion^{2} vs #lambda_{1^{2}} in cluster of #it{E} > 2 GeV", ssbins,ssmin,ssmax, ssbins,ssmin,ssmax);
1466 fhDispEtaE =
new TH2F (
"hDispEtaE",
"#sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i} - <#eta>)^{2}/ #Sigma w_{i} vs E", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
1468 fhDispEtaE->SetYTitle(
"#sigma^{2}_{#eta #eta}");
1471 fhDispPhiE =
new TH2F (
"hDispPhiE",
"#sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i} - <#phi>)^{2} / #Sigma w_{i} vs E", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
1473 fhDispPhiE->SetYTitle(
"#sigma^{2}_{#phi #phi}");
1476 fhSumEtaE =
new TH2F (
"hSumEtaE",
"#delta^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i})^{2} / #Sigma w_{i} - <#eta>^{2} vs E", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
1478 fhSumEtaE->SetYTitle(
"#delta^{2}_{#eta #eta}");
1481 fhSumPhiE =
new TH2F (
"hSumPhiE",
"#delta^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i})^{2}/ #Sigma w_{i} - <#phi>^{2} vs E",
1482 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
1484 fhSumPhiE->SetYTitle(
"#delta^{2}_{#phi #phi}");
1487 fhSumEtaPhiE =
new TH2F (
"hSumEtaPhiE",
"#delta^{2}_{#eta #phi} = #Sigma w_{i}(#phi_{i} #eta_{i} ) / #Sigma w_{i} - <#phi><#eta> vs E",
1488 nptbins,ptmin,ptmax, 2*ssbins,-ssmax,ssmax);
1493 fhDispEtaPhiDiffE =
new TH2F (
"hDispEtaPhiDiffE",
"#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta} vs E",
1494 nptbins,ptmin,ptmax,200, -10,10);
1499 fhSphericityE =
new TH2F (
"hSphericityE",
"(#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi}) vs E",
1500 nptbins,ptmin,ptmax, 200, -1,1);
1502 fhSphericityE->SetYTitle(
"s = (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi})");
1505 fhDispSumEtaDiffE =
new TH2F (
"hDispSumEtaDiffE",
"#sigma^{2}_{#eta #eta} - #delta^{2}_{#eta #eta} / average vs E", nptbins,ptmin,ptmax, 200,-0.01,0.01);
1507 fhDispSumEtaDiffE->SetYTitle(
"#sigma^{2}_{#eta #eta} - #delta^{2}_{#eta #eta} / average");
1510 fhDispSumPhiDiffE =
new TH2F (
"hDispSumPhiDiffE",
"#sigma^{2}_{#phi #phi} - #delta^{2}_{#phi #phi} / average vs E", nptbins,ptmin,ptmax, 200,-0.01,0.01);
1512 fhDispSumPhiDiffE->SetYTitle(
"#sigma^{2}_{#phi #phi} - #delta^{2}_{#phi #phi} / average");
1515 for(Int_t i = 0; i < 7; i++)
1517 fhDispEtaDispPhi[i] =
new TH2F (Form(
"hDispEtaDispPhi_EBin%d",i),Form(
"#sigma^{2}_{#phi #phi} vs #sigma^{2}_{#eta #eta} for %d < E < %d GeV",bin[i],bin[i+1]),
1518 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
1523 fhLambda0DispEta[i] =
new TH2F (Form(
"hLambda0DispEta_EBin%d",i),Form(
"#lambda^{2}_{0} vs #sigma^{2}_{#eta #eta} for %d < E < %d GeV",bin[i],bin[i+1]),
1524 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
1529 fhLambda0DispPhi[i] =
new TH2F (Form(
"hLambda0DispPhi_EBin%d",i),Form(
"#lambda^{2}_{0}} vs #sigma^{2}_{#phi #phi} for %d < E < %d GeV",bin[i],bin[i+1]),
1530 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
1543 TString cutTM [] = {
"NoCut",
""};
1545 for(Int_t i = 0; i < 2; i++)
1548 (Form(
"hTrackMatchedDEta%s",cutTM[i].
Data()),
1549 Form(
"d#eta of cluster-track vs cluster energy, %s",cutTM[i].
Data()),
1550 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
1555 (Form(
"hTrackMatchedDPhi%s",cutTM[i].
Data()),
1556 Form(
"d#phi of cluster-track vs cluster energy, %s",cutTM[i].
Data()),
1557 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
1562 (Form(
"hTrackMatchedDEtaDPhi%s",cutTM[i].
Data()),
1563 Form(
"d#eta vs d#phi of cluster-track vs cluster energy, %s",cutTM[i].
Data()),
1564 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
1569 (Form(
"hTrackMatchedDEtaPos%s",cutTM[i].
Data()),
1570 Form(
"d#eta of cluster-track vs cluster energy, %s",cutTM[i].
Data()),
1571 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
1576 (Form(
"hTrackMatchedDPhiPos%s",cutTM[i].
Data()),
1577 Form(
"d#phi of cluster-track vs cluster energy, %s",cutTM[i].
Data()),
1578 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
1583 (Form(
"hTrackMatchedDEtaDPhiPos%s",cutTM[i].
Data()),
1584 Form(
"d#eta vs d#phi of cluster-track vs cluster energy, %s",cutTM[i].
Data()),
1585 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
1590 (Form(
"hTrackMatchedDEtaNeg%s",cutTM[i].
Data()),
1591 Form(
"d#eta of cluster-track vs cluster energy, %s",cutTM[i].
Data()),
1592 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
1597 (Form(
"hTrackMatchedDPhiNeg%s",cutTM[i].
Data()),
1598 Form(
"d#phi of cluster-track vs cluster energy, %s",cutTM[i].
Data()),
1599 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
1604 (Form(
"hTrackMatchedDEtaDPhiNeg%s",cutTM[i].
Data()),
1605 Form(
"d#eta vs d#phi of cluster-track vs cluster energy, %s",cutTM[i].
Data()),
1606 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
1610 fhdEdx[i] =
new TH2F (Form(
"hdEdx%s",cutTM[i].
Data()),Form(
"matched track <dE/dx> vs cluster E, %s",cutTM[i].
Data()),
1611 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
1612 fhdEdx[i]->SetXTitle(
"#it{E} (GeV)");
1613 fhdEdx[i]->SetYTitle(
"<dE/dx>");
1615 fhEOverP[i] =
new TH2F (Form(
"hEOverP%s",cutTM[i].
Data()),Form(
"matched track E/p vs cluster E, %s",cutTM[i].
Data()),
1616 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
1617 fhEOverP[i]->SetXTitle(
"#it{E} (GeV)");
1629 outputContainer->Add(
fhdEdx[i]);
1635 (Form(
"hTrackMatchedDEtaTRD%s",cutTM[i].
Data()),
1636 Form(
"d#eta of cluster-track vs cluster energy, SM behind TRD, %s",cutTM[i].
Data()),
1637 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
1642 (Form(
"hTrackMatchedDPhiTRD%s",cutTM[i].
Data()),
1643 Form(
"d#phi of cluster-track vs cluster energy, SM behing TRD, %s",cutTM[i].
Data()),
1644 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
1649 (Form(
"hEOverPTRD%s",cutTM[i].
Data()),
1650 Form(
"matched track E/p vs cluster E, behind TRD, %s",cutTM[i].
Data()),
1651 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
1663 (Form(
"hTrackMatchedDEtaMCNoOverlap%s",cutTM[i].
Data()),
1664 Form(
"d#eta of cluster-track vs cluster energy, no other MC particles overlap %s",cutTM[i].
Data()),
1665 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
1670 (Form(
"hTrackMatchedDPhiMCNoOverlap%s",cutTM[i].
Data()),
1671 Form(
"d#phi of cluster-track vs cluster energy, no other MC particles overlap %s",cutTM[i].
Data()),
1672 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
1679 (Form(
"hTrackMatchedDEtaMCOverlap%s",cutTM[i].
Data()),
1680 Form(
"d#eta of cluster-track vs cluster energy, several MC particles overlap %s",cutTM[i].
Data()),
1681 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
1686 (Form(
"hTrackMatchedDPhiMCOverlap%s",cutTM[i].
Data()),
1687 Form(
"d#phi of cluster-track vs cluster energy, several MC particles overlap %s",cutTM[i].
Data()),
1688 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
1696 (Form(
"hTrackMatchedDEtaMCConversion%s",cutTM[i].
Data()),
1697 Form(
"d#eta of cluster-track vs cluster energy, no other MC particles overlap appart from conversions %s",cutTM[i].
Data()),
1698 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
1703 (Form(
"hTrackMatchedDPhiMCConversion%s",cutTM[i].
Data()),
1704 Form(
"d#phi of cluster-track vs cluster energy, no other MC particles overlap appart from conversions %s",cutTM[i].
Data()),
1705 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
1713 (Form(
"hTrackMatchedMCParticle%s",cutTM[i].
Data()),
1714 Form(
"Origin of particle vs energy %s",cutTM[i].
Data()),
1715 nptbins,ptmin,ptmax,8,0,8);
1735 TString pileUpName[] = {
"SPD",
"EMCAL",
"SPDOrEMCAL",
"SPDAndEMCAL",
"SPDAndNotEMCAL",
"EMCALAndNotSPD",
"NotSPDAndNotEMCAL"} ;
1737 for(Int_t i = 0 ; i < 7 ; i++)
1740 Form(
"Selected photon #it{p}_{T} distribution, %s Pile-Up event",pileUpName[i].
Data()), nptbins,ptmin,ptmax);
1745 Form(
"Photon cluster E vs #it{t}_{max}-#it{t}_{cell} in cluster, %s Pile-Up event",pileUpName[i].
Data()),
1746 nptbins,ptmin,ptmax,400,-200,200);
1752 fhTimePtPhotonNoCut =
new TH2F (
"hTimePtPhoton_NoCut",
"time of photon cluster vs pT of clusters, no cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1757 fhTimePtPhotonSPD =
new TH2F (
"hTimePtPhoton_SPD",
"time of photon cluster vs pT of clusters, SPD cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1762 fhTimeNPileUpVertSPD =
new TH2F (
"hTime_NPileUpVertSPD",
"time of cluster vs N pile-up SPD vertex", ntimebins,timemin,timemax,20,0,20);
1767 fhTimeNPileUpVertTrack =
new TH2F (
"hTime_NPileUpVertTracks",
"time of cluster vs N pile-up Tracks vertex", ntimebins,timemin,timemax, 20,0,20 );
1773 nptbins,ptmin,ptmax,20,0,20);
1779 nptbins,ptmin,ptmax, 20,0,20 );
1785 nptbins,ptmin,ptmax,20,0,20);
1791 nptbins,ptmin,ptmax, 20,0,20 );
1797 nptbins,ptmin,ptmax,20,0,20);
1803 nptbins,ptmin,ptmax, 20,0,20 );
1812 TString ptype[] = {
"#gamma" ,
"#gamma_{#pi decay}" ,
"#gamma_{#eta decay}",
"#gamma_{other decay}",
1813 "#pi^{0}" ,
"#eta" ,
"e^{#pm}" ,
"#gamma->e^{#pm}" ,
1814 "hadron?" ,
"Anti-N" ,
"Anti-P" ,
1815 "#gamma_{prompt}",
"#gamma_{fragmentation}",
"#gamma_{ISR}" ,
"String" } ;
1817 TString pname[] = {
"Photon" ,
"PhotonPi0Decay" ,
"PhotonEtaDecay",
"PhotonOtherDecay",
1818 "Pi0" ,
"Eta" ,
"Electron" ,
"Conversion" ,
1819 "Hadron" ,
"AntiNeutron" ,
"AntiProton" ,
1820 "PhotonPrompt",
"PhotonFragmentation",
"PhotonISR" ,
"String" } ;
1824 fhMCE[i] =
new TH1F(Form(
"hE_MC%s",pname[i].
Data()),
1825 Form(
"cluster from %s : E ",ptype[i].
Data()),
1826 nptbins,ptmin,ptmax);
1827 fhMCE[i]->SetXTitle(
"#it{E} (GeV)");
1828 outputContainer->Add(
fhMCE[i]) ;
1830 fhMCPt[i] =
new TH1F(Form(
"hPt_MC%s",pname[i].
Data()),
1831 Form(
"cluster from %s : #it{p}_{T} ",ptype[i].
Data()),
1832 nptbins,ptmin,ptmax);
1833 fhMCPt[i]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1834 outputContainer->Add(
fhMCPt[i]) ;
1836 fhMCEta[i] =
new TH2F(Form(
"hEta_MC%s",pname[i].
Data()),
1837 Form(
"cluster from %s : #eta ",ptype[i].
Data()),
1838 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1839 fhMCEta[i]->SetYTitle(
"#eta");
1840 fhMCEta[i]->SetXTitle(
"#it{E} (GeV)");
1841 outputContainer->Add(
fhMCEta[i]) ;
1843 fhMCPhi[i] =
new TH2F(Form(
"hPhi_MC%s",pname[i].
Data()),
1844 Form(
"cluster from %s : #phi ",ptype[i].
Data()),
1845 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1846 fhMCPhi[i]->SetYTitle(
"#phi (rad)");
1847 fhMCPhi[i]->SetXTitle(
"#it{E} (GeV)");
1848 outputContainer->Add(
fhMCPhi[i]) ;
1852 Form(
"MC - Reco E from %s",pname[i].
Data()),
1853 nptbins,ptmin,ptmax, 200,-50,50);
1854 fhMCDeltaE[i]->SetYTitle(
"#Delta #it{E} (GeV)");
1859 Form(
"MC - Reco #it{p}_{T} from %s",pname[i].
Data()),
1860 nptbins,ptmin,ptmax, 200,-50,50);
1861 fhMCDeltaPt[i]->SetXTitle(
"p_{T,rec} (GeV/#it{c})");
1862 fhMCDeltaPt[i]->SetYTitle(
"#Delta #it{p}_{T} (GeV/#it{c})");
1865 fhMC2E[i] =
new TH2F (Form(
"h2E_MC%s",pname[i].
Data()),
1866 Form(
"E distribution, reconstructed vs generated from %s",pname[i].
Data()),
1867 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1868 fhMC2E[i]->SetXTitle(
"#it{E}_{rec} (GeV)");
1869 fhMC2E[i]->SetYTitle(
"#it{E}_{gen} (GeV)");
1870 outputContainer->Add(
fhMC2E[i]);
1872 fhMC2Pt[i] =
new TH2F (Form(
"h2Pt_MC%s",pname[i].
Data()),
1873 Form(
"p_T distribution, reconstructed vs generated from %s",pname[i].
Data()),
1874 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1875 fhMC2Pt[i]->SetXTitle(
"p_{T,rec} (GeV/#it{c})");
1876 fhMC2Pt[i]->SetYTitle(
"p_{T,gen} (GeV/#it{c})");
1877 outputContainer->Add(
fhMC2Pt[i]);
1880 TString pptype[] = {
"#gamma" ,
"#gamma_{#pi decay}" ,
1881 "#gamma_{#eta decay}",
"#gamma_{other decay}" ,
1882 "#gamma_{prompt}" ,
"#gamma_{fragmentation}",
"#gamma_{ISR}" } ;
1884 TString ppname[] = {
"Photon" ,
"PhotonPi0Decay" ,
1885 "PhotonEtaDecay",
"PhotonOtherDecay" ,
1886 "PhotonPrompt" ,
"PhotonFragmentation",
"PhotonISR" } ;
1890 fhEPrimMC[i] =
new TH1F(Form(
"hEPrim_MC%s",ppname[i].
Data()),
1891 Form(
"primary photon %s : E ",pptype[i].
Data()),
1892 nptbins,ptmin,ptmax);
1893 fhEPrimMC[i]->SetXTitle(
"#it{E} (GeV)");
1897 Form(
"primary photon %s : #it{p}_{T} ",pptype[i].
Data()),
1898 nptbins,ptmin,ptmax);
1899 fhPtPrimMC[i]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1902 fhYPrimMC[i] =
new TH2F(Form(
"hYPrim_MC%s",ppname[i].
Data()),
1903 Form(
"primary photon %s : Rapidity ",pptype[i].
Data()),
1904 nptbins,ptmin,ptmax,200,-2,2);
1906 fhYPrimMC[i]->SetXTitle(
"#it{E} (GeV)");
1910 Form(
"primary photon %s : #eta",pptype[i].
Data()),
1911 nptbins,ptmin,ptmax,200,-2,2);
1917 Form(
"primary photon %s : #phi ",pptype[i].
Data()),
1918 nptbins,ptmin,ptmax,nphibins,0,TMath::TwoPi());
1925 Form(
"primary photon %s in acceptance: E ",pptype[i].
Data()),
1926 nptbins,ptmin,ptmax);
1931 Form(
"primary photon %s in acceptance: #it{p}_{T} ",pptype[i].
Data()),
1932 nptbins,ptmin,ptmax);
1937 Form(
"primary photon %s in acceptance: Rapidity ",pptype[i].
Data()),
1938 nptbins,ptmin,ptmax,100,-1,1);
1944 Form(
"primary photon %s in acceptance: #eta ",pptype[i].
Data()),
1945 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1951 Form(
"primary photon %s in acceptance: #phi ",pptype[i].
Data()),
1952 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1960 TString ptypess[] = {
"#gamma",
"hadron?",
"#pi^{0}",
"#eta",
"#gamma->e^{#pm}",
"e^{#pm}"} ;
1962 TString pnamess[] = {
"Photon",
"Hadron",
"Pi0",
"Eta",
"Conversion",
"Electron"} ;
1964 for(Int_t i = 0; i < 6; i++)
1967 Form(
"cluster from %s : E vs #lambda_{0}^{2}",ptypess[i].
Data()),
1968 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1974 Form(
"cluster from %s : E vs #lambda_{1}^{2}",ptypess[i].
Data()),
1975 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1981 Form(
"cluster from %s : E vs dispersion^{2}",ptypess[i].
Data()),
1982 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1988 Form(
"# of cells in cluster from %s vs E of clusters",ptypess[i].
Data()),
1989 nptbins,ptmin,ptmax, nbins,nmin,nmax);
1991 fhMCNCellsE[i]->SetYTitle(
"# of cells in cluster");
1995 Form(
"energy vs difference of cluster energy from %s - max cell energy / cluster energy, good clusters",ptypess[i].
Data()),
1996 nptbins,ptmin,ptmax, 500,0,1.);
2004 Form(
"cluster from %s : #lambda^{2}_{0} vs fraction of energy carried by max cell, E < 2 GeV",ptypess[i].
Data()),
2005 ssbins,ssmin,ssmax,500,0,1.);
2011 Form(
"cluster from %s : #lambda^{2}_{0} vs fraction of energy carried by max cell, 2< E < 6 GeV",ptypess[i].
Data()),
2012 ssbins,ssmin,ssmax,500,0,1.);
2018 Form(
"cluster from %s : #lambda^{2}_{0} vs fraction of energy carried by max cell, #it{E} > 6 GeV",ptypess[i].
Data()),
2019 ssbins,ssmin,ssmax,500,0,1.);
2025 Form(
"cluster from %s : N cells in cluster vs fraction of energy carried by max cell, E < 2 GeV",ptypess[i].
Data()),
2026 nbins/5,nmin,nmax/5,500,0,1.);
2032 Form(
"cluster from %s : N cells in cluster vs fraction of energy carried by max cell, 2< E < 6 GeV",ptypess[i].
Data()),
2033 nbins/5,nmin,nmax/5,500,0,1.);
2039 Form(
"cluster from %s : N cells in cluster vs fraction of energy carried by max cell, #it{E} > 6 GeV",ptypess[i].
Data()),
2040 nbins/5,nmin,nmax/5,500,0,1.);
2048 Form(
"cluster from %s : #sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i} - <#eta>)^{2}/ #Sigma w_{i} vs E",ptypess[i].
Data()),
2049 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
2055 Form(
"cluster from %s : #sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i} - <#phi>)^{2} / #Sigma w_{i} vs E",ptypess[i].
Data()),
2056 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
2062 Form(
"cluster from %s : #delta^{2}_{#eta #phi} = #Sigma w_{i}(#phi_{i} #eta_{i} ) / #Sigma w_{i} - <#phi><#eta> vs E",ptypess[i].
Data()),
2063 nptbins,ptmin,ptmax, 2*ssbins,-ssmax,ssmax);
2069 Form(
"cluster from %s : #sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta} vs E",ptypess[i].
Data()),
2070 nptbins,ptmin,ptmax,200,-10,10);
2076 Form(
"cluster from %s : (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi}) vs E",ptypess[i].
Data()),
2077 nptbins,ptmin,ptmax, 200,-1,1);
2079 fhMCESphericity[i]->SetYTitle(
"s = (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi})");
2082 for(Int_t ie = 0; ie < 7; ie++)
2085 Form(
"cluster from %s : #sigma^{2}_{#phi #phi} vs #sigma^{2}_{#eta #eta} for %d < E < %d GeV",pnamess[i].
Data(),bin[ie],bin[ie+1]),
2086 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
2092 Form(
"cluster from %s : #lambda^{2}_{0} vs #sigma^{2}_{#eta #eta} for %d < E < %d GeV",pnamess[i].
Data(),bin[ie],bin[ie+1]),
2093 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
2099 Form(
"cluster from %s :#lambda^{2}_{0} vs #sigma^{2}_{#phi #phi} for %d < E < %d GeV",pnamess[i].
Data(),bin[ie],bin[ie+1]),
2100 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
2109 if(!
GetReader()->IsEmbeddedClusterSelectionOn())
2112 "cluster from Photon : E vs #lambda_{0}^{2}",
2113 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2119 "cluster from Photon : E vs #lambda_{0}^{2}",
2120 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2126 "cluster from Photon : E vs #lambda_{0}^{2}",
2127 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2133 if(
GetReader()->IsEmbeddedClusterSelectionOn())
2136 "Energy Fraction of embedded signal versus cluster energy",
2137 nptbins,ptmin,ptmax,100,0.,1.);
2143 "cluster from Photon embedded with more than 90% energy in cluster : E vs #lambda_{0}^{2}",
2144 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2150 "cluster from Photon embedded with 50% to 90% energy in cluster : E vs #lambda_{0}^{2}",
2151 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2157 "cluster from Photon embedded with 10% to 50% energy in cluster : E vs #lambda_{0}^{2}",
2158 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2164 "cluster from Photonm embedded with 0% to 10% energy in cluster : E vs #lambda_{0}^{2}",
2165 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2171 "cluster from Pi0 embedded with more than 90% energy in cluster : E vs #lambda_{0}^{2}",
2172 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2178 "cluster from Pi0 embedded with 50% to 90% energy in cluster : E vs #lambda_{0}^{2}",
2179 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2185 "cluster from Pi0 embedded with 10% to 50% energy in cluster : E vs #lambda_{0}^{2}",
2186 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2192 "cluster from Pi0 embedded with 0% to 10% energy in cluster : E vs #lambda_{0}^{2}",
2193 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2200 fhMCConversionVertex =
new TH2F(
"hMCPhotonConversionVertex",
"cluster from converted photon, #it{p}_{T} vs vertex distance",
2201 nptbins,ptmin,ptmax,500,0,500);
2208 TString region[] = {
"ITS",
"TPC",
"TRD",
"TOF",
"Top EMCal",
"In EMCal"};
2209 for(Int_t iR = 0; iR < 6; iR++)
2212 Form(
"cluster from converted photon, #it{p}_{T} vs #lambda_{0}^{2}, conversion in %s",region[iR].
Data()),
2213 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2221 return outputContainer ;
2230 AliFatal(
"!!STOP: You want to use PHOS in analysis but it is not read!! \n!!Check the configuration file!!");
2232 AliFatal(
"!!STOP: You want to use EMCAL in analysis but it is not read!! \n!!Check the configuration file!!");
2264 Double_t v[3] = {0,0,0};
2268 TObjArray * pl = 0x0;
2269 AliVCaloCells* cells = 0;
2312 TClonesArray * clusterList = 0;
2321 Int_t nclusters = clusterList->GetEntriesFast();
2322 for (Int_t iclus = 0; iclus < nclusters; iclus++)
2324 AliVCluster * clus =
dynamic_cast<AliVCluster*
> (clusterList->At(iclus));
2338 Int_t nCaloClusters = pl->GetEntriesFast();
2346 for(Int_t icalo = 0; icalo < nCaloClusters; icalo++)
2348 AliVCluster * calo = (AliVCluster*) (pl->At(icalo));
2352 Int_t evtIndex = 0 ;
2355 evtIndex=
GetMixedEvent()->EventIndexForCaloCluster(calo->GetID()) ;
2367 Double_t vertex[]={0,0,0};
2380 AliAODPWG4Particle aodph = AliAODPWG4Particle(
fMomentum);
2384 Int_t label = calo->GetLabel();
2385 aodph.SetLabel(label);
2386 aodph.SetCaloLabel(calo->GetID(),-1);
2392 Double_t distBad=calo->GetDistanceToBadChannel() ;
2393 if (distBad >
fMinDist3) aodph.SetDistToBad(2) ;
2394 else if(distBad >
fMinDist2) aodph.SetDistToBad(1) ;
2395 else aodph.SetDistToBad(0) ;
2410 AliDebug(1,Form(
"Origin of candidate, bit map %d",aodph.GetTag()));
2417 Float_t maxCellFraction = 0;
2419 if( absIdMax < 0 ) AliFatal(
"Wrong absID");
2423 aodph.SetM02(calo->GetM02());
2424 aodph.SetNLM(nMaxima);
2425 aodph.SetTime(calo->GetTOF()*1e9);
2426 aodph.SetNCells(calo->GetNCells());
2428 aodph.SetSModNumber(nSM);
2441 aodph.SetIdentifiedParticleType(
GetCaloPID()->GetIdentifiedParticleType(calo));
2443 AliDebug(1,Form(
"PDG of identified particle %d",aodph.GetIdentifiedParticleType()));
2458 AliDebug(1,
"PID Bits set");
2461 AliDebug(1,Form(
"Photon selection cuts passed: pT %3.2f, pdg %d",aodph.Pt(),aodph.GetIdentifiedParticleType()));
2470 if(nSM <
GetCaloUtils()->GetNumberOfSuperModulesUsed() && nSM >=0)
2485 for(Int_t icell = 0; icell < calo->GetNCells(); icell++)
2500 AliDebug(1,Form(
"End fill AODs, with %d entries",
GetOutputAODBranch()->GetEntriesFast()));
2512 Double_t v[3] = {0,0,0};
2520 AliDebug(1,Form(
"AOD branch entries %d", naod));
2527 for(Int_t iaod = 0; iaod < naod ; iaod++)
2530 Int_t
pdg = ph->GetIdentifiedParticleType();
2532 AliDebug(2,Form(
"PDG %d, MC TAG %d, Calorimeter <%d>",ph->GetIdentifiedParticleType(),ph->GetTag(), ph->GetDetectorTag())) ;
2539 AliDebug(2,Form(
"ID Photon: pt %f, phi %f, eta %f", ph->Pt(),ph->Phi(),ph->Eta())) ;
2543 Float_t ptcluster = ph->Pt();
2544 Float_t phicluster = ph->Phi();
2545 Float_t etacluster = ph->Eta();
2546 Float_t ecluster = ph->E();
2588 Int_t label = ph->GetLabel();
2592 AliDebug(1,Form(
"*** bad label ***: label %d", label));
2599 Int_t pdg = 0, status = 0, momLabel = -1;
2610 Int_t tag =ph->GetTag();
2611 Int_t mcParticleTag = -1;
2641 Int_t pdgD = 0, statusD = 0, daugLabel = -1;
2642 Bool_t okD = kFALSE;
2658 Float_t m02 = ph->GetM02();
2726 if(mcParticleTag >= 0 &&
fhMCE[mcParticleTag])
2752 printf(
"**** Print %s %s ****\n", GetName(), GetTitle() ) ;
2756 printf(
"Min Distance to Bad Channel = %2.1f\n",
fMinDist);
2757 printf(
"Min Distance to Bad Channel 2 = %2.1f\n",
fMinDist2);
2758 printf(
"Min Distance to Bad Channel 3 = %2.1f\n",
fMinDist3);
2761 printf(
"Number of cells in cluster is > %d \n",
fNCellsCut);
Bool_t IsPileUpFromSPD() const
virtual Bool_t IsFiducialCutOn() const
Bool_t fFillOnlySimpleSSHisto
Fill selected cluster histograms, selected SS histograms.
Float_t GetHistoPtMax() const
TH2F * fhLam1ETMTRD
! Cluster lambda1 vs E, SM covered by TRD, cut on Track Matching residual
TH1F * fhClusterCutsE[10]
! control histogram on the different photon selection cuts, E
TH2F * fhPhiLam0LowE
! Cluster phi vs lambda0, E<2
TH2F * fhNCellsLam1HighE
! number of cells in cluster vs lambda1, E>2
TH2F * fhLam1Lam0HighE
! Cluster lambda1 vs lambda0, E>2
TH2F * fhTrackMatchedDEtaTRD[2]
! Eta distance between track and cluster vs cluster E, after and before photon cuts, behind TRD
TH1F * fhMCPt[fgkNmcTypes]
! Number of identified photon vs cluster pT coming from MC particle
TH2F * fhTrackMatchedDEtaDPhiNeg[2]
! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV, after and before photon cuts ...
Int_t fNCellsCut
Accept for the analysis clusters with more than fNCellsCut cells.
TH2F * fhEmbedPi0ELambda0FullBkg
! Lambda0 vs E for embedded photons with less than 10% of the cluster energy
TH2F * fhDispE
! Cluster dispersion vs E
TH2F * fhMCEta[fgkNmcTypes]
! eta of identified photon coming from MC particle
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Int_t fNLMCutMax
Remove clusters/cells with number of local maxima larger than this value.
TH2F * fhMCNCellsE[fgkNssTypes]
! NCells per cluster vs energy
Int_t GetHistoNClusterCellMin() const
Float_t GetHistoPtMin() const
TH2F * fhDispEtaDispPhi[7]
! shower dispersion in eta direction vs phi direction for 5 E bins [0-2],[2-4],[4-6],[6-10],[> 10]
virtual Float_t GetMaxPt() const
TH2F * fhLam1ETRD
! Cluster lambda1 vs E, SM covered by TRD
TH2F * fhEClusterSM
! Cluster E distribution per SM, before any selection, after reader
TH2F * fhMaxCellDiffClusterE
! Fraction of energy carried by cell with maximum energy
TH2F * fhPtClusterSM
! Cluster E distribution per SM, before any selection, after reader
TH2F * fhDispETRD
! Cluster dispersion vs E, SM covered by TRD
Int_t GetHistoShowerShapeBins() const
virtual Int_t GetCalorimeter() const
Float_t GetHistodEdxMax() const
virtual void AddToHistogramsName(TString add)
virtual AliVCaloCells * GetEMCALCells() const
TH2F * fhTrackMatchedDEtaDPhiPos[2]
! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV, after and before ...
TH2F * fhNCellsLam1LowE
! number of cells in cluster vs lambda1
Bool_t fFillTMHisto
Fill track matching plots.
TH2F * fhPtPhotonNPileUpSPDVtx
! photon pt vs number of spd pile-up vertices
virtual Bool_t IsDataMC() const
TH2F * fhPtPhotonNPileUpTrkVtx
! photon pt vs number of track pile-up vertices
TH2F * fhNCellsDispLowE
! number of cells in cluster vs dispersion
TH2F * fhTrackMatchedDEtaPos[2]
! Eta distance between track and cluster vs cluster E, after and before photon cuts ...
TH2F * fhSphericityE
! shower sphericity in eta vs phi
TH2F * fhDispEtaE
! shower dispersion in eta direction
TH2F * fhPtPhotonNPileUpTrkVtxTimeCut
! photon pt vs number of track pile-up vertices, time cut +- 25 ns
TH2F * fhEtaPrimMC[fgkNmcPrimTypes]
! Eta of generated photon
AliEMCALRecoUtils * GetEMCALRecoUtils() const
TH2F * fhPtPhotonSM
! photon-like cluster E distribution per SM
virtual AliStack * GetMCStack() const
Bool_t ReadAODMCParticles() const
virtual void GetVertex(Double_t vertex[3]) const
TH2F * fhTrackMatchedDPhiTRD[2]
! Phi distance between track and cluster vs cluster E, after and before photon cuts, behind TRD
Float_t fMinDist2
Cuts on Minimal distance to study acceptance evaluation.
TH1F * fhPtPhotonPileUp[7]
! pT distribution of selected photons
TH1F * fhPtPhoton
! Number of identified photon vs transerse momentum
Bool_t fRejectTrackMatch
If PID on, reject clusters which have an associated TPC track.
void MakeAnalysisFillAOD()
TH2F * fhTrackMatchedDPhiMCNoOverlap[2]
! Phi distance between track and cluster vs cluster E, not other particle overlap, after and before photon cuts
TH2F * fhPtEventPlanePhoton
! event plane vs photon pT
virtual AliVEvent * GetInputEvent() const
TH2F * fhMCConversionVertex
! Conversion distance for photon clusters that have at least a contributor from the conversion...
TH2F * fhEmbedPi0ELambda0FullSignal
! Lambda0 vs E for embedded photons with more than 90% of the cluster energy
Bool_t IsPileUpFromSPDAndNotEMCal() const
Check if event is from pile-up determined by SPD and not by EMCal.
TH2F * fhEmbedPi0ELambda0MostlyBkg
! Lambda0 vs E for embedded photons with 50%<fraction<10%
TH2F * fhMCESphericity[fgkNssTypes]
! shower sphericity, eta vs phi
TH2F * fhMC2Pt[fgkNmcTypes]
! pT distribution, Reco vs MC coming from MC particle
TH2F * fhEtaPhiPhoton
! Pseudorapidity vs Phi of identified photon for E > 0.5
virtual Float_t GetZvertexCut() const
Maximal number of events for mixin.
TH2F * fhPhiPhoton
! Azimuthal angle of identified photon vs transerse momentum
virtual Double_t GetEventPlaneAngle() const
TH2F * fhYPrimMC[fgkNmcPrimTypes]
! Rapidity of generated photon
TH2F * fhTrackMatchedDEtaDPhi[2]
! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV, after and before ...
void FillAcceptanceHistograms()
TH2F * fhSumEtaE
! shower dispersion in eta direction
virtual Bool_t IsTrackMatched(AliVCluster *cluster, AliVEvent *event)
virtual Bool_t IsPileUpAnalysisOn() const
TH2F * fhMCEDispEtaPhiDiff[fgkNssTypes]
! shower dispersion in eta -phi direction
void Print(const Option_t *opt) const
Print some relevant parameters set for the analysis.
Int_t GetHistoPhiBins() const
TH2F * fhEtaLam0LowE
! Cluster eta vs lambda0, E<2
TH2F * fhPtPhotonNPileUpSPDVtxTimeCut
! photon pt vs number of spd pile-up vertices, time cut +-25 ns
Bool_t fFillSSHistograms
Fill shower shape histograms.
TH2F * fhdEdx[2]
! Matched track dEdx vs cluster E, after and before photon cuts
TH2F * fhLam0ETRD
! Cluster lambda0 vs E, SM covered by TRD
TH2F * fhDispETM
! Cluster dispersion vs E, cut on Track Matching residual
TH2F * fhEmbedPhotonELambda0FullSignal
! Lambda0 vs E for embedded photons with more than 90% of the cluster energy
Float_t GetHistoTrackResidualPhiMin() const
TH2F * fhEtaPhoton
! Pseudorapidity of identified photon vs transerse momentum
TH2F * fhDispSumEtaDiffE
! difference of 2 eta dispersions
Bool_t IsPileUpFromNotSPDAndNotEMCal() const
Check if event not from pile-up determined neither by SPD nor by EMCal.
virtual Int_t GetEventCentrality() const
TH2F * fhTimePtPhotonSPD
! Time of photon cluster vs Pt, IsSPDPileUp
TH2F * fhMCDispEtaDispPhi[7][fgkNssTypes]
! shower dispersion in eta direction vs phi direction for 5 E bins [0-2],[2-4],[4-6],[6-10],[> 10]
Float_t GetHistoTrackResidualEtaMin() const
Int_t GetHistoNClusterCellBins() const
virtual TClonesArray * GetOutputAODBranch() const
virtual void GetVertex(Double_t v[3]) const
void InitParameters()
Initialize the parameters of the analysis.
Int_t GetHistoPOverEBins() const
TH2F * fhNCellsE
! number of cells in cluster vs E
TH1F * fhPtPrimMC[fgkNmcPrimTypes]
! Number of generated photon vs pT
Bool_t IsMCParticleInCalorimeterAcceptance(Int_t calo, TParticle *particle)
Float_t GetHistoPhiMin() const
TH2F * fhTimePt
! Time of photon cluster vs pt
TH2F * fhEtaPhi
! Pseudorapidity vs Phi of clusters for E > 0.5
TH2F * fhMCLambda0DispPhi[7][fgkNssTypes]
! shower shape correlation l0 vs disp phi
virtual Bool_t IsCaloPIDOn() const
TH2F * fhEPhotonSM
! photon-like cluster E distribution per SM
TH2F * fhEOverPTRD[2]
! Matched track E cluster over P track vs cluster E, after dEdx cut, after and before photon cuts...
TString GetPIDParametersList()
Put data member values in string to keep in output container.
TH2F * fhMCELambda0[fgkNssTypes]
! E vs Lambda0 from MC particle
TLorentzVector GetMother(Int_t label, const AliCaloTrackReader *reader, Bool_t &ok)
Bool_t IsPileUpFromSPDOrEMCal() const
Check if event is from pile-up determined by SPD or EMCal.
TH2F * fhTrackMatchedDPhiNeg[2]
! Phi distance between track and cluster vs cluster E, after and before photon cuts ...
Bool_t IsPileUpFromEMCalAndNotSPD() const
Check if event is from pile-up determined by EMCal, not by SPD.
void MakeAnalysisFillHistograms()
TH2F * fhMCELambda1[fgkNssTypes]
! E vs Lambda1 from MC particle
virtual Float_t GetMinEnergy() const
TH2F * fhLambda0DispPhi[7]
! shower shape correlation l0 vs disp phi
TH2F * fhLambda0DispEta[7]
! shower shape correlation l0 vs disp eta
Base class for CaloTrackCorr analysis algorithms.
virtual TString GetBaseParametersList()
virtual TString GetCalorimeterString() const
Int_t fNOriginHistograms
Fill only NOriginHistograms of the 14 defined types.
static const Int_t fgkNmcPrimTypes
Total number of MC primary histograms.
virtual Bool_t IsRealCaloAcceptanceOn() const
Float_t GetHistodEdxMin() const
virtual AliFiducialCut * GetFiducialCut()
void FillShowerShapeHistograms(AliVCluster *cluster, Int_t mcTag, Float_t maxCellEFraction)
Fill cluster Shower Shape histograms.
TH2F * fhTimePtPhotonNoCut
! Time of photon cluster vs Pt, no cut
TH2F * fhPtPhotonNPileUpSPDVtxTimeCut2
! photon pt vs number of spd pile-up vertices, time cut +-75 ns
TH2F * fhEOverP[2]
! Matched track E cluster over P track vs cluster E, after dEdx cut, after and before photon cuts ...
TH2F * fhTrackMatchedDEta[2]
! Eta distance between track and cluster vs cluster E, after and before photon cuts ...
TH1F * fhEPrimMC[fgkNmcPrimTypes]
! Number of generated photon vs energy
virtual TClonesArray * GetAODMCParticles() const
virtual AliHistogramRanges * GetHistogramRanges()
TH2F * fhCellsE
! energy of cells in cluster vs E of cluster
TH2F * fhDispETMTRD
! Cluster dispersion vs E, SM covered by TRD, cut on Track Matching residual
Int_t GetMaxEnergyCell(AliVCaloCells *cells, const AliVCluster *clu, Float_t &fraction) const
For a given CaloCluster, it gets the absId of the cell with maximum energy deposit.
TH2F * fhPhiPrimMC[fgkNmcPrimTypes]
! Phi of generted photon
TH2F * fhLam1ETM
! Cluster lambda1 vs E, cut on Track Matching residual
Float_t GetHistoTrackResidualPhiMax() const
Filter EMCal/PHOS clusters for photon analysis.
TH2F * fhEtaPhi05Photon
! Pseudorapidity vs Phi of identified photon for E < 0.5
virtual AliEMCALGeometry * GetEMCALGeometry() const
TH2F * fhDispSumPhiDiffE
! difference of 2 phi dispersions
TH2F * fhNCellsLam0HighE
! number of cells in cluster vs lambda0, E>2
Bool_t IsInFiducialCut(Float_t eta, Float_t phi, Int_t det) const
Int_t CheckOrigin(Int_t label, const AliCaloTrackReader *reader, Int_t calorimeter)
virtual AliAODEvent * GetOutputEvent() const
virtual Bool_t NewOutputAOD() const
Float_t GetHistoShowerShapeMin() const
TList * GetCreateOutputObjects()
TH2F * fhMCLambda0DispEta[7][fgkNssTypes]
! shower shape correlation l0 vs disp eta
Int_t GetHistodEdxBins() const
TH2F * fhMCNCellsvsClusterMaxCellDiffE6[fgkNssTypes]
! NCells vs fraction of energy of max cell for E > 6
virtual AliCalorimeterUtils * GetCaloUtils() const
Int_t GetHistoNClusterCellMax() const
Int_t GetHistoTrackResidualEtaBins() const
Float_t fMinDist3
One more cut on distance used for acceptance-efficiency study.
Int_t GetHistoTrackResidualPhiBins() const
TH2F * fhMCPhotonELambda0TwoOverlap
! E vs Lambda0 from MC photons, 2 particles overlap
virtual Bool_t IsHighMultiplicityAnalysisOn() const
TH2F * fhMCPhotonELambda0NOverlap
! E vs Lambda0 from MC photons, N particles overlap
TH1F * fhClusterCutsPt[10]
! control histogram on the different photon selection cuts, pT
Float_t fMinDist
Minimal distance to bad channel to accept cluster.
TH2F * fhTrackMatchedMCParticle[2]
! Trace origin of matched particle
TH2F * fhMCMaxCellDiffClusterE[fgkNssTypes]
! Fraction of energy carried by cell with maximum energy
TH2F * fhMC2E[fgkNmcTypes]
! E distribution, Reco vs MC coming from MC particle
TH2F * fhEmbedPhotonELambda0MostlySignal
! Lambda0 vs E for embedded photons with 90%<fraction<50%
virtual Double_t GetEventWeight() const
void SetPIDBits(AliVCluster *cluster, AliAODPWG4Particle *aodph, AliCalorimeterUtils *cu, AliVEvent *event)
Set Bits for PID selection.
Int_t fNPrimaryHistograms
Fill only NPrimaryHistograms of the 7 defined types.
virtual AliCaloPID * GetCaloPID()
void FillPileUpHistograms(AliVCluster *cluster, AliVCaloCells *cells, Int_t absIdMax)
Fill some histograms to understand effect of pile-up.
Int_t GetNumberOfLocalMaxima(AliVCluster *cluster, AliVCaloCells *cells)
Find the number of local maxima in cluster.
TH2F * fhMCNCellsvsClusterMaxCellDiffE2[fgkNssTypes]
! NCells vs fraction of energy of max cell for 2 < E < 6 GeV
TH2F * fhNCellsDispHighE
! number of cells in cluster vs dispersion, E>2
TH2F * fhEmbeddedSignalFractionEnergy
! Fraction of photon energy of embedded signal vs cluster energy
virtual TObjArray * GetPHOSClusters() const
Float_t GetHistoEtaMin() const
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)
TH1F * fhEPhoton
! Number of identified photon vs energy
TH2F * fhTrackMatchedDEtaMCConversion[2]
! Eta distance between track and cluster vs cluster E, originated in conversion, after and before pho...
TH2F * fhLam0ETMTRD
! Cluster lambda0 vs E, SM covered by TRD, cut on Track Matching residual
TH2F * fhLam0DispLowE
! Cluster lambda0 vs dispersion, E<2
virtual Int_t GetModuleNumber(AliAODPWG4Particle *part) const
Double_t fTimeCutMax
Remove clusters/cells with time larger than this value, in ns.
TH2F * fhTrackMatchedDPhiMCConversion[2]
! Phi distance between track and cluster vs cluster E, originated in conversion, after and before pho...
TH1F * fhMCE[fgkNmcTypes]
! Number of identified photon vs cluster energy coming from MC particle
TH2F * fhDispLam1LowE
! Cluster disp vs lambda1, E<2
TH2F * fhMCEDispEta[fgkNssTypes]
! shower dispersion in eta direction
TLorentzVector GetDaughter(Int_t daughter, Int_t label, const AliCaloTrackReader *reader, Int_t &pdg, Int_t &status, Bool_t &ok, Int_t &daugLabel, TVector3 &prodVertex)
Float_t GetHistoEtaMax() const
TH1F * fhPtPrimMCAcc[fgkNmcPrimTypes]
! Number of generated photon vs pT, in calorimeter acceptance
virtual void AddAODParticle(AliAODPWG4Particle part)
Float_t GetPHOSPtMin() const
TH2F * fhLam0E
! Cluster lambda0 vs E
Int_t GetHistoPtBins() const
Double_t fTimeCutMin
Remove clusters/cells with time smaller than this value, in ns.
static const Int_t fgkNssTypes
Total number of MC histograms for shower shape studies.
Float_t GetEMCALPtMin() const
TH2F * fhMCDeltaE[fgkNmcTypes]
! MC-Reco E distribution coming from MC particle
TH2F * fhTrackMatchedDEtaNeg[2]
! Eta distance between track and cluster vs cluster E, after and before photon cuts ...
TH2F * fhSumPhiE
! shower dispersion in phi direction
TH2F * fhEmbedPhotonELambda0FullBkg
! Lambda0 vs E for embedded photons with less than 10% of the cluster energy
TH2F * fhLam0ETM
! Cluster lambda0 vs E, cut on Track Matching residual
TH2F * fhMCEDispersion[fgkNssTypes]
! E vs Dispersion from MC particle
Int_t GetNOverlaps(const Int_t *label, UInt_t nlabels, Int_t mctag, Int_t mesonLabel, AliCaloTrackReader *reader, Int_t *overpdg)
TH2F * fhEtaLam0HighE
! Cluster eta vs lambda0, E>2
AliVTrack * GetMatchedTrack(AliVCluster *cluster, AliVEvent *event, Int_t index=-1) const
TH2F * fhLam1E
! Cluster lambda1 vs E
TH2F * fhPtPhotonNPileUpTrkVtxTimeCut2
! photon pt vs number of track pile-up vertices, time cut +- 75 ns
TH2F * fhDispEtaPhiDiffE
! shower dispersion eta - phi
TH2F * fhMCDeltaPt[fgkNmcTypes]
! MC-Reco pT distribution coming from MC particle
TH2F * fhDispPhiE
! shower dispersion in phi direction
TH2F * fhMCLambda0vsClusterMaxCellDiffE0[fgkNssTypes]
! Lambda0 vs fraction of energy of max cell for E < 2 GeV
Float_t GetHistoPOverEMax() const
TH2F * fhYPrimMCAcc[fgkNmcPrimTypes]
! Rapidity of generated photon, in calorimeter acceptance
TH2F * fhPhiPrimMCAcc[fgkNmcPrimTypes]
! Phi of generted photon, in calorimeter acceptance
TH2F * fhNCellsLam0LowE
! number of cells in cluster vs lambda0
TH2F * fhMCPhotonELambda0NoOverlap
! E vs Lambda0 from MC photons, no overlap
virtual AliMCAnalysisUtils * GetMCAnalysisUtils()
virtual Int_t GetEventNumber() const
virtual Float_t GetMaxEnergy() const
TH2F * fhSumEtaPhiE
! shower dispersion in eta and phi direction
void Init()
Init. Do some checks, abort if the cluster is not the expected PHOS or EMCal.
virtual Float_t GetMinPt() const
TH2F * fhMCPhi[fgkNmcTypes]
! Phi of identified photon coming from MC particle
TH2F * fhClusterTimeDiffPhotonPileUp[7]
! E vs Time difference inside cluster for selected photons
TLorentzVector fPrimaryMom
! Primary MC momentum, temporary container
virtual void Print(const Option_t *) const
Print some relevant parameters set for the analysis.
Bool_t ClusterSelected(AliVCluster *cl, Int_t nlm)
Int_t GetHistoTimeBins() const
Float_t GetHistoPOverEMin() const
TH1F * fhEPrimMCAcc[fgkNmcPrimTypes]
! Number of generated photon vs energy, in calorimeter acceptance
TH2F * fhTrackMatchedDEtaMCOverlap[2]
! Eta distance between track and cluster vs cluster E, several particle overlap, after and before pho...
TH2F * fhTimeNPileUpVertTrack
! Time of cluster vs n pile-up vertices from Tracks
Float_t GetHistoTimeMax() const
virtual Int_t GetDataType() const
Float_t GetHistoTimeMin() const
Float_t GetHistoShowerShapeMax() const
Bool_t IsPileUpFromEMCal() const
Check if event is from pile-up determined by EMCal.
void FillTrackMatchingResidualHistograms(AliVCluster *calo, Int_t cut)
TH2F * fhTrackMatchedDPhi[2]
! Phi distance between track and cluster vs cluster E, after and before photon cuts ...
TH2F * fhDispLam1HighE
! Cluster disp vs lambda1, E>2
TH2F * fhPtCentralityPhoton
! centrality vs photon pT
Float_t GetHistoPhiMax() const
TH2F * fhTrackMatchedDPhiMCOverlap[2]
! Phi distance between track and cluster vs cluster E, several particle overlap, after and before pho...
virtual AliCaloTrackReader * GetReader() const
Int_t GetHistoEtaBins() const
TH2F * fhMCLambda0vsClusterMaxCellDiffE6[fgkNssTypes]
! Lambda0 vs fraction of energy of max cell for E > 6 GeV
TH2F * fhTrackMatchedDPhiPos[2]
! Phi distance between track and cluster vs cluster E, after and before photon cuts ...
Float_t GetHistoTrackResidualEtaMax() const
TLorentzVector fMomentum
! Cluster momentum, temporary container
TH2F * fhLam0DispHighE
! Cluster lambda0 vs dispersion, E>2
virtual TObjArray * GetEMCALClusters() const
TH2F * fhMCESumEtaPhi[fgkNssTypes]
! shower dispersion in eta vs phi direction
TH2F * fhTrackMatchedDEtaMCNoOverlap[2]
! Eta distance between track and cluster vs cluster E, not other particle overlap, after and before photon cuts
virtual AliVCaloCells * GetPHOSCells() const
TH2F * fhTimeNPileUpVertSPD
! Time of cluster vs n pile-up vertices from SPD
TH2F * fhEtaPrimMCAcc[fgkNmcPrimTypes]
! Phi of generted photon, in calorimeter acceptance
TH2F * fhNLocMax
! number of maxima in selected clusters
static const Int_t fgkNmcTypes
Total number of cluster MC origin histograms.
TH2F * fhEmbedPi0ELambda0MostlySignal
! Lambda0 vs E for embedded photons with 90%<fraction<50%
Bool_t CheckTagBit(Int_t tag, UInt_t test) const
TH2F * fhPhiLam0HighE
! Cluster phi vs lambda0, E>2
TH2F * fhMCEDispPhi[fgkNssTypes]
! shower dispersion in phi direction
virtual AliMixedEvent * GetMixedEvent() const
TH2F * fhEmbedPhotonELambda0MostlyBkg
! Lambda0 vs E for embedded photons with 50%<fraction<10%
TVector3 fProdVertex
! Primary MC production vertex, temporary container
TObjString * GetAnalysisCuts()
Save parameters used for analysis in a string.
TH2F * fhLam1Lam0LowE
! Cluster lambda1 vs lambda0, E<2
TH2F * fhMCNCellsvsClusterMaxCellDiffE0[fgkNssTypes]
! NCells vs fraction of energy of max cell for E < 2
Bool_t IsPileUpFromSPDAndEMCal() const
Check if event is from pile-up determined by SPD and EMCal.
TH2F * fhMCConversionLambda0Rcut[6]
! Shower shape of photon conversions, depending on conversion vertex.
TH2F * fhMCLambda0vsClusterMaxCellDiffE2[fgkNssTypes]
! Lambda0 vs fraction of energy of max cell for 2< E < 6 GeV
Int_t GetFirstSMCoveredByTRD() const
Time cut in ns.