diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2.h index c769841ca22e8336db2a5daa8749cc4d66993f48..9e69abde94c14887ea6254c90aae21715364e920 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2.h @@ -39,6 +39,7 @@ namespace FlavorTagDiscriminants { std::vector<internal::VarFromJet> m_varsFromJet; std::vector<internal::TrackSequenceBuilder> m_trackSequenceBuilders; std::map<std::string, internal::OutNode> m_decorators; + float m_defaultValue; FTagDataDependencyNames m_dataDependencyNames; diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2HighLevel.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2HighLevel.h index d6f135015d7320458ab332513ab43055db85e08e..8724497ad21ce186f5dbb46d6de2681bed6aa7ab 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2HighLevel.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2HighLevel.h @@ -16,6 +16,7 @@ #include <memory> #include <string> #include <map> +#include <cmath> namespace FlavorTagDiscriminants { @@ -27,7 +28,8 @@ namespace FlavorTagDiscriminants { DL2HighLevel(const std::string& nn_file_name, FlipTagConfig = FlipTagConfig::STANDARD, std::map<std::string, std::string> remap_scalar = {}, - TrackLinkType = TrackLinkType::TRACK_PARTICLE); + TrackLinkType = TrackLinkType::TRACK_PARTICLE, + float default_output_value = NAN); DL2HighLevel(DL2HighLevel&&); ~DL2HighLevel(); void decorate(const xAOD::BTagging& btag) const; diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2Tool.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2Tool.h index 9cb926e1f5b75f101aef2de132c680ff64707c94..25ad36d5e099b8ca56d539ea28ff5aab176cb87a 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2Tool.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2Tool.h @@ -19,6 +19,7 @@ namespace FlavorTagDiscriminants { std::string flipTagConfig; std::map<std::string,std::string> variableRemapping; std::string trackLinkType; + float default_output_value = NAN; }; class DL2Tool : public asg::AsgTool, diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DataPrepUtilities.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DataPrepUtilities.h index e57caa57e51b675f24b2c768d08e88c2f51596fd..b9d478da21c9d48824c6034fd0b36644896366a2 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DataPrepUtilities.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DataPrepUtilities.h @@ -73,6 +73,7 @@ namespace FlavorTagDiscriminants { std::string track_link_name; std::map<std::string,std::string> remap_scalar; TrackLinkType track_link_type; + float default_output_value; }; diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/GNNTool.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/GNNTool.h index 6b4fd84d31faddfbee71b9fd378049824bcc6cd7..7b4684cf5198304eb7b435ecd7b94a1e1bb5cb18 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/GNNTool.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/GNNTool.h @@ -8,7 +8,7 @@ // Tool includes #include "AsgTools/AsgTool.h" #include "FlavorTagDiscriminants/IBTagDecorator.h" -#include "FlavorTagDiscriminants/IJetTagDecorator.h" +#include "FlavorTagDiscriminants/IJetTagConditionalDecorator.h" #include "FlavorTagDiscriminants/FlipTagEnums.h" #include "FlavorTagDiscriminants/FTagDataDependencyNames.h" @@ -33,6 +33,7 @@ namespace FlavorTagDiscriminants { std::string flipTagConfig; std::map<std::string,std::string> variableRemapping; std::string trackLinkType; + float default_output_value = NAN; }; // @@ -40,10 +41,10 @@ namespace FlavorTagDiscriminants { // using GNN based taggers class GNNTool : public asg::AsgTool, virtual public IBTagDecorator, - virtual public IJetTagDecorator + virtual public IJetTagConditionalDecorator { - ASG_TOOL_CLASS2(GNNTool, IBTagDecorator, IJetTagDecorator) + ASG_TOOL_CLASS2(GNNTool, IBTagDecorator, IJetTagConditionalDecorator) public: GNNTool(const std::string& name); ~GNNTool(); @@ -52,9 +53,11 @@ namespace FlavorTagDiscriminants { virtual void decorate(const xAOD::BTagging& btag) const override; virtual void decorate(const xAOD::Jet& jet) const override; - + virtual void decorateWithDefaults(const xAOD::Jet& jet) const override; void decorate(const xAOD::Jet& jet, const SG::AuxElement& decorated) const; + + virtual std::set<std::string> getDecoratorKeys() const override; virtual std::set<std::string> getAuxInputKeys() const override; virtual std::set<std::string> getConstituentAuxInputKeys() const override; diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2.cxx index c3de5842465218475209c96b20340b498217824c..5e279937bb9e86d82978086684ac588e4e182e06 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2.cxx @@ -26,7 +26,8 @@ namespace FlavorTagDiscriminants { m_jetLink(jetLinkName), m_input_node_name(""), m_graph(new lwt::LightweightGraph(graph_config,graph_config.outputs.begin()->first)), - m_variable_cleaner(nullptr) + m_variable_cleaner(nullptr), + m_defaultValue(options.default_output_value) { // set up inputs if (graph_config.inputs.size() > 1) { @@ -71,7 +72,7 @@ namespace FlavorTagDiscriminants { for (const auto& dec: m_decorators) { for (const auto& node: dec.second) { // save something that is clearly wrong - node.second(jet) = NAN; + node.second(jet) = m_defaultValue; } } } diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2HighLevel.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2HighLevel.cxx index 52ccd1adf6e10f938f9e8064eaad45e9d8c88821..ebc1b7c1f87dae88e5cd397fea02fd8116f977af 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2HighLevel.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2HighLevel.cxx @@ -24,7 +24,8 @@ namespace FlavorTagDiscriminants { DL2HighLevel::DL2HighLevel(const std::string& nn_file_name, FlipTagConfig flip_config, std::map<std::string,std::string> remap_scalar, - TrackLinkType track_link_type): + TrackLinkType track_link_type, + float default_output_value): m_dl2(nullptr) { // get the graph @@ -41,6 +42,7 @@ namespace FlavorTagDiscriminants { auto [input_config, trk_config, options] = dataprep::createGetterConfig( config, flip_config, remap_scalar, track_link_type); + options.default_output_value = default_output_value; m_dl2.reset( new DL2( diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2Tool.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2Tool.cxx index 7731212030cb08e708712b254df3785228238003..c2da503457cbb591b910d75d02f51d66ddd101bc 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2Tool.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2Tool.cxx @@ -16,6 +16,7 @@ namespace FlavorTagDiscriminants { declareProperty("flipTagConfig", m_props.flipTagConfig); declareProperty("variableRemapping", m_props.variableRemapping); declareProperty("trackLinkType", m_props.trackLinkType); + declareProperty("defaultOutputValue", m_props.default_output_value); } DL2Tool::~DL2Tool() {} diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DataPrepUtilities.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DataPrepUtilities.cxx index f0d6f326e45dc9aa7cd366e8b8335b67ff566e36..0cb41f923df97b33ece2c5e38c50ed83ff79784d 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DataPrepUtilities.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DataPrepUtilities.cxx @@ -216,6 +216,7 @@ namespace FlavorTagDiscriminants { flip = FlipTagConfig::STANDARD; track_link_name = "BTagTrackToJetAssociator"; track_link_type = TrackLinkType::TRACK_PARTICLE; + default_output_value = NAN; } // ________________________________________________________________________ diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/GNNTool.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/GNNTool.cxx index 2ac2f0f001e2df08723aa98e81b13fc423210186..0736036aab14231f3f42389c1cfd81aa0f8fb8a6 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/GNNTool.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/GNNTool.cxx @@ -32,8 +32,9 @@ namespace FlavorTagDiscriminants { "user-defined mapping to rename the vars stored in the NN"); declareProperty("trackLinkType", m_props.trackLinkType, "access tracks as IParticleContainer or as TrackParticleContainer"); + declareProperty("defaultOutputValue", m_props.default_output_value); } - + GNNTool::~GNNTool() {} StatusCode GNNTool::initialize() { @@ -93,6 +94,13 @@ namespace FlavorTagDiscriminants { void GNNTool::decorate(const xAOD::Jet& jet) const { decorate(jet, jet); } + void GNNTool::decorateWithDefaults(const xAOD::Jet& jet) const { + for (const auto& dec: m_decorators) { + for (const auto& node: dec.second) { + node.second(jet) = m_props.default_output_value; + } + } + } void GNNTool::decorate(const xAOD::Jet& jet, const SG::AuxElement& btag) const { diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/BjetFlavourTaggingConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/BjetFlavourTaggingConfiguration.py index 0caf664d77aa76060e958ce66fd1928fac7c1e90..ad0682abd82cdd41a8a3d3ab5cfb16a2a32c6caa 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/BjetFlavourTaggingConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Bjet/BjetFlavourTaggingConfiguration.py @@ -190,6 +190,7 @@ def getFastFlavourTagging( flags, inputJets, inputVertex, inputTracks, isPFlow=F # note that the tracks are associated to the jet as # and IParticle container. trackLinkType='IPARTICLE', + defaultOutputValue=0 ), ) )