114 ACTS_DEBUG(
"TrackFindingGNNAlg::execute() - begin");
116 std::optional<Athena::Chrono> timer;
117 timer.emplace(
"GNN get spacepoint handles",
m_chronoSvc.get());
119 const Acts::GeometryContext gctx =
m_ctxProvider.getGeometryContext(ctx);
120 const Acts::MagneticFieldContext mctx =
m_ctxProvider.getMagneticFieldContext(ctx);
121 const Acts::CalibrationContext cctx =
m_ctxProvider.getCalibrationContext(ctx);
130 auto stripSPOVHandle =
134 std::vector<const xAOD::SpacePointContainer*> spacePointCollections{
135 pixelSPHandle.cptr(), stripSPHandle.cptr(), stripSPOVHandle.cptr()};
138 timer.emplace(
"GNN seed building",
m_chronoSvc.get());
143 ACTS_DEBUG(
"GNN produced " << gnnSeeds.
size() <<
" seed candidates");
146 timer.emplace(
"GNN parameter estimation + fit",
m_chronoSvc.get());
148 Acts::VectorTrackContainer trackBackend;
149 Acts::VectorMultiTrajectory trackStateBackend;
150 constexpr std::size_t nTracksExpected = 3000;
151 trackBackend.reserve(nTracksExpected);
152 trackStateBackend.reserve(nTracksExpected * 30);
156 auto retrieveSurface = [&](
const ActsTrk::Seed& seed) ->
const Acts::Surface& {
161 throw std::runtime_error(
"retrieveSurface: no Acts surface for GeometryIdentifier " + std::to_string(geoId.value()));
171 gnnSeed, gctx, mctx, cctx, retrieveSurface);
172 if (!initialParamsOpt.has_value())
continue;
175 std::vector<const xAOD::UncalibratedMeasurement*> measList;
176 measList.reserve(cand.size() * 2);
179 measList.push_back(m);
183 auto fitted =
m_fitterTool->fit(measList, *initialParamsOpt, gctx, mctx, cctx);
185 for (
auto track : *fitted) {
186 auto newTrack = tracks.makeTrack();
187 newTrack.copyFrom(track);
192 ACTS_DEBUG(
"After track fit: " << tracks.size() <<
" / " << gnnSeeds.
size()
196 timer.emplace(
"Track selection & conversion",
m_chronoSvc.get());
198 Acts::VectorTrackContainer selTrackBackend;
199 selTrackBackend.reserve(trackBackend.size());
204 for (
auto track : tracks) {
205 if (selector.isValidTrack(track)) {
206 auto newTrack = selectedTracks.makeTrack();
209 newTrack.copyFrom(track);
213 ACTS_DEBUG(
"GNN seeds: " << gnnSeeds.
size() <<
", fitted: " << tracks.size()
214 <<
", selected: " << selectedTracks.size());
217 Acts::ConstVectorTrackContainer constTrackBackend(std::move(selTrackBackend));
218 Acts::ConstVectorMultiTrajectory constTrackStateBackend(std::move(trackStateBackend));
219 std::unique_ptr<ActsTrk::TrackContainer> constTracksContainer
220 = std::make_unique<ActsTrk::TrackContainer>(std::move(constTrackBackend), std::move(constTrackStateBackend) );
224 ATH_CHECK(trackContainerHandle.
record(std::move(constTracksContainer)));
226 return StatusCode::SUCCESS;