@@ -31,10 +31,11 @@ enum TripletOrder : uint8_t {
3131 kOrder123 , // no swap
3232 kOrder213 , // swap 1&2: for the case that particle 1 & 2 are the same species, particle 3 is something else
3333 kOrder132 , // swap 2&3
34- kOrder321 , // swap 1&2 &3
34+ kOrder321 , // reverse: swap 1&3
3535};
3636
3737// process same event for identical 3 particles
38+ // (no cleaner here — ParticleCleaner only operates on MC info, see the mc overload below)
3839template <modes::Mode mode,
3940 typename T1 ,
4041 typename T2 ,
@@ -104,6 +105,7 @@ void processSameEvent(T1 const& SliceParticle,
104105}
105106
106107// process same event for identical 2 particles and 1 other particle
108+ // (no cleaner here — ParticleCleaner only operates on MC info, see the mc overload below)
107109template <modes::Mode mode,
108110 typename T1 , typename T2 , typename T3 , typename T4 ,
109111 typename T5 , typename T6 , typename T7 , typename T8 , typename T9 >
@@ -168,6 +170,7 @@ void processSameEvent(T1 const& SliceParticle1, // 1&2 have same species
168170}
169171
170172// process same event for 3 different particles
173+ // (no cleaner here — ParticleCleaner only operates on MC info, see the mc overload below)
171174template <modes::Mode mode,
172175 typename T1 ,
173176 typename T2 ,
@@ -233,6 +236,7 @@ void processSameEvent(T1 const& SliceParticle1,
233236}
234237
235238// process same event for 3 identical particles with mc information
239+ // NOTE: added `Cleaner` (single cleaner, uses the isClean(part, mcParticles, mcMothers, mcPartonicMothers) overload)
236240template <modes::Mode mode,
237241 typename T1 ,
238242 typename T2 ,
@@ -244,7 +248,8 @@ template <modes::Mode mode,
244248 typename T8 ,
245249 typename T9 ,
246250 typename T10 ,
247- typename T11 >
251+ typename T11 ,
252+ typename T12 >
248253void processSameEvent (T1 const & SliceParticle,
249254 T2 const & TrackTable,
250255 T3 const & mcParticles,
@@ -254,17 +259,27 @@ void processSameEvent(T1 const& SliceParticle,
254259 T7 const & mcCollisions,
255260 T8 & ParticleHistManager,
256261 T9 & TripletHistManager,
257- T10 & CtrManager,
258- T11 & TcManager,
262+ T10 & Cleaner,
263+ T11 & CtrManager,
264+ T12 & TcManager,
259265 TripletOrder tripletOrder)
260266{
261267 TripletHistManager.resetTrackedParticlesPerEvent ();
262268
263269 for (auto const & part : SliceParticle) {
270+ if (!Cleaner.isClean (part, mcParticles, mcMothers, mcPartonicMothers)) {
271+ continue ;
272+ }
264273 ParticleHistManager.template fill <mode>(part, TrackTable, mcParticles, mcMothers, mcPartonicMothers);
265274 }
266275
267276 for (auto const & [p1, p2, p3] : o2::soa::combinations (o2::soa::CombinationsStrictlyUpperIndexPolicy (SliceParticle, SliceParticle, SliceParticle))) {
277+ // check if all three particles are clean
278+ if (!Cleaner.isClean (p1, mcParticles, mcMothers, mcPartonicMothers) ||
279+ !Cleaner.isClean (p2, mcParticles, mcMothers, mcPartonicMothers) ||
280+ !Cleaner.isClean (p3, mcParticles, mcMothers, mcPartonicMothers)) {
281+ continue ;
282+ }
268283 // check if triplet is clean
269284 if (!TcManager.isCleanTriplet (p1, p2, p3, TrackTable, mcParticles, mcPartonicMothers)) {
270285 continue ;
@@ -305,9 +320,10 @@ void processSameEvent(T1 const& SliceParticle,
305320}
306321
307322// process same event for 2 identical particles and one other with mc information
323+ // NOTE: added `Cleaner1` (for particle 1&2) and `Cleaner3` (for particle 3, a different species)
308324template <modes::Mode mode,
309325 typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 ,
310- typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 >
326+ typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 >
311327void processSameEvent (T1 const & SliceParticle1,
312328 T2 const & SliceParticle3,
313329 T3 const & TrackTable,
@@ -319,21 +335,35 @@ void processSameEvent(T1 const& SliceParticle1,
319335 T9 & ParticleHistManager1,
320336 T10 & ParticleHistManager3,
321337 T11 & TripletHistManager,
322- T12 & CtrManager,
323- T13 & TcManager,
338+ T12 & Cleaner1,
339+ T13 & Cleaner3,
340+ T14 & CtrManager,
341+ T15 & TcManager,
324342 TripletOrder tripletOrder)
325343{
326344 TripletHistManager.resetTrackedParticlesPerEvent ();
327345
328346 for (auto const & part : SliceParticle1) {
347+ if (!Cleaner1.isClean (part, mcParticles, mcMothers, mcPartonicMothers)) {
348+ continue ;
349+ }
329350 ParticleHistManager1.template fill <mode>(part, TrackTable, mcParticles, mcMothers, mcPartonicMothers);
330351 }
331352 for (auto const & part : SliceParticle3) {
353+ if (!Cleaner3.isClean (part, mcParticles, mcMothers, mcPartonicMothers)) {
354+ continue ;
355+ }
332356 ParticleHistManager3.template fill <mode>(part, TrackTable, mcParticles, mcMothers, mcPartonicMothers);
333357 }
334358
335359 for (auto const & p3 : SliceParticle3) {
336360 for (auto const & [p1, p2] : o2::soa::combinations (o2::soa::CombinationsStrictlyUpperIndexPolicy (SliceParticle1, SliceParticle1))) {
361+ // check if all three particles are clean
362+ if (!Cleaner1.isClean (p1, mcParticles, mcMothers, mcPartonicMothers) ||
363+ !Cleaner1.isClean (p2, mcParticles, mcMothers, mcPartonicMothers) ||
364+ !Cleaner3.isClean (p3, mcParticles, mcMothers, mcPartonicMothers)) {
365+ continue ;
366+ }
337367 // check if triplet is clean
338368 if (!TcManager.isCleanTriplet (p1, p2, p3, TrackTable, mcParticles, mcPartonicMothers)) {
339369 continue ;
@@ -368,6 +398,7 @@ void processSameEvent(T1 const& SliceParticle1,
368398}
369399
370400// process same event for 3 different particles with mc information
401+ // NOTE: added `Cleaner1`, `Cleaner2`, `Cleaner3` (one per species)
371402template <modes::Mode mode,
372403 typename T1 ,
373404 typename T2 ,
@@ -383,7 +414,10 @@ template <modes::Mode mode,
383414 typename T12 ,
384415 typename T13 ,
385416 typename T14 ,
386- typename T15 >
417+ typename T15 ,
418+ typename T16 ,
419+ typename T17 ,
420+ typename T18 >
387421void processSameEvent (T1 const & SliceParticle1,
388422 T2 const & SliceParticle2,
389423 T3 const & SliceParticle3,
@@ -397,22 +431,40 @@ void processSameEvent(T1 const& SliceParticle1,
397431 T11 & ParticleHistManager2,
398432 T12 & ParticleHistManager3,
399433 T13 & TripletHistManager,
400- T14 & CtrManager,
401- T15 & TcManager)
434+ T14 & Cleaner1,
435+ T15 & Cleaner2,
436+ T16 & Cleaner3,
437+ T17 & CtrManager,
438+ T18 & TcManager)
402439{
403440 TripletHistManager.resetTrackedParticlesPerEvent ();
404441
405442 for (auto const & part : SliceParticle1) {
443+ if (!Cleaner1.isClean (part, mcParticles, mcMothers, mcPartonicMothers)) {
444+ continue ;
445+ }
406446 ParticleHistManager1.template fill <mode>(part, TrackTable, mcParticles, mcMothers, mcPartonicMothers);
407447 }
408448 for (auto const & part : SliceParticle2) {
449+ if (!Cleaner2.isClean (part, mcParticles, mcMothers, mcPartonicMothers)) {
450+ continue ;
451+ }
409452 ParticleHistManager2.template fill <mode>(part, TrackTable, mcParticles, mcMothers, mcPartonicMothers);
410453 }
411454 for (auto const & part : SliceParticle3) {
455+ if (!Cleaner3.isClean (part, mcParticles, mcMothers, mcPartonicMothers)) {
456+ continue ;
457+ }
412458 ParticleHistManager3.template fill <mode>(part, TrackTable, mcParticles, mcMothers, mcPartonicMothers);
413459 }
414460
415461 for (auto const & [p1, p2, p3] : o2::soa::combinations (o2::soa::CombinationsFullIndexPolicy (SliceParticle1, SliceParticle2, SliceParticle3))) {
462+ // check if all three particles are clean
463+ if (!Cleaner1.isClean (p1, mcParticles, mcMothers, mcPartonicMothers) ||
464+ !Cleaner2.isClean (p2, mcParticles, mcMothers, mcPartonicMothers) ||
465+ !Cleaner3.isClean (p3, mcParticles, mcMothers, mcPartonicMothers)) {
466+ continue ;
467+ }
416468 // check if triplet is clean
417469 if (!TcManager.isCleanTriplet (p1, p2, p3, TrackTable, mcParticles, mcPartonicMothers)) {
418470 continue ;
@@ -436,6 +488,7 @@ void processSameEvent(T1 const& SliceParticle1,
436488}
437489
438490// process mixed event
491+ // (no cleaner here — ParticleCleaner only operates on MC info, see the mc overload below)
439492template <modes::Mode mode,
440493 typename T1 ,
441494 typename T2 ,
@@ -548,6 +601,8 @@ void processMixedEvent(T1 const& Collisions,
548601}
549602
550603// process mixed event in mc
604+ // NOTE: added `mcMothers`, `mcPartonicMothers` (missing in the original — mixed-event mc triplets
605+ // were never mc-cleaned via TcManager) plus `Cleaner1`, `Cleaner2`, `Cleaner3`
551606template <modes::Mode mode,
552607 typename T1 ,
553608 typename T2 ,
@@ -561,20 +616,30 @@ template <modes::Mode mode,
561616 typename T10 ,
562617 typename T11 ,
563618 typename T12 ,
564- typename T13 >
619+ typename T13 ,
620+ typename T14 ,
621+ typename T15 ,
622+ typename T16 ,
623+ typename T17 ,
624+ typename T18 >
565625void processMixedEvent (T1 const & Collisions,
566626 T2 const & mcCollisions,
567627 T3 & Partition1,
568628 T4 & Partition2,
569629 T5 & Partition3,
570630 T6 const & TrackTable,
571631 T7 const & mcParticles,
572- T8 & cache,
573- T9 const & policy,
574- T10 const & depth,
575- T11 & TripletHistManager,
576- T12 & CtrManager,
577- T13 & TcManager)
632+ T8 const & mcMothers,
633+ T9 const & mcPartonicMothers,
634+ T10 & cache,
635+ T11 const & policy,
636+ T12 const & depth,
637+ T13 & TripletHistManager,
638+ T14 & Cleaner1,
639+ T15 & Cleaner2,
640+ T16 & Cleaner3,
641+ T17 & CtrManager,
642+ T18 & TcManager)
578643{
579644 int64_t lastCollisionIndex1 = -1 ;
580645 int64_t lastCollisionIndex2 = -1 ;
@@ -630,8 +695,14 @@ void processMixedEvent(T1 const& Collisions,
630695 TripletHistManager.fillMixingQaMe (collision1, collision2, collision3);
631696
632697 for (auto const & [p1, p2, p3] : o2::soa::combinations (o2::soa::CombinationsFullIndexPolicy (*sliceParticle1, *sliceParticle2, sliceParticle3))) {
698+ // particle cleaning
699+ if (!Cleaner1.isClean (p1, mcParticles, mcMothers, mcPartonicMothers) ||
700+ !Cleaner2.isClean (p2, mcParticles, mcMothers, mcPartonicMothers) ||
701+ !Cleaner3.isClean (p3, mcParticles, mcMothers, mcPartonicMothers)) {
702+ continue ;
703+ }
633704 // pair cleaning
634- if (!TcManager.isCleanTriplet (p1, p2, p3, TrackTable)) {
705+ if (!TcManager.isCleanTriplet (p1, p2, p3, TrackTable, mcParticles, mcPartonicMothers )) {
635706 continue ;
636707 }
637708 // Close pair rejection
0 commit comments