Skip to content

Commit 3736517

Browse files
committed
[PWGMM] dndeta-hi: add SD/DD/ND classification and fix sliceBy on filtered tables
- Add kDD, kSD, kND enum values for diffractive event classification - Join McCollisions with HepMCXSections to access processId() in processMCCounting - Classify events by Pythia8 process code: 101=ND, 103/104=SD, 105/106=DD - Replace sliceByCached with sliceBy+Preslice for soa::Filtered tables (FiTracks, FiLTracks) to fix runtime error: Disabled cache /fIndexCollisions is requested
1 parent bbfac97 commit 3736517

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

PWGMM/Mult/Tasks/dndeta-hi.cxx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ enum {
7575
kDATA = 1,
7676
kINEL,
7777
kINELg0,
78+
kDD,
79+
kSD,
80+
kND,
7881
kECend
7982
};
8083
enum {
@@ -173,9 +176,11 @@ static constexpr TrackSelectionFlags::flagtype trackSelectionTPC =
173176
static constexpr TrackSelectionFlags::flagtype trackSelectionDCA =
174177
TrackSelectionFlags::kDCAz | TrackSelectionFlags::kDCAxy;
175178

179+
176180
struct MultiplicityCounter {
177181
SliceCache cache;
178-
Preslice<aod::McParticles> perMCCol = aod::mcparticle::mcCollisionId;
182+
Preslice<Particles> perMCCol = aod::mcparticle::mcCollisionId;
183+
Preslice<FiTracks> perCol = aod::track::collisionId;
179184

180185
Service<o2::framework::O2DatabasePDG> pdg;
181186

@@ -318,7 +323,7 @@ struct MultiplicityCounter {
318323
Bool_1d btrigc(kTrigend, false);
319324
registry.fill(HIST("Selection"), 1.);
320325
auto z = collision.posZ();
321-
auto pertracks = tSample3->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
326+
auto pertracks = tSample3->sliceBy(perCol, collision.globalIndex());
322327
auto Ntrk = 0;
323328

324329
// if (collision.selection_bit(aod::evsel::kIsTriggerTVX) && collision.selection_bit(aod::evsel::kNoTimeFrameBorder) && collision.selection_bit(aod::evsel::kNoITSROFrameBorder)) {
@@ -388,13 +393,23 @@ struct MultiplicityCounter {
388393

389394
PresliceUnsorted<soa::Join<MyCollisions, aod::McCollisionLabels>> perMcCol = o2::aod::mccollisionlabel::mcCollisionId;
390395
Preslice<aod::McParticles> perMCColparticles = aod::mcparticle::mcCollisionId;
396+
Preslice<FiLTracks> perColFiLTracks = aod::track::collisionId;
397+
using MCex = soa::Join<aod::McCollisions, aod::HepMCXSections>;
391398
void processMCCounting(
392-
aod::McCollisions const& mcCollisions, soa::Join<MyCollisionsCent, aod::McCollisionLabels> const& collisions, Particles const& mcParticles,
399+
MCex const& mcCollisions, soa::Join<MyCollisionsCent, aod::McCollisionLabels> const& collisions, Particles const& mcParticles,
393400
FiLTracks const& tracks)
394401
{
395402
for (auto& mcCollision : mcCollisions) {
396403
Bool_1d bevtc(kECend, false);
397404
bevtc[kINEL] = true;
405+
auto procId = mcCollision.processId();
406+
if (procId == 101) {
407+
bevtc[kND] = true;
408+
} else if (procId == 103 || procId == 104) {
409+
bevtc[kSD] = true;
410+
} else if (procId == 105 || procId == 106) {
411+
bevtc[kDD] = true;
412+
}
398413
registry.fill(HIST("Selection"), 1.);
399414

400415
auto mcz = mcCollision.posZ();
@@ -565,7 +580,7 @@ struct MultiplicityCounter {
565580
}
566581

567582
auto Ntrk_rec = 0;
568-
auto trackspart = tracks.sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
583+
auto trackspart = tracks.sliceBy(perColFiLTracks, collision.globalIndex());
569584
for (auto& track : trackspart) {
570585
if (std::abs(track.eta()) < 1) {
571586
Ntrk_rec++;
@@ -677,7 +692,7 @@ struct MultiplicityCounter {
677692
}
678693

679694
auto mcCollision = collision.mcCollision();
680-
auto particlesPerCol = particles.sliceByCached(aod::mcparticle::mcCollisionId, mcCollision.globalIndex(), cache);
695+
auto particlesPerCol = particles.sliceBy(perMCCol, mcCollision.globalIndex());
681696
}
682697

683698
PROCESS_SWITCH(MultiplicityCounter, processTrackEfficiencyGeneral, "MC Count tracks", false);

0 commit comments

Comments
 (0)