Skip to content

Commit 7aa950a

Browse files
authored
[PWGCF] Add NUA correction in the correlation task (#16746)
1 parent 902fdee commit 7aa950a

2 files changed

Lines changed: 72 additions & 38 deletions

File tree

PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,8 @@ struct LongrangeMaker {
152152
Configurable<float> maxChi2PerClusterITS{"maxChi2PerClusterITS", 36.f, "cut on maximum value of ITS chi2 per cluster"};
153153
Configurable<float> maxDcaZ{"maxDcaZ", 2.0f, "cut on maximum abs value of DCA z"};
154154
Configurable<float> maxDcaXY{"maxDcaXY", 1.0f, "cut on maximum abs value of DCA xy"};
155-
Configurable<float> cfgLowEffCut{"cfgLowEffCut", 0.001f, "Low efficiency cut"};
156155
Configurable<bool> applyEffCorr{"applyEffCorr", true, "Enable efficiency correction"};
157-
Configurable<std::string> cfgEffccdbPath{"cfgEffccdbPath", "/alice/data/CCDB/Users/a/abmodak/OO/Efficiency", "Browse track eff object from CCDB"};
156+
Configurable<std::string> cfgEffccdbPath{"cfgEffccdbPath", "Users/a/abmodak/Efficiency/OO/default", "Browse track eff object from CCDB"};
158157
} cfgtrksel;
159158

160159
struct : ConfigurableGroup {
@@ -316,6 +315,7 @@ struct LongrangeMaker {
316315
histos.add("FT0C_Channel_vs_Amp_gaincorrected", "FT0C_Channel_vs_Amp_gaincorrected", kTH2D, {cfgAxis.axisChannel, cfgAxis.axisAmplitude});
317316
histos.add("FT0C_Channel_vs_eta", "FT0C_Channel_vs_eta", kTH2D, {cfgAxis.axisEta, cfgAxis.axisChannel});
318317
histos.add("FT0C_Channel_vs_phi", "FT0C_Channel_vs_phi", kTH2D, {cfgAxis.axisPhi, cfgAxis.axisChannel});
318+
histos.add("h3DVtxZetaPhi", "", kTH3D, {{20, -10, 10}, {16, -0.8, +0.8}, {100, 0., TwoPI}});
319319

320320
myTrackFilter = getGlobalTrackSelectionRun3ITSMatch(TrackSelection::GlobalTrackRun3ITSMatching::Run3ITSibAny,
321321
TrackSelection::GlobalTrackRun3DCAxyCut::Default);
@@ -432,6 +432,7 @@ struct LongrangeMaker {
432432
track.dcaZ(),
433433
pid);
434434
}
435+
histos.fill(HIST("h3DVtxZetaPhi"), col.posZ(), track.eta(), track.phi());
435436
}
436437

437438
// ft0 loop
@@ -855,6 +856,7 @@ struct LongrangeMaker {
855856
track.dcaZ(),
856857
pid);
857858
}
859+
histos.fill(HIST("h3DVtxZetaPhi"), RecCol.posZ(), track.eta(), track.phi());
858860
}
859861

860862
// ft0 loop
@@ -1101,7 +1103,7 @@ struct LongrangeMaker {
11011103
float trkeff = 1.0f;
11021104
if (cfgtrksel.applyEffCorr)
11031105
trkeff = getTrkEffCorr(vz, track.eta(), track.pt());
1104-
nTrk += 1.0 / trkeff;
1106+
nTrk += trkeff;
11051107
}
11061108
return nTrk;
11071109
}
@@ -1394,19 +1396,17 @@ struct LongrangeMaker {
13941396

13951397
float getTrkEffCorr(float posZ, float eta, float pt)
13961398
{
1397-
float eff = 1.;
1398-
if (hTrkEff) {
1399-
int zBin = hTrkEff->GetXaxis()->FindBin(posZ);
1400-
int etaBin = hTrkEff->GetYaxis()->FindBin(eta);
1401-
int ptBin = hTrkEff->GetZaxis()->FindBin(pt);
1402-
eff = hTrkEff->GetBinContent(zBin, etaBin, ptBin);
1403-
} else {
1404-
eff = 1.0;
1399+
if (!cfgtrksel.applyEffCorr || !hTrkEff) {
1400+
return 1.0;
14051401
}
1406-
if (eff < cfgtrksel.cfgLowEffCut)
1407-
eff = 1.0;
1408-
1409-
return eff;
1402+
int zBin = hTrkEff->GetXaxis()->FindBin(posZ);
1403+
int etaBin = hTrkEff->GetYaxis()->FindBin(eta);
1404+
int ptBin = hTrkEff->GetZaxis()->FindBin(pt);
1405+
float effweight = 1.0 / hTrkEff->GetBinContent(zBin, etaBin, ptBin);
1406+
if (!std::isfinite(effweight) || effweight <= 0) {
1407+
return 1.0;
1408+
}
1409+
return effweight;
14101410
}
14111411

14121412
PROCESS_SWITCH(LongrangeMaker, processData, "process All collisions", false);

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)