15 auto getSaltModel(
const std::string& nn_file) {
18 auto saltShared = std::make_shared<const SaltModel>(fullPathToOnnxFile);
24 std::string
join(
const T& c) {
27 for (
const auto& [k, v]: c) {
39 GNN(getSaltModel(nn_file), o)
60 for (
const auto& loader :
m_dataLoader.vectorVarLoaders) {
61 auto loader_name = loader.first;
62 auto constituent_loader = loader.second;
63 m_dataLoader.data_dependency_names += constituent_loader->getDependencies();
64 std::set<std::string> used_remap = constituent_loader->getUsedRemap();
74 if (
auto def = unused_defaults.extract(name)) {
75 default_value = def.mapped();
79 if (!unused_defaults.empty()) {
80 throw std::runtime_error(
81 "unused default values: [" + join(unused_defaults) +
"]");
88 const std::map<std::string, std::string>&
remap,
106 dec.second(i_jet) = {};
109 dec.second(i_jet) = {};
111 for (
const auto& [name, loader] :
m_dataLoader.vectorVarLoaders) {
112 loader->setDefaults(i_jet);
115 dec.second(i_jet) = {};
118 dec.second(i_jet) = {};
142 if (out_vf.at(dec.first).size() != 1){
143 throw std::logic_error(
"expected vectors of length 1 for float decorators");
145 dec.second(i_jet) = out_vf.at(dec.first).at(0);
153 dec.second(i_jet) = out_f.at(dec.first);
157 dec.second(i_jet) = out_vc.at(dec.first);
160 dec.second(i_jet) = out_vf.at(dec.first);
163 const auto& floats = out_vf.at(dec.first);
164 std::vector<int> ints(floats.begin(), floats.end());
165 dec.second(i_jet) = ints;
167 for (
size_t idx = 0; idx <
m_decorators.jetVecTruncFloat.size(); ++idx) {
169 const auto& floats = out_vf.at(dec.first);
173 std::vector<float> truncated(floats.size());
174 for (
size_t i = 0; i < floats.size(); ++i) {
177 dec.second(i_jet) = truncated;
182 throw std::logic_error(
"unsupported ONNX metadata version");
191 std::tuple<FTagDataDependencyNames, std::set<std::string>>
196 std::map<std::string, std::string>
remap = options.remap_scalar;
197 std::set<std::string> usedRemap;
201 std::string context =
"building negative tag b-btagger";
203 for (
const auto& outNode : outConfig) {
205 std::string dec_name = outNode.name;
219 switch (outNode.type) {
224 m_decorators.jetVecChar.emplace_back(outNode.name,
Dec<std::vector<char>>(dec_name));
227 m_decorators.jetVecFloat.emplace_back(outNode.name,
Dec<std::vector<float>>(dec_name));
230 m_decorators.jetVecInt.emplace_back(outNode.name,
Dec<std::vector<int>>(dec_name));
233 m_decorators.jetVecTruncFloat.emplace_back(outNode.name,
Dec<std::vector<float>>(dec_name));
238 throw std::logic_error(
"Unknown output data type");
242 return std::make_tuple(deps, usedRemap);
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
std::tuple< FTagDataDependencyNames, std::set< std::string > > createDecorators(const OutputConfig &outConfig, const FTagOptions &options)
std::vector< std::pair< int, int > > m_truncFloatBits
std::vector< float > m_truncFloatScales
ISaltModelPtr m_saltModel
GNNDataLoader m_dataLoader
virtual void decorateWithDefaults(const xAOD::IParticle &jet) const
virtual void decorate(const xAOD::IParticle &i_jet) const
GNN(const std::string &nnFile, const GNNOptions &opts)
FTagDataDependencyNames getDependencies() const
std::vector< std::pair< Dec< float >, float > > m_defaultValues
Class providing the definition of the 4-vector interface.
std::map< std::string, std::string > remap
list of directories to be explicitly remapped
float truncateToFloat(float val, int exp_bits, int mantissa_bits)
StringRegexes getNameFlippers(const FlipTagConfig &flip_config)
void checkForUnusedRemaps(const std::map< std::string, std::string > &requested, const std::set< std::string > &used)
const std::string remapName(const std::string &name, std::map< std::string, std::string > &remap, std::set< std::string > &usedRemap)
std::string sub_first(const StringRegexes &res, const std::string &var_name, const std::string &context)
This file contains "getter" functions used for accessing tagger inputs from the EDM.
std::vector< SaltModelOutput > OutputConfig
std::shared_ptr< const ISaltModel > ISaltModelPtr
std::string join(const std::vector< std::string > &v, const char c=',')
std::set< std::string > bTagOutputs
float default_output_value
std::map< std::string, float > default_output_values
SaltModelInputs gnn_inputs