Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
DL2.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 #include "lwtnn/LightweightGraph.hh"
9 #include "lwtnn/NanReplacer.hh"
10 
12 
13 namespace {
14  const std::string jetLinkName = "jetLink";
15 }
16 
17 
18 namespace FlavorTagDiscriminants {
19 
20  // DL2
21  //
22  // TODO: make this work with more input nodes
23  DL2::DL2(const lwt::GraphConfig& graph_config,
24  const std::vector<FTagInputConfig>& inputs,
25  const std::vector<ConstituentsInputConfig>& tracks_configs,
26  const FTagOptions& options):
27  m_jetLink(jetLinkName),
28  m_input_node_name(""),
29  m_graph(new lwt::LightweightGraph(graph_config,graph_config.outputs.begin()->first)),
30  m_variable_cleaner(nullptr),
31  m_defaultValue(options.default_output_value)
32  {
33  // set up inputs
34  if (graph_config.inputs.size() > 1) {
35  throw std::logic_error("We don't currently support graphs with "
36  "more than one input");
37  } else if (graph_config.inputs.size() == 1){
38  m_input_node_name = graph_config.inputs.at(0).name;
39  m_variable_cleaner.reset(new lwt::NanReplacer(
40  graph_config.inputs.at(0).defaults,
41  lwt::rep::all));
42  }
43 
44  auto [vb, vj, ds] = dataprep::createBvarGetters(inputs);
45  m_varsFromBTag = vb;
46  m_varsFromJet = vj;
48 
49  for (auto config : tracks_configs){
50  m_tracksLoaders.push_back(std::make_shared<TracksLoader>(config, options));
51  }
52 
53  auto [decorators, dd, rd] = dataprep::createDecorators(
54  graph_config, options);
56  m_decorators = decorators;
57 
58  auto [track_validity, is_defaults, ipdd, rc] = dataprep::createIpChecker(
59  graph_config, options);
60  m_invalid_track_checker = track_validity;
61  m_is_defaults = is_defaults;
62  m_dataDependencyNames += ipdd;
63 
64  // Update dependencies and used remap from the tracks loaders.
65  for (const auto& loader : m_tracksLoaders){
66  m_dataDependencyNames += loader->getDependencies();
67  std::set<std::string> used_remap = loader->getUsedRemap();
68  rd.merge(used_remap);
69  }
70  // check that all remapping was used
71  rd.merge(rc);
72  dataprep::checkForUnusedRemaps(options.remap_scalar, rd);
73  }
74 
75  void DL2::decorate(const xAOD::BTagging& btag) const {
76  auto jetLink = m_jetLink(btag);
77  if (!jetLink.isValid()) {
78  throw std::runtime_error("invalid jetLink");
79  }
80  const xAOD::Jet& jet = **jetLink;
81  decorate(jet, btag);
82  }
83  void DL2::decorate(const xAOD::Jet& jet) const {
84  decorate(jet, jet);
85  }
87  // save out things
88  for (const auto& dec: m_decorators) {
89  for (const auto& node: dec.second) {
90  // save something that is clearly wrong
91  node.second(jet) = m_defaultValue;
92  }
93  }
94  }
95 
96  void DL2::decorate(const xAOD::Jet& jet, const SG::AuxElement& btag) const {
97  using namespace internal;
98  std::vector<NamedVar> vvec;
99  for (const auto& getter: m_varsFromBTag) {
100  vvec.push_back(getter(btag));
101  }
102  for (const auto& getter: m_varsFromJet) {
103  vvec.push_back(getter(jet));
104  }
105  std::map<std::string, std::map<std::string, double> > nodes;
106  if (m_variable_cleaner) {
107  std::map<std::string, double> variables(vvec.begin(), vvec.end());
108  auto cleaned = m_variable_cleaner->replace(variables);
109 
110  // Note, you can hack in more variables to `cleaned` here.
111 
112  // put the cleaned inputs into the node structure
113  nodes[m_input_node_name] = cleaned;
114  }
115 
116  // add track sequences, check if any are invalid
117  char invalid = 0;
118  std::map<std::string, std::map<std::string, std::vector<double>>> seqs;
119 
120  for (const auto& loader : m_tracksLoaders){
121  std::map<std::string, std::vector<double>> feats;
122  std::tie(invalid, feats) = loader->getDL2Data(jet, btag, m_invalid_track_checker);
123  seqs[loader->getName()] = feats;
124  }
125 
126  for (const auto& def: m_is_defaults) {
127  def(btag) = invalid;
128  }
129  if (invalid) {
130  decorateWithDefaults(btag);
131  return;
132  }
133 
134  // save out things
135  for (const auto& dec: m_decorators) {
136  // the second argument to compute(...) is for sequences
137  auto out_vals = m_graph->compute(nodes, seqs, dec.first);
138  for (const auto& node: dec.second) {
139  node.second(btag) = out_vals.at(node.first);
140  }
141  }
142  }
143 
145  return m_dataDependencyNames;
146  }
147 }
BTaggingUtilities.h
BTagTrackIpAccessor.h
checkxAOD.ds
ds
Definition: Tools/PyUtils/bin/checkxAOD.py:260
FlavorTagDiscriminants::DL2::DL2
DL2(const lwt::GraphConfig &, const std::vector< FTagInputConfig > &, const std::vector< ConstituentsInputConfig > &={}, const FTagOptions &=FTagOptions())
Definition: DL2.cxx:23
checkCoolLatestUpdate.variables
variables
Definition: checkCoolLatestUpdate.py:13
FlavorTagDiscriminants
Definition: BacklinkAlg.h:15
SG::AuxElement
Base class for elements of a container that can have aux data.
Definition: AuxElement.h:483
CSV_InDetExporter.new
new
Definition: CSV_InDetExporter.py:145
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
FlavorTagDiscriminants::DL2::decorate
void decorate(const xAOD::BTagging &btag) const
Definition: DL2.cxx:75
FlavorTagInference::FTagOptions
Definition: PhysicsAnalysis/JetTagging/FlavorTagInference/FlavorTagInference/DataPrepUtilities.h:45
postInclude.inputs
inputs
Definition: postInclude.SortInput.py:15
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
FlavorTagDiscriminants::DL2::m_variable_cleaner
std::unique_ptr< lwt::NanReplacer > m_variable_cleaner
Definition: DL2.h:40
FlavorTagDiscriminants::DL2::m_defaultValue
float m_defaultValue
Definition: DL2.h:45
FlavorTagInference::dataprep::createBvarGetters
std::tuple< std::vector< internal::VarFromBTag >, std::vector< internal::VarFromJet >, FTagDataDependencyNames > createBvarGetters(const std::vector< FTagInputConfig > &inputs)
Definition: PhysicsAnalysis/JetTagging/FlavorTagInference/Root/DataPrepUtilities.cxx:353
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
FlavorTagDiscriminants::DL2::m_graph
std::unique_ptr< lwt::LightweightGraph > m_graph
Definition: DL2.h:39
FlavorTagDiscriminants::DL2::m_dataDependencyNames
FTagDataDependencyNames m_dataDependencyNames
Definition: DL2.h:49
lwt
Definition: NnClusterizationFactory.h:52
FlavorTagInference::dataprep::createIpChecker
std::tuple< std::function< char(const internal::Tracks &)>, std::vector< SG::AuxElement::Decorator< char > >, FTagDataDependencyNames, std::set< std::string > > createIpChecker(const lwt::GraphConfig &, const FTagOptions &)
Definition: PhysicsAnalysis/JetTagging/FlavorTagInference/Root/DataPrepUtilities.cxx:424
FlavorTagInference::FTagDataDependencyNames
Definition: FTagDataDependencyNames.h:12
FlavorTagDiscriminants::DL2::m_varsFromJet
std::vector< internal::VarFromJet > m_varsFromJet
Definition: DL2.h:42
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:379
xAOD::BTagging_v1
Definition: BTagging_v1.h:39
python.CreateTierZeroArgdict.outputs
outputs
Definition: CreateTierZeroArgdict.py:189
FlavorTagDiscriminants::DL2::m_varsFromBTag
std::vector< internal::VarFromBTag > m_varsFromBTag
Definition: DL2.h:41
FlavorTagDiscriminants::DL2::m_invalid_track_checker
std::function< char(const internal::Tracks &)> m_invalid_track_checker
Definition: DL2.h:46
FTagDataDependencyNames.h
DL2.h
FlavorTagDiscriminants::DL2::m_jetLink
SG::AuxElement::ConstAccessor< ElementLink< xAOD::JetContainer > > m_jetLink
Definition: DL2.h:37
library_scraper.dd
list dd
Definition: library_scraper.py:46
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
FlavorTagDiscriminants::DL2::m_tracksLoaders
std::vector< std::shared_ptr< TracksLoader > > m_tracksLoaders
Definition: DL2.h:43
FlavorTagInference::dataprep::checkForUnusedRemaps
void checkForUnusedRemaps(const std::map< std::string, std::string > &requested, const std::set< std::string > &used)
Definition: PhysicsAnalysis/JetTagging/FlavorTagInference/Root/DataPrepUtilities.cxx:458
FlavorTagDiscriminants::DL2::m_decorators
std::map< std::string, internal::OutNodeFloat > m_decorators
Definition: DL2.h:44
DeMoScan.first
bool first
Definition: DeMoScan.py:536
IDPVM::createDecorators
std::vector< SG::WriteDecorHandle< T_Cont, T > > createDecorators(const std::vector< SG::WriteDecorHandleKey< T_Cont > > &keys, const EventContext &ctx)
Definition: safeDecorator.h:107
FlavorTagDiscriminants::DL2::decorateWithDefaults
void decorateWithDefaults(const SG::AuxElement &) const
Definition: DL2.cxx:86
FlavorTagDiscriminants::DL2::m_input_node_name
std::string m_input_node_name
Definition: DL2.h:38
FlavorTagDiscriminants::DL2::getDataDependencyNames
const FTagDataDependencyNames & getDataDependencyNames() const
Definition: DL2.cxx:144
Cut::all
@ all
Definition: SUSYToolsAlg.cxx:67
FlavorTagDiscriminants::DL2::m_is_defaults
std::vector< SG::AuxElement::Decorator< char > > m_is_defaults
Definition: DL2.h:47
node
Definition: node.h:21