ATLAS Offline Software
DL2.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 #include "lwtnn/LightweightGraph.hh"
9 #include "lwtnn/NanReplacer.hh"
10 
11 // #include "xAODBTagging/BTaggingUtilities.h"
12 
13 
14 
15 namespace FlavorTagDiscriminants {
16 
17  // DL2
18  //
19  // TODO: make this work with more input nodes
20  DL2::DL2(const lwt::GraphConfig& graph_config,
21  const std::vector<FTagInputConfig>& inputs,
22  const std::vector<ConstituentsInputConfig>& tracks_configs,
23  const FTagOptions& options):
24  m_input_node_name(""),
25  m_graph(new lwt::LightweightGraph(graph_config,graph_config.outputs.begin()->first)),
26  m_variable_cleaner(nullptr),
27  m_defaultValue(options.default_output_value)
28  {
29  // set up inputs
30  if (graph_config.inputs.size() > 1) {
31  throw std::logic_error("We don't currently support graphs with "
32  "more than one input");
33  } else if (graph_config.inputs.size() == 1){
34  m_input_node_name = graph_config.inputs.at(0).name;
35  m_variable_cleaner.reset(new lwt::NanReplacer(
36  graph_config.inputs.at(0).defaults,
37  lwt::rep::all));
38  }
39 
41  m_varsFromJet = vj;
43 
44  for (auto config : tracks_configs){
45  m_tracksLoaders.push_back(std::make_shared<TracksLoader>(config, options));
46  }
47 
48  auto [decorators, dd, rd] = dataprep::createDecorators(
49  graph_config, options);
51  m_decorators = decorators;
52 
53  auto [track_validity, is_defaults, ipdd, rc] = dataprep::createIpChecker(
54  graph_config, options);
55  m_invalid_track_checker = track_validity;
56  m_is_defaults = is_defaults;
57  m_dataDependencyNames += ipdd;
58 
59  // Update dependencies and used remap from the tracks loaders.
60  for (const auto& loader : m_tracksLoaders){
61  m_dataDependencyNames += loader->getDependencies();
62  std::set<std::string> used_remap = loader->getUsedRemap();
63  rd.merge(used_remap);
64  }
65  // check that all remapping was used
66  rd.merge(rc);
67  dataprep::checkForUnusedRemaps(options.remap_scalar, rd);
68  }
69 
70  void DL2::decorate(const xAOD::IParticle& i_jet) const {
71  auto jet = dynamic_cast<const xAOD::Jet*>(&i_jet);
72  decorate(*jet);
73  }
75  // save out things
76  for (const auto& dec: m_decorators) {
77  for (const auto& node: dec.second) {
78  // save something that is clearly wrong
79  node.second(jet) = m_defaultValue;
80  }
81  }
82  }
83 
84  void DL2::decorate(const xAOD::Jet& jet) const {
85  using namespace internal;
86  std::vector<NamedVar> vvec;
87  for (const auto& getter: m_varsFromJet) {
88  vvec.push_back(getter.second(jet));
89  }
90  std::map<std::string, std::map<std::string, double> > nodes;
91  if (m_variable_cleaner) {
92  std::map<std::string, double> variables(vvec.begin(), vvec.end());
93  auto cleaned = m_variable_cleaner->replace(variables);
94 
95  // Note, you can hack in more variables to `cleaned` here.
96 
97  // put the cleaned inputs into the node structure
98  nodes[m_input_node_name] = cleaned;
99  }
100 
101  // add track sequences, check if any are invalid
102  char invalid = 0;
103  std::map<std::string, std::map<std::string, std::vector<double>>> seqs;
104 
105  for (const auto& loader : m_tracksLoaders){
106  std::map<std::string, std::vector<double>> feats;
107  std::tie(invalid, feats) = loader->getDL2Data(jet, m_invalid_track_checker);
108  seqs[loader->getName()] = feats;
109  }
110 
111  for (const auto& def: m_is_defaults) {
112  def(jet) = invalid;
113  }
114  if (invalid) {
116  return;
117  }
118 
119  // save out things
120  for (const auto& dec: m_decorators) {
121  // the second argument to compute(...) is for sequences
122  auto out_vals = m_graph->compute(nodes, seqs, dec.first);
123  for (const auto& node: dec.second) {
124  node.second(jet) = out_vals.at(node.first);
125  }
126  }
127  }
128 
130  return m_dataDependencyNames;
131  }
132 }
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:20
checkCoolLatestUpdate.variables
variables
Definition: checkCoolLatestUpdate.py:12
FlavorTagDiscriminants
Definition: DL2.h:18
FlavorTagDiscriminants::DL2::m_varsFromJet
std::vector< std::pair< std::string, internal::VarFromJet > > m_varsFromJet
Definition: DL2.h:40
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
FlavorTagInference::FTagOptions
Definition: PhysicsAnalysis/JetTagging/FlavorTagInference/FlavorTagInference/DataPrepUtilities.h:45
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:41
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:39
FlavorTagDiscriminants::DL2::m_defaultValue
float m_defaultValue
Definition: DL2.h:43
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
FlavorTagDiscriminants::DL2::m_graph
std::unique_ptr< lwt::LightweightGraph > m_graph
Definition: DL2.h:38
FlavorTagDiscriminants::DL2::m_dataDependencyNames
FTagDataDependencyNames m_dataDependencyNames
Definition: DL2.h:47
lwt
Definition: NnClusterizationFactory.h:52
FlavorTagInference::FTagDataDependencyNames
Definition: FTagDataDependencyNames.h:12
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:378
python.CreateTierZeroArgdict.outputs
outputs
Definition: CreateTierZeroArgdict.py:189
FlavorTagInference::dataprep::createIpChecker
std::tuple< std::function< char(const internal::Tracks &)>, std::vector< SG::AuxElement::Decorator< char > >, FTagDataDependencyNames, std::set< std::string > > createIpChecker(const GraphConfig &, const FTagOptions &)
Definition: PhysicsAnalysis/JetTagging/FlavorTagInference/Root/DataPrepUtilities.cxx:420
FlavorTagDiscriminants::DL2::decorate
void decorate(const xAOD::IParticle &i_jet) const
Definition: DL2.cxx:70
FlavorTagDiscriminants::DL2::m_invalid_track_checker
std::function< char(const internal::Tracks &)> m_invalid_track_checker
Definition: DL2.h:44
FTagDataDependencyNames.h
DL2.h
FlavorTagInference::dataprep::createBvarGetters
std::tuple< std::vector< std::pair< std::string, internal::VarFromJet > >, FTagDataDependencyNames > createBvarGetters(const std::vector< FTagInputConfig > &inputs)
Definition: PhysicsAnalysis/JetTagging/FlavorTagInference/Root/DataPrepUtilities.cxx:352
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:41
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:454
FlavorTagDiscriminants::DL2::m_decorators
std::map< std::string, internal::OutNodeFloat > m_decorators
Definition: DL2.h:42
DeMoScan.first
bool first
Definition: DeMoScan.py:534
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:74
FlavorTagDiscriminants::DL2::m_input_node_name
std::string m_input_node_name
Definition: DL2.h:37
FlavorTagDiscriminants::DL2::getDataDependencyNames
const FTagDataDependencyNames & getDataDependencyNames() const
Definition: DL2.cxx:129
Cut::all
@ all
Definition: SUSYToolsAlg.cxx:67
FlavorTagDiscriminants::DL2::m_is_defaults
std::vector< SG::AuxElement::Decorator< char > > m_is_defaults
Definition: DL2.h:45
node
Definition: node.h:21