ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
FlavorTagDiscriminants::DL2 Class Reference

#include <DL2.h>

Collaboration diagram for FlavorTagDiscriminants::DL2:

Public Member Functions

 DL2 (const lwt::GraphConfig &, const std::vector< FTagInputConfig > &, const std::vector< ConstituentsInputConfig > &={}, const FTagOptions &=FTagOptions())
 
void decorate (const xAOD::BTagging &btag) const
 
void decorate (const xAOD::Jet &jet) const
 
void decorateWithDefaults (const SG::AuxElement &) const
 
void decorate (const xAOD::Jet &jet, const SG::AuxElement &decorated) const
 
FTagDataDependencyNames getDataDependencyNames () const
 

Private Attributes

SG::AuxElement::ConstAccessor< ElementLink< xAOD::JetContainer > > m_jetLink
 
std::string m_input_node_name
 
std::unique_ptr< lwt::LightweightGraph > m_graph
 
std::unique_ptr< lwt::NanReplacer > m_variable_cleaner
 
std::vector< internal::VarFromBTagm_varsFromBTag
 
std::vector< internal::VarFromJetm_varsFromJet
 
std::vector< std::shared_ptr< TracksLoader > > m_tracksLoaders
 
std::map< std::string, internal::OutNodeFloatm_decorators
 
float m_defaultValue
 
std::function< char(const internal::Tracks &)> m_invalid_track_checker
 
std::vector< SG::AuxElement::Decorator< char > > m_is_defaults
 
FTagDataDependencyNames m_dataDependencyNames
 

Detailed Description

Definition at line 20 of file DL2.h.

Constructor & Destructor Documentation

◆ DL2()

FlavorTagDiscriminants::DL2::DL2 ( const lwt::GraphConfig &  graph_config,
const std::vector< FTagInputConfig > &  inputs,
const std::vector< ConstituentsInputConfig > &  tracks_configs = {},
const FTagOptions options = FTagOptions() 
)

Definition at line 22 of file DL2.cxx.

25  :
26  m_jetLink(jetLinkName),
28  m_graph(new lwt::LightweightGraph(graph_config,graph_config.outputs.begin()->first)),
29  m_variable_cleaner(nullptr),
30  m_defaultValue(options.default_output_value)
31  {
32  // set up inputs
33  if (graph_config.inputs.size() > 1) {
34  throw std::logic_error("We don't currently support graphs with "
35  "more than one input");
36  } else if (graph_config.inputs.size() == 1){
37  m_input_node_name = graph_config.inputs.at(0).name;
38  m_variable_cleaner.reset(new lwt::NanReplacer(
39  graph_config.inputs.at(0).defaults,
40  lwt::rep::all));
41  }
42 
43  auto [vb, vj, ds] = dataprep::createBvarGetters(inputs);
44  m_varsFromBTag = vb;
45  m_varsFromJet = vj;
47 
48  for (auto config : tracks_configs){
49  m_tracksLoaders.push_back(std::make_shared<TracksLoader>(config, options));
50  }
51 
52  auto [decorators, dd, rd] = dataprep::createDecorators(
53  graph_config, options);
55  m_decorators = decorators;
56 
57  auto [track_validity, is_defaults, ipdd, rc] = dataprep::createIpChecker(
58  graph_config, options);
59  m_invalid_track_checker = track_validity;
60  m_is_defaults = is_defaults;
61  m_dataDependencyNames += ipdd;
62 
63  // Update dependencies and used remap from the tracks loaders.
64  for (auto loader : m_tracksLoaders){
65  m_dataDependencyNames += loader->getDependencies();
66  rd.merge(loader->getUsedRemap());
67  }
68  // check that all remapping was used
69  rd.merge(rc);
70  dataprep::checkForUnusedRemaps(options.remap_scalar, rd);
71  }

Member Function Documentation

◆ decorate() [1/3]

void FlavorTagDiscriminants::DL2::decorate ( const xAOD::BTagging btag) const

Definition at line 73 of file DL2.cxx.

73  {
74  auto jetLink = m_jetLink(btag);
75  if (!jetLink.isValid()) {
76  throw std::runtime_error("invalid jetLink");
77  }
78  const xAOD::Jet& jet = **jetLink;
79  decorate(jet, btag);
80  }

◆ decorate() [2/3]

void FlavorTagDiscriminants::DL2::decorate ( const xAOD::Jet jet) const

Definition at line 81 of file DL2.cxx.

81  {
82  decorate(jet, jet);
83  }

◆ decorate() [3/3]

void FlavorTagDiscriminants::DL2::decorate ( const xAOD::Jet jet,
const SG::AuxElement decorated 
) const

Definition at line 94 of file DL2.cxx.

94  {
95  using namespace internal;
96  std::vector<NamedVar> vvec;
97  for (const auto& getter: m_varsFromBTag) {
98  vvec.push_back(getter(btag));
99  }
100  for (const auto& getter: m_varsFromJet) {
101  vvec.push_back(getter(jet));
102  }
103  std::map<std::string, std::map<std::string, double> > nodes;
104  if (m_variable_cleaner) {
105  std::map<std::string, double> variables(vvec.begin(), vvec.end());
106  auto cleaned = m_variable_cleaner->replace(variables);
107 
108  // Note, you can hack in more variables to `cleaned` here.
109 
110  // put the cleaned inputs into the node structure
111  nodes[m_input_node_name] = cleaned;
112  }
113 
114  // add track sequences, check if any are invalid
115  char invalid = 0;
116  std::map<std::string, std::map<std::string, std::vector<double>>> seqs;
117 
118  for (auto loader : m_tracksLoaders){
119  std::map<std::string, std::vector<double>> feats;
120  std::tie(invalid, feats) = loader->getDL2Data(jet, btag, m_invalid_track_checker);
121  seqs[loader->getName()] = feats;
122  }
123 
124  for (const auto& def: m_is_defaults) {
125  def(btag) = invalid;
126  }
127  if (invalid) {
128  decorateWithDefaults(btag);
129  return;
130  }
131 
132  // save out things
133  for (const auto& dec: m_decorators) {
134  // the second argument to compute(...) is for sequences
135  auto out_vals = m_graph->compute(nodes, seqs, dec.first);
136  for (const auto& node: dec.second) {
137  node.second(btag) = out_vals.at(node.first);
138  }
139  }
140  }

◆ decorateWithDefaults()

void FlavorTagDiscriminants::DL2::decorateWithDefaults ( const SG::AuxElement jet) const

Definition at line 84 of file DL2.cxx.

84  {
85  // save out things
86  for (const auto& dec: m_decorators) {
87  for (const auto& node: dec.second) {
88  // save something that is clearly wrong
89  node.second(jet) = m_defaultValue;
90  }
91  }
92  }

◆ getDataDependencyNames()

FTagDataDependencyNames FlavorTagDiscriminants::DL2::getDataDependencyNames ( ) const

Definition at line 142 of file DL2.cxx.

142  {
143  return m_dataDependencyNames;
144  }

Member Data Documentation

◆ m_dataDependencyNames

FTagDataDependencyNames FlavorTagDiscriminants::DL2::m_dataDependencyNames
private

Definition at line 47 of file DL2.h.

◆ m_decorators

std::map<std::string, internal::OutNodeFloat> FlavorTagDiscriminants::DL2::m_decorators
private

Definition at line 42 of file DL2.h.

◆ m_defaultValue

float FlavorTagDiscriminants::DL2::m_defaultValue
private

Definition at line 43 of file DL2.h.

◆ m_graph

std::unique_ptr<lwt::LightweightGraph> FlavorTagDiscriminants::DL2::m_graph
private

Definition at line 37 of file DL2.h.

◆ m_input_node_name

std::string FlavorTagDiscriminants::DL2::m_input_node_name
private

Definition at line 36 of file DL2.h.

◆ m_invalid_track_checker

std::function<char(const internal::Tracks&)> FlavorTagDiscriminants::DL2::m_invalid_track_checker
private

Definition at line 44 of file DL2.h.

◆ m_is_defaults

std::vector<SG::AuxElement::Decorator<char> > FlavorTagDiscriminants::DL2::m_is_defaults
private

Definition at line 45 of file DL2.h.

◆ m_jetLink

SG::AuxElement::ConstAccessor<ElementLink<xAOD::JetContainer> > FlavorTagDiscriminants::DL2::m_jetLink
private

Definition at line 35 of file DL2.h.

◆ m_tracksLoaders

std::vector<std::shared_ptr<TracksLoader> > FlavorTagDiscriminants::DL2::m_tracksLoaders
private

Definition at line 41 of file DL2.h.

◆ m_variable_cleaner

std::unique_ptr<lwt::NanReplacer> FlavorTagDiscriminants::DL2::m_variable_cleaner
private

Definition at line 38 of file DL2.h.

◆ m_varsFromBTag

std::vector<internal::VarFromBTag> FlavorTagDiscriminants::DL2::m_varsFromBTag
private

Definition at line 39 of file DL2.h.

◆ m_varsFromJet

std::vector<internal::VarFromJet> FlavorTagDiscriminants::DL2::m_varsFromJet
private

Definition at line 40 of file DL2.h.


The documentation for this class was generated from the following files:
checkxAOD.ds
ds
Definition: Tools/PyUtils/bin/checkxAOD.py:257
FlavorTagDiscriminants::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: DataPrepUtilities.cxx:420
checkCoolLatestUpdate.variables
variables
Definition: checkCoolLatestUpdate.py:13
FlavorTagDiscriminants::DL2::decorate
void decorate(const xAOD::BTagging &btag) const
Definition: DL2.cxx:73
postInclude.inputs
inputs
Definition: postInclude.SortInput.py:15
FlavorTagDiscriminants::dataprep::createDecorators
std::tuple< std::map< std::string, internal::OutNodeFloat >, FTagDataDependencyNames, std::set< std::string > > createDecorators(const lwt::GraphConfig &config, const FTagOptions &options)
Definition: DataPrepUtilities.cxx:382
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:38
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:37
FlavorTagDiscriminants::DL2::m_dataDependencyNames
FTagDataDependencyNames m_dataDependencyNames
Definition: DL2.h:47
FlavorTagDiscriminants::DL2::m_varsFromJet
std::vector< internal::VarFromJet > m_varsFromJet
Definition: DL2.h:40
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:379
FlavorTagDiscriminants::DL2::m_varsFromBTag
std::vector< internal::VarFromBTag > m_varsFromBTag
Definition: DL2.h:39
FlavorTagDiscriminants::dataprep::checkForUnusedRemaps
void checkForUnusedRemaps(const std::map< std::string, std::string > &requested, const std::set< std::string > &used)
Definition: DataPrepUtilities.cxx:454
FlavorTagDiscriminants::DL2::m_invalid_track_checker
std::function< char(const internal::Tracks &)> m_invalid_track_checker
Definition: DL2.h:44
FlavorTagDiscriminants::DL2::m_jetLink
SG::AuxElement::ConstAccessor< ElementLink< xAOD::JetContainer > > m_jetLink
Definition: DL2.h:35
library_scraper.dd
list dd
Definition: library_scraper.py:46
Cut::all
@ all
Definition: SUSYToolsAlg.cxx:64
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
FlavorTagDiscriminants::DL2::m_decorators
std::map< std::string, internal::OutNodeFloat > m_decorators
Definition: DL2.h:42
FlavorTagDiscriminants::dataprep::createBvarGetters
std::tuple< std::vector< internal::VarFromBTag >, std::vector< internal::VarFromJet >, FTagDataDependencyNames > createBvarGetters(const std::vector< FTagInputConfig > &inputs)
Definition: DataPrepUtilities.cxx:349
FlavorTagDiscriminants::DL2::decorateWithDefaults
void decorateWithDefaults(const SG::AuxElement &) const
Definition: DL2.cxx:84
FlavorTagDiscriminants::DL2::m_input_node_name
std::string m_input_node_name
Definition: DL2.h:36
FlavorTagDiscriminants::DL2::m_is_defaults
std::vector< SG::AuxElement::Decorator< char > > m_is_defaults
Definition: DL2.h:45
node
Definition: memory_hooks-stdcmalloc.h:74
python.trfValidateRootFile.rc
rc
Definition: trfValidateRootFile.py:350