|
75 | 75 | kDATA = 1, |
76 | 76 | kINEL, |
77 | 77 | kINELg0, |
| 78 | + kDD, |
| 79 | + kSD, |
| 80 | + kND, |
78 | 81 | kECend |
79 | 82 | }; |
80 | 83 | enum { |
@@ -173,9 +176,11 @@ static constexpr TrackSelectionFlags::flagtype trackSelectionTPC = |
173 | 176 | static constexpr TrackSelectionFlags::flagtype trackSelectionDCA = |
174 | 177 | TrackSelectionFlags::kDCAz | TrackSelectionFlags::kDCAxy; |
175 | 178 |
|
| 179 | + |
176 | 180 | struct MultiplicityCounter { |
177 | 181 | SliceCache cache; |
178 | | - Preslice<aod::McParticles> perMCCol = aod::mcparticle::mcCollisionId; |
| 182 | + Preslice<Particles> perMCCol = aod::mcparticle::mcCollisionId; |
| 183 | + Preslice<FiTracks> perCol = aod::track::collisionId; |
179 | 184 |
|
180 | 185 | Service<o2::framework::O2DatabasePDG> pdg; |
181 | 186 |
|
@@ -318,7 +323,7 @@ struct MultiplicityCounter { |
318 | 323 | Bool_1d btrigc(kTrigend, false); |
319 | 324 | registry.fill(HIST("Selection"), 1.); |
320 | 325 | auto z = collision.posZ(); |
321 | | - auto pertracks = tSample3->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); |
| 326 | + auto pertracks = tSample3->sliceBy(perCol, collision.globalIndex()); |
322 | 327 | auto Ntrk = 0; |
323 | 328 |
|
324 | 329 | // 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 { |
388 | 393 |
|
389 | 394 | PresliceUnsorted<soa::Join<MyCollisions, aod::McCollisionLabels>> perMcCol = o2::aod::mccollisionlabel::mcCollisionId; |
390 | 395 | Preslice<aod::McParticles> perMCColparticles = aod::mcparticle::mcCollisionId; |
| 396 | + Preslice<FiLTracks> perColFiLTracks = aod::track::collisionId; |
| 397 | + using MCex = soa::Join<aod::McCollisions, aod::HepMCXSections>; |
391 | 398 | 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, |
393 | 400 | FiLTracks const& tracks) |
394 | 401 | { |
395 | 402 | for (auto& mcCollision : mcCollisions) { |
396 | 403 | Bool_1d bevtc(kECend, false); |
397 | 404 | 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 | + } |
398 | 413 | registry.fill(HIST("Selection"), 1.); |
399 | 414 |
|
400 | 415 | auto mcz = mcCollision.posZ(); |
@@ -565,7 +580,7 @@ struct MultiplicityCounter { |
565 | 580 | } |
566 | 581 |
|
567 | 582 | auto Ntrk_rec = 0; |
568 | | - auto trackspart = tracks.sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); |
| 583 | + auto trackspart = tracks.sliceBy(perColFiLTracks, collision.globalIndex()); |
569 | 584 | for (auto& track : trackspart) { |
570 | 585 | if (std::abs(track.eta()) < 1) { |
571 | 586 | Ntrk_rec++; |
@@ -677,7 +692,7 @@ struct MultiplicityCounter { |
677 | 692 | } |
678 | 693 |
|
679 | 694 | auto mcCollision = collision.mcCollision(); |
680 | | - auto particlesPerCol = particles.sliceByCached(aod::mcparticle::mcCollisionId, mcCollision.globalIndex(), cache); |
| 695 | + auto particlesPerCol = particles.sliceBy(perMCCol, mcCollision.globalIndex()); |
681 | 696 | } |
682 | 697 |
|
683 | 698 | PROCESS_SWITCH(MultiplicityCounter, processTrackEfficiencyGeneral, "MC Count tracks", false); |
|
0 commit comments