From dd70be0d5d39fc38b01a205bf4edc0fd2416fc71 Mon Sep 17 00:00:00 2001 From: skundu692 Date: Sun, 8 Jun 2025 13:33:55 +0200 Subject: [PATCH 01/13] add new expression for angular correlation --- PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx b/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx index be85c214406..2ab12a018d8 100644 --- a/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx +++ b/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx @@ -290,6 +290,7 @@ struct LfTaskLambdaSpinCorr { auto proton1LambdaRF = boostLambda1ToCM(proton1pairCM); auto proton2LambdaRF = boostLambda2ToCM(proton2pairCM); + auto cosThetaDiff = -999.0; if (cosCalculation == 0) { cosThetaDiff = proton1LambdaRF.Vect().Unit().Dot(proton2LambdaRF.Vect().Unit()); From 5741981c3b8971813ca6d75d22f3a1348246deac Mon Sep 17 00:00:00 2001 From: skundu692 Date: Mon, 9 Jun 2025 19:10:09 +0200 Subject: [PATCH 02/13] Fix clang formating --- PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx | 1 - 1 file changed, 1 deletion(-) diff --git a/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx b/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx index 2ab12a018d8..be85c214406 100644 --- a/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx +++ b/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx @@ -290,7 +290,6 @@ struct LfTaskLambdaSpinCorr { auto proton1LambdaRF = boostLambda1ToCM(proton1pairCM); auto proton2LambdaRF = boostLambda2ToCM(proton2pairCM); - auto cosThetaDiff = -999.0; if (cosCalculation == 0) { cosThetaDiff = proton1LambdaRF.Vect().Unit().Dot(proton2LambdaRF.Vect().Unit()); From 8bfae70da9c4e65fd1c3f2cf7924689d4c704a6c Mon Sep 17 00:00:00 2001 From: skundu692 Date: Wed, 11 Jun 2025 17:25:08 +0200 Subject: [PATCH 03/13] Add new process function to study derived data --- PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx b/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx index be85c214406..3f8790098ed 100644 --- a/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx +++ b/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx @@ -866,9 +866,9 @@ struct LfTaskLambdaSpinCorr { continue; } + // auto postrack1 = v0.template posTrackExtra_as(); // auto negtrack1 = v0.template negTrackExtra_as(); - // 2nd loop for combination of lambda lambda for (const auto& v02 : V0s) { if (v02.index() <= v0.index()) { @@ -899,8 +899,10 @@ struct LfTaskLambdaSpinCorr { continue; } + // auto postrack2 = v02.template posTrackExtra_as(); // auto negtrack2 = v02.template negTrackExtra_as(); + if (v0.posTrackExtraId() == v02.posTrackExtraId() || v0.negTrackExtraId() == v02.negTrackExtraId()) { continue; } @@ -1012,6 +1014,7 @@ struct LfTaskLambdaSpinCorr { if (lambdaTag2 && aLambdaTag2) { continue; } + // auto postrack1 = t1.template posTrackExtra_as(); // auto negtrack1 = t1.template negTrackExtra_as(); // auto postrack2 = t2.template posTrackExtra_as(); From 77cd1880baf7d4196afa6aeb5edaad675b7326a4 Mon Sep 17 00:00:00 2001 From: skundu692 Date: Wed, 11 Jun 2025 17:25:39 +0200 Subject: [PATCH 04/13] Fix --- PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx b/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx index 3f8790098ed..80c75717d08 100644 --- a/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx +++ b/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx @@ -866,9 +866,9 @@ struct LfTaskLambdaSpinCorr { continue; } - // auto postrack1 = v0.template posTrackExtra_as(); // auto negtrack1 = v0.template negTrackExtra_as(); + // 2nd loop for combination of lambda lambda for (const auto& v02 : V0s) { if (v02.index() <= v0.index()) { @@ -899,10 +899,8 @@ struct LfTaskLambdaSpinCorr { continue; } - // auto postrack2 = v02.template posTrackExtra_as(); // auto negtrack2 = v02.template negTrackExtra_as(); - if (v0.posTrackExtraId() == v02.posTrackExtraId() || v0.negTrackExtraId() == v02.negTrackExtraId()) { continue; } @@ -1014,7 +1012,6 @@ struct LfTaskLambdaSpinCorr { if (lambdaTag2 && aLambdaTag2) { continue; } - // auto postrack1 = t1.template posTrackExtra_as(); // auto negtrack1 = t1.template negTrackExtra_as(); // auto postrack2 = t2.template posTrackExtra_as(); From 381358dd4e4447fca87282753008e1eeddfafd19 Mon Sep 17 00:00:00 2001 From: skundu692 Date: Wed, 18 Jun 2025 16:59:09 +0200 Subject: [PATCH 05/13] Fix clang and whitespace error --- PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx b/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx index 80c75717d08..be85c214406 100644 --- a/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx +++ b/PWGLF/Tasks/Strangeness/taskLambdaSpinCorr.cxx @@ -868,7 +868,7 @@ struct LfTaskLambdaSpinCorr { // auto postrack1 = v0.template posTrackExtra_as(); // auto negtrack1 = v0.template negTrackExtra_as(); - + // 2nd loop for combination of lambda lambda for (const auto& v02 : V0s) { if (v02.index() <= v0.index()) { From ad46f1d063f3ae7ac43afbf1cb1c4c8598a4a0fb Mon Sep 17 00:00:00 2001 From: skundu692 Date: Thu, 19 Jun 2025 18:30:11 +0200 Subject: [PATCH 06/13] Fix indexing issue in derived data --- PWGLF/DataModel/LFSpincorrelationTables.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/DataModel/LFSpincorrelationTables.h b/PWGLF/DataModel/LFSpincorrelationTables.h index f7ff44377d4..7327fb1cfa6 100644 --- a/PWGLF/DataModel/LFSpincorrelationTables.h +++ b/PWGLF/DataModel/LFSpincorrelationTables.h @@ -81,4 +81,4 @@ DECLARE_SOA_TABLE(LambdaPairs, "AOD", "LAMBDAPAIR", using LambdaPair = LambdaPairs::iterator; } // namespace o2::aod -#endif // PWGLF_DATAMODEL_LFSPINCORRELATIONTABLES_H_ +#endif // PWGLF_DATAMODEL_LFELATIONTABLES_H_ From f0c7ce9251287f1ec5e8539f1c0713fe20a30d94 Mon Sep 17 00:00:00 2001 From: skundu692 Date: Thu, 19 Jun 2025 18:58:44 +0200 Subject: [PATCH 07/13] fix linter error --- PWGLF/DataModel/LFSpincorrelationTables.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/DataModel/LFSpincorrelationTables.h b/PWGLF/DataModel/LFSpincorrelationTables.h index 7327fb1cfa6..f7ff44377d4 100644 --- a/PWGLF/DataModel/LFSpincorrelationTables.h +++ b/PWGLF/DataModel/LFSpincorrelationTables.h @@ -81,4 +81,4 @@ DECLARE_SOA_TABLE(LambdaPairs, "AOD", "LAMBDAPAIR", using LambdaPair = LambdaPairs::iterator; } // namespace o2::aod -#endif // PWGLF_DATAMODEL_LFELATIONTABLES_H_ +#endif // PWGLF_DATAMODEL_LFSPINCORRELATIONTABLES_H_ From 21e972989bffd4aab7638c3a90677fb7519f84ea Mon Sep 17 00:00:00 2001 From: skundu692 Date: Thu, 10 Jul 2025 10:42:08 +0200 Subject: [PATCH 08/13] Modify azimuthal distribution --- PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx index cfd026eca49..852166f82d5 100644 --- a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx +++ b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx @@ -279,8 +279,13 @@ struct lambdaspincorrderived { if (!selectionV0(v0)) { continue; } +<<<<<<< HEAD histos.fill(HIST("ptCent"), v0.lambdaPt(), centrality); histos.fill(HIST("etaCent"), v0.lambdaEta(), centrality); +======= + histos.fill(HIST("ptCent"),v0.lambdaPt(),centrality); + histos.fill(HIST("etaCent"),v0.lambdaEta(),centrality); +>>>>>>> af5b95163 (Modify azimuthal distribution) proton = ROOT::Math::PtEtaPhiMVector(v0.protonPt(), v0.protonEta(), v0.protonPhi(), o2::constants::physics::MassProton); lambda = ROOT::Math::PtEtaPhiMVector(v0.lambdaPt(), v0.lambdaEta(), v0.lambdaPhi(), v0.lambdaMass()); for (const auto& v02 : V0s) { @@ -298,7 +303,11 @@ struct lambdaspincorrderived { } proton2 = ROOT::Math::PtEtaPhiMVector(v02.protonPt(), v02.protonEta(), v02.protonPhi(), o2::constants::physics::MassProton); lambda2 = ROOT::Math::PtEtaPhiMVector(v02.lambdaPt(), v02.lambdaEta(), v02.lambdaPhi(), v02.lambdaMass()); +<<<<<<< HEAD histos.fill(HIST("deltaPhiSame"), std::abs(RecoDecay::constrainAngle(v0.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(v02.lambdaPhi(), 0.0F))); +======= + histos.fill(HIST("deltaPhiSame"), std::abs(RecoDecay::constrainAngle(v0.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(v02.lambdaPhi(), 0.0F))); +>>>>>>> af5b95163 (Modify azimuthal distribution) if (v0.v0Status() == 0 && v02.v0Status() == 0) { fillHistograms(0, 0, lambda, lambda2, proton, proton2, centrality, 0); } @@ -370,7 +379,11 @@ struct lambdaspincorrderived { lambda = ROOT::Math::PtEtaPhiMVector(t3.lambdaPt(), t3.lambdaEta(), t3.lambdaPhi(), t3.lambdaMass()); proton2 = ROOT::Math::PtEtaPhiMVector(t2.protonPt(), t2.protonEta(), t2.protonPhi(), o2::constants::physics::MassProton); lambda2 = ROOT::Math::PtEtaPhiMVector(t2.lambdaPt(), t2.lambdaEta(), t2.lambdaPhi(), t2.lambdaMass()); +<<<<<<< HEAD histos.fill(HIST("deltaPhiMix"), std::abs(RecoDecay::constrainAngle(t3.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(t2.lambdaPhi(), 0.0F))); +======= + histos.fill(HIST("deltaPhiMix"), std::abs(RecoDecay::constrainAngle(t3.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(t2.lambdaPhi(), 0.0F))); +>>>>>>> af5b95163 (Modify azimuthal distribution) if (t3.v0Status() == 0 && t2.v0Status() == 0) { fillHistograms(0, 0, lambda, lambda2, proton, proton2, centrality, 1); } From fdbabcc7832f965f2b3bc1bcf99eac74a2781520 Mon Sep 17 00:00:00 2001 From: skundu692 Date: Thu, 10 Jul 2025 10:45:52 +0200 Subject: [PATCH 09/13] fix clang format --- PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx index 852166f82d5..cfd026eca49 100644 --- a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx +++ b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx @@ -279,13 +279,8 @@ struct lambdaspincorrderived { if (!selectionV0(v0)) { continue; } -<<<<<<< HEAD histos.fill(HIST("ptCent"), v0.lambdaPt(), centrality); histos.fill(HIST("etaCent"), v0.lambdaEta(), centrality); -======= - histos.fill(HIST("ptCent"),v0.lambdaPt(),centrality); - histos.fill(HIST("etaCent"),v0.lambdaEta(),centrality); ->>>>>>> af5b95163 (Modify azimuthal distribution) proton = ROOT::Math::PtEtaPhiMVector(v0.protonPt(), v0.protonEta(), v0.protonPhi(), o2::constants::physics::MassProton); lambda = ROOT::Math::PtEtaPhiMVector(v0.lambdaPt(), v0.lambdaEta(), v0.lambdaPhi(), v0.lambdaMass()); for (const auto& v02 : V0s) { @@ -303,11 +298,7 @@ struct lambdaspincorrderived { } proton2 = ROOT::Math::PtEtaPhiMVector(v02.protonPt(), v02.protonEta(), v02.protonPhi(), o2::constants::physics::MassProton); lambda2 = ROOT::Math::PtEtaPhiMVector(v02.lambdaPt(), v02.lambdaEta(), v02.lambdaPhi(), v02.lambdaMass()); -<<<<<<< HEAD histos.fill(HIST("deltaPhiSame"), std::abs(RecoDecay::constrainAngle(v0.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(v02.lambdaPhi(), 0.0F))); -======= - histos.fill(HIST("deltaPhiSame"), std::abs(RecoDecay::constrainAngle(v0.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(v02.lambdaPhi(), 0.0F))); ->>>>>>> af5b95163 (Modify azimuthal distribution) if (v0.v0Status() == 0 && v02.v0Status() == 0) { fillHistograms(0, 0, lambda, lambda2, proton, proton2, centrality, 0); } @@ -379,11 +370,7 @@ struct lambdaspincorrderived { lambda = ROOT::Math::PtEtaPhiMVector(t3.lambdaPt(), t3.lambdaEta(), t3.lambdaPhi(), t3.lambdaMass()); proton2 = ROOT::Math::PtEtaPhiMVector(t2.protonPt(), t2.protonEta(), t2.protonPhi(), o2::constants::physics::MassProton); lambda2 = ROOT::Math::PtEtaPhiMVector(t2.lambdaPt(), t2.lambdaEta(), t2.lambdaPhi(), t2.lambdaMass()); -<<<<<<< HEAD histos.fill(HIST("deltaPhiMix"), std::abs(RecoDecay::constrainAngle(t3.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(t2.lambdaPhi(), 0.0F))); -======= - histos.fill(HIST("deltaPhiMix"), std::abs(RecoDecay::constrainAngle(t3.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(t2.lambdaPhi(), 0.0F))); ->>>>>>> af5b95163 (Modify azimuthal distribution) if (t3.v0Status() == 0 && t2.v0Status() == 0) { fillHistograms(0, 0, lambda, lambda2, proton, proton2, centrality, 1); } From 4f5218800d2117a7bc057b88cec41eccbe82ba80 Mon Sep 17 00:00:00 2001 From: skundu692 Date: Thu, 17 Jul 2025 17:25:46 +0200 Subject: [PATCH 10/13] Add rapidity cut --- .../Strangeness/lambdaspincorrderived.cxx | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx index cfd026eca49..209dd1b8ade 100644 --- a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx +++ b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx @@ -83,6 +83,7 @@ struct lambdaspincorrderived { Configurable ptMin{"ptMin", 0.5, "V0 Pt minimum"}; Configurable ptMax{"ptMax", 3.0, "V0 Pt maximum"}; Configurable rapidity{"rapidity", 0.5, "Rapidity cut on lambda"}; + Configurable v0eta{"v0eta", 0.8, "Eta cut on lambda"}; // Event Mixing Configurable nEvtMixing{"nEvtMixing", 10, "Number of events to mix"}; @@ -102,6 +103,8 @@ struct lambdaspincorrderived { void init(o2::framework::InitContext&) { + histos.add("hPtYSame", "hPtYSame", kTH2F, {{100, 0.0, 10.0}, {200, -1.0, 1.0}}); + histos.add("hPtYMix", "hPtYMix", kTH2F, {{100, 0.0, 10.0}, {200, -1.0, 1.0}}); histos.add("hCentrality", "Centrality distribution", kTH1F, {{configThnAxisCentrality}}); histos.add("deltaPhiSame", "deltaPhiSame", HistType::kTH1D, {{72, 0.0, 2.0 * TMath::Pi()}}, true); histos.add("deltaPhiMix", "deltaPhiMix", HistType::kTH1D, {{72, 0.0, 2.0 * TMath::Pi()}}, true); @@ -194,6 +197,7 @@ struct lambdaspincorrderived { const ROOT::Math::PtEtaPhiMVector& daughpart1, const ROOT::Math::PtEtaPhiMVector& daughpart2, double centrality, int datatype) { + auto lambda1Mass = 0.0; auto lambda2Mass = 0.0; if (!usePDGM) { @@ -231,6 +235,7 @@ struct lambdaspincorrderived { double deltaR = TMath::Sqrt(deltaEta * deltaEta + deltaPhi * deltaPhi); if (datatype == 0) { + histos.fill(HIST("hPtYSame"), particle1.Pt(), particle1.Rapidity()); if (tag1 == 0 && tag2 == 0) { histos.fill(HIST("hSparseLambdaLambda"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR); histos.fill(HIST("hLambdaSameForLL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F)); @@ -246,19 +251,20 @@ struct lambdaspincorrderived { double weight2 = 1.0; double weight3 = 1.0; if (useweight) { - weight1 = hweight1->GetBinContent(hweight1->FindBin(particle1.Pt() + 0.001, particle1.Eta() + 0.001, particle1.Phi() + 0.001)); - weight2 = hweight2->GetBinContent(hweight2->FindBin(particle1.Pt() + 0.001, particle1.Eta() + 0.001, particle1.Phi() + 0.001)); - weight3 = hweight3->GetBinContent(hweight3->FindBin(particle1.Pt() + 0.001, particle1.Eta() + 0.001, particle1.Phi() + 0.001)); + weight1 = hweight1->GetBinContent(hweight1->FindBin(particle1.Pt(), particle1.Eta(), particle1.Phi())); + weight2 = hweight2->GetBinContent(hweight2->FindBin(particle1.Pt(), particle1.Eta(), particle1.Phi())); + weight3 = hweight3->GetBinContent(hweight3->FindBin(particle1.Pt(), particle1.Eta(), particle1.Phi())); } + histos.fill(HIST("hPtYMix"), particle1.Pt(), particle1.Rapidity()); if (tag1 == 0 && tag2 == 0) { histos.fill(HIST("hSparseLambdaLambdaMixed"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR, weight1); - histos.fill(HIST("hLambdaMixForLL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F)); + histos.fill(HIST("hLambdaMixForLL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F), weight1); } else if ((tag1 == 0 && tag2 == 1) || (tag1 == 1 && tag2 == 0)) { histos.fill(HIST("hSparseLambdaAntiLambdaMixed"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR, weight2); - histos.fill(HIST("hLambdaMixForLAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F)); + histos.fill(HIST("hLambdaMixForLAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F), weight2); } else if (tag1 == 1 && tag2 == 1) { histos.fill(HIST("hSparseAntiLambdaAntiLambdaMixed"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR, weight3); - histos.fill(HIST("hAntiLambdaMixForALAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F)); + histos.fill(HIST("hAntiLambdaMixForALAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F), weight3); } } } @@ -283,6 +289,12 @@ struct lambdaspincorrderived { histos.fill(HIST("etaCent"), v0.lambdaEta(), centrality); proton = ROOT::Math::PtEtaPhiMVector(v0.protonPt(), v0.protonEta(), v0.protonPhi(), o2::constants::physics::MassProton); lambda = ROOT::Math::PtEtaPhiMVector(v0.lambdaPt(), v0.lambdaEta(), v0.lambdaPhi(), v0.lambdaMass()); + if (std::abs(lambda.Rapidity()) > rapidity) { + continue; + } + if (std::abs(lambda.Eta()) > v0eta) { + continue; + } for (const auto& v02 : V0s) { if (v02.index() <= v0.index()) { continue; @@ -299,6 +311,12 @@ struct lambdaspincorrderived { proton2 = ROOT::Math::PtEtaPhiMVector(v02.protonPt(), v02.protonEta(), v02.protonPhi(), o2::constants::physics::MassProton); lambda2 = ROOT::Math::PtEtaPhiMVector(v02.lambdaPt(), v02.lambdaEta(), v02.lambdaPhi(), v02.lambdaMass()); histos.fill(HIST("deltaPhiSame"), std::abs(RecoDecay::constrainAngle(v0.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(v02.lambdaPhi(), 0.0F))); + if (std::abs(lambda2.Rapidity()) > rapidity) { + continue; + } + if (std::abs(lambda2.Eta()) > v0eta) { + continue; + } if (v0.v0Status() == 0 && v02.v0Status() == 0) { fillHistograms(0, 0, lambda, lambda2, proton, proton2, centrality, 0); } @@ -371,6 +389,18 @@ struct lambdaspincorrderived { proton2 = ROOT::Math::PtEtaPhiMVector(t2.protonPt(), t2.protonEta(), t2.protonPhi(), o2::constants::physics::MassProton); lambda2 = ROOT::Math::PtEtaPhiMVector(t2.lambdaPt(), t2.lambdaEta(), t2.lambdaPhi(), t2.lambdaMass()); histos.fill(HIST("deltaPhiMix"), std::abs(RecoDecay::constrainAngle(t3.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(t2.lambdaPhi(), 0.0F))); + if (std::abs(lambda.Rapidity()) > rapidity) { + continue; + } + if (std::abs(lambda.Eta()) > v0eta) { + continue; + } + if (std::abs(lambda2.Rapidity()) > rapidity) { + continue; + } + if (std::abs(lambda2.Eta()) > v0eta) { + continue; + } if (t3.v0Status() == 0 && t2.v0Status() == 0) { fillHistograms(0, 0, lambda, lambda2, proton, proton2, centrality, 1); } From 4f3bb051dc8aea3d95b7b65a837e7ac5dcd5cd8c Mon Sep 17 00:00:00 2001 From: skundu692 Date: Fri, 18 Jul 2025 19:08:07 +0200 Subject: [PATCH 11/13] Add optimized mixed event process function --- .../Strangeness/lambdaspincorrderived.cxx | 155 ++++++++++++++---- 1 file changed, 125 insertions(+), 30 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx index 209dd1b8ade..17ab57dbd8c 100644 --- a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx +++ b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx @@ -22,6 +22,7 @@ #include "Framework/ASoAHelpers.h" #include "Framework/AnalysisDataModel.h" #include "Framework/AnalysisTask.h" +#include "Framework/BinningPolicy.h" #include "Framework/StepTHn.h" #include "Framework/runDataProcessing.h" #include @@ -34,9 +35,14 @@ #include +#include // for std::fabs +#include #include #include +#include // <<< CHANGED: for dedup sets #include +#include +#include // <<< CHANGED: for seenMap #include // o2 includes. @@ -49,7 +55,7 @@ using namespace o2::framework::expressions; using namespace o2::soa; struct lambdaspincorrderived { - + // BinningType colBinning; struct : ConfigurableGroup { Configurable cfgURL{"cfgURL", "http://alice-ccdb.cern.ch", "Address of the CCDB to browse"}; Configurable nolaterthan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "Latest acceptable timestamp of creation for the object"}; @@ -71,6 +77,7 @@ struct lambdaspincorrderived { Configurable centMax{"centMax", 80, "Maximum Centrality"}; // Lambda selection //////////// + Configurable harmonic{"harmonic", 1, "Harmonic delta phi"}; Configurable useweight{"useweight", 1, "Use weight"}; Configurable usePDGM{"usePDGM", 1, "Use PDG mass"}; Configurable checkDoubleStatus{"checkDoubleStatus", 0, "Check Double status"}; @@ -183,7 +190,7 @@ struct lambdaspincorrderived { if (std::abs(candidate1.lambdaEta() - candidate2.lambdaEta()) > etaMix) { return false; } - if (std::abs(RecoDecay::constrainAngle(candidate1.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(candidate2.lambdaPhi(), 0.0F)) > phiMix) { + if (std::abs(RecoDecay::constrainAngle(candidate1.lambdaPhi(), 0.0F, harmonic) - RecoDecay::constrainAngle(candidate2.lambdaPhi(), 0.0F, harmonic)) > phiMix) { return false; } if (std::abs(candidate1.lambdaMass() - candidate2.lambdaMass()) > massMix) { @@ -195,7 +202,7 @@ struct lambdaspincorrderived { void fillHistograms(int tag1, int tag2, const ROOT::Math::PtEtaPhiMVector& particle1, const ROOT::Math::PtEtaPhiMVector& particle2, const ROOT::Math::PtEtaPhiMVector& daughpart1, const ROOT::Math::PtEtaPhiMVector& daughpart2, - double centrality, int datatype) + double centrality, int datatype, float mixpairweight) { auto lambda1Mass = 0.0; @@ -230,41 +237,42 @@ struct lambdaspincorrderived { auto cosThetaDiff = -999.0; cosThetaDiff = proton1LambdaRF.Vect().Unit().Dot(proton2LambdaRF.Vect().Unit()); - double deltaPhi = std::abs(RecoDecay::constrainAngle(particle1Dummy.Phi(), 0.0F) - RecoDecay::constrainAngle(particle2Dummy.Phi(), 0.0F)); + double deltaPhi = std::abs(RecoDecay::constrainAngle(particle1Dummy.Phi(), 0.0F, harmonic) - RecoDecay::constrainAngle(particle2Dummy.Phi(), 0.0F, harmonic)); double deltaEta = particle1Dummy.Eta() - particle2Dummy.Eta(); double deltaR = TMath::Sqrt(deltaEta * deltaEta + deltaPhi * deltaPhi); if (datatype == 0) { - histos.fill(HIST("hPtYSame"), particle1.Pt(), particle1.Rapidity()); + mixpairweight = 1.0; + histos.fill(HIST("hPtYSame"), particle1.Pt(), particle1.Rapidity(), mixpairweight); if (tag1 == 0 && tag2 == 0) { - histos.fill(HIST("hSparseLambdaLambda"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR); - histos.fill(HIST("hLambdaSameForLL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F)); + histos.fill(HIST("hSparseLambdaLambda"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR, mixpairweight); + histos.fill(HIST("hLambdaSameForLL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F, harmonic), mixpairweight); } else if ((tag1 == 0 && tag2 == 1) || (tag1 == 1 && tag2 == 0)) { - histos.fill(HIST("hSparseLambdaAntiLambda"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR); - histos.fill(HIST("hLambdaSameForLAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F)); + histos.fill(HIST("hSparseLambdaAntiLambda"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR, mixpairweight); + histos.fill(HIST("hLambdaSameForLAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F, harmonic), mixpairweight); } else if (tag1 == 1 && tag2 == 1) { - histos.fill(HIST("hSparseAntiLambdaAntiLambda"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR); - histos.fill(HIST("hAntiLambdaSameForALAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F)); + histos.fill(HIST("hSparseAntiLambdaAntiLambda"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR, mixpairweight); + histos.fill(HIST("hAntiLambdaSameForALAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F, harmonic), mixpairweight); } } else if (datatype == 1) { - double weight1 = 1.0; - double weight2 = 1.0; - double weight3 = 1.0; + double weight1 = mixpairweight; + double weight2 = mixpairweight; + double weight3 = mixpairweight; if (useweight) { - weight1 = hweight1->GetBinContent(hweight1->FindBin(particle1.Pt(), particle1.Eta(), particle1.Phi())); - weight2 = hweight2->GetBinContent(hweight2->FindBin(particle1.Pt(), particle1.Eta(), particle1.Phi())); - weight3 = hweight3->GetBinContent(hweight3->FindBin(particle1.Pt(), particle1.Eta(), particle1.Phi())); + weight1 = mixpairweight * hweight1->GetBinContent(hweight1->FindBin(particle1.Pt(), particle1.Eta(), particle1.Phi())); + weight2 = mixpairweight * hweight2->GetBinContent(hweight2->FindBin(particle1.Pt(), particle1.Eta(), particle1.Phi())); + weight3 = mixpairweight * hweight3->GetBinContent(hweight3->FindBin(particle1.Pt(), particle1.Eta(), particle1.Phi())); } histos.fill(HIST("hPtYMix"), particle1.Pt(), particle1.Rapidity()); if (tag1 == 0 && tag2 == 0) { histos.fill(HIST("hSparseLambdaLambdaMixed"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR, weight1); - histos.fill(HIST("hLambdaMixForLL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F), weight1); + histos.fill(HIST("hLambdaMixForLL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F, harmonic), weight1); } else if ((tag1 == 0 && tag2 == 1) || (tag1 == 1 && tag2 == 0)) { histos.fill(HIST("hSparseLambdaAntiLambdaMixed"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR, weight2); - histos.fill(HIST("hLambdaMixForLAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F), weight2); + histos.fill(HIST("hLambdaMixForLAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F, harmonic), weight2); } else if (tag1 == 1 && tag2 == 1) { histos.fill(HIST("hSparseAntiLambdaAntiLambdaMixed"), particle1.M(), particle2.M(), cosThetaDiff, centrality, deltaR, weight3); - histos.fill(HIST("hAntiLambdaMixForALAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F), weight3); + histos.fill(HIST("hAntiLambdaMixForALAL"), particle1.Pt(), particle1.Eta(), RecoDecay::constrainAngle(particle1.Phi(), 0.0F, harmonic), weight3); } } } @@ -310,7 +318,7 @@ struct lambdaspincorrderived { } proton2 = ROOT::Math::PtEtaPhiMVector(v02.protonPt(), v02.protonEta(), v02.protonPhi(), o2::constants::physics::MassProton); lambda2 = ROOT::Math::PtEtaPhiMVector(v02.lambdaPt(), v02.lambdaEta(), v02.lambdaPhi(), v02.lambdaMass()); - histos.fill(HIST("deltaPhiSame"), std::abs(RecoDecay::constrainAngle(v0.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(v02.lambdaPhi(), 0.0F))); + histos.fill(HIST("deltaPhiSame"), std::abs(RecoDecay::constrainAngle(v0.lambdaPhi(), 0.0F, harmonic) - RecoDecay::constrainAngle(v02.lambdaPhi(), 0.0F, harmonic))); if (std::abs(lambda2.Rapidity()) > rapidity) { continue; } @@ -318,16 +326,16 @@ struct lambdaspincorrderived { continue; } if (v0.v0Status() == 0 && v02.v0Status() == 0) { - fillHistograms(0, 0, lambda, lambda2, proton, proton2, centrality, 0); + fillHistograms(0, 0, lambda, lambda2, proton, proton2, centrality, 0, 1.0); } if (v0.v0Status() == 0 && v02.v0Status() == 1) { - fillHistograms(0, 1, lambda, lambda2, proton, proton2, centrality, 0); + fillHistograms(0, 1, lambda, lambda2, proton, proton2, centrality, 0, 1.0); } if (v0.v0Status() == 1 && v02.v0Status() == 0) { - fillHistograms(1, 0, lambda2, lambda, proton2, proton, centrality, 0); + fillHistograms(1, 0, lambda2, lambda, proton2, proton, centrality, 0, 1.0); } if (v0.v0Status() == 1 && v02.v0Status() == 1) { - fillHistograms(1, 1, lambda, lambda2, proton, proton2, centrality, 0); + fillHistograms(1, 1, lambda, lambda2, proton, proton2, centrality, 0, 1.0); } } } @@ -388,7 +396,7 @@ struct lambdaspincorrderived { lambda = ROOT::Math::PtEtaPhiMVector(t3.lambdaPt(), t3.lambdaEta(), t3.lambdaPhi(), t3.lambdaMass()); proton2 = ROOT::Math::PtEtaPhiMVector(t2.protonPt(), t2.protonEta(), t2.protonPhi(), o2::constants::physics::MassProton); lambda2 = ROOT::Math::PtEtaPhiMVector(t2.lambdaPt(), t2.lambdaEta(), t2.lambdaPhi(), t2.lambdaMass()); - histos.fill(HIST("deltaPhiMix"), std::abs(RecoDecay::constrainAngle(t3.lambdaPhi(), 0.0F) - RecoDecay::constrainAngle(t2.lambdaPhi(), 0.0F))); + histos.fill(HIST("deltaPhiMix"), std::abs(RecoDecay::constrainAngle(t3.lambdaPhi(), 0.0F, harmonic) - RecoDecay::constrainAngle(t2.lambdaPhi(), 0.0F, harmonic))); if (std::abs(lambda.Rapidity()) > rapidity) { continue; } @@ -402,22 +410,109 @@ struct lambdaspincorrderived { continue; } if (t3.v0Status() == 0 && t2.v0Status() == 0) { - fillHistograms(0, 0, lambda, lambda2, proton, proton2, centrality, 1); + fillHistograms(0, 0, lambda, lambda2, proton, proton2, centrality, 1, 1.0); } if (t3.v0Status() == 0 && t2.v0Status() == 1) { - fillHistograms(0, 1, lambda, lambda2, proton, proton2, centrality, 1); + fillHistograms(0, 1, lambda, lambda2, proton, proton2, centrality, 1, 1.0); } if (t3.v0Status() == 1 && t2.v0Status() == 0) { - fillHistograms(1, 0, lambda2, lambda, proton2, proton, centrality, 1); + fillHistograms(1, 0, lambda2, lambda, proton2, proton, centrality, 1, 1.0); } if (t3.v0Status() == 1 && t2.v0Status() == 1) { - fillHistograms(1, 1, lambda, lambda2, proton, proton2, centrality, 1); + fillHistograms(1, 1, lambda, lambda2, proton, proton2, centrality, 1, 1.0); } } } // replacement track pair } // collision pair } PROCESS_SWITCH(lambdaspincorrderived, processME, "Process data ME", false); + + void processMEV2(EventCandidates const& collisions, AllTrackCandidates const& V0s) + { + auto nBins = colBinning.getAllBinsCount(); + std::vector>> eventPools(nBins); + + for (auto& collision1 : collisions) { + int bin = colBinning.getBin(std::make_tuple(collision1.posz(), collision1.cent())); + auto poolA = V0s.sliceBy(tracksPerCollisionV0, collision1.index()); + float centrality = collision1.cent(); + + // <<< CHANGED: map old collision index → set of (t2.idx, t3.idx) we've already filled + std::unordered_map>> seenMap; + + for (auto& [t1, t2] : soa::combinations(o2::soa::CombinationsFullIndexPolicy(poolA, poolA))) { + if (!selectionV0(t1) || !selectionV0(t2)) + continue; + if (t2.index() <= t1.index()) + continue; + if (t1.protonIndex() == t2.protonIndex()) + continue; + if (t1.pionIndex() == t2.pionIndex()) + continue; + + int mixes = 0; + for (auto it = eventPools[bin].rbegin(); it != eventPools[bin].rend() && mixes < nEvtMixing; ++it, ++mixes) { + int collision2idx = it->first; + AllTrackCandidates& poolB = it->second; + + int nRepl = 0; + for (auto& t3 : poolB) { + if (selectionV0(t3) && checkKinematics(t1, t3)) { + ++nRepl; + } + } + if (nRepl == 0) + continue; + float invN = 1.0f / float(nRepl); + + for (auto& t3 : poolB) { + if (!(selectionV0(t3) && checkKinematics(t1, t3))) { + continue; + } + if (collision1.index() == collision2idx) { + continue; + } + + // <<< CHANGED: dedupe (t2, t3) pairs per prior collision + auto key = std::make_pair(t2.index(), t3.index()); + auto& seen = seenMap[collision2idx]; + if (!seen.insert(key).second) { + continue; + } + + // reconstruct 4-vectors + auto proton = ROOT::Math::PtEtaPhiMVector(t3.protonPt(), t3.protonEta(), t3.protonPhi(), o2::constants::physics::MassProton); + auto lambda = ROOT::Math::PtEtaPhiMVector(t3.lambdaPt(), t3.lambdaEta(), t3.lambdaPhi(), t3.lambdaMass()); + auto proton2 = ROOT::Math::PtEtaPhiMVector(t2.protonPt(), t2.protonEta(), t2.protonPhi(), o2::constants::physics::MassProton); + auto lambda2 = ROOT::Math::PtEtaPhiMVector(t2.lambdaPt(), t2.lambdaEta(), t2.lambdaPhi(), t2.lambdaMass()); + + float dPhi = std::fabs(RecoDecay::constrainAngle(lambda.Phi(), 0.0F, harmonic) - RecoDecay::constrainAngle(lambda2.Phi(), 0.0F, harmonic)); + histos.fill(HIST("deltaPhiMix"), dPhi, invN); + + if (t3.v0Status() == 0 && t2.v0Status() == 0) { + fillHistograms(0, 0, lambda, lambda2, proton, proton2, centrality, 1, invN); + } + if (t3.v0Status() == 0 && t2.v0Status() == 1) { + fillHistograms(0, 1, lambda, lambda2, proton, proton2, centrality, 1, invN); + } + if (t3.v0Status() == 1 && t2.v0Status() == 0) { + fillHistograms(1, 0, lambda2, lambda, proton2, proton, centrality, 1, invN); + } + if (t3.v0Status() == 1 && t2.v0Status() == 1) { + fillHistograms(1, 1, lambda, lambda2, proton, proton2, centrality, 1, invN); + } + } + } // end mixing-event loop + } // end same-event pair loop + + auto sliced = V0s.sliceBy(tracksPerCollisionV0, collision1.index()); + eventPools[bin].emplace_back(collision1.index(), std::move(sliced)); + if ((int)eventPools[bin].size() > nEvtMixing) { + eventPools[bin].pop_front(); + } + } // end primary-event loop + } + PROCESS_SWITCH(lambdaspincorrderived, processMEV2, "Process data ME", false); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { From 3babdd04d188f0588721a6c55ce463b7d7d78ccb Mon Sep 17 00:00:00 2001 From: skundu692 <86804743+skundu692@users.noreply.github.com> Date: Fri, 18 Jul 2025 19:25:22 +0200 Subject: [PATCH 12/13] fix meaglinter error --- PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx index 17ab57dbd8c..e3b6beacf76 100644 --- a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx +++ b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx @@ -44,6 +44,7 @@ #include #include // <<< CHANGED: for seenMap #include +#include // o2 includes. #include "CCDB/BasicCCDBManager.h" @@ -463,7 +464,7 @@ struct lambdaspincorrderived { } if (nRepl == 0) continue; - float invN = 1.0f / float(nRepl); + float invN = 1.0f / static_cast(nRepl); for (auto& t3 : poolB) { if (!(selectionV0(t3) && checkKinematics(t1, t3))) { @@ -507,7 +508,7 @@ struct lambdaspincorrderived { auto sliced = V0s.sliceBy(tracksPerCollisionV0, collision1.index()); eventPools[bin].emplace_back(collision1.index(), std::move(sliced)); - if ((int)eventPools[bin].size() > nEvtMixing) { + if (static_cast(eventPools[bin].size()) > nEvtMixing) { eventPools[bin].pop_front(); } } // end primary-event loop From d23b3232259cc7f30c8500a52f67a9433a7f8d27 Mon Sep 17 00:00:00 2001 From: skundu692 <86804743+skundu692@users.noreply.github.com> Date: Fri, 18 Jul 2025 19:28:43 +0200 Subject: [PATCH 13/13] clang error fix --- PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx index e3b6beacf76..edd786cc29b 100644 --- a/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx +++ b/PWGLF/Tasks/Strangeness/lambdaspincorrderived.cxx @@ -43,8 +43,8 @@ #include #include #include // <<< CHANGED: for seenMap -#include #include +#include // o2 includes. #include "CCDB/BasicCCDBManager.h"