ATLAS Offline Software
GNN_DataStorage.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef TRIGINDETPATTRECOTOOLS_GNN_DATA_STORAGE_H
6 #define TRIGINDETPATTRECOTOOLS_GNN_DATA_STORAGE_H
7 
8 #include<vector>
9 #include<map>
10 #include<algorithm>
11 
12 #define MAX_SEG_PER_NODE 1000 //was 30
13 #define N_SEG_CONNS 6 //was 6
14 
15 
17 
19 
21 public:
22 
23  struct CompareByPhi {
24 
25  bool operator()(const TrigFTF_GNN_Node* n1, const TrigFTF_GNN_Node* n2) {
26  return n1->m_sp.phi() < n2->m_sp.phi();
27  }
28 
29  };
30 
31  TrigFTF_GNN_Node(const TrigSiSpacePointBase&, float, float);
33 
34 
35  inline void addIn(int i) {
36  if(m_in.size()<MAX_SEG_PER_NODE) {
37  m_in.push_back(i);
38  }
39  }
40 
41  inline void addOut(int i) {
42  if(m_out.size()<MAX_SEG_PER_NODE) {
43  m_out.push_back(i);
44  }
45  }
46 
47  inline bool isConnector() const {
48  if(m_in.empty() || m_out.empty()) return false;
49  return true;
50  }
51 
52  inline bool isFull() const {
53  if(m_in.size()==MAX_SEG_PER_NODE && m_out.size()==MAX_SEG_PER_NODE) return true;
54  else return false;
55  }
56 
58 
59  std::vector<unsigned int> m_in;//indices of the edges in the edge storage
60  std::vector<unsigned int> m_out;
62 
63 };
64 
66 public:
69 
70  void sortByPhi();
71 
72  bool empty() const {
73  return m_vn.empty();
74  }
75 
76  void generatePhiIndexing(float);
77 
78  std::vector<TrigFTF_GNN_Node*> m_vn;
79  std::vector<std::pair<float, unsigned int> > m_vPhiNodes;
80 
81 };
82 
84 public:
87 
88  int addSpacePoint(const TrigSiSpacePointBase&, bool);
89  unsigned int numberOfNodes() const;
90  void getConnectingNodes(std::vector<const TrigFTF_GNN_Node*>&);
91  void sortByPhi();
92  void generatePhiIndexing(float);
93 
94 
95  const TrigFTF_GNN_EtaBin& getEtaBin(int idx) const {
96  if(idx >= static_cast<int>(m_etaBins.size())) idx = idx-1;
97  return m_etaBins.at(idx);
98  }
99 
100 protected:
101 
103 
104  std::vector<TrigFTF_GNN_EtaBin> m_etaBins;
105 
106 };
107 
109 public:
110 
111  struct CompareLevel {
112  public:
113  bool operator()(const TrigFTF_GNN_Edge* pS1, const TrigFTF_GNN_Edge* pS2) {
114  return pS1->m_level > pS2->m_level;
115  }
116  };
117 
118  TrigFTF_GNN_Edge(TrigFTF_GNN_Node* n1, TrigFTF_GNN_Node* n2, float p1, float p2, float p3, float p4) : m_n1(n1), m_n2(n2), m_level(1), m_next(1), m_nNei(0) {
119  m_p[0] = p1;
120  m_p[1] = p2;
121  m_p[2] = p3;
122  m_p[3] = p4;
123  }
124 
125  TrigFTF_GNN_Edge() : m_n1(nullptr), m_n2(nullptr), m_level(-1), m_next(-1), m_nNei(0) {};
126 
129 
130  signed char m_level{-1}, m_next{-1};
131 
132  unsigned char m_nNei{0};
133  float m_p[4]{};
134 
135  unsigned int m_vNei[N_SEG_CONNS]{};//global indices of the connected edges
136 
137 };
138 
139 #endif
TrigFTF_GNN_EtaBin
Definition: GNN_DataStorage.h:65
TrigFTF_GNN_Node::addOut
void addOut(int i)
Definition: GNN_DataStorage.h:41
TrigSiSpacePointBase::phi
void phi(const double phi)
Definition: TrigSiSpacePointBase.h:52
TrigFTF_GNN_DataStorage
Definition: GNN_DataStorage.h:83
TrigFTF_GNN_DataStorage::addSpacePoint
int addSpacePoint(const TrigSiSpacePointBase &, bool)
Definition: GNN_DataStorage.cxx:79
TrigFTF_GNN_Edge::CompareLevel
Definition: GNN_DataStorage.h:111
TrigFTF_GNN_Node::m_sp
const TrigSiSpacePointBase & m_sp
Definition: GNN_DataStorage.h:57
TrigFTF_GNN_Node::isFull
bool isFull() const
Definition: GNN_DataStorage.h:52
TrigFTF_GNN_DataStorage::sortByPhi
void sortByPhi()
Definition: GNN_DataStorage.cxx:127
TrigFTF_GNN_Edge::m_vNei
unsigned int m_vNei[N_SEG_CONNS]
Definition: GNN_DataStorage.h:135
TrigFTF_GNN_Edge::CompareLevel::operator()
bool operator()(const TrigFTF_GNN_Edge *pS1, const TrigFTF_GNN_Edge *pS2)
Definition: GNN_DataStorage.h:113
TrigFTF_GNN_EtaBin::TrigFTF_GNN_EtaBin
TrigFTF_GNN_EtaBin()
Definition: GNN_DataStorage.cxx:24
TrigFTF_GNN_Edge::m_n2
TrigFTF_GNN_Node * m_n2
Definition: GNN_DataStorage.h:128
TrigFTF_GNN_EtaBin::~TrigFTF_GNN_EtaBin
~TrigFTF_GNN_EtaBin()
Definition: GNN_DataStorage.cxx:28
TrigFTF_GNN_Node::CompareByPhi::operator()
bool operator()(const TrigFTF_GNN_Node *n1, const TrigFTF_GNN_Node *n2)
Definition: GNN_DataStorage.h:25
TrigFTF_GNN_Node::addIn
void addIn(int i)
Definition: GNN_DataStorage.h:35
ParticleJetTools::p3
Amg::Vector3D p3(const xAOD::TruthVertex *p)
Definition: ParticleJetLabelCommon.cxx:55
TrigFTF_GNN_Edge::TrigFTF_GNN_Edge
TrigFTF_GNN_Edge()
Definition: GNN_DataStorage.h:125
N_SEG_CONNS
#define N_SEG_CONNS
Definition: GNN_DataStorage.h:13
TrigFTF_GNN_Node::~TrigFTF_GNN_Node
~TrigFTF_GNN_Node()
Definition: GNN_DataStorage.cxx:20
TrigFTF_GNN_EtaBin::empty
bool empty() const
Definition: GNN_DataStorage.h:72
TrigFTF_GNN_Node::isConnector
bool isConnector() const
Definition: GNN_DataStorage.h:47
TrigFTF_GNN_Edge::m_next
signed char m_next
Definition: GNN_DataStorage.h:130
TrigFTF_GNN_DataStorage::m_etaBins
std::vector< TrigFTF_GNN_EtaBin > m_etaBins
Definition: GNN_DataStorage.h:104
TrigFTF_GNN_DataStorage::TrigFTF_GNN_DataStorage
TrigFTF_GNN_DataStorage(const TrigFTF_GNN_Geometry &)
Definition: GNN_DataStorage.cxx:67
TrigFTF_GNN_Node
Definition: GNN_DataStorage.h:20
TrigFTF_GNN_Edge
Definition: GNN_DataStorage.h:108
TrigFTF_GNN_DataStorage::generatePhiIndexing
void generatePhiIndexing(float)
Definition: GNN_DataStorage.cxx:131
TrigFTF_GNN_EtaBin::m_vPhiNodes
std::vector< std::pair< float, unsigned int > > m_vPhiNodes
Definition: GNN_DataStorage.h:79
lumiFormat.i
int i
Definition: lumiFormat.py:92
TrigFTF_GNN_Edge::m_level
signed char m_level
Definition: GNN_DataStorage.h:130
TrigSiSpacePointBase.h
TrigFTF_GNN_DataStorage::getEtaBin
const TrigFTF_GNN_EtaBin & getEtaBin(int idx) const
Definition: GNN_DataStorage.h:95
TrigFTF_GNN_EtaBin::m_vn
std::vector< TrigFTF_GNN_Node * > m_vn
Definition: GNN_DataStorage.h:78
TrigFTF_GNN_DataStorage::numberOfNodes
unsigned int numberOfNodes() const
Definition: GNN_DataStorage.cxx:117
TrigFTF_GNN_Node::CompareByPhi
Definition: GNN_DataStorage.h:23
MAX_SEG_PER_NODE
#define MAX_SEG_PER_NODE
Definition: GNN_DataStorage.h:12
TrigFTF_GNN_Edge::m_n1
TrigFTF_GNN_Node * m_n1
Definition: GNN_DataStorage.h:127
TrigFTF_GNN_EtaBin::generatePhiIndexing
void generatePhiIndexing(float)
Definition: GNN_DataStorage.cxx:40
TrigFTF_GNN_Geometry
Definition: GNN_Geometry.h:50
TrigFTF_GNN_Edge::m_nNei
unsigned char m_nNei
Definition: GNN_DataStorage.h:132
TrigFTF_GNN_Node::m_maxCutOnTau
float m_maxCutOnTau
Definition: GNN_DataStorage.h:61
TrigFTF_GNN_Node::m_minCutOnTau
float m_minCutOnTau
Definition: GNN_DataStorage.h:61
Rtt_histogram.n1
n1
Definition: Rtt_histogram.py:21
TrigFTF_GNN_DataStorage::getConnectingNodes
void getConnectingNodes(std::vector< const TrigFTF_GNN_Node * > &)
Definition: GNN_DataStorage.cxx:136
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
TrigFTF_GNN_Node::m_out
std::vector< unsigned int > m_out
Definition: GNN_DataStorage.h:60
TrigFTF_GNN_DataStorage::m_geo
const TrigFTF_GNN_Geometry & m_geo
Definition: GNN_DataStorage.h:102
TrigFTF_GNN_Node::m_in
std::vector< unsigned int > m_in
Definition: GNN_DataStorage.h:59
TrigFTF_GNN_EtaBin::sortByPhi
void sortByPhi()
Definition: GNN_DataStorage.cxx:35
TrigSiSpacePointBase
Definition: TrigSiSpacePointBase.h:23
TrigFTF_GNN_Edge::TrigFTF_GNN_Edge
TrigFTF_GNN_Edge(TrigFTF_GNN_Node *n1, TrigFTF_GNN_Node *n2, float p1, float p2, float p3, float p4)
Definition: GNN_DataStorage.h:118
TrigFTF_GNN_DataStorage::~TrigFTF_GNN_DataStorage
~TrigFTF_GNN_DataStorage()
Definition: GNN_DataStorage.cxx:75
TrigFTF_GNN_Node::TrigFTF_GNN_Node
TrigFTF_GNN_Node(const TrigSiSpacePointBase &, float, float)
Definition: GNN_DataStorage.cxx:15
TrigFTF_GNN_Edge::m_p
float m_p[4]
Definition: GNN_DataStorage.h:133