ATLAS Offline Software
SaltModelEDMLoaderBase.h
Go to the documentation of this file.
1 /*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #pragma once
6 #include "xAODBase/IParticle.h"
9 
14 
15 #include <map>
16 #include <vector>
17 #include <utility>
18 #include <functional>
19 
20 namespace FlavorTagInference {
21 
22  using Inputs = std::pair<std::vector<float>, std::vector<int64_t>>;
23  using SaltModelInputs = std::map<std::string, Inputs>;
24 
25  struct SaltModelData {
27  size_t num_inputs = 0;
28  std::map<std::string, std::vector<const xAOD::IParticle*>> constituents;
29  };
30 
32  public:
33  SaltModelEDMLoaderBase(std::shared_ptr<const SaltModel> salt_model) :
34  salt_model(salt_model), graph_config(salt_model->getGraphConfig()) {};
35  std::shared_ptr<const SaltModel> salt_model;
37  std::string scalarInputName;
38  std::vector<std::pair<std::string /* varName */, std::function<float(const xAOD::IParticle* /* parent */)>>> scalarVarLoaders;
39  std::map<std::string /* vecInputName */, std::shared_ptr<IConstituentsLoader>> vectorVarLoaders;
40 
41 
42  void addScalarLoader(const std::string& varName, std::function<float(const xAOD::IParticle*)> loader) {
43  scalarVarLoaders.emplace_back(varName, loader);
44  }
45 
46  void addVectorLoader(const std::string& vecName, std::shared_ptr<IConstituentsLoader> loader) {
47  vectorVarLoaders.try_emplace(vecName, std::move(loader));
48  }
49 
50  virtual SaltModelData loadInputs(const xAOD::IParticle* p) const final {
51  SaltModelData salt_model_data;
52  // loading scalar inputs.
53  std::vector<float> scalar_feat;
54  for (const auto& varLoader : scalarVarLoaders) {
55  std::string varName = varLoader.first;
56  scalar_feat.push_back(varLoader.second(p));
57  }
58  std::vector<int64_t> scalar_feat_dim = {1, static_cast<int64_t>(scalar_feat.size())};
59  Inputs scalar_inputs(scalar_feat, scalar_feat_dim);
60  salt_model_data.gnn_inputs.insert({scalarInputName, scalar_inputs});
61 
62  //load vector inputs.
63  for (auto loader : vectorVarLoaders) {
64  std::string input_name = loader.first;
65  auto [input_data, input_objects] = loader.second->getData(*p);
66 
67  salt_model_data.gnn_inputs.insert({input_name, input_data});
68  salt_model_data.num_inputs += input_data.first.size();
69  salt_model_data.constituents[input_name] = input_objects;
70  }
71  return salt_model_data;
72  }
73 
74  void DumpGnnInputs(const SaltModelInputs& gnn_inputs) {
75  // Implementation for dumping GNN input data
76  std::cout << "-------- Dumping GNN Input Data --------" << std::endl;
77 
78  for (const auto& [name, inputs] : gnn_inputs) {
79  std::cout << "Input Name: " << name << std::endl;
80  std::cout << " vec floats: ";
81  for (const auto& feature : inputs.first) {
82  std::cout << feature << " ";
83  }
84  std::cout << std::endl;
85  std::cout << " vec ints : ";
86  for (const auto& id : inputs.second) {
87  std::cout << id << " ";
88  }
89  std::cout << std::endl;
90  }
91  std::cout << "---------- END GNN Input Data ----------" << std::endl;
92  }
93  }; // class SaltModelEDMLoaderBase
94 } // namespace FlavorTagInference
FlavorTagInference::SaltModelEDMLoaderBase::scalarInputName
std::string scalarInputName
Definition: SaltModelEDMLoaderBase.h:37
SaltModel.h
ElectronsLoader.h
FlavorTagInference::SaltModelEDMLoaderBase::SaltModelEDMLoaderBase
SaltModelEDMLoaderBase(std::shared_ptr< const SaltModel > salt_model)
Definition: SaltModelEDMLoaderBase.h:33
FlavorTagInference::SaltModelEDMLoaderBase::salt_model
std::shared_ptr< const SaltModel > salt_model
Definition: SaltModelEDMLoaderBase.h:34
FlavorTagInference
This file contains "getter" functions used for accessing tagger inputs from the EDM.
Definition: PhysicsAnalysis/JetTagging/FlavorTagInference/FlavorTagInference/ConstituentsLoader.h:27
IParticle.h
FlavorTagInference::SaltModelEDMLoaderBase::graph_config
SaltModelGraphConfig::GraphConfig graph_config
Definition: SaltModelEDMLoaderBase.h:36
FlavorTagInference::SaltModelEDMLoaderBase
Definition: SaltModelEDMLoaderBase.h:31
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
FlowElementsLoader.h
FlavorTagInference::SaltModelData::gnn_inputs
SaltModelInputs gnn_inputs
Definition: SaltModelEDMLoaderBase.h:26
FlavorTagInference::SaltModelEDMLoaderBase::DumpGnnInputs
void DumpGnnInputs(const SaltModelInputs &gnn_inputs)
Definition: SaltModelEDMLoaderBase.h:74
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
FlavorTagInference::SaltModelData::constituents
std::map< std::string, std::vector< const xAOD::IParticle * > > constituents
Definition: SaltModelEDMLoaderBase.h:28
FlavorTagInference::SaltModelEDMLoaderBase::addScalarLoader
void addScalarLoader(const std::string &varName, std::function< float(const xAOD::IParticle *)> loader)
Definition: SaltModelEDMLoaderBase.h:42
PixelAthClusterMonAlgCfg.varName
string varName
end cluster ToT and charge
Definition: PixelAthClusterMonAlgCfg.py:125
FlavorTagInference::SaltModelEDMLoaderBase::addVectorLoader
void addVectorLoader(const std::string &vecName, std::shared_ptr< IConstituentsLoader > loader)
Definition: SaltModelEDMLoaderBase.h:46
FlavorTagInference::SaltModelData
Definition: SaltModelEDMLoaderBase.h:25
FlavorTagInference::SaltModelEDMLoaderBase::scalarVarLoaders
std::vector< std::pair< std::string, std::function< float(const xAOD::IParticle *)> > > scalarVarLoaders
Definition: SaltModelEDMLoaderBase.h:38
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
FlavorTagInference::SaltModelInputs
std::map< std::string, Inputs > SaltModelInputs
Definition: SaltModelEDMLoaderBase.h:23
HitsLoader.h
TracksLoader.h
FlavorTagInference::SaltModelEDMLoaderBase::loadInputs
virtual SaltModelData loadInputs(const xAOD::IParticle *p) const final
Definition: SaltModelEDMLoaderBase.h:50
FlavorTagInference::Inputs
std::pair< std::vector< float >, std::vector< int64_t > > Inputs
Definition: FlavorTagInference/FlavorTagInference/SaltModel.h:28
FlavorTagInference::SaltModelGraphConfig::GraphConfig
Definition: SaltModelGraphConfig.h:36
FlavorTagInference::SaltModelData::num_inputs
size_t num_inputs
Definition: SaltModelEDMLoaderBase.h:27
SaltModelGraphConfig.h
FlavorTagInference::SaltModelEDMLoaderBase::vectorVarLoaders
std::map< std::string, std::shared_ptr< IConstituentsLoader > > vectorVarLoaders
Definition: SaltModelEDMLoaderBase.h:39
python.LArMinBiasAlgConfig.float
float
Definition: LArMinBiasAlgConfig.py:65