Skip to content

Commit b2b09f4

Browse files
[PWGLF] fixed the mixing logic which is now run time configurable for all cen… (#18687)
1 parent db34b1c commit b2b09f4

2 files changed

Lines changed: 2504 additions & 1122 deletions

File tree

‎PWGLF/Tasks/Resonances/deltaAnalysis.cxx‎

Lines changed: 48 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
#include <cmath>
4949
#include <cstdint>
5050
#include <cstdlib>
51+
#include <tuple>
5152
#include <type_traits>
5253
#include <unordered_map>
5354
#include <utility>
@@ -127,7 +128,8 @@ struct DeltaAnalysis {
127128
Configurable<bool> applyTPCChi2NClCut{"applyTPCChi2NClCut", true, "Enable/disable maximum TPC chi2/NCl cut"};
128129
Configurable<bool> applyITSChi2NClCut{"applyITSChi2NClCut", true, "Enable/disable maximum ITS chi2/NCl cut"};
129130
Configurable<bool> requirePrimaryTrack{"requirePrimaryTrack", true, "Require isPrimaryTrack flag"};
130-
Configurable<bool> requireGlobalTrack{"requireGlobalTrack", true, "Require global track"};
131+
Configurable<bool> requireGlobalTrack{"requireGlobalTrack", true, "Require global track (includes the DCA cuts of the standard global-track selection)"};
132+
Configurable<bool> requireGlobalTrackWoDCA{"requireGlobalTrackWoDCA", false, "Require global track without DCA cuts (isGlobalTrackWoDCA). Mutually exclusive with requireGlobalTrack"};
131133
Configurable<bool> requirePVContributor{"requirePVContributor", true, "Require PV-contributor flag"};
132134
} trackCuts;
133135

@@ -226,6 +228,11 @@ struct DeltaAnalysis {
226228
<< ", bins=" << binsVec.size() << ")";
227229
}
228230
};
231+
if (trackCuts.requireGlobalTrack && trackCuts.requireGlobalTrackWoDCA) {
232+
LOG(fatal) << "requireGlobalTrack and requireGlobalTrackWoDCA are mutually exclusive: "
233+
<< "enable only one of them (or neither).";
234+
}
235+
229236
chkSz(protonPID.protonTPCNSigmaCutPerBin, protonPID.protonTPCPIDMomentumBins, "proton TPC PID");
230237
chkSz(protonPID.protonTOFNSigmaCutPerBin, protonPID.protonTOFPIDMomentumBins, "proton TOF PID");
231238
chkSz(pionPID.pionTPCNSigmaCutPerBin, pionPID.pionTPCPIDMomentumBins, "pion TPC PID");
@@ -246,15 +253,15 @@ struct DeltaAnalysis {
246253
mPionDCAPtEdges = dcaCuts.pionDCAPtBinEdges.value;
247254
mPionMaxDCAxy = dcaCuts.pionMaxDCAxyPerPtBin.value;
248255

249-
const AxisSpec ptAxis{50, 0., 20., "p_{T} (GeV/c)"};
256+
const AxisSpec ptAxis{50, 0., 12., "p_{T} (GeV/c)"};
250257
const AxisSpec massAxis{trackCuts.numberOfInvMassBins, 1.0, 6.0, "M_{inv} (GeV/#it{c}^{2})"};
251258
const AxisSpec centAxis{axes.cfgCentAxis, "Centrality (%)"};
252259
const AxisSpec vtxAxis{axes.cfgVtxAxis, "Vertex z [cm]"};
253260
const AxisSpec rapAxis{axes.cfgRapAxis, "Rapidity y"};
254261
const AxisSpec nSigmaTPCaxis{100, -5., 5., "n#sigma^{TPC}"};
255262
const AxisSpec nSigmaTOFaxis{100, -5., 5., "n#sigma^{TOF}"};
256-
const AxisSpec momentumAxis{50, 0., 20., "p (GeV/#it{c})"};
257-
const AxisSpec ptForPIDAxis{50, 0., 20., "p_{T} (GeV/#it{c})"};
263+
const AxisSpec momentumAxis{50, 0., 12., "p (GeV/#it{c})"};
264+
const AxisSpec ptForPIDAxis{50, 0., 12., "p_{T} (GeV/#it{c})"};
258265
const AxisSpec dcaXYaxis{200, -0.2f, 0.2f, "DCA_{xy} (cm)"};
259266
const AxisSpec dcaZaxis{200, -1.2f, 1.2f, "DCA_{z} (cm)"};
260267
const AxisSpec tpcClusAxis{200, 0, 200, "N_{clusters}^{TPC}"};
@@ -757,6 +764,9 @@ struct DeltaAnalysis {
757764
if (trackCuts.requireGlobalTrack && !track.isGlobalTrack()) {
758765
return false;
759766
}
767+
if (trackCuts.requireGlobalTrackWoDCA && !track.isGlobalTrackWoDCA()) {
768+
return false;
769+
}
760770
if (trackCuts.requirePVContributor && !track.isPVContributor()) {
761771
return false;
762772
}
@@ -1429,18 +1439,6 @@ struct DeltaAnalysis {
14291439
using BinningTypeFV0A = ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentFV0A>;
14301440
using BinningTypeNTPV = ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentNTPV>;
14311441

1432-
BinningTypeFT0M binningFT0M{{axes.cfgVtxAxis, axes.cfgCentAxis}};
1433-
BinningTypeFT0A binningFT0A{{axes.cfgVtxAxis, axes.cfgCentAxis}};
1434-
BinningTypeFT0C binningFT0C{{axes.cfgVtxAxis, axes.cfgCentAxis}};
1435-
BinningTypeFV0A binningFV0A{{axes.cfgVtxAxis, axes.cfgCentAxis}};
1436-
BinningTypeNTPV binningNTPV{{axes.cfgVtxAxis, axes.cfgCentAxis}};
1437-
1438-
SameKindPair<EventCandidates, TrackCandidates, BinningTypeFT0M> pairFT0M{binningFT0M, mixingCfg.cfgNoMixedEvents, -1, &cache};
1439-
SameKindPair<EventCandidates, TrackCandidates, BinningTypeFT0A> pairFT0A{binningFT0A, mixingCfg.cfgNoMixedEvents, -1, &cache};
1440-
SameKindPair<EventCandidates, TrackCandidates, BinningTypeFT0C> pairFT0C{binningFT0C, mixingCfg.cfgNoMixedEvents, -1, &cache};
1441-
SameKindPair<EventCandidates, TrackCandidates, BinningTypeFV0A> pairFV0A{binningFV0A, mixingCfg.cfgNoMixedEvents, -1, &cache};
1442-
SameKindPair<EventCandidates, TrackCandidates, BinningTypeNTPV> pairNTPV{binningNTPV, mixingCfg.cfgNoMixedEvents, -1, &cache};
1443-
14441442
std::vector<TrackCandidate> mProtonPool;
14451443
std::vector<TrackCandidate> mPionPool;
14461444

@@ -1524,31 +1522,6 @@ struct DeltaAnalysis {
15241522
}
15251523
}
15261524

1527-
void processMixedEvent(EventCandidates const&, TrackCandidates const&)
1528-
{
1529-
switch (evSel.cfgCentralityEstimator) {
1530-
case delta_analysis::kFT0M:
1531-
runMixedEvent(pairFT0M);
1532-
break;
1533-
case delta_analysis::kFT0A:
1534-
runMixedEvent(pairFT0A);
1535-
break;
1536-
case delta_analysis::kFT0C:
1537-
runMixedEvent(pairFT0C);
1538-
break;
1539-
case delta_analysis::kFV0A:
1540-
runMixedEvent(pairFV0A);
1541-
break;
1542-
case delta_analysis::kNTPV:
1543-
runMixedEvent(pairNTPV);
1544-
break;
1545-
default:
1546-
runMixedEvent(pairFT0M);
1547-
break;
1548-
}
1549-
}
1550-
PROCESS_SWITCH(DeltaAnalysis, processMixedEvent, "Process mixed event", true);
1551-
15521525
// ── MC reconstructed event mixing ────────────────────────────────────────────────────────
15531526
// Mirrors runMixedEvent()/processMixedEvent() above exactly (same event-selection call, same
15541527
// "protons1+pions2" / "protons2+pions1" combinatorics, same centrality-estimator dispatch),
@@ -1574,32 +1547,57 @@ struct DeltaAnalysis {
15741547
}
15751548
}
15761549

1577-
void processMCEventMixing(EventCandidates const&, TrackCandidates const&)
1550+
template <typename BinningType>
1551+
void runMixingWithBinning(EventCandidates const& collisions, TrackCandidates const& tracks, bool isMC)
15781552
{
1579-
if (!mixingCfg.enableMCEventMixing) {
1580-
return;
1553+
BinningType binning{{axes.cfgVtxAxis, axes.cfgCentAxis}, true};
1554+
const int nMixedEvents = mixingCfg.cfgNoMixedEvents;
1555+
auto tracksTuple = std::make_tuple(tracks);
1556+
SameKindPair<EventCandidates, TrackCandidates, BinningType> mixingPair{binning, nMixedEvents, -1, collisions, tracksTuple, &cache};
1557+
if (isMC) {
1558+
runMixedEventMC(mixingPair);
1559+
} else {
1560+
runMixedEvent(mixingPair);
15811561
}
1562+
}
1563+
1564+
void dispatchMixing(EventCandidates const& collisions, TrackCandidates const& tracks, bool isMC)
1565+
{
15821566
switch (evSel.cfgCentralityEstimator) {
15831567
case delta_analysis::kFT0M:
1584-
runMixedEventMC(pairFT0M);
1568+
runMixingWithBinning<BinningTypeFT0M>(collisions, tracks, isMC);
15851569
break;
15861570
case delta_analysis::kFT0A:
1587-
runMixedEventMC(pairFT0A);
1571+
runMixingWithBinning<BinningTypeFT0A>(collisions, tracks, isMC);
15881572
break;
15891573
case delta_analysis::kFT0C:
1590-
runMixedEventMC(pairFT0C);
1574+
runMixingWithBinning<BinningTypeFT0C>(collisions, tracks, isMC);
15911575
break;
15921576
case delta_analysis::kFV0A:
1593-
runMixedEventMC(pairFV0A);
1577+
runMixingWithBinning<BinningTypeFV0A>(collisions, tracks, isMC);
15941578
break;
15951579
case delta_analysis::kNTPV:
1596-
runMixedEventMC(pairNTPV);
1580+
runMixingWithBinning<BinningTypeNTPV>(collisions, tracks, isMC);
15971581
break;
15981582
default:
1599-
runMixedEventMC(pairFT0M);
1583+
runMixingWithBinning<BinningTypeFT0M>(collisions, tracks, isMC);
16001584
break;
16011585
}
16021586
}
1587+
1588+
void processMixedEvent(EventCandidates const& collisions, TrackCandidates const& tracks)
1589+
{
1590+
dispatchMixing(collisions, tracks, false);
1591+
}
1592+
PROCESS_SWITCH(DeltaAnalysis, processMixedEvent, "Process mixed event", true);
1593+
1594+
void processMCEventMixing(EventCandidates const& collisions, TrackCandidates const& tracks)
1595+
{
1596+
if (!mixingCfg.enableMCEventMixing) {
1597+
return;
1598+
}
1599+
dispatchMixing(collisions, tracks, true);
1600+
}
16031601
PROCESS_SWITCH(DeltaAnalysis, processMCEventMixing, "Process MC reconstructed event mixing (reuses DATA mixing pairs; no truth matching)", false);
16041602

16051603
// =====================================================================================

0 commit comments

Comments
 (0)