28 return StatusCode::SUCCESS;
37 std::unique_ptr<GNN_DataStorage> storage = std::make_unique<GNN_DataStorage>(*
m_geo);
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();
57 const std::vector<xAOD::DetectorIDHashType>& elementlist = extSP.elementIdList() ;
59 bool isPixel(elementlist.size() == 1);
67 const auto&
pos = extSP.globalPosition();
84 for(
size_t l = 0;
l < node_storage.size();
l++) {
86 const std::vector<GNN_Node>& nodes = node_storage[
l];
88 if(nodes.size() == 0)
continue;
96 ATH_MSG_DEBUG(
"Loaded "<<nPixelLoaded<<
" pixel spacepoints and "<<nStripLoaded<<
" strip spacepoints");
104 std::vector<GNN_Edge> edgeStorage;
108 std::pair<int, int> graphStats =
buildTheGraph(fakeRoi, storage, edgeStorage);
110 ATH_MSG_DEBUG(
"Created graph with "<<graphStats.first<<
" edges and "<<graphStats.second<<
" edge links");
112 int maxLevel =
runCCA(graphStats.first, edgeStorage);
114 ATH_MSG_DEBUG(
"Reached Level "<<maxLevel<<
" after GNN iterations");
122 if(maxLevel < minLevel)
return StatusCode::SUCCESS;
124 std::vector<GNN_Edge*> vSeeds;
126 vSeeds.reserve(graphStats.first/2);
128 for(
int edgeIndex = 0; edgeIndex < graphStats.first; edgeIndex++) {
130 GNN_Edge* pS = &(edgeStorage.at(edgeIndex));
132 if(pS->
m_level < minLevel)
continue;
134 vSeeds.push_back(pS);
137 if(vSeeds.empty())
return StatusCode::SUCCESS;
145 for(
auto pS : vSeeds) {
146 if(pS->m_level == -1)
continue;
156 if(
static_cast<int>(rs.
m_vs.size()) < minLevel)
continue;
158 std::vector<const GNN_Node*> vN;
160 for(std::vector<GNN_Edge*>::reverse_iterator sIt=rs.
m_vs.rbegin();sIt!=rs.
m_vs.rend();++sIt) {
161 (*sIt)->m_level = -1;
163 if(sIt == rs.
m_vs.rbegin()) {
164 vN.push_back((*sIt)->m_n1);
167 vN.push_back((*sIt)->m_n2);
171 if(vN.size()<3)
continue;
173 std::vector<const xAOD::SpacePoint*> sps;
174 sps.reserve(vN.size());
175 for (
const auto* vNptr : vN) {
176 sps.push_back(&spContainer.at(vNptr->sp_idx()).externalSpacePoint());
181 std::unique_ptr<ActsTrk::Seed> to_add = std::make_unique<ActsTrk::Seed>(std::move(sps));
183 seedContainer.
push_back(std::move(to_add));
188 return StatusCode::SUCCESS;