From 9e787cbc26051e116c7fa84c508f5bfcaccc5e62 Mon Sep 17 00:00:00 2001 From: Gijs van Weelden <55794847+GijsvWeelden@users.noreply.github.com> Date: Mon, 25 Aug 2025 12:02:18 +0200 Subject: [PATCH 1/2] [PWGJE] V0 QA Reconstruction efficiency: * Fill pT of generated V0s in hists for reconstructed V0s * Check rapidity, isPrimary, has_daughters for all generated V0s Weighted/Subtracted jet finder: * Add inclusive V0 hists for debugging purposes * Moved hist filling into functions V0 Track QA: * Added event selection * Added event histogram --- PWGJE/Tasks/v0QA.cxx | 376 ++++++++++++++++++++++++++++++------------- 1 file changed, 260 insertions(+), 116 deletions(-) diff --git a/PWGJE/Tasks/v0QA.cxx b/PWGJE/Tasks/v0QA.cxx index 8b79b780ae4..a7f58f793f2 100644 --- a/PWGJE/Tasks/v0QA.cxx +++ b/PWGJE/Tasks/v0QA.cxx @@ -254,6 +254,11 @@ struct V0QA { } if (doprocessTestWeightedJetFinder) { registry.add("tests/weighted/hEvents", "Events", {HistType::kTH1D, {{2, 0.0f, 2.0f}}}); + registry.add("tests/weighted/V0PtEtaPhi", "V0 Pt Eta Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/weighted/K0SPtEtaPhi", "K0S Pt Eta Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/weighted/LambdaPtEtaPhi", "Lambda Pt Eta Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/weighted/AntiLambdaPtEtaPhi", "AntiLambda Pt Eta Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/weighted/JetPtEtaPhi", "Jet Pt, Eta, Phi", HistType::kTH3D, {axisJetPt, axisEta, axisPhi}); registry.add("tests/weighted/JetPtEtaV0Pt", "Jet Pt, Eta, V0 Pt", HistType::kTH3D, {axisJetPt, axisEta, axisV0Pt}); registry.add("tests/weighted/JetPtEtaV0Z", "Jet Pt, Eta, V0 Z", HistType::kTH3D, {axisJetPt, axisEta, axisV0Z}); @@ -266,6 +271,15 @@ struct V0QA { } if (doprocessTestSubtractedJetFinder) { registry.add("tests/hEvents", "Events", {HistType::kTH1D, {{2, 0.0f, 2.0f}}}); + registry.add("tests/nosub/V0PtEtaPhi", "V0 Pt, Eta, Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/nosub/K0SPtEtaPhi", "K0S Pt, Eta, Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/nosub/LambdaPtEtaPhi", "Lambda Pt, Eta, Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/nosub/AntiLambdaPtEtaPhi", "AntiLambda Pt, Eta, Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/sub/V0PtEtaPhi", "V0 Pt, Eta, Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/sub/K0SPtEtaPhi", "K0S Pt, Eta, Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/sub/LambdaPtEtaPhi", "Lambda Pt, Eta, Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/sub/AntiLambdaPtEtaPhi", "AntiLambda Pt, Eta, Phi", HistType::kTH3D, {axisV0Pt, axisEta, axisPhi}); + registry.add("tests/nosub/JetPtEtaPhi", "Jet Pt, Eta, Phi", HistType::kTH3D, {axisJetPt, axisEta, axisPhi}); registry.add("tests/nosub/JetPtEtaV0Pt", "Jet Pt, Eta, V0 Pt", HistType::kTH3D, {axisJetPt, axisEta, axisV0Pt}); registry.add("tests/nosub/JetPtEtaV0Z", "Jet Pt, Eta, V0 Z", HistType::kTH3D, {axisJetPt, axisEta, axisV0Z}); @@ -287,6 +301,7 @@ struct V0QA { registry.add("tests/sub/JetPtEtaAntiLambdaZ", "Jet Pt, Eta, AntiLambda Z", HistType::kTH3D, {axisJetPt, axisEta, axisV0Z}); } if (doprocessV0TrackQA) { + registry.add("tracks/hEvents", "evts", {HistType::kTH1D, {{2, 0.0f, 2.0f}}}); registry.add("tracks/Pos", "pos", HistType::kTHnSparseD, {axisV0Pt, axisV0Pt, axisEta, axisPhi}); registry.add("tracks/Neg", "neg", HistType::kTHnSparseD, {axisV0Pt, axisV0Pt, axisEta, axisPhi}); registry.add("tracks/Pt", "pt", HistType::kTHnSparseD, {axisV0Pt, axisV0Pt, axisV0Pt, axisPtDiff, axisPtRelDiff}); @@ -481,6 +496,24 @@ struct V0QA { auto daughters = particle.daughtersIds(); return ((negId == daughters[0] && posId == daughters[1]) || (posId == daughters[0] && negId == daughters[1])); } + template + bool genV0PassesEfficiencyCuts(T const& pv0) + { + if (!pv0.has_daughters() || !pv0.isPhysicalPrimary()) + return false; + if (std::abs(pv0.y()) > yPartMax) + return false; + + return true; + } + template + bool recV0PassesEfficiencyCuts(T const& pv0) + { + if (!v0.has_mcParticle() || v0.isRejectedCandidate()) + return false; + + return true; + } template bool hasITSHit(T const& track, int layer) @@ -489,25 +522,34 @@ struct V0QA { return (track.itsClusterMap() & (1 << ibit)); } - template - void fillMcDV0(T const& v0, bool correctCollision, double weight) + bool isV0RandomlyRejected() { - int pdg = v0.mcParticle().pdgCode(); + return (gRandom->Uniform() > v0Fraction); + } + + template + void fillMcDV0(T const& v0, U const& pv0, bool correctCollision, double weight) + { + int pdg = pv0.pdgCode(); + double pt = pv0.pt(); + double eta = v0.eta(); + double radius = v0.v0radius(); + if (std::abs(pdg) == PDG_t::kK0Short) { - registry.fill(HIST("inclusive/K0SPtEtaMass"), v0.pt(), v0.eta(), v0.mK0Short(), weight); - registry.fill(HIST("inclusive/InvMassK0STrue"), v0.pt(), v0.v0radius(), v0.mK0Short(), weight); + registry.fill(HIST("inclusive/K0SPtEtaMass"), pt, eta, v0.mK0Short(), weight); + registry.fill(HIST("inclusive/InvMassK0STrue"), pt, radius, v0.mK0Short(), weight); if (!correctCollision) - registry.fill(HIST("inclusive/K0SPtEtaMassWrongCollision"), v0.pt(), v0.eta(), v0.mK0Short(), weight); + registry.fill(HIST("inclusive/K0SPtEtaMassWrongCollision"), pt, eta, v0.mK0Short(), weight); } else if (pdg == PDG_t::kLambda0) { - registry.fill(HIST("inclusive/LambdaPtEtaMass"), v0.pt(), v0.eta(), v0.mLambda(), weight); - registry.fill(HIST("inclusive/InvMassLambdaTrue"), v0.pt(), v0.v0radius(), v0.mLambda(), weight); + registry.fill(HIST("inclusive/LambdaPtEtaMass"), pt, eta, v0.mLambda(), weight); + registry.fill(HIST("inclusive/InvMassLambdaTrue"), pt, radius, v0.mLambda(), weight); if (!correctCollision) - registry.fill(HIST("inclusive/LambdaPtEtaMassWrongCollision"), v0.pt(), v0.eta(), v0.mLambda(), weight); + registry.fill(HIST("inclusive/LambdaPtEtaMassWrongCollision"), pt, eta, v0.mLambda(), weight); } else if (pdg == PDG_t::kLambda0Bar) { - registry.fill(HIST("inclusive/AntiLambdaPtEtaMass"), v0.pt(), v0.eta(), v0.mAntiLambda(), weight); - registry.fill(HIST("inclusive/InvMassAntiLambdaTrue"), v0.pt(), v0.v0radius(), v0.mAntiLambda(), weight); + registry.fill(HIST("inclusive/AntiLambdaPtEtaMass"), pt, eta, v0.mAntiLambda(), weight); + registry.fill(HIST("inclusive/InvMassAntiLambdaTrue"), pt, radius, v0.mAntiLambda(), weight); if (!correctCollision) - registry.fill(HIST("inclusive/AntiLambdaPtEtaMassWrongCollision"), v0.pt(), v0.eta(), v0.mAntiLambda(), weight); + registry.fill(HIST("inclusive/AntiLambdaPtEtaMassWrongCollision"), pt, eta, v0.mAntiLambda(), weight); } } @@ -519,60 +561,69 @@ struct V0QA { registry.fill(HIST("jets/JetsPtEta"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), weight); } } - template - void fillMcDV0InJets(T const& mcdjet, U const& v0, bool correctCollision, double weight) + template + void fillMcDV0InJets(T const& mcdjet, U const& v0, V const& pv0, bool correctCollision, double weight) { - int pdg = v0.mcParticle().pdgCode(); - double z = v0.pt() / mcdjet.pt(); + int pdg = pv0.pdgCode(); + double pt = pv0.pt(); + double ptjet = mcdjet.pt(); + double eta = mcdjet.eta(); + double z = pt / ptjet; + if (std::abs(pdg) == PDG_t::kK0Short) { - registry.fill(HIST("jets/JetPtEtaK0SPt"), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetPtEtaK0SZ"), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetPtEtaK0SPt"), ptjet, eta, pt, weight); + registry.fill(HIST("jets/JetPtEtaK0SZ"), ptjet, eta, z, weight); if (!correctCollision) { - registry.fill(HIST("jets/JetPtEtaK0SPtWrongCollision"), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetPtEtaK0SZWrongCollision"), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetPtEtaK0SPtWrongCollision"), ptjet, eta, pt, weight); + registry.fill(HIST("jets/JetPtEtaK0SZWrongCollision"), ptjet, eta, z, weight); } } else if (pdg == PDG_t::kLambda0) { - registry.fill(HIST("jets/JetPtEtaLambdaPt"), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetPtEtaLambdaZ"), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetPtEtaLambdaPt"), ptjet, eta, pt, weight); + registry.fill(HIST("jets/JetPtEtaLambdaZ"), ptjet, eta, z, weight); if (!correctCollision) { - registry.fill(HIST("jets/JetPtEtaLambdaPtWrongCollision"), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetPtEtaLambdaZWrongCollision"), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetPtEtaLambdaPtWrongCollision"), ptjet, eta, pt, weight); + registry.fill(HIST("jets/JetPtEtaLambdaZWrongCollision"), ptjet, eta, z, weight); } } else if (pdg == PDG_t::kLambda0Bar) { - registry.fill(HIST("jets/JetPtEtaAntiLambdaPt"), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetPtEtaAntiLambdaZ"), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetPtEtaAntiLambdaPt"), ptjet, eta, pt, weight); + registry.fill(HIST("jets/JetPtEtaAntiLambdaZ"), ptjet, eta, z, weight); if (!correctCollision) { - registry.fill(HIST("jets/JetPtEtaAntiLambdaPtWrongCollision"), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetPtEtaAntiLambdaZWrongCollision"), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetPtEtaAntiLambdaPtWrongCollision"), ptjet, eta, pt, weight); + registry.fill(HIST("jets/JetPtEtaAntiLambdaZWrongCollision"), ptjet, eta, z, weight); } } } - template - void fillMcDV0InMatchedJets(T const& mcpjet, U const& mcdjet, V const& v0, bool correctCollision, double weight) + template + void fillMcDV0InMatchedJets(T const& mcpjet, U const& mcdjet, V const& v0, W const& pv0, bool correctCollision, double weight) { - int pdg = v0.mcParticle().pdgCode(); - double z = v0.pt() / mcdjet.pt(); + int pdg = pv0.pdgCode(); + double ptjetmcp = mcpjet.pt(); + double ptjetmcd = mcdjet.pt(); + double eta = mcdjet.eta(); + double pt = pv0.pt(); + double z = pt / ptjetmcp; + if (std::abs(pdg) == PDG_t::kK0Short) { - registry.fill(HIST("jets/JetsPtEtaK0SPt"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetsPtEtaK0SZ"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetsPtEtaK0SPt"), ptjetmcp, ptjetmcd, eta, pt, weight); + registry.fill(HIST("jets/JetsPtEtaK0SZ"), ptjetmcp, ptjetmcd, eta, z, weight); if (!correctCollision) { - registry.fill(HIST("jets/JetsPtEtaK0SPtWrongCollision"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetsPtEtaK0SZWrongCollision"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetsPtEtaK0SPtWrongCollision"), ptjetmcp, ptjetmcd, eta, pt, weight); + registry.fill(HIST("jets/JetsPtEtaK0SZWrongCollision"), ptjetmcp, ptjetmcd, eta, z, weight); } } else if (pdg == PDG_t::kLambda0) { - registry.fill(HIST("jets/JetsPtEtaLambdaPt"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetsPtEtaLambdaZ"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetsPtEtaLambdaPt"), ptjetmcp, ptjetmcd, eta, pt, weight); + registry.fill(HIST("jets/JetsPtEtaLambdaZ"), ptjetmcp, ptjetmcd, eta, z, weight); if (!correctCollision) { - registry.fill(HIST("jets/JetsPtEtaLambdaPtWrongCollision"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetsPtEtaLambdaZWrongCollision"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetsPtEtaLambdaPtWrongCollision"), ptjetmcp, ptjetmcd, eta, pt, weight); + registry.fill(HIST("jets/JetsPtEtaLambdaZWrongCollision"), ptjetmcp, ptjetmcd, eta, z, weight); } } else if (pdg == PDG_t::kLambda0Bar) { - registry.fill(HIST("jets/JetsPtEtaAntiLambdaPt"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetsPtEtaAntiLambdaZ"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetsPtEtaAntiLambdaPt"), ptjetmcp, ptjetmcd, eta, pt, weight); + registry.fill(HIST("jets/JetsPtEtaAntiLambdaZ"), ptjetmcp, ptjetmcd, eta, z, weight); if (!correctCollision) { - registry.fill(HIST("jets/JetsPtEtaAntiLambdaPtWrongCollision"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), v0.pt(), weight); - registry.fill(HIST("jets/JetsPtEtaAntiLambdaZWrongCollision"), mcpjet.pt(), mcdjet.pt(), mcdjet.eta(), z, weight); + registry.fill(HIST("jets/JetsPtEtaAntiLambdaPtWrongCollision"), ptjetmcp, ptjetmcd, eta, pt, weight); + registry.fill(HIST("jets/JetsPtEtaAntiLambdaZWrongCollision"), ptjetmcp, ptjetmcd, eta, z, weight); } } } @@ -618,6 +669,121 @@ struct V0QA { } } + template + void fillWeightedJetFinderInclusiveV0(T const& v0) + { + registry.fill(HIST("tests/weighted/V0PtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + if (v0.isK0SCandidate()) + registry.fill(HIST("tests/weighted/K0SPtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + if (v0.isLambdaCandidate()) + registry.fill(HIST("tests/weighted/LambdaPtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + if (v0.isAntiLambdaCandidate()) + registry.fill(HIST("tests/weighted/AntiLambdaPtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + } + + template + void fillWeightedJetFinderJet(T const& jet) + { + registry.fill(HIST("tests/weighted/JetPtEtaPhi"), jet.pt(), jet.eta(), jet.phi()); + } + + template + void fillWeightedJetFinderV0InJet(T const& jet, U const& v0) + { + double z = v0.pt() / jet.pt(); + registry.fill(HIST("tests/weighted/JetPtEtaV0Pt"), jet.pt(), jet.eta(), v0.pt()); + registry.fill(HIST("tests/weighted/JetPtEtaV0Z"), jet.pt(), jet.eta(), z); + + if (v0.isK0SCandidate()) { + registry.fill(HIST("tests/weighted/JetPtEtaK0SPt"), jet.pt(), jet.eta(), v0.pt()); + registry.fill(HIST("tests/weighted/JetPtEtaK0SZ"), jet.pt(), jet.eta(), z); + } + if (v0.isLambdaCandidate()) { + registry.fill(HIST("tests/weighted/JetPtEtaLambdaPt"), jet.pt(), jet.eta(), v0.pt()); + registry.fill(HIST("tests/weighted/JetPtEtaLambdaZ"), jet.pt(), jet.eta(), z); + } + if (v0.isAntiLambdaCandidate()) { + registry.fill(HIST("tests/weighted/JetPtEtaAntiLambdaPt"), jet.pt(), jet.eta(), v0.pt()); + registry.fill(HIST("tests/weighted/JetPtEtaAntiLambdaZ"), jet.pt(), jet.eta(), z); + } + } + + template + void fillSubtractedJetFinderInclusiveV0(T const& v0) + { + bool randomlyRejected = isV0RandomlyRejected(); + + registry.fill(HIST("tests/nosub/V0PtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + if (!randomlyRejected) + registry.fill(HIST("tests/sub/V0PtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + + if (v0.isK0SCandidate()) { + registry.fill(HIST("tests/nosub/K0SPtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + if (!randomlyRejected) + registry.fill(HIST("tests/sub/K0SPtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + } + if (v0.isLambdaCandidate()) { + registry.fill(HIST("tests/nosub/LambdaPtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + if (!randomlyRejected) + registry.fill(HIST("tests/sub/LambdaPtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + } + if (v0.isAntiLambdaCandidate()) { + registry.fill(HIST("tests/nosub/AntiLambdaPtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + if (!randomlyRejected) + registry.fill(HIST("tests/sub/AntiLambdaPtEtaPhi"), v0.pt(), v0.eta(), v0.phi()); + } + } + + template + void fillSubtractedJetFinderJetNoSubtraction(T const& jet) + { + registry.fill(HIST("tests/nosub/JetPtEtaPhi"), jet.pt(), jet.eta(), jet.phi()); + } + + template + void fillSubtractedJetFinderV0InJetNoSubtraction(T const& jet, U const& v0) + { + double z = v0.pt() / jet.pt(); + registry.fill(HIST("tests/nosub/JetPtEtaV0Pt"), jet.pt(), jet.eta(), v0.pt()); + registry.fill(HIST("tests/nosub/JetPtEtaV0Z"), jet.pt(), jet.eta(), z); + if (v0.isK0SCandidate()) { + registry.fill(HIST("tests/nosub/JetPtEtaK0SPt"), jet.pt(), jet.eta(), v0.pt()); + registry.fill(HIST("tests/nosub/JetPtEtaK0SZ"), jet.pt(), jet.eta(), z); + } + if (v0.isLambdaCandidate()) { + registry.fill(HIST("tests/nosub/JetPtEtaLambdaPt"), jet.pt(), jet.eta(), v0.pt()); + registry.fill(HIST("tests/nosub/JetPtEtaLambdaZ"), jet.pt(), jet.eta(), z); + } + if (v0.isAntiLambdaCandidate()) { + registry.fill(HIST("tests/nosub/JetPtEtaAntiLambdaPt"), jet.pt(), jet.eta(), v0.pt()); + registry.fill(HIST("tests/nosub/JetPtEtaAntiLambdaZ"), jet.pt(), jet.eta(), z); + } + } + + template + void fillSubtractedJetFinderJetSubtracted(T const& jet, double ptjetsub) + { + registry.fill(HIST("tests/sub/JetPtEtaPhi"), ptjetsub, jet.eta(), jet.phi()); + } + + void fillSubtractedJetFinderV0InJetSubtracted(const double ptjetsub, const double etajet, const double v0Pt, const int v0Type) + { + double z = v0Pt / ptjetsub; + registry.fill(HIST("tests/sub/JetPtEtaV0Pt"), ptjetsub, etajet, v0Pt); + registry.fill(HIST("tests/sub/JetPtEtaV0Z"), ptjetsub, etajet, z); + + if (v0Type == PDG_t::kK0Short) { + registry.fill(HIST("tests/sub/JetPtEtaK0SPt"), ptjetsub, etajet, v0Pt); + registry.fill(HIST("tests/sub/JetPtEtaK0SZ"), ptjetsub, etajet, z); + } else if (v0Type == PDG_t::kLambda0) { + registry.fill(HIST("tests/sub/JetPtEtaLambdaPt"), ptjetsub, etajet, v0Pt); + registry.fill(HIST("tests/sub/JetPtEtaLambdaZ"), ptjetsub, etajet, z); + } else if (v0Type == PDG_t::kLambda0Bar) { + registry.fill(HIST("tests/sub/JetPtEtaAntiLambdaPt"), ptjetsub, etajet, v0Pt); + registry.fill(HIST("tests/sub/JetPtEtaAntiLambdaZ"), ptjetsub, etajet, z); + } + } + template void fillTrackQa(V const& v0) { @@ -887,28 +1053,39 @@ struct V0QA { registry.fill(HIST("inclusive/hEvents"), 2.5, weight); for (const auto& v0 : v0s) { - if (!v0.has_mcParticle() || v0.isRejectedCandidate()) + if (!recV0PassesEfficiencyCuts(v0)) + continue; + + auto pv0 = v0.mcParticle(); + if (!genV0PassesEfficiencyCuts(pv0)) continue; bool correctCollision = (mcColl.mcCollisionId() == v0.mcParticle().mcCollisionId()); - fillMcDV0(v0, correctCollision, weight); + fillMcDV0(v0, pv0, correctCollision, weight); } // v0 loop for (const auto& mcdjet : mcdjets) { fillMcDJets(mcdjet, weight); + for (const auto& v0 : mcdjet.template candidates_as()) { - if (!v0.has_mcParticle() || v0.isRejectedCandidate()) + if (!recV0PassesEfficiencyCuts(v0)) + continue; + + auto pv0 = v0.mcParticle(); + if (!genV0PassesEfficiencyCuts(pv0)) continue; bool correctCollision = (mcColl.mcCollisionId() == v0.mcParticle().mcCollisionId()); - fillMcDV0InJets(mcdjet, v0, correctCollision, weight); + fillMcDV0InJets(mcdjet, v0, pv0, correctCollision, weight); for (const auto& mcpjet : mcdjet.template matchedJetGeo_as()) { - for (const auto& pv0 : mcpjet.template candidates_as()) { - if (!v0sAreMatched(v0, pv0, jTracks)) + for (const auto& pv0injet : mcpjet.template candidates_as()) { + if (!genV0PassesEfficiencyCuts(pv0injet)) + continue; + if (!v0sAreMatched(v0, pv0injet, jTracks)) continue; - fillMcDV0InMatchedJets(mcpjet, mcdjet, v0, correctCollision, weight); + fillMcDV0InMatchedJets(mcpjet, mcdjet, v0, pv0, correctCollision, weight); } // v0 particle loop } // mcpjet loop } // v0 loop @@ -939,9 +1116,7 @@ struct V0QA { registry.fill(HIST("inclusive/hMcEvents"), 2.5, weight); for (const auto& pv0 : pv0s) { - if (!pv0.has_daughters() || !pv0.isPhysicalPrimary()) - continue; - if (std::abs(pv0.y()) > yPartMax) + if (!genV0PassesEfficiencyCuts(pv0)) continue; fillMcPV0(pv0, weight); @@ -954,7 +1129,7 @@ struct V0QA { fillMcPJets(jet, weight); for (const auto& pv0 : jet.template candidates_as()) { - if (!pv0.has_daughters() || !pv0.isPhysicalPrimary()) + if (!genV0PassesEfficiencyCuts(pv0)) continue; fillMcPV0InJets(jet, pv0, weight); @@ -1302,7 +1477,7 @@ struct V0QA { PROCESS_SWITCH(V0QA, processFeeddownMatchedJets, "Jets feeddown", false); // Test the difference between excluding V0s from jet finding and subtracting V0s from jets afterwards - void processTestWeightedJetFinder(soa::Filtered::iterator const& jcoll, soa::Join const& jets, aod::CandidatesV0Data const&) + void processTestWeightedJetFinder(soa::Filtered::iterator const& jcoll, soa::Join const& jets, aod::CandidatesV0Data const& v0s) { registry.fill(HIST("tests/weighted/hEvents"), 0.5); if (!jetderiveddatautilities::selectCollision(jcoll, eventSelectionBits)) @@ -1310,36 +1485,27 @@ struct V0QA { registry.fill(HIST("tests/weighted/hEvents"), 1.5); + for (const auto& v0 : v0s) { + if (v0.isRejectedCandidate()) + continue; + + fillWeightedJetFinderInclusiveV0(v0); + } + for (const auto& jet : jets) { - registry.fill(HIST("tests/weighted/JetPtEtaPhi"), jet.pt(), jet.eta(), jet.phi()); + fillWeightedJetFinderJet(jet); for (const auto& v0 : jet.template candidates_as()) { if (v0.isRejectedCandidate()) continue; - double z = v0.pt() / jet.pt(); - - registry.fill(HIST("tests/weighted/JetPtEtaV0Pt"), jet.pt(), jet.eta(), v0.pt()); - registry.fill(HIST("tests/weighted/JetPtEtaV0Z"), jet.pt(), jet.eta(), z); - - if (v0.isK0SCandidate()) { - registry.fill(HIST("tests/weighted/JetPtEtaK0SPt"), jet.pt(), jet.eta(), v0.pt()); - registry.fill(HIST("tests/weighted/JetPtEtaK0SZ"), jet.pt(), jet.eta(), z); - } - if (v0.isLambdaCandidate()) { - registry.fill(HIST("tests/weighted/JetPtEtaLambdaPt"), jet.pt(), jet.eta(), v0.pt()); - registry.fill(HIST("tests/weighted/JetPtEtaLambdaZ"), jet.pt(), jet.eta(), z); - } - if (v0.isAntiLambdaCandidate()) { - registry.fill(HIST("tests/weighted/JetPtEtaAntiLambdaPt"), jet.pt(), jet.eta(), v0.pt()); - registry.fill(HIST("tests/weighted/JetPtEtaAntiLambdaZ"), jet.pt(), jet.eta(), z); - } + fillWeightedJetFinderV0InJet(jet, v0); } } } PROCESS_SWITCH(V0QA, processTestWeightedJetFinder, "Test weighted jet finder", false); - void processTestSubtractedJetFinder(soa::Filtered::iterator const& jcoll, soa::Join const& jets, aod::CandidatesV0Data const&) + void processTestSubtractedJetFinder(soa::Filtered::iterator const& jcoll, soa::Join const& jets, aod::CandidatesV0Data const& v0s) { registry.fill(HIST("tests/hEvents"), 0.5); if (!jetderiveddatautilities::selectCollision(jcoll, eventSelectionBits)) @@ -1347,33 +1513,24 @@ struct V0QA { registry.fill(HIST("tests/hEvents"), 1.5); + for (const auto& v0 : v0s) { + if (v0.isRejectedCandidate()) + continue; + + fillSubtractedJetFinderInclusiveV0(v0); + } + for (const auto& jet : jets) { - registry.fill(HIST("tests/nosub/JetPtEtaPhi"), jet.pt(), jet.eta(), jet.phi()); + fillSubtractedJetFinderJetNoSubtraction(jet); std::vector v0Pt; std::vector v0Type; double ptjetsub = jet.pt(); for (const auto& v0 : jet.template candidates_as()) { - double z = v0.pt() / jet.pt(); - - registry.fill(HIST("tests/nosub/JetPtEtaV0Pt"), jet.pt(), jet.eta(), v0.pt()); - registry.fill(HIST("tests/nosub/JetPtEtaV0Z"), jet.pt(), jet.eta(), z); + fillSubtractedJetFinderV0InJetNoSubtraction(jet, v0); - if (v0.isK0SCandidate()) { - registry.fill(HIST("tests/nosub/JetPtEtaK0SPt"), jet.pt(), jet.eta(), v0.pt()); - registry.fill(HIST("tests/nosub/JetPtEtaK0SZ"), jet.pt(), jet.eta(), z); - } - if (v0.isLambdaCandidate()) { - registry.fill(HIST("tests/nosub/JetPtEtaLambdaPt"), jet.pt(), jet.eta(), v0.pt()); - registry.fill(HIST("tests/nosub/JetPtEtaLambdaZ"), jet.pt(), jet.eta(), z); - } - if (v0.isAntiLambdaCandidate()) { - registry.fill(HIST("tests/nosub/JetPtEtaAntiLambdaPt"), jet.pt(), jet.eta(), v0.pt()); - registry.fill(HIST("tests/nosub/JetPtEtaAntiLambdaZ"), jet.pt(), jet.eta(), z); - } - - if (gRandom->Uniform() > v0Fraction) { // Rejected V0 + if (isV0RandomlyRejected()) { ptjetsub -= v0.pt(); } else { // Accepted V0 v0Pt.push_back(v0.pt()); @@ -1387,25 +1544,9 @@ struct V0QA { } } // V0s in jet loop - registry.fill(HIST("tests/sub/JetPtEtaPhi"), ptjetsub, jet.eta(), jet.phi()); + fillSubtractedJetFinderJetSubtracted(jet, ptjetsub); for (unsigned int i = 0; i < v0Pt.size(); ++i) { - int type = v0Type[i]; - double pt = v0Pt[i]; - double z = pt / ptjetsub; - - registry.fill(HIST("tests/sub/JetPtEtaV0Pt"), ptjetsub, jet.eta(), pt); - registry.fill(HIST("tests/sub/JetPtEtaV0Z"), ptjetsub, jet.eta(), z); - - if (type == PDG_t::kK0Short) { - registry.fill(HIST("tests/sub/JetPtEtaK0SPt"), ptjetsub, jet.eta(), pt); - registry.fill(HIST("tests/sub/JetPtEtaK0SZ"), ptjetsub, jet.eta(), z); - } else if (type == PDG_t::kLambda0) { - registry.fill(HIST("tests/sub/JetPtEtaLambdaPt"), ptjetsub, jet.eta(), pt); - registry.fill(HIST("tests/sub/JetPtEtaLambdaZ"), ptjetsub, jet.eta(), z); - } else if (type == PDG_t::kLambda0Bar) { - registry.fill(HIST("tests/sub/JetPtEtaAntiLambdaPt"), ptjetsub, jet.eta(), pt); - registry.fill(HIST("tests/sub/JetPtEtaAntiLambdaZ"), ptjetsub, jet.eta(), z); - } + fillSubtractedJetFinderV0InJetSubtracted(ptjetsub, jet.eta(), v0Pt[i], v0Type[i]); } // Accepted V0s in jet loop } // Jets loop } @@ -1413,11 +1554,14 @@ struct V0QA { using DaughterJTracks = soa::Join; using DaughterTracks = soa::Join; - void processV0TrackQA(aod::JetCollision const& /*jcoll*/, aod::CandidatesV0Data const& v0s, DaughterJTracks const&, DaughterTracks const&) + void processV0TrackQA(aod::JetCollision const& jcoll, aod::CandidatesV0Data const& v0s, DaughterJTracks const&, DaughterTracks const&) { - // if (!jetderiveddatautilities::selectCollision(jcoll, eventSelectionBits)) { - // return; - // } + registry.fill(HIST("tracks/hEvents"), 0.5); + if (!jetderiveddatautilities::selectCollision(jcoll, eventSelectionBits)) + return; + + registry.fill(HIST("tracks/hEvents"), 1.5); + for (const auto& v0 : v0s) { if (v0.isRejectedCandidate()) continue; From 1aeee6515a957c38d95c46e848623154d847c87e Mon Sep 17 00:00:00 2001 From: Gijs van Weelden <55794847+GijsvWeelden@users.noreply.github.com> Date: Mon, 1 Sep 2025 10:29:50 +0200 Subject: [PATCH 2/2] Fix unused parameters issue --- PWGJE/Tasks/v0QA.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGJE/Tasks/v0QA.cxx b/PWGJE/Tasks/v0QA.cxx index a7f58f793f2..c66bf164def 100644 --- a/PWGJE/Tasks/v0QA.cxx +++ b/PWGJE/Tasks/v0QA.cxx @@ -507,7 +507,7 @@ struct V0QA { return true; } template - bool recV0PassesEfficiencyCuts(T const& pv0) + bool recV0PassesEfficiencyCuts(T const& v0) { if (!v0.has_mcParticle() || v0.isRejectedCandidate()) return false; @@ -564,7 +564,7 @@ struct V0QA { template void fillMcDV0InJets(T const& mcdjet, U const& v0, V const& pv0, bool correctCollision, double weight) { - int pdg = pv0.pdgCode(); + int pdg = v0.mcParticle().pdgCode(); double pt = pv0.pt(); double ptjet = mcdjet.pt(); double eta = mcdjet.eta(); @@ -597,7 +597,7 @@ struct V0QA { template void fillMcDV0InMatchedJets(T const& mcpjet, U const& mcdjet, V const& v0, W const& pv0, bool correctCollision, double weight) { - int pdg = pv0.pdgCode(); + int pdg = v0.mcParticle().pdgCode(); double ptjetmcp = mcpjet.pt(); double ptjetmcd = mcdjet.pt(); double eta = mcdjet.eta();