@@ -904,7 +904,8 @@ void TrackerTraits<NLayers>::extendTracks(const int iteration)
904904{
905905 const auto nTracks = mTimeFrame ->getTracks ().size ();
906906 TrackExtensionCandidates candidatesPerTrack (nTracks);
907- mTimeFrame ->mFittedExtensionTracks .assign (nTracks, {});
907+ mTimeFrame ->mFittedExtensionTracks .clear ();
908+ mTimeFrame ->mFittedExtensionTracks .reserve (nTracks * MaxTrackExtensionCandidatesPerTrack);
908909 buildTrackExtensionCandidates (iteration, candidatesPerTrack);
909910 applyTrackExtensionCandidates (iteration, candidatesPerTrack);
910911 mTimeFrame ->mFittedExtensionTracks .clear ();
@@ -1000,14 +1001,10 @@ void TrackerTraits<NLayers>::updateExtendedTrackTimeStamp(TrackITSExt& track, co
10001001template <int NLayers>
10011002bool TrackerTraits<NLayers>::materializeTrackExtensionCandidate(TrackITSExt& track, const TrackExtensionCandidateN& candidate, const int /* iteration*/ )
10021003{
1003- if (candidate.trackIndex < 0 || candidate.trackIndex >= static_cast <int >(mTimeFrame ->mFittedExtensionTracks .size ())) {
1004- return false ;
1005- }
1006- const auto & slot = mTimeFrame ->mFittedExtensionTracks [candidate.trackIndex ];
1007- if (candidate.fittedTrackIndex < 0 || candidate.fittedTrackIndex >= static_cast <int >(slot.size ())) {
1004+ if (candidate.resultIndex < 0 || candidate.resultIndex >= static_cast <int >(mTimeFrame ->mFittedExtensionTracks .size ())) {
10081005 return false ;
10091006 }
1010- track = slot [candidate.fittedTrackIndex ];
1007+ track = mTimeFrame -> mFittedExtensionTracks [candidate.resultIndex ];
10111008 return true ;
10121009}
10131010
@@ -1037,11 +1034,9 @@ void TrackerTraits<NLayers>::buildTrackExtensionCandidates(const int iteration,
10371034 if (!extension.nAddedClusters ) {
10381035 return ;
10391036 }
1040- extension.chi2NDF = candidate.getChi2 () / static_cast <float >(candidate.getNClusters () * 2 - 5 );
10411037 extension.chi2 = candidate.getChi2 ();
1042- auto & fittedSlot = mTimeFrame ->mFittedExtensionTracks [trackIndex];
1043- extension.fittedTrackIndex = static_cast <int >(fittedSlot.size ());
1044- fittedSlot.push_back (candidate);
1038+ extension.resultIndex = static_cast <int >(mTimeFrame ->mFittedExtensionTracks .size ());
1039+ mTimeFrame ->mFittedExtensionTracks .push_back (candidate);
10451040 candidates.push_back (extension);
10461041 };
10471042
@@ -1105,21 +1100,9 @@ template <int NLayers>
11051100void TrackerTraits<NLayers>::applyTrackExtensionCandidates(const int iteration, TrackExtensionCandidates& candidatesPerTrack)
11061101{
11071102 auto & tracks = mTimeFrame ->getTracks ();
1108- auto isBetterCandidate = [](const TrackExtensionCandidateN& a, const TrackExtensionCandidateN& b) {
1109- if (a.nAddedClusters != b.nAddedClusters ) {
1110- return a.nAddedClusters > b.nAddedClusters ;
1111- }
1112- if (a.chi2NDF != b.chi2NDF ) {
1113- return a.chi2NDF < b.chi2NDF ;
1114- }
1115- if (a.chi2 != b.chi2 ) {
1116- return a.chi2 < b.chi2 ;
1117- }
1118- return false ;
1119- };
11201103
11211104 for (auto & candidates : candidatesPerTrack) {
1122- std::stable_sort (candidates.begin (), candidates.end (), isBetterCandidate );
1105+ std::stable_sort (candidates.begin (), candidates.end (), isBetterTrackExtensionCandidate<NLayers> );
11231106 while (!candidates.empty () && (candidates.back ().nAddedClusters <= 0 )) {
11241107 candidates.pop_back ();
11251108 }
@@ -1137,10 +1120,10 @@ void TrackerTraits<NLayers>::applyTrackExtensionCandidates(const int iteration,
11371120 auto cmp = [&](const Entry& a, const Entry& b) {
11381121 const auto & ca = candidatesPerTrack[a.track ][a.idx ];
11391122 const auto & cb = candidatesPerTrack[b.track ][b.idx ];
1140- if (isBetterCandidate (cb, ca)) {
1123+ if (isBetterTrackExtensionCandidate<NLayers> (cb, ca)) {
11411124 return true ;
11421125 }
1143- if (isBetterCandidate (ca, cb)) {
1126+ if (isBetterTrackExtensionCandidate<NLayers> (ca, cb)) {
11441127 return false ;
11451128 }
11461129 if (a.track != b.track ) {
0 commit comments