Skip to content

Commit 10145c8

Browse files
committed
Fix: fixes in triplet tasks
1 parent 148cbd0 commit 10145c8

7 files changed

Lines changed: 254 additions & 128 deletions

PWGCF/Femto/Core/particleCleaner.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,9 @@ class ParticleCleaner
232232

233233
private:
234234
bool mActivate = false;
235-
bool mRejectParticleWithoutMcParticle = true;
236-
bool mRejectParticleWithoutMcMother = true;
237-
bool mRejectParticleWithoutMcPartonicMother = true;
235+
bool mRejectParticleWithoutMcParticle = false;
236+
bool mRejectParticleWithoutMcMother = false;
237+
bool mRejectParticleWithoutMcPartonicMother = false;
238238
std::vector<int> mRequiredPdgCodes;
239239
std::vector<int> mRejectedPdgCodes;
240240
std::vector<int> mRequiredMotherPdgCodes;

PWGCF/Femto/Core/tripletBuilder.h

Lines changed: 124 additions & 83 deletions
Large diffs are not rendered by default.

PWGCF/Femto/Core/tripletHistManager.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -328,9 +328,11 @@ class TripletHistManager
328328
// set Q3
329329
mQ3 = getQ3(mParticle1, mParticle2, mParticle3);
330330

331-
mKstar12 = getKstar(mParticle1, mParticle2);
332-
mKstar13 = getKstar(mParticle1, mParticle3);
333-
mKstar23 = getKstar(mParticle2, mParticle3);
331+
if (mPlotKstar) {
332+
mKstar12 = getKstar(mParticle1, mParticle2);
333+
mKstar13 = getKstar(mParticle1, mParticle3);
334+
mKstar23 = getKstar(mParticle2, mParticle3);
335+
}
334336

335337
// if one of the particles has a mass getter, we cache the value for the filling later
336338
if constexpr (utils::HasMass<T1>) {
@@ -373,9 +375,9 @@ class TripletHistManager
373375
auto mcParticle2 = particle2.template fMcParticle_as<T4>();
374376
auto mcParticle3 = particle3.template fMcParticle_as<T4>();
375377

376-
mTrueParticle1 = ROOT::Math::PtEtaPhiMVector(mAbsCharge1 * mcParticle1.pt(), mcParticle1.eta(), mcParticle1.phi(), mPdgMass1);
377-
mTrueParticle2 = ROOT::Math::PtEtaPhiMVector(mAbsCharge2 * mcParticle2.pt(), mcParticle2.eta(), mcParticle2.phi(), mPdgMass2);
378-
mTrueParticle3 = ROOT::Math::PtEtaPhiMVector(mAbsCharge3 * mcParticle3.pt(), mcParticle3.eta(), mcParticle3.phi(), mPdgMass3);
378+
mTrueParticle1 = ROOT::Math::PtEtaPhiMVector(mcParticle1.pt(), mcParticle1.eta(), mcParticle1.phi(), mPdgMass1);
379+
mTrueParticle2 = ROOT::Math::PtEtaPhiMVector(mcParticle2.pt(), mcParticle2.eta(), mcParticle2.phi(), mPdgMass2);
380+
mTrueParticle3 = ROOT::Math::PtEtaPhiMVector(mcParticle3.pt(), mcParticle3.eta(), mcParticle3.phi(), mPdgMass3);
379381

380382
// set true mT
381383
mTrueMt = getMt(mTrueParticle1, mTrueParticle2, mTrueParticle3);

PWGCF/Femto/Core/tripletProcessHelpers.h

Lines changed: 89 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
3839
template <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)
107109
template <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)
171174
template <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)
236240
template <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>
248253
void 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)
308324
template <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>
311327
void 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)
371402
template <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>
387421
void 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)
439492
template <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`
551606
template <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>
565625
void 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

Comments
 (0)