Skip to content

Commit 7919d99

Browse files
lhusovaLucia Anna Tarasovicova
andauthored
[PWGLF] change in hStrangeCorrelation.cxx (#13377)
Co-authored-by: Lucia Anna Tarasovicova <lucia.anna.husova@cern.ch>
1 parent bc31c87 commit 7919d99

File tree

1 file changed

+105
-47
lines changed

1 file changed

+105
-47
lines changed

PWGLF/Tasks/Strangeness/hStrangeCorrelation.cxx

Lines changed: 105 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ struct HStrangeCorrelation {
133133
Configurable<bool> applyEfficiencyPropagation{"applyEfficiencyPropagation", false, "propagate also the efficiency uncertainty"};
134134
Configurable<bool> applyPurityHadron{"applyPurityHadron", false, "apply the purity correction for associated hadrons"};
135135
Configurable<bool> applyPurityTrigger{"applyPurityTrigger", false, "apply the purity correction for trigger particle"};
136+
Configurable<bool> applyEffAsFunctionOfMult{"applyEffAsFunctionOfMult", false, "apply efficiency as a function of multiplicity as well"};
136137
} efficiencyFlags;
137138
Configurable<std::string> ccdburl{"ccdburl", "http://alice-ccdb.cern.ch", "url of the ccdb repository to use"};
138139
Configurable<std::string> efficiencyCCDBPath{"efficiencyCCDBPath", "GLO/Config/GeometryAligned", "Path of the efficiency corrections"};
@@ -215,6 +216,7 @@ struct HStrangeCorrelation {
215216

216217
// objects to use for efficiency corrections
217218
TH2F* hEfficiencyTrigger;
219+
TH3F* hEfficiencyTriggerMult;
218220
TH2F* hEfficiencyPion;
219221
TH2F* hEfficiencyK0Short;
220222
TH2F* hEfficiencyLambda;
@@ -224,9 +226,12 @@ struct HStrangeCorrelation {
224226
TH2F* hEfficiencyOmegaMinus;
225227
TH2F* hEfficiencyOmegaPlus;
226228
TH2F* hEfficiencyHadron;
229+
TH3F* hEfficiencyHadronMult;
227230
TH1F* hPurityHadron;
231+
TH2F* hPurityHadronMult;
228232
// objects to propagate the efficiency uncertainty
229233
TH2F* hEfficiencyUncertaintyTrigger;
234+
TH3F* hEfficiencyUncertaintyTriggerMult;
230235
TH2F* hEfficiencyUncertaintyPion;
231236
TH2F* hEfficiencyUncertaintyK0Short;
232237
TH2F* hEfficiencyUncertaintyLambda;
@@ -236,7 +241,9 @@ struct HStrangeCorrelation {
236241
TH2F* hEfficiencyUncertaintyOmegaMinus;
237242
TH2F* hEfficiencyUncertaintyOmegaPlus;
238243
TH2F* hEfficiencyUncertaintyHadron;
244+
TH3F* hEfficiencyUncertaintyHadronMult;
239245
TH1F* hPurityUncertaintyHadron;
246+
TH2F* hPurityUncertaintyHadronMult;
240247

241248
using BinningType = ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentFT0M>;
242249
using BinningTypePbPb = ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentFT0C>;
@@ -307,6 +314,7 @@ struct HStrangeCorrelation {
307314
}
308315

309316
hEfficiencyTrigger = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyTrigger"));
317+
hEfficiencyTriggerMult = static_cast<TH3F*>(listEfficiencies->FindObject("hEfficiencyTriggerMult"));
310318
hEfficiencyK0Short = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyK0Short"));
311319
hEfficiencyLambda = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyLambda"));
312320
hEfficiencyAntiLambda = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyAntiLambda"));
@@ -315,9 +323,12 @@ struct HStrangeCorrelation {
315323
hEfficiencyOmegaMinus = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyOmegaMinus"));
316324
hEfficiencyOmegaPlus = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyOmegaPlus"));
317325
hEfficiencyHadron = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyHadron"));
326+
hEfficiencyHadronMult = static_cast<TH3F*>(listEfficiencies->FindObject("hEfficiencyHadronMult"));
318327
hEfficiencyPion = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyPion"));
319328
hPurityHadron = static_cast<TH1F*>(listEfficiencies->FindObject("hPurityHadron"));
329+
hPurityHadronMult = static_cast<TH2F*>(listEfficiencies->FindObject("hPurityHadronMult"));
320330
hEfficiencyUncertaintyTrigger = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyUncertaintyTrigger"));
331+
hEfficiencyUncertaintyTriggerMult = static_cast<TH3F*>(listEfficiencies->FindObject("hEfficiencyUncertaintyTriggerMult"));
321332
hEfficiencyUncertaintyK0Short = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyUncertaintyK0Short"));
322333
hEfficiencyUncertaintyLambda = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyUncertaintyLambda"));
323334
hEfficiencyUncertaintyAntiLambda = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyUncertaintyAntiLambda"));
@@ -327,7 +338,9 @@ struct HStrangeCorrelation {
327338
hEfficiencyUncertaintyOmegaPlus = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyUncertaintyOmegaPlus"));
328339
hEfficiencyUncertaintyPion = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyUncertaintyPion"));
329340
hEfficiencyUncertaintyHadron = static_cast<TH2F*>(listEfficiencies->FindObject("hEfficiencyUncertaintyHadron"));
341+
hEfficiencyUncertaintyHadronMult = static_cast<TH3F*>(listEfficiencies->FindObject("hEfficiencyUncertaintyHadronMult"));
330342
hPurityUncertaintyHadron = static_cast<TH1F*>(listEfficiencies->FindObject("hPurityUncertaintyHadron"));
343+
hPurityUncertaintyHadronMult = static_cast<TH2F*>(listEfficiencies->FindObject("hPurityUncertaintyHadronMult"));
331344
if (efficiencyFlags.applyEfficiencyPropagation && !hEfficiencyUncertaintyTrigger)
332345
LOG(fatal) << "Problem getting hEfficiencyUncertaintyTrigger!";
333346
LOG(info) << "Efficiencies now loaded for " << mRunNumber;
@@ -806,13 +819,28 @@ struct HStrangeCorrelation {
806819
float purityTriggErr = 0.0f;
807820
if (!mixing) {
808821
if (efficiencyFlags.applyEfficiencyForTrigger) {
809-
efficiencyTrigg = hEfficiencyTrigger->Interpolate(trigg.pt(), trigg.eta());
810-
if (efficiencyFlags.applyPurityTrigger)
811-
purityTrigg = hPurityHadron->Interpolate(trigg.pt());
822+
if (efficiencyFlags.applyEffAsFunctionOfMult) {
823+
efficiencyTrigg = hEfficiencyTriggerMult->Interpolate(trigg.pt(), trigg.eta(), mult);
824+
} else {
825+
efficiencyTrigg = hEfficiencyTrigger->Interpolate(trigg.pt(), trigg.eta());
826+
}
827+
if (efficiencyFlags.applyPurityTrigger) {
828+
if (efficiencyFlags.applyEffAsFunctionOfMult)
829+
purityTrigg = hPurityHadronMult->Interpolate(trigg.pt(), mult);
830+
else
831+
purityTrigg = hPurityHadron->Interpolate(trigg.pt());
832+
}
812833
if (efficiencyFlags.applyEfficiencyPropagation) {
813-
efficiencyTriggError = hEfficiencyUncertaintyTrigger->Interpolate(trigg.pt(), trigg.eta());
814-
if (efficiencyFlags.applyPurityTrigger)
815-
purityTriggErr = hPurityUncertaintyHadron->Interpolate(trigg.pt());
834+
if (efficiencyFlags.applyEffAsFunctionOfMult)
835+
efficiencyTriggError = hEfficiencyUncertaintyTriggerMult->Interpolate(trigg.pt(), trigg.eta(), mult);
836+
else
837+
efficiencyTriggError = hEfficiencyUncertaintyTrigger->Interpolate(trigg.pt(), trigg.eta());
838+
if (efficiencyFlags.applyPurityTrigger) {
839+
if (efficiencyFlags.applyEffAsFunctionOfMult)
840+
purityTriggErr = hPurityUncertaintyHadronMult->Interpolate(trigg.pt(), mult);
841+
else
842+
purityTriggErr = hPurityUncertaintyHadron->Interpolate(trigg.pt());
843+
}
816844
}
817845
if (efficiencyTrigg == 0) { // check for zero efficiency, do not apply if the case
818846
efficiencyTrigg = 1;
@@ -984,13 +1012,27 @@ struct HStrangeCorrelation {
9841012
if (!mixing) {
9851013

9861014
if (efficiencyFlags.applyEfficiencyForTrigger) {
987-
efficiencyTrigger = hEfficiencyTrigger->Interpolate(trigg.pt(), trigg.eta());
988-
if (efficiencyFlags.applyPurityTrigger)
989-
purityTrigger = hPurityHadron->Interpolate(trigg.pt());
1015+
if (efficiencyFlags.applyEffAsFunctionOfMult)
1016+
efficiencyTrigger = hEfficiencyTriggerMult->Interpolate(trigg.pt(), trigg.eta(), mult);
1017+
else
1018+
efficiencyTrigger = hEfficiencyTrigger->Interpolate(trigg.pt(), trigg.eta());
1019+
if (efficiencyFlags.applyPurityTrigger) {
1020+
if (efficiencyFlags.applyEffAsFunctionOfMult)
1021+
purityTrigger = hPurityHadronMult->Interpolate(trigg.pt(), mult);
1022+
else
1023+
purityTrigger = hPurityHadron->Interpolate(trigg.pt());
1024+
}
9901025
if (efficiencyFlags.applyEfficiencyPropagation) {
991-
efficiencyTriggerError = hEfficiencyUncertaintyTrigger->Interpolate(trigg.pt(), trigg.eta());
992-
if (efficiencyFlags.applyPurityTrigger)
993-
purityTriggerError = hPurityUncertaintyHadron->Interpolate(trigg.pt());
1026+
if (efficiencyFlags.applyEffAsFunctionOfMult)
1027+
efficiencyTriggerError = hEfficiencyUncertaintyTriggerMult->Interpolate(trigg.pt(), trigg.eta(), mult);
1028+
else
1029+
efficiencyTriggerError = hEfficiencyUncertaintyTrigger->Interpolate(trigg.pt(), trigg.eta());
1030+
if (efficiencyFlags.applyPurityTrigger) {
1031+
if (efficiencyFlags.applyEffAsFunctionOfMult)
1032+
purityTriggerError = hPurityUncertaintyHadronMult->Interpolate(trigg.pt(), mult);
1033+
else
1034+
purityTriggerError = hPurityUncertaintyHadron->Interpolate(trigg.pt());
1035+
}
9941036
}
9951037
if (efficiencyTrigger == 0) { // check for zero efficiency, do not apply if the case
9961038
efficiencyTrigger = 1;
@@ -1057,13 +1099,27 @@ struct HStrangeCorrelation {
10571099
if (efficiencyFlags.applyEfficiencyPropagation)
10581100
efficiencyUncertainty = hEfficiencyUncertaintyPion->Interpolate(ptassoc, assoc.eta());
10591101
} else {
1060-
efficiency = hEfficiencyHadron->Interpolate(ptassoc, assoc.eta());
1061-
if (efficiencyFlags.applyPurityHadron)
1062-
purity = hPurityHadron->Interpolate(ptassoc);
1102+
if (efficiencyFlags.applyEffAsFunctionOfMult)
1103+
efficiency = hEfficiencyHadronMult->Interpolate(ptassoc, assoc.eta(), mult);
1104+
else
1105+
efficiency = hEfficiencyHadron->Interpolate(ptassoc, assoc.eta());
1106+
if (efficiencyFlags.applyPurityHadron) {
1107+
if (efficiencyFlags.applyEffAsFunctionOfMult)
1108+
purity = hPurityHadronMult->Interpolate(ptassoc, mult);
1109+
else
1110+
purity = hPurityHadron->Interpolate(ptassoc);
1111+
}
10631112
if (efficiencyFlags.applyEfficiencyPropagation) {
1064-
efficiencyUncertainty = hEfficiencyUncertaintyHadron->Interpolate(ptassoc, assoc.eta());
1065-
if (efficiencyFlags.applyPurityHadron)
1066-
purityUncertainty = hPurityUncertaintyHadron->Interpolate(ptassoc);
1113+
if (efficiencyFlags.applyEffAsFunctionOfMult)
1114+
efficiencyUncertainty = hEfficiencyUncertaintyHadronMult->Interpolate(ptassoc, assoc.eta(), mult);
1115+
else
1116+
efficiencyUncertainty = hEfficiencyUncertaintyHadron->Interpolate(ptassoc, assoc.eta());
1117+
if (efficiencyFlags.applyPurityHadron) {
1118+
if (efficiencyFlags.applyEffAsFunctionOfMult)
1119+
purityUncertainty = hPurityUncertaintyHadronMult->Interpolate(ptassoc, mult);
1120+
else
1121+
purityUncertainty = hPurityUncertaintyHadron->Interpolate(ptassoc);
1122+
}
10671123
}
10681124
}
10691125
}
@@ -1409,9 +1465,9 @@ struct HStrangeCorrelation {
14091465

14101466
// MC generated plots
14111467
if (doprocessMCGenerated) {
1412-
histos.add("Generated/hTrigger", "", kTH2F, {axesConfigurations.axisPtQA, axesConfigurations.axisEta});
1468+
histos.add("Generated/hTrigger", "", kTH3F, {axesConfigurations.axisPtQA, axesConfigurations.axisEta, axesConfigurations.axisMult});
14131469
for (int i = 0; i < 9; i++) {
1414-
histos.add(fmt::format("Generated/h{}", kParticlenames[i]).c_str(), "", kTH2F, {axesConfigurations.axisPtQA, axesConfigurations.axisEta});
1470+
histos.add(fmt::format("Generated/h{}", kParticlenames[i]).c_str(), "", kTH3F, {axesConfigurations.axisPtQA, axesConfigurations.axisEta, axesConfigurations.axisMult});
14151471
}
14161472
histos.addClone("Generated/", "GeneratedWithPV/");
14171473

@@ -1675,28 +1731,28 @@ struct HStrangeCorrelation {
16751731
histos.fill(HIST("hTriggerPrimaryEtaVsPt"), track.pt(), track.eta(), collision.centFT0M());
16761732
histos.fill(HIST("hTrackEtaVsPtVsPhi"), track.pt(), track.eta(), track.phi(), weight);
16771733
}
1678-
for (auto const& assocTrack : assocHadrons) {
1679-
auto assoc = assocTrack.track_as<TracksComplete>();
1680-
if (!isValidAssocHadron(assoc))
1681-
continue;
1682-
float efficiency = 1.0f;
1683-
float purity = 1.0f;
1684-
if (efficiencyFlags.applyEfficiencyCorrection) {
1685-
efficiency = hEfficiencyHadron->Interpolate(assoc.pt(), assoc.eta());
1686-
if (efficiencyFlags.applyPurityHadron)
1687-
purity = hPurityHadron->Interpolate(assoc.pt());
1688-
}
1689-
if (efficiency == 0) { // check for zero efficiency, do not apply if the case
1690-
efficiency = 1;
1691-
}
1692-
float weight = efficiencyFlags.applyEfficiencyCorrection ? purity / efficiency : 1.0f;
1693-
histos.fill(HIST("hAssocHadronsAllSelectedEtaVsPt"), assoc.pt(), assoc.eta(), collision.centFT0M());
1694-
histos.fill(HIST("hAssocPtResolution"), assoc.pt(), assocTrack.mcOriginalPt());
1695-
if (doAssocPhysicalPrimary && !assocTrack.mcPhysicalPrimary())
1696-
continue;
1697-
histos.fill(HIST("hAssocPrimaryEtaVsPt"), assoc.pt(), assoc.eta(), collision.centFT0M());
1698-
histos.fill(HIST("hAsssocTrackEtaVsPtVsPhi"), assoc.pt(), assoc.eta(), assoc.phi(), weight);
1734+
}
1735+
for (auto const& assocTrack : assocHadrons) {
1736+
auto assoc = assocTrack.track_as<TracksComplete>();
1737+
if (!isValidAssocHadron(assoc))
1738+
continue;
1739+
float efficiency = 1.0f;
1740+
float purity = 1.0f;
1741+
if (efficiencyFlags.applyEfficiencyCorrection) {
1742+
efficiency = hEfficiencyHadron->Interpolate(assoc.pt(), assoc.eta());
1743+
if (efficiencyFlags.applyPurityHadron)
1744+
purity = hPurityHadron->Interpolate(assoc.pt());
1745+
}
1746+
if (efficiency == 0) { // check for zero efficiency, do not apply if the case
1747+
efficiency = 1;
16991748
}
1749+
float weight = efficiencyFlags.applyEfficiencyCorrection ? purity / efficiency : 1.0f;
1750+
histos.fill(HIST("hAssocHadronsAllSelectedEtaVsPt"), assoc.pt(), assoc.eta(), collision.centFT0M(), weight);
1751+
histos.fill(HIST("hAssocPtResolution"), assoc.pt(), assocTrack.mcOriginalPt());
1752+
if (doAssocPhysicalPrimary && !assocTrack.mcPhysicalPrimary())
1753+
continue;
1754+
histos.fill(HIST("hAssocPrimaryEtaVsPt"), assoc.pt(), assoc.eta(), collision.centFT0M());
1755+
histos.fill(HIST("hAsssocTrackEtaVsPtVsPhi"), assoc.pt(), assoc.eta(), assoc.phi(), weight);
17001756
}
17011757

17021758
// ________________________________________________
@@ -2172,10 +2228,10 @@ struct HStrangeCorrelation {
21722228
constexpr int Index = i.value;
21732229
if (i == 0 || i == 7) {
21742230
if (std::abs(mcParticle.pdgCode()) == kPdgCodes[i])
2175-
histos.fill(HIST("Generated/h") + HIST(kParticlenames[Index]), mcParticle.pt(), mcParticle.eta());
2231+
histos.fill(HIST("Generated/h") + HIST(kParticlenames[Index]), mcParticle.pt(), mcParticle.eta(), 1);
21762232
} else {
21772233
if (mcParticle.pdgCode() == kPdgCodes[i])
2178-
histos.fill(HIST("Generated/h") + HIST(kParticlenames[Index]), mcParticle.pt(), mcParticle.eta());
2234+
histos.fill(HIST("Generated/h") + HIST(kParticlenames[Index]), mcParticle.pt(), mcParticle.eta(), 1);
21792235
}
21802236
});
21812237
}
@@ -2265,7 +2321,7 @@ struct HStrangeCorrelation {
22652321
double geta = mcParticle.eta();
22662322
double gpt = mcParticle.pt();
22672323
if (std::abs(mcParticle.pdgCode()) == PDG_t::kPiPlus || std::abs(mcParticle.pdgCode()) == PDG_t::kKPlus || std::abs(mcParticle.pdgCode()) == PDG_t::kProton || std::abs(mcParticle.pdgCode()) == PDG_t::kElectron || std::abs(mcParticle.pdgCode()) == PDG_t::kMuonMinus)
2268-
histos.fill(HIST("GeneratedWithPV/hTrigger"), gpt, geta);
2324+
histos.fill(HIST("GeneratedWithPV/hTrigger"), gpt, geta, bestCollisionFT0Mpercentile);
22692325
if (mcParticle.pdgCode() == PDG_t::kLambda0 && !doAssocPhysicalPrimaryInGen && !mcParticle.isPhysicalPrimary()) {
22702326
if (std::abs(geta) > etaSel) {
22712327
continue;
@@ -2311,14 +2367,14 @@ struct HStrangeCorrelation {
23112367
constexpr int Index = i.value;
23122368
if (i == 0 || i == 7) {
23132369
if (std::abs(mcParticle.pdgCode()) == kPdgCodes[i]) {
2314-
histos.fill(HIST("GeneratedWithPV/h") + HIST(kParticlenames[Index]), gpt, geta);
2370+
histos.fill(HIST("GeneratedWithPV/h") + HIST(kParticlenames[Index]), gpt, geta, bestCollisionFT0Mpercentile);
23152371
if (std::abs(mcParticle.y()) < ySel)
23162372
histos.fill(HIST("GeneratedWithPV/h") + HIST(kParticlenames[Index]) + HIST("_MidYVsMult"), gpt, bestCollisionFT0Mpercentile);
23172373
}
23182374

23192375
} else {
23202376
if (mcParticle.pdgCode() == kPdgCodes[i]) {
2321-
histos.fill(HIST("GeneratedWithPV/h") + HIST(kParticlenames[Index]), gpt, geta);
2377+
histos.fill(HIST("GeneratedWithPV/h") + HIST(kParticlenames[Index]), gpt, geta, bestCollisionFT0Mpercentile);
23222378
if (std::abs(mcParticle.y()) < ySel)
23232379
histos.fill(HIST("GeneratedWithPV/h") + HIST(kParticlenames[Index]) + HIST("_MidYVsMult"), gpt, bestCollisionFT0Mpercentile);
23242380
}
@@ -2432,7 +2488,9 @@ struct HStrangeCorrelation {
24322488
if (!doTriggPhysicalPrimary || mcParticle.isPhysicalPrimary()) {
24332489
triggerIndices.emplace_back(iteratorNum);
24342490
histos.fill(HIST("ClosureTest/hTrigger"), gpt, geta, bestCollisionFT0Mpercentile);
2435-
if (doCorrelationHadron) {
2491+
}
2492+
if (doCorrelationHadron) {
2493+
if (!doAssocPhysicalPrimary || mcParticle.isPhysicalPrimary()) {
24362494
assocHadronIndices.emplace_back(iteratorNum);
24372495
histos.fill(HIST("ClosureTest/hHadron"), gpt, geta, gphi);
24382496
}

0 commit comments

Comments
 (0)