Skip to content

Commit ba73492

Browse files
authored
Merge branch 'AliceO2Group:master' into master
2 parents bf0a17b + bb6ddd4 commit ba73492

13 files changed

Lines changed: 473 additions & 254 deletions

File tree

ALICE3/Tasks/alice3Strangeness.cxx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -632,14 +632,17 @@ struct Alice3Strangeness {
632632
histos.fill(HIST("reconstructedCandidates/Cascade/AfterSelection/hCascDecayLength"), normalizedDecayLength);
633633
histos.fill(HIST("reconstructedCandidates/Cascade/AfterSelection/hCascDecayRadius"), cascade.cascradius());
634634
histos.fill(HIST("reconstructedCandidates/Cascade/AfterSelection/hCascCosPA"), cascade.casccosPA(collision.posX(), collision.posY(), collision.posZ()));
635-
histos.fill(HIST("reconstructedCandidates/Cascade/hMassSelectedXiCandidates"), cascade.mXi());
636-
histos.fill(HIST("reconstructedCandidates/Cascade/hMassSelectedAntiXiCandidates"), cascade.mXi());
637-
histos.fill(HIST("reconstructedCandidates/Cascade/hMassSelectedOmegaCandidates"), cascade.mOmega());
638-
histos.fill(HIST("reconstructedCandidates/Cascade/hMassSelectedAntiOmegaCandidates"), cascade.mOmega());
639-
histos.fill(HIST("reconstructedCandidates/Cascade/h3dXiCandidates"), cascade.pt(), cascade.eta(), cascade.mOmega());
640-
histos.fill(HIST("reconstructedCandidates/Cascade/h3dAntiXiCandidates"), cascade.pt(), cascade.eta(), cascade.mOmega());
641-
histos.fill(HIST("reconstructedCandidates/Cascade/h3dOmegaCandidates"), cascade.pt(), cascade.eta(), cascade.mOmega());
642-
histos.fill(HIST("reconstructedCandidates/Cascade/h3dAntiOmegaCandidates"), cascade.pt(), cascade.eta(), cascade.mOmega());
635+
if (cascade.sign() < 0) {
636+
histos.fill(HIST("reconstructedCandidates/Cascade/hMassSelectedXiCandidates"), cascade.mXi());
637+
histos.fill(HIST("reconstructedCandidates/Cascade/hMassSelectedOmegaCandidates"), cascade.mOmega());
638+
histos.fill(HIST("reconstructedCandidates/Cascade/h3dXiCandidates"), cascade.pt(), cascade.eta(), cascade.mXi());
639+
histos.fill(HIST("reconstructedCandidates/Cascade/h3dOmegaCandidates"), cascade.pt(), cascade.eta(), cascade.mOmega());
640+
} else {
641+
histos.fill(HIST("reconstructedCandidates/Cascade/hMassSelectedAntiXiCandidates"), cascade.mXi());
642+
histos.fill(HIST("reconstructedCandidates/Cascade/hMassSelectedAntiOmegaCandidates"), cascade.mOmega());
643+
histos.fill(HIST("reconstructedCandidates/Cascade/h3dAntiXiCandidates"), cascade.pt(), cascade.eta(), cascade.mXi());
644+
histos.fill(HIST("reconstructedCandidates/Cascade/h3dAntiOmegaCandidates"), cascade.pt(), cascade.eta(), cascade.mOmega());
645+
}
643646
}
644647
}
645648

PWGCF/Femto/Core/pairProcessHelpers.h

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <Framework/Logger.h>
2424

2525
#include <cstdint>
26+
#include <optional>
2627

2728
namespace o2::analysis::femto
2829
{
@@ -308,6 +309,12 @@ void processMixedEvent(T1 const& Collisions,
308309
int windowSizeRaw = 0;
309310
int windowSizeEffective = 0;
310311

312+
// collision1 is fixed across each mixing window, so its track slice is
313+
// materialized once per window and reused for every mixing partner, instead
314+
// of being re-sliced (a fresh arrow Slice + selection copy, the dominant cost
315+
// on the heaviest femto trains) on every (collision1, collision2) pair.
316+
std::optional<decltype(Partition1->sliceByCached(o2::aod::femtobase::stored::fColId, 0, cache))> sliceParticle1;
317+
311318
for (auto const& [collision1, collision2] : o2::soa::selfCombinations(policy, depth, -1, Collisions, Collisions)) {
312319

313320
// --- new window ---
@@ -318,6 +325,7 @@ void processMixedEvent(T1 const& Collisions,
318325
windowSizeRaw = 0;
319326
windowSizeEffective = 0;
320327
lastCollisionIndex = collision1.globalIndex();
328+
sliceParticle1.emplace(Partition1->sliceByCached(o2::aod::femtobase::stored::fColId, collision1.globalIndex(), cache));
321329
}
322330

323331
++windowSizeRaw;
@@ -329,20 +337,18 @@ void processMixedEvent(T1 const& Collisions,
329337

330338
CprManager.setMagField(collision1.magField());
331339

332-
auto sliceParticle1 = Partition1->sliceByCached(o2::aod::femtobase::stored::fColId, collision1.globalIndex(), cache);
333-
334340
auto sliceParticle2 = Partition2->sliceByCached(o2::aod::femtobase::stored::fColId, collision2.globalIndex(), cache);
335341

336342
PairHistManager.resetTrackedParticlesPerEvent();
337343

338-
if (sliceParticle1.size() == 0 || sliceParticle2.size() == 0) {
344+
if (sliceParticle1->size() == 0 || sliceParticle2.size() == 0) {
339345
PairHistManager.fillMixingQaMePerEvent();
340346
continue;
341347
}
342348

343349
bool hasValidPair = false;
344350
PairHistManager.fillMixingQaMe(collision1, collision2);
345-
for (auto const& [p1, p2] : o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy(sliceParticle1, sliceParticle2))) {
351+
for (auto const& [p1, p2] : o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy(*sliceParticle1, sliceParticle2))) {
346352

347353
if (!PcManager.isCleanPair(p1, p2, TrackTable)) {
348354
continue;
@@ -415,6 +421,12 @@ void processMixedEvent(T1 const& Collisions,
415421
int windowSizeRaw = 0;
416422
int windowSizeEffective = 0;
417423

424+
// collision1 is fixed across each mixing window, so its track slice is
425+
// materialized once per window and reused for every mixing partner, instead
426+
// of being re-sliced (a fresh arrow Slice + selection copy, the dominant cost
427+
// on the heaviest femto trains) on every (collision1, collision2) pair.
428+
std::optional<decltype(Partition1->sliceByCached(o2::aod::femtobase::stored::fColId, 0, cache))> sliceParticle1;
429+
418430
for (auto const& [collision1, collision2] : o2::soa::selfCombinations(policy, depth, -1, Collisions, Collisions)) {
419431
if (collision1.globalIndex() != lastCollisionIndex) {
420432
if (lastCollisionIndex != -1) {
@@ -423,6 +435,7 @@ void processMixedEvent(T1 const& Collisions,
423435
windowSizeRaw = 0;
424436
windowSizeEffective = 0;
425437
lastCollisionIndex = collision1.globalIndex();
438+
sliceParticle1.emplace(Partition1->sliceByCached(o2::aod::femtobase::stored::fColId, collision1.globalIndex(), cache));
426439
}
427440

428441
++windowSizeRaw;
@@ -434,21 +447,19 @@ void processMixedEvent(T1 const& Collisions,
434447

435448
CprManager.setMagField(collision1.magField());
436449

437-
auto sliceParticle1 = Partition1->sliceByCached(o2::aod::femtobase::stored::fColId, collision1.globalIndex(), cache);
438-
439450
auto sliceParticle2 = Partition2->sliceByCached(o2::aod::femtobase::stored::fColId, collision2.globalIndex(), cache);
440451

441452
PairHistManager.resetTrackedParticlesPerEvent();
442453

443-
if (sliceParticle1.size() == 0 || sliceParticle2.size() == 0) {
454+
if (sliceParticle1->size() == 0 || sliceParticle2.size() == 0) {
444455
PairHistManager.fillMixingQaMePerEvent();
445456
continue;
446457
}
447458

448459
bool hasValidPair = false;
449460
PairHistManager.fillMixingQaMe(collision1, collision2);
450461

451-
for (auto const& [p1, p2] : o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy(sliceParticle1, sliceParticle2))) {
462+
for (auto const& [p1, p2] : o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy(*sliceParticle1, sliceParticle2))) {
452463

453464
if (!ParticleCleaner1.isClean(p1, mcParticles, mcMothers, mcPartonicMothers) ||
454465
!ParticleCleaner2.isClean(p2, mcParticles, mcMothers, mcPartonicMothers)) {

PWGCF/FemtoUniverse/TableProducer/femtoUniverseProducerTask.cxx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -590,10 +590,10 @@ struct FemtoUniverseProducerTask {
590590

591591
void init(InitContext&)
592592
{
593-
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackV0Cascade || doprocessTrackD0mesonData || doprocessTrackD0DataML || doprocessTrackCentRun2Data || doprocessTrackV0CentRun2Data || doprocessTrackCentRun3Data || doprocessV0CentRun3Data || doprocessCascadeCentRun3Data || doprocessTrackDataCentPP) == false && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMCV0 || doprocessTrackD0MC || doprocessTruthAndFullMCCasc || doprocessFullMCCent || doprocessTrackCentRun3DataMC || doprocessTruthAndFullMCCentRun3 || doprocessTruthAndFullMCCentRun3V0) == false) {
593+
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackV0Cascade || doprocessTrackD0mesonData || doprocessTrackD0DataML || doprocessTrackCentRun2Data || doprocessTrackV0CentRun2Data || doprocessTrackCentRun3Data || doprocessV0CentRun3Data || doprocessCascadeCentRun3Data || doprocessTrackDataCentPP) == false && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMCV0 || doprocessTrackD0MC || doprocessTruthAndFullMCCasc || doprocessFullMCCent || doprocessTrackCentRun3DataMC || doprocessTruthAndFullMCCentRun3 || doprocessTruthAndFullMCCentRun3V0 || doprocessTruthAndFullMCCentRun3Casc) == false) {
594594
LOGF(fatal, "Neither processFullData nor processFullMC enabled. Please choose one.");
595595
}
596-
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackV0Cascade || doprocessTrackD0mesonData || doprocessTrackD0DataML || doprocessTrackCentRun2Data || doprocessTrackV0CentRun2Data || doprocessTrackCentRun3Data || doprocessV0CentRun3Data || doprocessCascadeCentRun3Data || doprocessTrackDataCentPP) == true && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMCV0 || doprocessTrackD0MC || doprocessTruthAndFullMCCasc || doprocessFullMCCent || doprocessTrackCentRun3DataMC || doprocessTruthAndFullMCCentRun3 || doprocessTruthAndFullMCCentRun3V0) == true) {
596+
if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackV0Cascade || doprocessTrackD0mesonData || doprocessTrackD0DataML || doprocessTrackCentRun2Data || doprocessTrackV0CentRun2Data || doprocessTrackCentRun3Data || doprocessV0CentRun3Data || doprocessCascadeCentRun3Data || doprocessTrackDataCentPP) == true && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMCV0 || doprocessTrackD0MC || doprocessTruthAndFullMCCasc || doprocessFullMCCent || doprocessTrackCentRun3DataMC || doprocessTruthAndFullMCCentRun3 || doprocessTruthAndFullMCCentRun3V0 || doprocessTruthAndFullMCCentRun3Casc) == true) {
597597
LOGF(fatal,
598598
"Cannot enable process Data and process MC at the same time. "
599599
"Please choose one.");
@@ -2805,12 +2805,17 @@ struct FemtoUniverseProducerTask {
28052805

28062806
// recos
28072807
std::set<int> recoMcIds;
2808+
std::set<int> mcColIds;
2809+
recoMcIds.clear();
2810+
mcColIds.clear();
2811+
28082812
for (const auto& col : collisions) {
28092813
auto groupedTracks = tracks.sliceBy(perCollisionTracks, col.globalIndex());
28102814
auto groupedCascParts = fullCascades.sliceBy(perCollisionCascs, col.globalIndex());
28112815
getMagneticFieldTesla(col.bc_as<aod::BCsWithTimestamps>());
28122816
const auto colcheck = fillCollisionsCentRun3<true>(col);
28132817
if (colcheck) {
2818+
mcColIds.insert(col.mcCollisionId());
28142819
fillTracks<true>(groupedTracks);
28152820
fillCascade<true>(col, groupedCascParts, groupedTracks);
28162821
}
@@ -2822,11 +2827,14 @@ struct FemtoUniverseProducerTask {
28222827

28232828
// truth
28242829
for (const auto& mccol : mccols) {
2825-
auto groupedCollisions = collisions.sliceBy(recoCollsPerMCCollCentPbPb, mccol.globalIndex());
2830+
if (confCollMCTruthOnlyReco && !mcColIds.contains(mccol.globalIndex())) {
2831+
continue;
2832+
}
2833+
auto groupedCollisions = collisions.sliceBy(recoCollsPerMCCollCentPbPb, mccol.globalIndex()); // slicing for MC collisions
2834+
auto groupedMCParticles = mcParticles.sliceBy(perMCCollision, mccol.globalIndex()); // slicing for MC particles
28262835
for (const auto& col : groupedCollisions) {
28272836
const auto colcheck = fillMCTruthCollisionsCentRun3(col); // fills the reco collisions for mc collision
28282837
if (colcheck) {
2829-
auto groupedMCParticles = mcParticles.sliceBy(perMCCollision, mccol.globalIndex());
28302838
outputCollExtra(1.0, 1.0);
28312839
fillParticles<decltype(groupedMCParticles), true, true>(groupedMCParticles, recoMcIds); // fills mc particles
28322840
}

0 commit comments

Comments
 (0)