18 #include <TClonesArray.h>
23 #include <THnSparse.h>
28 #include <AliVCluster.h>
29 #include <AliVParticle.h>
38 #include "AliEMCALGeometry.h"
40 #include "AliEMCALTriggerPatchInfo.h"
57 fDijetLeadingHadronPt(0),
59 fTrackConstituentThreshold(0),
60 fClusterConstituentThreshold(0),
63 fBackgroundScalingWeights(0),
64 fGapJetScalingWeights(0),
65 fPlotDijetCandHistograms(kFALSE),
66 fPlotDijetImbalanceHistograms(kFALSE),
67 fComputeBackground(kFALSE),
68 fDoMomentumBalance(kFALSE),
69 fDoGeometricalMatching(kFALSE),
70 fLoadBackgroundScalingWeights(kTRUE),
71 fComputeMBDownscaling(kFALSE),
72 fDoTriggerSimulation(kFALSE),
78 fUseAliEventCuts(kTRUE),
81 fUseManualEventCuts(kFALSE),
104 fDijetLeadingHadronPt(0),
106 fTrackConstituentThreshold(0),
107 fClusterConstituentThreshold(0),
110 fBackgroundScalingWeights(0),
111 fGapJetScalingWeights(0),
112 fPlotDijetCandHistograms(kFALSE),
113 fPlotDijetImbalanceHistograms(kFALSE),
114 fComputeBackground(kFALSE),
115 fDoMomentumBalance(kFALSE),
116 fDoGeometricalMatching(kFALSE),
117 fLoadBackgroundScalingWeights(kTRUE),
118 fComputeMBDownscaling(kFALSE),
119 fDoTriggerSimulation(kFALSE),
125 fUseAliEventCuts(kTRUE),
128 fUseManualEventCuts(kFALSE),
129 fMBUpscaleFactor(1.),
201 while ((obj = next())) {
229 if (embeddingHelper) {
250 while ((jets = static_cast<AliJetContainer*>(nextJetColl()))) {
252 histname = TString::Format(
"%s/BackgroundHistograms/hScaleFactorEMCal", jets->GetArrayName().Data());
253 title = histname +
";Centrality;Scale factor;counts";
256 histname = TString::Format(
"%s/BackgroundHistograms/hDeltaPtEMCal", jets->GetArrayName().Data());
257 title = histname +
";Centrality (%);#delta#it{p}_{T} (GeV/#it{c});counts";
260 histname = TString::Format(
"%s/BackgroundHistograms/hScaleFactorEtaPhi", jets->GetArrayName().Data());
261 title = histname +
";#eta;#phi;Centrality;Scale factor;";
264 Double_t max[4] = {0.5,6., 100, 20};
267 histname = TString::Format(
"%s/BackgroundHistograms/hDeltaPtEtaPhi", jets->GetArrayName().Data());
268 title = histname +
";#eta;#phi;Centrality;#delta#it{p}_{T} (GeV/#it{c})";
270 Double_t minDpT[4] = {-0.5,1., 0, -50};
271 Double_t maxDpT[4] = {0.5,6., 100, 150};
287 while ((jets = static_cast<AliJetContainer*>(nextJetColl()))) {
296 axisTitle[dim] =
"Centrality (%)";
304 axisTitle[dim] =
"LeadingHadronRequired";
311 axisTitle[dim] =
"#it{p}_{T,trig jet} (GeV/#it{c})";
312 nbins[dim] = TMath::CeilNint(
fMaxPt/2);
318 axisTitle[dim] =
"#it{p}_{T,ass jet} (GeV/#it{c})";
319 nbins[dim] = TMath::CeilNint(
fMaxPt/2);
325 axisTitle[dim] =
"#phi_{trig jet}";
326 nbins[dim] = TMath::CeilNint(
fMaxPt/2);
328 max[dim] = TMath::TwoPi();
332 axisTitle[dim] =
"#phi_{ass jet}";
333 nbins[dim] = TMath::CeilNint(
fMaxPt/2);
335 max[dim] = TMath::TwoPi();
339 axisTitle[dim] =
"#eta_{trig jet}";
340 nbins[dim] = TMath::CeilNint(
fMaxPt/2);
346 axisTitle[dim] =
"#eta_{ass jet}";
347 nbins[dim] = TMath::CeilNint(
fMaxPt/2);
353 TString thnname = TString::Format(
"%s/DijetCandObservables", jets->GetArrayName().Data());
355 for (
Int_t i = 0; i < dim; i++) {
356 hn->GetAxis(i)->SetTitle(axisTitle[i]);
357 hn->SetBinEdges(i, binEdges[i]);
370 while ((jets = static_cast<AliJetContainer*>(nextJetColl()))) {
382 axisTitle[dim] =
"Centrality (%)";
390 axisTitle[dim] =
"#Delta#phi";
397 axisTitle[dim] =
"#Delta#eta";
404 axisTitle[dim] =
"A_{J}";
411 axisTitle[dim] =
"x_{J}";
418 axisTitle[dim] =
"k_{Ty} (GeV)";
425 axisTitle[dim] =
"N_{tracks, trig jet}";
432 axisTitle[dim] =
"N_{tracks, ass jet}";
439 TString thnname = TString::Format(
"%s/DijetImbalanceObservables", jets->GetArrayName().Data());
441 for (
Int_t i = 0; i < dim; i++) {
442 hn->GetAxis(i)->SetTitle(axisTitle[i]);
443 hn->SetBinEdges(i, binEdges[i]);
451 TString histname = TString::Format(
"%s/DijetJetHistograms/hPtUpscaledMB", jets->GetArrayName().Data());
452 TString title = histname +
";Centrality (%);#it{p}_{T,1}^{corr} (GeV/#it{c});#it{p}_{T,2}^{corr} (GeV/#it{c})";
453 fHistManager.
CreateTH3(histname.Data(), title.Data(), 20, 0, 100,
nPtBins, 0,
fMaxPt,
nPtBins, 0,
fMaxPt,
"s");
458 histname = TString::Format(
"%s/DijetJetHistograms/hNEFVsPt", jets->GetArrayName().Data());
459 title = histname +
";Centrality (%);#it{p}_{T}^{corr} (GeV/#it{c});NEF;type";
466 histname = TString::Format(
"%s/DijetJetHistograms/hZLeadingVsPt", jets->GetArrayName().Data());
467 title = histname +
";Centrality (%);#it{p}_{T}^{corr} (GeV/#it{c});#it{z}_{leading};type";
474 histname = TString::Format(
"%s/DijetJetHistograms/hZVsPt", jets->GetArrayName().Data());
475 title = histname +
";Centrality (%);#it{p}_{T}^{corr} (GeV/#it{c});#it{z};type";
482 histname = TString::Format(
"%s/DijetJetHistograms/hNConstVsPt", jets->GetArrayName().Data());
483 title = histname +
";Centrality (%);#it{p}_{T}^{corr} (GeV/#it{c});No. of constituents;type";
498 while ((jets = static_cast<AliJetContainer*>(nextJetColl()))) {
508 axisTitle[dim] =
"A_{J}";
515 axisTitle[dim] =
"#Delta#phi";
522 axisTitle[dim] =
"#it{p}_{T,particle} (GeV/#it{c})";
532 max[dim] = pTParticleBins[nbins[dim]];
533 binEdges[dim] = pTParticleBins;
536 axisTitle[dim] =
"#it{p}_{T}#parallel (GeV/#it{c})";
545 max[dim] = pTParallelBins[nbins[dim]];
546 binEdges[dim] = pTParallelBins;
549 TString thnname = TString::Format(
"%s/MomentumBalance", jets->GetArrayName().Data());
551 for (
Int_t i = 0; i < dim; i++) {
552 hn->GetAxis(i)->SetTitle(axisTitle[i]);
553 hn->SetBinEdges(i, binEdges[i]);
572 axisTitle[dim] =
"Centrality (%)";
580 axisTitle[dim] =
"isSwitched";
587 axisTitle[dim] =
"#DeltaR_{trig}";
594 axisTitle[dim] =
"#DeltaR_{ass}";
601 axisTitle[dim] =
"trig #it{p}_{T,low-thresh} - #it{p}_{T,hard-core}";
608 axisTitle[dim] =
"ass #it{p}_{T,low-thresh} - #it{p}_{T,hard-core}";
615 axisTitle[dim] =
"A_{J} low-threshold";
622 axisTitle[dim] =
"A_{J} hard-core";
629 TString thnname =
"GeometricalMatching";
631 for (
Int_t i = 0; i < dim; i++) {
632 hn->GetAxis(i)->SetTitle(axisTitle[i]);
633 hn->SetBinEdges(i, binEdges[i]);
639 histname =
"GeometricalMatchingEfficiency";
640 title = histname +
";isMatched;counts";
657 histname =
"TriggerSimHistograms/hMedPatchDijet";
658 title = histname +
";Centrality (%);#it{p}_{T,trig}^{corr} (GeV/#it{c});#it{E}_{patch,med} (GeV);type";
659 Int_t nbinsD[4] = {50, 40, 100, 2};
661 Double_t maxD[4] = {100, 200, 50, 1.5};
673 if (fname.BeginsWith(
"alien://")) {
674 TGrid::Connect(
"alien://");
677 TFile*
file = TFile::Open(path);
679 if (!file || file->IsZombie()) {
680 ::Error(
"AliAnalysisTaskEmcalDijetImbalance",
"Could not open background scaling histogram");
685 TH2D* h1 =
dynamic_cast<TH2D*
>(file->Get(name1));
688 ::Info(
"AliAnalysisTaskEmcalDijetImbalance::LoadBackgroundScalingHistogram",
"Background histogram %s loaded from file %s.", name1, path);
691 ::Error(
"AliAnalysisTaskEmcalDijetImbalance::LoadBackgroundScalingHistogram",
"Background histogram %s not found in file %s.", name1, path);
698 TH2D* h2 =
dynamic_cast<TH2D*
>(file->Get(name2));
701 ::Info(
"AliAnalysisTaskEmcalDijetImbalance::LoadBackgroundScalingHistogram",
"Jet pT scaling histogram %s loaded from file %s.", name2, path);
704 ::Error(
"AliAnalysisTaskEmcalDijetImbalance::LoadBackgroundScalingHistogram",
"Jet pT scaling histogram %s not found in file %s.", name2, path);
737 if (!cls.InheritsFrom(
"AliEMCALTriggerPatchInfo")) {
738 AliError(Form(
"%s: Objects of type %s in %s are not inherited from AliEMCALTriggerPatchInfo!",
739 GetName(), cls.GetName(),
"EmcalTriggers"));
744 AliError(Form(
"%s: Unable to get trigger patch container with name %s. Aborting", GetName(),
"EmcalTriggers"));
770 TString triggerNameMB1 =
"CINT7-B-NOPF-CENT";
771 TString triggerNameMB2 =
"CV0L7-B-NOPF-CENT";
772 TString triggerNameJE =
"CINT7EJ1-B-NOPF-CENTNOPMD";
777 for (
auto i : runtriggers) {
778 if (i.EqualTo(triggerNameMB1) || i.EqualTo(triggerNameMB2)) {
821 while ((jetCont = static_cast<AliJetContainer*>(next()))) {
822 TString jetContName = jetCont->GetName();
823 if (jetContName.Contains(
"HardCore"))
continue;
831 for (
Int_t leadingHadronCutType=0; leadingHadronCutType<2; leadingHadronCutType++) {
834 FindDijet(jetCont, leadingHadronCutType);
855 histname = TString::Format(
"%s/MomentumBalance", jetCont->GetArrayName().Data());
915 for(
auto assJetCand : jetCont->
accepted()) {
916 if (!assJetCand)
continue;
918 if ( TMath::Abs(trigJet->
Phi() - assJetCand->Phi()) <
fDeltaPhiMin )
continue;
921 if ( assJetCandPt < assJetPt )
continue;
953 track = trackIterator.second;
963 Double_t deltaPhiTrigJet = TMath::Abs(trackPhi - trigJetPhi);
964 Double_t deltaPhiAssJet = TMath::Abs(trackPhi - assJetPhi);
965 Bool_t isNearside = deltaPhiTrigJet < deltaPhiAssJet;
970 deltaPhi = trackPhi - trigJetPhi;
971 balancePt = trackPt * TMath::Cos(deltaPhi);
974 deltaPhi = trackPhi - assJetPhi;
975 balancePt = -trackPt * TMath::Cos(deltaPhi);
989 TString jetContAllName = Form(
"Jet_AKTFullR0%d0_tracks_pT0150_caloClusters_E0300_pt_scheme", (
int) (
fMatchingJetR*10) );
995 TString jetContHardCoreName = Form(
"JetHardCore_AKTFullR0%d0_tracks_pT%d_caloClusters_E%d_pt_scheme", (
int) (
fMatchingJetR*10), trackThreshold, clusThreshold);
1017 TClass cls(objname);
1018 if (!cls.InheritsFrom(
"AliEMCALTriggerPatchInfo")) {
1019 AliError(Form(
"%s: Objects of type %s in %s are not inherited from AliEMCALTriggerPatchInfo!",
1020 GetName(), cls.GetName(),
"EmcalTriggers"));
1025 AliError(Form(
"%s: Unable to get trigger patch container with name %s. Aborting", GetName(),
"EmcalTriggers"));
1030 std::vector<Double_t> vecEMCal;
1031 std::vector<Double_t> vecDCal;
1033 AliEMCALTriggerPatchInfo *recpatch =
static_cast<AliEMCALTriggerPatchInfo *
>(p);
1036 if(!recpatch->IsJetHighSimple())
continue;
1038 if (recpatch->IsEMCal()) {
1039 vecEMCal.push_back(recpatch->GetPatchE());
1041 vecDCal.push_back(recpatch->GetPatchE());
1048 const Int_t nBkgPatchesEMCal = vecEMCal.size();
1049 const Int_t nBkgPatchesDCal = vecDCal.size();
1050 fMedianEMCal = TMath::Median(nBkgPatchesEMCal, &vecEMCal[0]);
1051 fMedianDCal = TMath::Median(nBkgPatchesDCal, &vecDCal[0]);
1055 histname =
"TriggerSimHistograms/hMedPatchDijet";
1074 for(
auto matchingTrigJetCand : jetCont->
accepted()) {
1075 if (!matchingTrigJetCand)
continue;
1077 if (matchingTrigJet) {
1078 if (
GetJetPt(jetCont, matchingTrigJetCand) <
GetJetPt(jetCont, matchingTrigJet) )
continue;
1080 matchingTrigJet = matchingTrigJetCand;
1082 if (!matchingTrigJet)
return;
1086 for(
auto matchingAssJetCand : jetCont->
accepted()) {
1087 if (!matchingAssJetCand)
continue;
1089 if (matchingAssJet) {
1090 if (
GetJetPt(jetCont, matchingAssJetCand) <
GetJetPt(jetCont, matchingAssJet) )
continue;
1092 matchingAssJet = matchingAssJetCand;
1096 if (matchingAssJet) {
1099 if (
GetJetPt(jetCont, matchingTrigJet) <
GetJetPt(jetCont, matchingAssJet) ) {
1100 trigJet = matchingAssJet;
1101 assJet = matchingTrigJet;
1140 Double_t phiMinEMCal =
fGeom->GetArm1PhiMin() * TMath::DegToRad();
1141 Double_t phiMaxEMCal =
fGeom->GetEMCALPhiMax() * TMath::DegToRad();
1147 Double_t accTPC = 2 * etaTPC * 2 * TMath::Pi();
1148 Double_t accEMCal = 2 * etaEMCal * (phiMaxEMCal - phiMinEMCal);
1154 while ((jetCont = static_cast<AliJetContainer*>(nextJetColl()))) {
1157 TRandom3* r =
new TRandom3(0);
1158 Double_t jetR = jetCont->GetJetRadius();
1159 Double_t accRC = TMath::Pi() * jetR * jetR;
1160 Double_t etaEMCalfid = etaEMCal - jetR;
1161 Double_t phiMinEMCalfid = phiMinEMCal + jetR;
1162 Double_t phiMaxEMCalfid = phiMaxEMCal - jetR;
1165 Double_t etaEMCalRC = r->Uniform(-etaEMCalfid, etaEMCalfid);
1166 Double_t phiEMCalRC = r->Uniform(phiMinEMCalfid, phiMaxEMCalfid);
1174 etaMin = -etaEMCalfid + etaBin*etaStep;
1175 etaMax = etaMin + etaStep;
1176 etaDCalRC[etaBin] = r->Uniform(etaMin, etaMax);
1184 phiMin = 1 + phiBin*phiStep;
1185 phiMax = phiMin + phiStep;
1186 phiDCalRC[phiBin] = r->Uniform(phiMin, phiMax);
1197 std::vector<std::vector<Double_t>> trackPtSumDCalRC(fNEtaBins, std::vector<Double_t>(fNPhiBins));
1198 std::vector<std::vector<Double_t>> clusESumDCalRC(fNEtaBins, std::vector<Double_t>(fNPhiBins));
1212 track = trackIterator.first;
1213 trackEta = track.Eta();
1215 trackPt = track.Pt();
1218 if (TMath::Abs(trackEta) < etaTPC) {
1219 trackPtSumTPC += trackPt;
1223 if (TMath::Abs(trackEta) < etaEMCal && trackPhi > phiMinEMCal && trackPhi < phiMaxEMCal) {
1224 trackPtSumEMCal += trackPt;
1228 deltaR =
GetDeltaR(&track, etaEMCalRC, phiEMCalRC);
1229 if (deltaR < jetR) {
1230 trackPtSumEMCalRC += trackPt;
1236 deltaR =
GetDeltaR(&track, etaDCalRC[etaBin], phiDCalRC[phiBin]);
1237 if (deltaR < jetR) {
1238 trackPtSumDCalRC[etaBin][phiBin] += trackPt;
1255 clus = clusIterator.first;
1256 clusEta = clus.Eta();
1261 if (TMath::Abs(clusEta) < etaEMCal && clusPhi > phiMinEMCal && clusPhi < phiMaxEMCal) {
1262 clusESumEMCal += clusE;
1266 deltaR =
GetDeltaR(&clus, etaEMCalRC, phiEMCalRC);
1267 if (deltaR < jetR) {
1268 clusESumEMCalRC += clusE;
1274 deltaR =
GetDeltaR(&clus, etaDCalRC[etaBin], phiDCalRC[phiBin]);
1275 if (deltaR < jetR) {
1276 clusESumDCalRC[etaBin][phiBin] += clusE;
1284 Double_t numerator = (trackPtSumEMCal + clusESumEMCal) / accEMCal;
1285 Double_t denominator = trackPtSumTPC / accTPC;
1286 Double_t scaleFactor = numerator / denominator;
1287 TString histname = TString::Format(
"%s/BackgroundHistograms/hScaleFactorEMCal", jetCont->GetArrayName().Data());
1293 numerator = (trackPtSumDCalRC[etaBin][phiBin] + clusESumDCalRC[etaBin][phiBin]) / accRC;
1294 scaleFactor = numerator / denominator;
1295 histname = TString::Format(
"%s/BackgroundHistograms/hScaleFactorEtaPhi", jetCont->GetArrayName().Data());
1296 Double_t x[4] = {etaDCalRC[etaBin], phiDCalRC[phiBin],
fCent, scaleFactor};
1302 Double_t rho = jetCont->GetRhoVal();
1303 Double_t deltaPt = trackPtSumEMCalRC + clusESumEMCalRC - rho * TMath::Pi() * jetR * jetR;
1304 histname = TString::Format(
"%s/BackgroundHistograms/hDeltaPtEMCal", jetCont->GetArrayName().Data());
1313 rho = sf * jetCont->GetRhoVal();
1315 deltaPt = trackPtSumDCalRC[etaBin][phiBin] + clusESumDCalRC[etaBin][phiBin] - rho * accRC;
1316 histname = TString::Format(
"%s/BackgroundHistograms/hDeltaPtEtaPhi", jetCont->GetArrayName().Data());
1317 Double_t x[4] = {etaDCalRC[etaBin], phiDCalRC[phiBin],
fCent, deltaPt};
1338 jetPt = jetPt * (1 + sf * jet->
NEF());
1346 TString jetContName = jetCont->GetName();
1347 if (jetContName.Contains(
"HardCore")) pT = jet->
Pt();
1360 for(
auto jetCand : jetCont->
accepted()) {
1361 if (!jetCand)
continue;
1365 if ( jetCandPt < leadingJetPt )
continue;
1367 leadingJet = jetCand;
1384 Double_t deltaR = TMath::Sqrt( deltaPhi*deltaPhi + deltaEta*deltaEta );
1394 Double_t deltaEta = TMath::Abs(part->Eta() - etaRef);
1395 Double_t deltaR = TMath::Sqrt( deltaPhi*deltaPhi + deltaEta*deltaEta );
1442 TString histname = TString::Format(
"%s/DijetCandObservables", jets->GetArrayName().Data());
1444 if (!histJetObservables)
return;
1445 for (
Int_t n = 0; n < histJetObservables->GetNdimensions(); n++) {
1446 TString title(histJetObservables->GetAxis(n)->GetTitle());
1447 if (
title==
"Centrality (%)")
1448 contents[n] =
fCent;
1449 else if (
title==
"LeadingHadronRequired")
1451 else if (
title==
"#it{p}_{T,trig jet} (GeV/#it{c})")
1453 else if (
title==
"#it{p}_{T,ass jet} (GeV/#it{c})")
1455 else if (
title==
"#phi_{trig jet}")
1457 else if (
title==
"#phi_{ass jet}")
1459 else if (
title==
"#eta_{trig jet}")
1461 else if (
title==
"#eta_{ass jet}")
1464 AliWarning(Form(
"Unable to fill dimension %s!",
title.Data()));
1466 histJetObservables->Fill(contents);
1477 TString histname = TString::Format(
"%s/DijetImbalanceObservables", jets->GetArrayName().Data());
1479 if (!histJetObservables)
return;
1480 for (
Int_t n = 0; n < histJetObservables->GetNdimensions(); n++) {
1481 TString title(histJetObservables->GetAxis(n)->GetTitle());
1482 if (
title==
"Centrality (%)")
1483 contents[n] =
fCent;
1484 else if (
title==
"#Delta#phi")
1486 else if (
title==
"#Delta#eta")
1488 else if (
title==
"A_{J}")
1490 else if (
title==
"x_{J}")
1492 else if (
title==
"k_{Ty} (GeV)")
1494 else if (
title==
"N_{tracks, trig jet}")
1496 else if (
title==
"N_{tracks, ass jet}")
1499 AliWarning(Form(
"Unable to fill dimension %s!",
title.Data()));
1501 histJetObservables->Fill(contents);
1505 TString histname = TString::Format(
"%s/DijetJetHistograms/hPtUpscaledMB", jets->GetArrayName().Data());
1513 histname = TString::Format(
"%s/DijetJetHistograms/hNEFVsPt", jets->GetArrayName().Data());
1518 histname = TString::Format(
"%s/DijetJetHistograms/hZLeadingVsPt", jets->GetArrayName().Data());
1519 TLorentzVector leadPart;
1522 if (z == 1 || (z > 1 && z - 1 < 1e-3)) z = 0.999;
1527 histname = TString::Format(
"%s/DijetJetHistograms/hZVsPt", jets->GetArrayName().Data());
1530 track =
static_cast<AliVTrack*
>(trigJet->
Track(i));
1537 histname = TString::Format(
"%s/DijetJetHistograms/hNConstVsPt", jets->GetArrayName().Data());
1550 if (!histJetObservables)
return;
1551 for (
Int_t n = 0; n < histJetObservables->GetNdimensions(); n++) {
1552 TString title(histJetObservables->GetAxis(n)->GetTitle());
1555 else if (
title==
"#Delta#phi")
1556 contents[n] = deltaPhi;
1557 else if (
title==
"#it{p}_{T,particle} (GeV/#it{c})")
1558 contents[n] = trackPt;
1559 else if (
title==
"#it{p}_{T}#parallel (GeV/#it{c})")
1560 contents[n] = balancePt;
1562 AliWarning(Form(
"Unable to fill dimension %s!",
title.Data()));
1564 histJetObservables->Fill(contents);
1573 TString histname =
"GeometricalMatchingEfficiency";
1583 TString thnname =
"GeometricalMatching";
1586 if (!histJetObservables)
return;
1587 for (
Int_t n = 0; n < histJetObservables->GetNdimensions(); n++) {
1588 TString title(histJetObservables->GetAxis(n)->GetTitle());
1589 if (
title==
"Centrality (%)")
1590 contents[n] =
fCent;
1591 else if (
title==
"isSwitched")
1592 contents[n] = isSwitched;
1593 else if (
title==
"#DeltaR_{trig}")
1594 contents[n] = trigDeltaR;
1595 else if (
title==
"#DeltaR_{ass}")
1596 contents[n] = assDeltaR;
1597 else if (
title==
"trig #it{p}_{T,low-thresh} - #it{p}_{T,hard-core}")
1599 else if (
title==
"ass #it{p}_{T,low-thresh} - #it{p}_{T,hard-core}")
1601 else if (
title==
"A_{J} low-threshold")
1603 else if (
title==
"A_{J} hard-core")
1606 AliWarning(Form(
"Unable to fill dimension %s!",
title.Data()));
1608 histJetObservables->Fill(contents);
Double_t fMatchingJetR
jet R for matching study
void AllocateDijetImbalanceHistograms()
AliEmcalJet * GetLeadingJet(AliJetContainer *jetCont)
Double_t GetRhoVal() const
Int_t fNPhiBins
Number of phi bins in DCal region (for background/correction)
Int_t fNPtHistBins
! number of variable pt bins
void UserCreateOutputObjects()
Float_t fMaxPt
Histogram pt limit.
AliJetContainer * GetJetContainer(Int_t i=0) const
Double_t * fPtHistBins
! variable pt bins
Bool_t fUseManualEventCuts
Flag to use manual event cuts.
UInt_t fOffTrigger
offline trigger for event selection
Bool_t fUseAliEventCuts
Flag to use AliEventCuts (otherwise AliAnalysisTaskEmcal will be used)
static AliEmcalDownscaleFactorsOCDB * Instance()
const AliClusterIterableMomentumContainer accepted_momentum() const
Int_t fNEtaBins
Number of eta bins in DCal region (for background/correction)
void AllocateGeometricalMatchingHistograms()
void DoMomentumBalance(TString histname)
Container with name, TClonesArray and cuts for particles.
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
Declaration of class AliTLorentzVector.
void SetRun(int runnumber)
TList * fEventCutList
! Output list for event cut histograms
void FillTH3(const char *hname, double x, double y, double z, double weight=1., Option_t *opt="")
Fill a 3D histogram within the container.
Declaration of class AliAnalysisTaskEmcalEmbeddingHelper.
TH2D * fGapJetScalingWeights
Histogram storing eta-phi weights scaling jets near the gap region.
AliVParticle * Track(Int_t idx) const
Double_t fDijetLeadingHadronPt
leading hadron pT threshold for leading jet in dijet
void FillDijetCandHistograms(AliJetContainer *jets)
void AllocateBackgroundHistograms()
AliAnalysisTaskEmcalDijetImbalance()
Double_t GetDownscaleFactorForTriggerClass(const TString &trigger) const
Double_t fMedianEMCal
! median patch energy in EMCal, per event
Double_t fMedianDCal
! median patch energy in DCal, per event
void FillGeometricalMatchingHistograms()
Double_t fMinAssJetPt
subleading jet min pT in a dijet pair, for it to be accepted
UShort_t GetNumberOfConstituents() const
void SetCaloTriggerPatchInfoName(const char *n)
UShort_t GetNumberOfTracks() const
Bool_t fDoMomentumBalance
Set whether to enable momentum balance study.
void FindDijet(AliJetContainer *jetCont, Int_t leadingHadronCutBin)
Bool_t fPlotDijetImbalanceHistograms
Set whether to enable dijet imbalance histograms.
bool AddQAPlotsToList(TList *list)
AliEventCuts fEventCuts
event selection utility
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
AliEmcalJet * GetLeadingJet(const char *opt="")
void GetLeadingHadronMomentum(TLorentzVector &mom, const AliEmcalJet *jet) const
Dijet_t fDijet
! dijet candidate (per event)
void FillTHnSparse(const char *name, const double *x, double weight=1., Option_t *opt="")
bool IsInitialized() const
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
Create a new TH2 within the container.
void FillDijetImbalanceHistograms(AliJetContainer *jets)
TObject * FindObject(const char *name) const
Find an object inside the container.
Double_t GetJetType(AliEmcalJet *jet)
THashList * GetListOfHistograms() const
Get the list of histograms.
Double_t GetDeltaR(AliEmcalJet *jet1, AliEmcalJet *jet2)
Double_t GetLeadingHadronPt(const AliEmcalJet *jet) const
Double_t fClusterConstituentThreshold
constituent threshold for matching study
Di-jet imbalance analysis with full jets.
AliEMCALGeometry * fGeom
!emcal geometry
UInt_t GetJetAcceptanceType() const
void DoTriggerSimulation()
Double_t Phi_0_2pi() const
Implementation of task to embed external events.
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
Bool_t fDoTriggerSimulation
Set whether to perform a simple trigger simulation.
BeamType fForceBeamType
forced beam type
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
Int_t leadingHadronCutType
Double_t fDeltaPhiMin
minimum delta phi between di-jets
Double_t fMBUpscaleFactor
! inverse of downscale factor, for MB trigger
Bool_t fComputeBackground
Set whether to enable study of background.
Double_t Phi_0_2pi() const
std::vector< TString > GetTriggerClasses() const
Double_t fCent
!event centrality
void LoadBackgroundScalingHistogram(const char *path="alien:///alice/cern.ch/user/j/jmulliga/scaleFactorEMCalLHC15o.root", const char *name1="hEtaPhiSFCorrection", const char *name2="hEtaPhiJetPtCorrection")
Double_t GetJetPt(AliJetContainer *jetCont, AliEmcalJet *jet)
void AllocateDijetCandHistograms()
void RunChanged(Int_t run)
static Double_t GetParallelFraction(AliVParticle *part1, AliVParticle *part2)
Calculates the fraction of momentum z of part 1 w.r.t. part 2 in the direction of part 2...
void FillMomentumBalanceHistograms(TString histname, Double_t deltaPhi, Double_t trackPt, Double_t balancePt)
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
TObjArray fJetCollArray
jet collection array
THistManager fHistManager
Histogram manager.
AliRhoParameter * GetRhoParameter()
Bool_t fComputeMBDownscaling
Set whether to compute and plot MB downscaling factors.
void RecordEmbeddedEventProperties()
virtual Bool_t IsEventSelected()
Performing event selection.
static Double_t * GenerateFixedBinArray(Int_t n, Double_t min, Double_t max)
AliEmcalList * fOutput
!output list
Bool_t fLoadBackgroundScalingWeights
Flag to load eta-phi weights for full-jet background scale factors.
Handler for downscale factors for various triggers obtained from the OCDB.
TFile * file
TList with histograms for a given trigger.
TClonesArray * fTriggerPatchInfo
!trigger patch info array
Base task in the EMCAL jet framework.
Bool_t fDoGeometricalMatching
Set whether to enable constituent study with geometrical matching.
Represent a jet reconstructed using the EMCal jet framework.
const AliTrackIterableMomentumContainer accepted_momentum() const
Int_t GetRunNumber(TString)
Dijet_t fMatchingDijet
! low-threshold matching dijet, for matching study
TH2D * fBackgroundScalingWeights
Histogram storing eta-phi weights for full-jet background scale factors.
void UserCreateOutputObjects()
Main initialization function on the worker.
AliEmcalEmbeddingQA fEmbeddingQA
! QA hists for embedding (will only be added if embedding)
const AliJetIterableContainer accepted() const
Double_t fTrackConstituentThreshold
constituent threshold for matching study
Double_t * fCentHistBins
! cent bins
DCal acceptance – spans ONLY DCal (no PHOS or gap)
void FindMatchingDijet(AliJetContainer *jetCont)
Int_t fNCentHistBins
! number of cent bins
THnSparse * CreateTHnSparse(const char *name, const char *title, int ndim, const int *nbins, const double *min, const double *max, Option_t *opt="")
Create a new THnSparse within the container.
Double_t fMinTrigJetPt
leading jet min pT in a dijet pair
Container structure for EMCAL clusters.
Bool_t fNeedEmcalGeom
whether or not the task needs the emcal geometry
virtual ~AliAnalysisTaskEmcalDijetImbalance()
Container for jet within the EMCAL jet framework.
void DoGeometricalMatching()
Bool_t fPlotDijetCandHistograms
Set whether to enable dijet pair histograms.
void AllocateMomentumBalanceHistograms()
TH3 * CreateTH3(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, int nbinsz, double zmin, double zmax, Option_t *opt="")
Create a new TH2 within the container.
void AllocateTriggerSimHistograms()
static const AliAnalysisTaskEmcalEmbeddingHelper * GetInstance()