From a5dbf23836292ddc0a46a45b8491d2c63a7ff159 Mon Sep 17 00:00:00 2001 From: Akash_Raj John_Babu Date: Wed, 30 Sep 2026 16:16:21 -0400 Subject: [PATCH 1/3] Add independent Lambda event switches and cap mixed-event combinations --- .../lambdaOrAntiLambdaProducerWithSpin.cxx | 39 +++++++------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx b/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx index fb9decce085..78e02988e7b 100644 --- a/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx +++ b/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx @@ -1520,6 +1520,7 @@ struct LambdaAntiLambdaPairAnalysis { // Mixed-Event Compatablity variables Configurable mixedEventMaxDeltaMultiplicity{"mixedEventMaxDeltaMultiplicity", 10.f, "Maximum multiplicity difference between mixed events"}; + Configurable maxMixedEvents{"maxMixedEvents", 200, "Maximum accepted mixed collision combinations per dataframe"}; // Short-range pairs Configurable sameEventShortRangePairMaxDeltaRapidity{"sameEventShortRangePairMaxDeltaRapidity", 0.5f, "ShortRangePai Maximum absolute rapidity difference for same-event pairs"}; @@ -2258,7 +2259,7 @@ struct LambdaAntiLambdaPairAnalysis { Preslice lambdasPerCollision = aod::lambdahyperon::collisionId; Preslice antiLambdasPerCollision = aod::lambdahyperon::collisionId; - void processData(CollisionsWithMultiplicity const& collisions, FilteredLambdas const& lambdas, FilteredAntiLambdas const& antiLambdas) + void processSameEventData(CollisionsWithMultiplicity const& collisions, FilteredLambdas const& lambdas, FilteredAntiLambdas const& antiLambdas) { static constexpr int MinimumSameSpeciesCandidates = 2; @@ -2282,15 +2283,20 @@ struct LambdaAntiLambdaPairAnalysis { fillAntiLambdaAntiLambdaSameEvent(antiLambdasThisCollision); } } + } - // ============================================================ - // Mixed events - // ============================================================ + void processMixedEventData(CollisionsWithMultiplicity const& collisions, FilteredLambdas const& lambdas, FilteredAntiLambdas const& antiLambdas) + { + int mixedEventCounter = 0; for (auto const& [collision1, collision2] : combinations(CombinationsStrictlyUpperIndexPolicy(collisions, collisions))) { const float deltaMultiplicity = std::abs(static_cast(collision1.multNTracksPV()) - static_cast(collision2.multNTracksPV())); + if (mixedEventCounter >= maxMixedEvents) { + break; + } + if (deltaMultiplicity > mixedEventMaxDeltaMultiplicity) { continue; } @@ -2316,33 +2322,18 @@ struct LambdaAntiLambdaPairAnalysis { if (antiLambdas1.size() > 0 && antiLambdas2.size() > 0) { fillAntiLambdaAntiLambdaMixedEvent(antiLambdas1, antiLambdas2); } + + ++mixedEventCounter; } } + void processDummy(aod::Collisions const&) {} - PROCESS_SWITCH(LambdaAntiLambdaPairAnalysis, processData, "Run candidate production", true); + PROCESS_SWITCH(LambdaAntiLambdaPairAnalysis, processSameEventData, "Run same-event pair analysis", true); + PROCESS_SWITCH(LambdaAntiLambdaPairAnalysis, processMixedEventData, "Run mixed-event pair analysis", false); PROCESS_SWITCH(LambdaAntiLambdaPairAnalysis, processDummy, "Skip candidate production", false); }; -/*WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) -{ - const bool isMC = cfgc.options().get("isMC"); - - WorkflowSpec workflow; - - if (isMC) { - workflow.push_back(adaptAnalysisTask(cfgc)); - workflow.push_back(adaptAnalysisTask(cfgc)); - workflow.push_back(adaptAnalysisTask(cfgc)); - } else { - workflow.push_back(adaptAnalysisTask(cfgc)); - workflow.push_back(adaptAnalysisTask(cfgc)); - workflow.push_back(adaptAnalysisTask(cfgc)); - } - - return workflow; -}*/ - WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { return WorkflowSpec{ From 6e1fa93cdeddf7bbb3412cce8cee8e94993c183c Mon Sep 17 00:00:00 2001 From: Akash_Raj John_Babu Date: Fri, 2 Oct 2026 19:51:00 -0400 Subject: [PATCH 2/3] Skip empty collisions when counting mixed-event combinations --- .../Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx b/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx index 78e02988e7b..42c7a84c9dc 100644 --- a/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx +++ b/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx @@ -1520,7 +1520,7 @@ struct LambdaAntiLambdaPairAnalysis { // Mixed-Event Compatablity variables Configurable mixedEventMaxDeltaMultiplicity{"mixedEventMaxDeltaMultiplicity", 10.f, "Maximum multiplicity difference between mixed events"}; - Configurable maxMixedEvents{"maxMixedEvents", 200, "Maximum accepted mixed collision combinations per dataframe"}; + Configurable maxMixedEvents{"maxMixedEvents", 200, "Maximum multiplicity-compatible collision combinations with selected candidates in both collisions per dataframe"}; // Short-range pairs Configurable sameEventShortRangePairMaxDeltaRapidity{"sameEventShortRangePairMaxDeltaRapidity", 0.5f, "ShortRangePai Maximum absolute rapidity difference for same-event pairs"}; @@ -2307,6 +2307,12 @@ struct LambdaAntiLambdaPairAnalysis { const auto antiLambdas1 = antiLambdas.sliceBy(antiLambdasPerCollision, collision1.globalIndex()); const auto antiLambdas2 = antiLambdas.sliceBy(antiLambdasPerCollision, collision2.globalIndex()); + // Empty collisions must not consume the mixing allowance. + if ((lambdas1.size() == 0 && antiLambdas1.size() == 0) || + (lambdas2.size() == 0 && antiLambdas2.size() == 0)) { + continue; + } + // Lambda–anti-Lambda requires at least one of each. if (lambdas1.size() > 0 && antiLambdas2.size() > 0) { fillLambdaAntiLambdaMixedEvent(lambdas1, antiLambdas2); From 1dcf89ae4474139665ee66015758e5ea3a246fff Mon Sep 17 00:00:00 2001 From: Akash-Raj-285 <157659199+Akash-Raj-285@users.noreply.github.com> Date: Sat, 3 Oct 2026 12:44:32 -0400 Subject: [PATCH 3/3] Update lambdaOrAntiLambdaProducerWithSpin.cxx --- .../Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx b/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx index 42c7a84c9dc..13e8add711b 100644 --- a/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx +++ b/PWGCF/TwoParticleCorrelations/Tasks/lambdaOrAntiLambdaProducerWithSpin.cxx @@ -1520,7 +1520,7 @@ struct LambdaAntiLambdaPairAnalysis { // Mixed-Event Compatablity variables Configurable mixedEventMaxDeltaMultiplicity{"mixedEventMaxDeltaMultiplicity", 10.f, "Maximum multiplicity difference between mixed events"}; - Configurable maxMixedEvents{"maxMixedEvents", 200, "Maximum multiplicity-compatible collision combinations with selected candidates in both collisions per dataframe"}; + Configurable maxMixedEvents{"maxMixedEvents", 5, "Maximum multiplicity-compatible collision combinations with selected candidates in both collisions per dataframe"}; // Short-range pairs Configurable sameEventShortRangePairMaxDeltaRapidity{"sameEventShortRangePairMaxDeltaRapidity", 0.5f, "ShortRangePai Maximum absolute rapidity difference for same-event pairs"};