If the graph has been built by another inference tool and would be the same than this one the rebuild is skipped
128 {
129
131 if (graphData.previousList && (*graphData.previousList) !=
m_graphFeatures) {
132 graphData.graph.reset();
133 }
135 if (graphData.graph) {
136 return StatusCode::SUCCESS;
137 }
139 ATH_MSG_ERROR(
"The feature list is in complete. Either it has no features or no node connector set");
140 return StatusCode::FAILURE;
141 }
142
143 graphData.graph = std::make_unique<InferenceGraph>();
144
147
148 int64_t nNodes{0}, possConn{0};
149 graphData.spacePointsInBucket.clear();
150 graphData.spacePointsInBucket.reserve(
spacePoints->size());
151
152 for (const MuonR4::SpacePointBucket* bucket : *spacePoints) {
153 nNodes += graphData.spacePointsInBucket.emplace_back(bucket->size());
154 possConn += Acts::sumUpToN(graphData.spacePointsInBucket.back());
155 }
156
157 graphData.nodeIndex = 0;
158 graphData.featureLeaves.resize(nNodes *
m_graphFeatures.numFeatures());
159 graphData.currLeave = graphData.featureLeaves.begin();
160
161 graphData.srcEdges.reserve(possConn);
162 graphData.desEdges.reserve(possConn);
163
165 for (const MuonR4::SpacePointBucket* bucket : *spacePoints) {
166 const LayerSpBucket mlBucket{*bucket};
168 }
169
170 graphData.srcEdges.insert(graphData.srcEdges.end(), std::make_move_iterator(graphData.desEdges.begin()),
171 std::make_move_iterator(graphData.desEdges.end()));
172
175 ATH_MSG_DEBUG(
"Edge indices:"<<makeIndexPairs(makeSortedEdges(graphData.srcEdges)));
176
177 std::vector<int64_t> featShape{nNodes,
static_cast<int64_t
>(
m_graphFeatures.numFeatures())};
178 std::vector<int64_t> edgeShape{2, static_cast<int64_t>(graphData.srcEdges.size() / 2)};
179
180
181 Ort::MemoryInfo memInfo = Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemTypeCPU);
182 graphData.graph->dataTensor.emplace_back(Ort::Value::CreateTensor<float>(memInfo,
183 graphData.featureLeaves.data(), graphData.featureLeaves.size(),
184 featShape.data(), featShape.size()));
185
186
187 Ort::Value edge_tensor = Ort::Value::CreateTensor<int64_t>(memInfo, graphData.srcEdges.data(),
188 graphData.srcEdges.size(), edgeShape.data(), edgeShape.size());
189
190 graphData.graph->dataTensor.emplace_back(std::move(edge_tensor));
191
193
194 graphData.srcEdges.clear();
195 graphData.desEdges.clear();
196 graphData.featureLeaves.clear();
198 return StatusCode::SUCCESS;
199 }
#define ATH_CHECK
Evaluate an expression and check for errors.