From 8a68436fac27e495328ea5bde907a91473302363 Mon Sep 17 00:00:00 2001 From: Giulio Eulisse <10544+ktf@users.noreply.github.com> Date: Mon, 8 Jun 2026 13:38:39 +0200 Subject: [PATCH] Reserve memory upfront when creating the track propagation table --- Common/Tools/TrackPropagationModule.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Common/Tools/TrackPropagationModule.h b/Common/Tools/TrackPropagationModule.h index 702d5c0968b..c49441fe311 100644 --- a/Common/Tools/TrackPropagationModule.h +++ b/Common/Tools/TrackPropagationModule.h @@ -234,18 +234,24 @@ class TrackPropagationModule return; // suppress everything } + // Reserve every cursor filled in the loop below: reserve() switches the + // cursor to the unsafe (no bounds check) append, so a cursor filled + // without it pays the safe per-row append. The Par/ParExtension/DCA + // tables are filled in the covariance branch as well. + cursors.tracksParPropagated.reserve(tracks.size()); + cursors.tracksParExtensionPropagated.reserve(tracks.size()); + if (fillTracksDCA) { + cursors.tracksDCA.reserve(tracks.size()); + } if (fillTracksCov) { cursors.tracksParCovPropagated.reserve(tracks.size()); cursors.tracksParCovExtensionPropagated.reserve(tracks.size()); if (fillTracksDCACov) { cursors.tracksDCACov.reserve(tracks.size()); } - } else { - cursors.tracksParPropagated.reserve(tracks.size()); - cursors.tracksParExtensionPropagated.reserve(tracks.size()); - if (fillTracksDCA) { - cursors.tracksDCA.reserve(tracks.size()); - } + } + if (cGroup.useTrackTuner.value && cGroup.fillTrackTunerTable.value) { + cursors.tunertable.reserve(tracks.size()); } for (const auto& track : tracks) {