From dda8567e9fc183d4f419c2699930ae19ac409c6f Mon Sep 17 00:00:00 2001 From: Baptiste Ravina <baptiste.ravina@cern.ch> Date: Tue, 19 Mar 2024 17:42:00 +0100 Subject: [PATCH] CPAlgorithms: add truth-b-label to jets for JES uncertainties CPAlgorithms: add truth-b-label to jets for JES uncertainties --- .../JetAnalysisAlgorithms/JetUncertaintiesAlg.h | 7 +++++++ .../JetAnalysisAlgorithms/Root/JetUncertaintiesAlg.cxx | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/JetAnalysisAlgorithms/JetUncertaintiesAlg.h b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/JetAnalysisAlgorithms/JetUncertaintiesAlg.h index eb3cf87fa7c2..a1f324570a1a 100644 --- a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/JetAnalysisAlgorithms/JetUncertaintiesAlg.h +++ b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/JetAnalysisAlgorithms/JetUncertaintiesAlg.h @@ -15,6 +15,8 @@ #include <SystematicsHandles/SysCopyHandle.h> #include <SystematicsHandles/SysListHandle.h> +#include <optional> + namespace CP { /// \brief an algorithm for calling \ref ICPJetUncertaintiesTool @@ -69,6 +71,11 @@ namespace CP private: std::vector<CP::SystematicSet> m_systematicsVectorOnlyJERPseudoData; + private: + Gaudi::Property<std::string> m_isJESbtag {this, "isJESbtagLabel", "IsBjet", "The label to apply to truth b-tagged jets, for JES flavour uncertainties"}; + std::optional<SG::AuxElement::Decorator<char>> m_decIsJESbtag; + std::optional<SG::AuxElement::Accessor<int>> m_accTruthLabel; + }; } diff --git a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/Root/JetUncertaintiesAlg.cxx b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/Root/JetUncertaintiesAlg.cxx index c75a456da353..a489bc249f2f 100644 --- a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/Root/JetUncertaintiesAlg.cxx +++ b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/Root/JetUncertaintiesAlg.cxx @@ -44,6 +44,10 @@ namespace CP ANA_CHECK (m_systematicsList.initialize()); ANA_CHECK (m_outOfValidity.initialize()); + if (!m_isJESbtag.empty()) m_decIsJESbtag.emplace(m_isJESbtag); + const std::string labelB = "PartonTruthLabelID"; + m_accTruthLabel.emplace(labelB); + // CPU-optimisation: differentiate the systematics for the two tools // in initialisation rather than execution for (const auto&sys : m_systematicsList.systematicsVector()) @@ -70,6 +74,10 @@ namespace CP ANA_CHECK (m_jetHandle.getCopy (jets, sys)); for (xAOD::Jet *jet : *jets) { + // we need to tell the JES flavour uncertainty tool whether each jet is b-tagged at truth-level + if (m_decIsJESbtag) { + (*m_decIsJESbtag)(*jet) = (*m_accTruthLabel)(*jet) == 5 ; + } if (m_preselection.getBool (*jet, sys)) { ANA_CHECK_CORRECTION (m_outOfValidity, *jet, m_uncertaintiesTool->applyCorrection (*jet)); -- GitLab