36 seedContainer.
spacePoints().reserve(spContainer.size());
37 std::unique_ptr<GNN_DataStorage> storage = std::make_unique<GNN_DataStorage>(*
m_geo,
m_mlLUT);
43 float shift_x = vertex.x() - beamSpotHandle->beamTilt(0)*vertex.z();
44 float shift_y = vertex.y() - beamSpotHandle->beamTilt(1)*vertex.z();
46 std::vector<std::vector<GNN_Node> > node_storage;
49 for(
auto& v : node_storage) v.reserve(100000);
51 unsigned int nPixelLoaded = 0;
52 unsigned int nStripLoaded = 0;
54 for(
size_t idx=0; idx<spContainer.size(); idx++){
55 const auto &
sp = spContainer.at(idx);
56 const auto & extSP =
sp.externalSpacePoint();
58 const std::vector<xAOD::DetectorIDHashType>& elementlist = extSP.elementIdList() ;
60 bool isPixel(elementlist.size() == 1);
66 GNN_Node&
node = node_storage[layer].emplace_back(layer);
68 const auto& pos = extSP.globalPosition();
70 node.m_x = pos.x() - shift_x;
71 node.m_y = pos.y() - shift_y;
73 node.m_r = std::sqrt(std::pow(
node.m_x, 2) + std::pow(
node.m_y, 2));
79 assert(
dynamic_cast<const xAOD::PixelCluster*
>(extSP.measurements().front())!=
nullptr);
86 for(
size_t l = 0; l < node_storage.size(); l++) {
88 const std::vector<GNN_Node>& nodes = node_storage[l];
90 if(nodes.size() == 0)
continue;
93 nPixelLoaded += storage->loadPixelGraphNodes(l, nodes,
m_useML);
95 nStripLoaded += storage->loadStripGraphNodes(l, nodes);
98 ATH_MSG_DEBUG(
"Loaded "<<nPixelLoaded<<
" pixel spacepoints and "<<nStripLoaded<<
" strip spacepoints");
100 storage->sortByPhi();
102 storage->initializeNodes(
m_useML);
106 std::vector<GNN_Edge> edgeStorage;
110 std::pair<int, int> graphStats =
buildTheGraph(fakeRoi, storage, edgeStorage);
112 ATH_MSG_DEBUG(
"Created graph with "<<graphStats.first<<
" edges and "<<graphStats.second<<
" edge links");
114 if (graphStats.first == 0 || graphStats.second == 0)
return StatusCode::SUCCESS;
116 int maxLevel =
runCCA(graphStats.first, edgeStorage);
118 ATH_MSG_DEBUG(
"Reached Level "<<maxLevel<<
" after GNN iterations");
120 std::vector<std::tuple<float, int, std::vector<unsigned int> > > vSeedCandidates;
124 if (vSeedCandidates.empty())
return StatusCode::SUCCESS;
126 seedContainer.reserve(vSeedCandidates.size(), 7.0f);
128 for (
const auto& seed : vSeedCandidates) {
130 if (std::get<1>(seed) != 0)
continue;
134 auto newseed = seedContainer.
push_back(std::get<2>(seed));
135 newseed.quality() = std::get<0>(seed);
139 ATH_MSG_DEBUG(
"GBTS created "<<seedContainer.size()<<
" seeds");
141 return StatusCode::SUCCESS;