@@ -3496,7 +3496,7 @@ struct AnalysisAsymmetricPairing {
34963496
34973497 // Template function to run same event pairing with asymmetric pairs (e.g. kaon-pion)
34983498 template <bool TTwoProngFitter, int TPairType, uint32_t TEventFillMap, uint32_t TTrackFillMap, typename TEvents, typename TTrackAssocs, typename TTracks>
3499- void runAsymmetricPairing (TEvents const & events, Preslice<TTrackAssocs>& preslice, TTrackAssocs const & assocs, TTracks const & /* tracks*/ )
3499+ void runAsymmetricPairing (TEvents const & events, Preslice<TTrackAssocs>& preslice, TTrackAssocs const & /* assocs*/ , TTracks const & /* tracks*/ )
35003500 {
35013501 fPairCount .clear ();
35023502
@@ -3509,8 +3509,23 @@ struct AnalysisAsymmetricPairing {
35093509
35103510 int sign1 = 0 ;
35113511 int sign2 = 0 ;
3512- ditrackList.reserve (assocs.size ());
3513- ditrackExtraList.reserve (assocs.size ());
3512+
3513+ // Reserve capacity for the output tables
3514+ int64_t reserveSize = 0 ;
3515+ for (auto const & event : events) {
3516+ if (!event.isEventSelected_bit (0 )) {
3517+ continue ;
3518+ }
3519+ if (fConfigRemoveCollSplittingCandidates .value && event.isEventSelected_bit (2 )) {
3520+ continue ;
3521+ }
3522+ auto groupedLegAAssocs = legACandidateAssocs.sliceBy (preslice, event.globalIndex ());
3523+ auto groupedLegBAssocs = legBCandidateAssocs.sliceBy (preslice, event.globalIndex ());
3524+ reserveSize += static_cast <int64_t >(groupedLegAAssocs.size ()) *
3525+ static_cast <int64_t >(groupedLegBAssocs.size ());
3526+ }
3527+ ditrackList.reserve (reserveSize);
3528+ ditrackExtraList.reserve (reserveSize);
35143529
35153530 constexpr bool trackHasCov = ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0 );
35163531
0 commit comments