ATLAS Offline Software
NNSharingSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include "src/hash.h"
8 
9 namespace FlavorTagDiscriminants {
10 
11  namespace detail {
12  std::size_t NNKey::hash() const {
13  return combine(getHash(path), getHash(opts));
14  }
15 
16  // allow NNKey to be used as unordered map key
17  bool NNKey::operator==(const NNKey& key) const {
18  return path == key.path && opts == key.opts;
19  }
20  }
21 
22  NNSharingSvc::NNSharingSvc(const std::string& name, ISvcLocator* svc):
23  AsgService(name, svc)
24  {
25  declareServiceInterface<INNSharingSvc>();
26  }
27  std::shared_ptr<const GNN> NNSharingSvc::get(
28  const std::string& nn_name,
29  const GNNOptions& opts) {
30  detail::NNKey key{nn_name, opts};
31  if (m_gnns.count(key)) {
32  ATH_MSG_INFO("getting " << nn_name << " from cached NNs");
33  return m_gnns.at(key);
34  } else if (m_base_gnns.count(nn_name) ) {
35  ATH_MSG_INFO("adapting " << nn_name << " from cached NNs, new opts");
36  auto nn = std::make_shared<const GNN>(*m_base_gnns.at(nn_name), opts);
37  m_gnns[key] = nn;
38  return nn;
39  }
40  ATH_MSG_INFO("building " << nn_name << " from onnx file");
41  auto nn = std::make_shared<const GNN>(nn_name, opts);
42  m_base_gnns[nn_name] = nn;
43  m_gnns[key] = nn;
44  return nn;
45  }
46 
47 
48 }
FlavorTagDiscriminants::detail::NNKey::hash
std::size_t hash() const
Definition: NNSharingSvc.cxx:12
FlavorTagDiscriminants::detail::NNKey::opts
FlavorTagDiscriminants::GNNOptions opts
Definition: NNSharingSvc.h:20
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
FlavorTagDiscriminants
This file contains "getter" functions used for accessing tagger inputs from the EDM.
Definition: AssociationEnums.h:11
FlavorTagDiscriminants::GNNOptions
Definition: GNNOptions.h:16
NNSharingSvc.h
detail
Definition: extract_histogram_tag.cxx:14
FlavorTagDiscriminants::detail::NNKey
Definition: NNSharingSvc.h:18
FlavorTagDiscriminants::detail::NNKey::operator==
bool operator==(const NNKey &) const
Definition: NNSharingSvc.cxx:17
FlavorTagDiscriminants::combine
size_t combine(size_t lhs, size_t rhs)
Definition: hash.h:21
FlavorTagDiscriminants::NNSharingSvc::NNSharingSvc
NNSharingSvc(const std::string &name, ISvcLocator *svc)
Definition: NNSharingSvc.cxx:22
FlavorTagDiscriminants::NNSharingSvc::get
virtual std::shared_ptr< const GNN > get(const std::string &nn_name, const GNNOptions &opts) override
Definition: NNSharingSvc.cxx:27
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
FlavorTagDiscriminants::NNSharingSvc::m_gnns
std::unordered_map< detail::NNKey, val_t, detail::NNHasher > m_gnns
Definition: NNSharingSvc.h:40
FlavorTagDiscriminants::detail::NNKey::path
std::string path
Definition: NNSharingSvc.h:19
FlavorTagDiscriminants::getHash
std::size_t getHash(const T &obj)
Definition: hash.h:13
hash.h
FlavorTagDiscriminants::NNSharingSvc::m_base_gnns
std::unordered_map< std::string, val_t > m_base_gnns
Definition: NNSharingSvc.h:41
athena.opts
opts
Definition: athena.py:86
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37