Skip to content

Commit 5e0d03d

Browse files
authored
Add NUA correction in the task
1 parent da28205 commit 5e0d03d

1 file changed

Lines changed: 57 additions & 23 deletions

File tree

PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx

Lines changed: 57 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,10 @@ struct LongrangecorrDerived {
8787
Configurable<float> cfgTpcMinNCrossedRows{"cfgTpcMinNCrossedRows", 70.0f, ""};
8888
Configurable<float> cfgTpcMaxChi2PerCluster{"cfgTpcMaxChi2PerCluster", 4.0f, ""};
8989
Configurable<float> cfgTpcMaxDcaZ{"cfgTpcMaxDcaZ", 1.0f, ""};
90-
Configurable<float> cfgLowEffCut{"cfgLowEffCut", 0.001f, "Low efficiency cut"};
9190
Configurable<bool> applyEffCorr{"applyEffCorr", true, "Enable efficiency correction"};
91+
Configurable<bool> applyAccCorr{"applyAccCorr", false, "Enable NUA correction"};
9292
Configurable<std::string> cfgEffccdbPath{"cfgEffccdbPath", "Users/a/abmodak/Efficiency/OO/default", "Browse track eff object from CCDB"};
93+
Configurable<std::string> cfgAccccdbPath{"cfgAccccdbPath", "Users/a/abmodak/Acceptance/OO/default", "Browse track eff object from CCDB"};
9394

9495
Configurable<int> cfgMftCluster{"cfgMftCluster", 5, "cut on MFT Cluster"};
9596
Configurable<float> cfgMftDcaxy{"cfgMftDcaxy", 2.0f, "cut on DCA xy for MFT tracks"};
@@ -148,6 +149,7 @@ struct LongrangecorrDerived {
148149

149150
// corrections
150151
TH3D* hTrkEff = nullptr;
152+
TH3D* hTrkAcc = nullptr;
151153
bool fLoadTrkEffCorr = false;
152154

153155
using CollsTable = aod::LRCollisions;
@@ -216,6 +218,7 @@ struct LongrangecorrDerived {
216218
histos.add("Trig_eta", "Trig_eta", kTH1D, {cfgAxis.axisEtaTrig});
217219
histos.add("Trig_eta_corrected", "Trig_eta_corrected", kTH1D, {cfgAxis.axisEtaTrig});
218220
histos.add("Trig_phi", "Trig_phi", kTH1D, {cfgAxis.axisPhi});
221+
histos.add("Trig_phi_corrected", "Trig_phi_corrected", kTH1D, {cfgAxis.axisPhi});
219222
histos.add("Trig_etavsphi", "Trig_etavsphi", kTH2D, {cfgAxis.axisPhi, cfgAxis.axisEtaTrig});
220223
histos.add("Trig_pt", "Trig_pt", kTH1D, {cfgAxis.axisPtTrigger});
221224
histos.add("Trig_pt_corrected", "Trig_pt_corrected", kTH1D, {cfgAxis.axisPtTrigger});
@@ -274,23 +277,46 @@ struct LongrangecorrDerived {
274277
}
275278
LOGF(info, "Loaded efficiency histogram from %s (%p)", cfgSel.cfgEffccdbPath.value.c_str(), (void*)hTrkEff);
276279
}
280+
281+
if (cfgSel.cfgAccccdbPath.value.empty() == false) {
282+
hTrkAcc = ccdb->getForTimeStamp<TH3D>(cfgSel.cfgAccccdbPath, timestamp);
283+
if (hTrkAcc == nullptr) {
284+
LOGF(fatal, "Could not load NUA histogram for trigger particles from %s", cfgSel.cfgAccccdbPath.value.c_str());
285+
}
286+
LOGF(info, "Loaded efficiency histogram from %s (%p)", cfgSel.cfgAccccdbPath.value.c_str(), (void*)hTrkAcc);
287+
}
288+
277289
fLoadTrkEffCorr = true;
278290
}
279291

280292
float getTrkEffCorr(float posZ, float eta, float pt)
281293
{
282-
float eff = 1.0f;
283-
if (hTrkEff) {
284-
int zBin = hTrkEff->GetXaxis()->FindBin(posZ);
285-
int etaBin = hTrkEff->GetYaxis()->FindBin(eta);
286-
int ptBin = hTrkEff->GetZaxis()->FindBin(pt);
287-
eff = hTrkEff->GetBinContent(zBin, etaBin, ptBin);
288-
} else {
289-
eff = 1.0f;
294+
if (!cfgSel.applyEffCorr || !hTrkEff) {
295+
return 1.0;
296+
}
297+
int zBin = hTrkEff->GetXaxis()->FindBin(posZ);
298+
int etaBin = hTrkEff->GetYaxis()->FindBin(eta);
299+
int ptBin = hTrkEff->GetZaxis()->FindBin(pt);
300+
float effweight = 1.0 / hTrkEff->GetBinContent(zBin, etaBin, ptBin);
301+
if (!std::isfinite(effweight) || effweight <= 0) {
302+
return 1.0;
303+
}
304+
return effweight;
305+
}
306+
307+
float getTrkAccCorr(float posZ, float eta, float phi)
308+
{
309+
if (!cfgSel.applyAccCorr || !hTrkAcc) {
310+
return 1.0;
290311
}
291-
if (eff < cfgSel.cfgLowEffCut)
292-
eff = 1.0;
293-
return 1.0 / eff;
312+
int zBin = hTrkAcc->GetXaxis()->FindBin(posZ);
313+
int etaBin = hTrkAcc->GetYaxis()->FindBin(eta);
314+
int phiBin = hTrkAcc->GetZaxis()->FindBin(phi);
315+
float nua = hTrkAcc->GetBinContent(zBin, etaBin, phiBin);
316+
if (!std::isfinite(nua) || nua <= 0) {
317+
return 1.0;
318+
}
319+
return nua;
294320
}
295321

296322
template <typename TTrack>
@@ -338,12 +364,13 @@ struct LongrangecorrDerived {
338364
}
339365

340366
template <typename TTrack>
341-
void fillTrigTrackQA(TTrack const& track, float trigAmpl, float trkeff)
367+
void fillTrigTrackQA(TTrack const& track, float trigAmpl, float trkeff, float trkAcc)
342368
{
343369
histos.fill(HIST("Trig_etavsphi"), track.phi(), track.eta());
344370
histos.fill(HIST("Trig_eta"), track.eta());
345-
histos.fill(HIST("Trig_eta_corrected"), track.eta(), trkeff);
346371
histos.fill(HIST("Trig_phi"), track.phi());
372+
histos.fill(HIST("Trig_eta_corrected"), track.eta(), trkeff);
373+
histos.fill(HIST("Trig_phi_corrected"), track.phi(), trkAcc);
347374
if constexpr (requires { track.channelID(); }) {
348375
histos.fill(HIST("Trig_amp"), trigAmpl);
349376
histos.fill(HIST("Channel_vs_Trig_amp"), track.channelID(), trigAmpl);
@@ -419,6 +446,7 @@ struct LongrangecorrDerived {
419446
for (auto const& triggerTrack : triggers) {
420447
auto trigAmpl = 1.0f;
421448
auto trkeff = 1.0f;
449+
auto trkAcc = 1.0f;
422450

423451
if (!isTrackSelected(triggerTrack))
424452
continue;
@@ -444,19 +472,25 @@ struct LongrangecorrDerived {
444472
if constexpr (step == CorrelationContainer::kCFStepCorrected) {
445473
if constexpr (requires { triggerTrack.trackType(); }) {
446474
trkeff = getTrkEffCorr(vz, triggerTrack.eta(), triggerTrack.pt());
475+
trkAcc = getTrkAccCorr(vz, triggerTrack.eta(), triggerTrack.phi());
447476
} else {
448477
trkeff = 1.0;
478+
trkAcc = 1.0;
449479
}
450480
}
451481

482+
if (cfgSel.cfgVerbosity > 0) {
483+
LOGF(info, "NUE correction factor: %f | NUA correction factor: %f", trkeff, trkAcc);
484+
}
485+
452486
if (!mixing) {
453-
fillTrigTrackQA(triggerTrack, trigAmpl, trkeff);
487+
fillTrigTrackQA(triggerTrack, trigAmpl, trkeff, trkAcc);
454488
if constexpr (requires { triggerTrack.channelID(); }) {
455-
histos.fill(HIST("Trig_hist"), fSampleIndex, vz, multiplicity, 1.0, 1.0, eventWeight * trigAmpl * trkeff);
489+
histos.fill(HIST("Trig_hist"), fSampleIndex, vz, multiplicity, 1.0, 1.0, eventWeight * trigAmpl * trkeff * trkAcc);
456490
} else if constexpr (requires { triggerTrack.invMass(); }) {
457-
histos.fill(HIST("Trig_hist"), fSampleIndex, vz, multiplicity, triggerTrack.pt(), triggerTrack.invMass(), eventWeight * trigAmpl * trkeff);
491+
histos.fill(HIST("Trig_hist"), fSampleIndex, vz, multiplicity, triggerTrack.pt(), triggerTrack.invMass(), eventWeight * trigAmpl * trkeff * trkAcc);
458492
} else {
459-
histos.fill(HIST("Trig_hist"), fSampleIndex, vz, multiplicity, triggerTrack.pt(), 1.0, eventWeight * trigAmpl * trkeff);
493+
histos.fill(HIST("Trig_hist"), fSampleIndex, vz, multiplicity, triggerTrack.pt(), 1.0, eventWeight * trigAmpl * trkeff * trkAcc);
460494
}
461495
}
462496
for (auto const& assoTrack : assocs) {
@@ -479,16 +513,16 @@ struct LongrangecorrDerived {
479513
float deltaEta = triggerTrack.eta() - assoTrack.eta();
480514
if (!mixing) {
481515
fillAssocTrackQA(assoTrack, assoAmpl);
482-
histos.fill(HIST("deltaEta_deltaPhi_same"), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl * trkeff);
516+
histos.fill(HIST("deltaEta_deltaPhi_same"), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl * trkeff * trkAcc);
483517
} else {
484-
histos.fill(HIST("deltaEta_deltaPhi_mixed"), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl * trkeff);
518+
histos.fill(HIST("deltaEta_deltaPhi_mixed"), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl * trkeff * trkAcc);
485519
}
486520
if constexpr (requires { triggerTrack.channelID(); }) {
487-
target->getPairHist()->Fill(step, fSampleIndex, vz, multiplicity, 1.0, deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl * trkeff);
521+
target->getPairHist()->Fill(step, fSampleIndex, vz, multiplicity, 1.0, deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl * trkeff * trkAcc);
488522
} else if constexpr (requires { triggerTrack.invMass(); }) {
489-
target->getPairHist()->Fill(step, fSampleIndex, vz, multiplicity, triggerTrack.pt(), deltaPhi, deltaEta, triggerTrack.invMass(), eventWeight * trigAmpl * assoAmpl * trkeff);
523+
target->getPairHist()->Fill(step, fSampleIndex, vz, multiplicity, triggerTrack.pt(), deltaPhi, deltaEta, triggerTrack.invMass(), eventWeight * trigAmpl * assoAmpl * trkeff * trkAcc);
490524
} else {
491-
target->getPairHist()->Fill(step, fSampleIndex, vz, multiplicity, triggerTrack.pt(), deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl * trkeff);
525+
target->getPairHist()->Fill(step, fSampleIndex, vz, multiplicity, triggerTrack.pt(), deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl * trkeff * trkAcc);
492526
}
493527
} // associated tracks
494528
} // trigger tracks

0 commit comments

Comments
 (0)