ATLAS Offline Software
DataPrepUtilities.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef DATA_PREP_UTILITIES_H
6 #define DATA_PREP_UTILITIES_H
7 
8 // local includes
14 
15 // EDM includes
16 #include "xAODJet/Jet.h"
17 #include "xAODBTagging/BTagging.h"
18 
19 // external libraries
20 #include "lwtnn/lightweight_network_config.hh"
21 
22 // STL includes
23 #include <string>
24 #include <vector>
25 #include <functional>
26 #include <exception>
27 #include <type_traits>
28 #include <regex>
29 
30 
31 namespace FlavorTagDiscriminants {
32 
34 
35  // Structures to define DL2/GNNTool input.
36  //
38  {
39  std::string name;
41  std::string default_flag;
42  };
43 
44  // other DL2/GNNTool options
45  struct FTagOptions {
46  FTagOptions();
47  std::string track_prefix;
49  std::string track_link_name;
50  std::map<std::string,std::string> remap_scalar;
53  std::string invalid_ip_key;
54  };
55 
56 
57  // _____________________________________________________________________
58  // Internal code
59 
60  namespace internal {
61  // typedefs
62  typedef std::pair<std::string, double> NamedVar;
63  typedef xAOD::Jet Jet;
65  typedef std::vector<const xAOD::TrackParticle*> Tracks;
66 
67  // getter functions
68  typedef std::function<NamedVar(const SG::AuxElement&)> VarFromBTag;
69  typedef std::function<NamedVar(const Jet&)> VarFromJet;
70 
71  // ___________________________________________________________________
72  // Getter functions
73  //
74  // internally we want a bunch of std::functions that return pairs
75  // to populate the lwtnn input map. We define a functor here to
76  // deal with the b-tagging cases.
77  //
78  template <typename T>
79  class BVarGetter {
80  private:
81  typedef SG::AuxElement AE;
84  std::string m_name;
85  public:
86  BVarGetter(const std::string& name, const std::string& default_flag):
87  m_getter(name),
88  m_default_flag(default_flag),
89  m_name(name)
90  {
91  }
92  NamedVar operator()(const SG::AuxElement& btag) const {
93  T ret_value = m_getter(btag);
94  bool is_default = m_default_flag(btag);
95  if constexpr (std::is_floating_point<T>::value) {
96  if (std::isnan(ret_value) && !is_default) {
97  throw std::runtime_error(
98  "Found NAN value for '" + m_name
99  + "'. This is only allowed when using a default"
100  " value for this input");
101  }
102  }
103  return {m_name, is_default ? NAN : ret_value};
104  }
105  };
106 
107  template <typename T>
109  private:
112  std::string m_name;
113  public:
114  BVarGetterNoDefault(const std::string& name):
115  m_getter(name),
116  m_name(name)
117  {
118  }
119  NamedVar operator()(const SG::AuxElement& btag) const {
120  T ret_value = m_getter(btag);
121  if constexpr (std::is_floating_point<T>::value) {
122  if (std::isnan(ret_value)) {
123  throw std::runtime_error(
124  "Found NAN value for '" + m_name + "'.");
125  }
126  }
127  return {m_name, ret_value};
128  }
129  };
130 
131  // Filler functions
132  //
133  // factory functions to produce callable objects that build inputs
134  namespace get {
135  VarFromBTag varFromBTag(const std::string& name,
136  EDMType,
137  const std::string& defaultflag);
138  }
139 
141  typedef std::vector<std::pair<std::string, OutputSetterFloat>> OutNodeFloat;
142 
143  }
144 
145 
146  // higher level configuration functions
147  namespace dataprep {
148  typedef std::vector<std::pair<std::regex, std::string> > StringRegexes;
149  StringRegexes getNameFlippers(const FlipTagConfig& flip_config);
150 
151  // Get the configuration structures based on the lwtnn NN
152  // structure.
153  std::tuple<
154  std::vector<FTagInputConfig>,
155  std::vector<ConstituentsInputConfig>,
156  FTagOptions>
157  createGetterConfig( lwt::GraphConfig& graph_config,
158  FlipTagConfig flip_config,
159  std::map<std::string, std::string> remap_scalar,
160  TrackLinkType track_link_type);
161 
162  // return the scalar getter functions for NNs
163  std::tuple<
164  std::vector<internal::VarFromBTag>,
165  std::vector<internal::VarFromJet>,
168  const std::vector<FTagInputConfig>& inputs);
169 
170  // return the decorators for the NNs
171  std::tuple<
172  std::map<std::string, internal::OutNodeFloat>,
174  std::set<std::string>>
176  const lwt::GraphConfig& config,
177  const FTagOptions& options);
178 
179  // return a function to check if IP is invalid
180  std::tuple<
181  std::function<char(const internal::Tracks&)>,
182  std::vector<SG::AuxElement::Decorator<char>>,
184  std::set<std::string>>
186  const lwt::GraphConfig&, const FTagOptions&);
187 
188  // check that all the remapping was used
190  const std::map<std::string, std::string>& requested,
191  const std::set<std::string>& used);
192  }
193 }
194 #endif
FlavorTagDiscriminants::internal::VarFromJet
std::function< NamedVar(const Jet &)> VarFromJet
Definition: DataPrepUtilities.h:69
used
FlavorTagDiscriminants::internal::BVarGetterNoDefault::operator()
NamedVar operator()(const SG::AuxElement &btag) const
Definition: DataPrepUtilities.h:119
FlavorTagDiscriminants::FTagInputConfig::type
EDMType type
Definition: DataPrepUtilities.h:40
FlavorTagDiscriminants::dataprep::createGetterConfig
std::tuple< std::vector< FTagInputConfig >, std::vector< ConstituentsInputConfig >, FTagOptions > createGetterConfig(lwt::GraphConfig &graph_config, FlipTagConfig flip_config, std::map< std::string, std::string > remap_scalar, TrackLinkType track_link_type)
Definition: DataPrepUtilities.cxx:235
Jet.h
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
FlavorTagDiscriminants::FTagInputConfig::default_flag
std::string default_flag
Definition: DataPrepUtilities.h:41
BTagging.h
FlavorTagDiscriminants
This file contains "getter" functions used for accessing tagger inputs from the EDM.
Definition: AssociationEnums.h:11
FlavorTagDiscriminants::internal::BVarGetterNoDefault
Definition: DataPrepUtilities.h:108
FlavorTagDiscriminants::EDMType
EDMType
Definition: DataPrepUtilities.h:33
FlavorTagDiscriminants::internal::BVarGetter::operator()
NamedVar operator()(const SG::AuxElement &btag) const
Definition: DataPrepUtilities.h:92
FlavorTagDiscriminants::dataprep::StringRegexes
std::vector< std::pair< std::regex, std::string > > StringRegexes
Definition: DataPrepUtilities.h:148
SG::AuxElement
Base class for elements of a container that can have aux data.
Definition: AuxElement.h:446
FlavorTagDiscriminants::internal::BVarGetter::m_getter
AE::ConstAccessor< T > m_getter
Definition: DataPrepUtilities.h:82
FlavorTagDiscriminants::EDMType::INT
@ INT
xAOD::char
char
Definition: TrigDecision_v1.cxx:38
FlavorTagDiscriminants::FTagOptions::track_link_name
std::string track_link_name
Definition: DataPrepUtilities.h:49
FlavorTagDiscriminants::FTagOptions::invalid_ip_key
std::string invalid_ip_key
Definition: DataPrepUtilities.h:53
FlavorTagDiscriminants::EDMType::DOUBLE
@ DOUBLE
FlavorTagDiscriminants::FTagOptions::default_output_value
float default_output_value
Definition: DataPrepUtilities.h:52
athena.value
value
Definition: athena.py:122
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
FlipTagEnums.h
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
FlavorTagDiscriminants::internal::BTagging
xAOD::BTagging BTagging
Definition: DataPrepUtilities.h:64
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
FlavorTagDiscriminants::internal::BVarGetter::m_default_flag
AE::ConstAccessor< char > m_default_flag
Definition: DataPrepUtilities.h:83
FlavorTagDiscriminants::FTagInputConfig
Definition: DataPrepUtilities.h:38
FlavorTagDiscriminants::internal::BVarGetterNoDefault::BVarGetterNoDefault
BVarGetterNoDefault(const std::string &name)
Definition: DataPrepUtilities.h:114
FlavorTagDiscriminants::internal::OutputSetterFloat
SG::AuxElement::Decorator< float > OutputSetterFloat
Definition: DataPrepUtilities.h:140
FlavorTagDiscriminants::internal::BVarGetter::AE
SG::AuxElement AE
Definition: DataPrepUtilities.h:81
FlavorTagDiscriminants::FTagDataDependencyNames
Definition: FTagDataDependencyNames.h:12
FlavorTagDiscriminants::internal::Tracks
std::vector< const xAOD::TrackParticle * > Tracks
Definition: DataPrepUtilities.h:65
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:58
ConstituentsLoader.h
FlavorTagDiscriminants::FTagOptions::track_prefix
std::string track_prefix
Definition: DataPrepUtilities.h:47
FlavorTagDiscriminants::internal::BVarGetter::BVarGetter
BVarGetter(const std::string &name, const std::string &default_flag)
Definition: DataPrepUtilities.h:86
FlavorTagDiscriminants::EDMType::UCHAR
@ UCHAR
FlavorTagDiscriminants::FTagOptions::remap_scalar
std::map< std::string, std::string > remap_scalar
Definition: DataPrepUtilities.h:50
FlavorTagDiscriminants::EDMType::CHAR
@ CHAR
FlavorTagDiscriminants::internal::BVarGetterNoDefault::AE
SG::AuxElement AE
Definition: DataPrepUtilities.h:110
FlavorTagDiscriminants::TrackLinkType
TrackLinkType
Definition: AssociationEnums.h:12
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:379
FlavorTagDiscriminants::FTagInputConfig::name
std::string name
Definition: DataPrepUtilities.h:39
xAOD::BTagging_v1
Definition: BTagging_v1.h:39
FlavorTagDiscriminants::internal::get::varFromBTag
VarFromBTag varFromBTag(const std::string &name, EDMType, const std::string &defaultflag)
Definition: DataPrepUtilities.cxx:155
FlavorTagDiscriminants::dataprep::checkForUnusedRemaps
void checkForUnusedRemaps(const std::map< std::string, std::string > &requested, const std::set< std::string > &used)
Definition: DataPrepUtilities.cxx:454
FTagDataDependencyNames.h
FlavorTagDiscriminants::internal::NamedVar
std::pair< std::string, double > NamedVar
Definition: DataPrepUtilities.h:62
FlavorTagDiscriminants::internal::BVarGetterNoDefault::m_getter
AE::ConstAccessor< T > m_getter
Definition: DataPrepUtilities.h:111
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
FlavorTagDiscriminants::internal::VarFromBTag
std::function< NamedVar(const SG::AuxElement &)> VarFromBTag
Definition: DataPrepUtilities.h:68
FlavorTagDiscriminants::internal::BVarGetterNoDefault::m_name
std::string m_name
Definition: DataPrepUtilities.h:112
FlavorTagDiscriminants::FTagOptions::track_link_type
TrackLinkType track_link_type
Definition: DataPrepUtilities.h:51
FlavorTagDiscriminants::FTagOptions
Definition: DataPrepUtilities.h:45
FlavorTagDiscriminants::internal::BVarGetter
Definition: DataPrepUtilities.h:79
FlavorTagDiscriminants::FTagOptions::FTagOptions
FTagOptions()
Definition: DataPrepUtilities.cxx:132
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
FlavorTagDiscriminants::FTagOptions::flip
FlipTagConfig flip
Definition: DataPrepUtilities.h:48
FlavorTagDiscriminants::EDMType::FLOAT
@ FLOAT
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
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::internal::OutNodeFloat
std::vector< std::pair< std::string, OutputSetterFloat > > OutNodeFloat
Definition: DataPrepUtilities.h:141
FlavorTagDiscriminants::FlipTagConfig
FlipTagConfig
Definition: FlipTagEnums.h:14
FlavorTagDiscriminants::dataprep::getNameFlippers
StringRegexes getNameFlippers(const FlipTagConfig &flip_config)
Definition: DataPrepUtilities.cxx:197
FlavorTagDiscriminants::EDMType::CUSTOM_GETTER
@ CUSTOM_GETTER
AssociationEnums.h
FlavorTagDiscriminants::internal::BVarGetter::m_name
std::string m_name
Definition: DataPrepUtilities.h:84
OnnxUtil.h
FlavorTagDiscriminants::internal::Jet
xAOD::Jet Jet
Definition: DataPrepUtilities.h:63