Skip to content

Commit d9b6ec3

Browse files
committed
ITS: perVertex do low multiplicty vertices first
Signed-off-by: Felix Schlepper <felix.schlepper@cern.ch>
1 parent afe1a1e commit d9b6ec3

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

Detectors/ITSMFT/ITS/tracking/src/Tracker.cxx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "ITStracking/TrackingConfigParam.h"
2626

2727
#include "ReconstructionDataFormats/Track.h"
28+
#include <algorithm>
2829
#include <cassert>
2930
#include <format>
3031
#include <cstdlib>
@@ -77,9 +78,21 @@ void Tracker::clustersToTracks(const LogFunc& logger, const LogFunc& error)
7778

7879
total += evaluateTask(&Tracker::initialiseTimeFrame, StateNames[mCurState = TFInit], iteration, logger, iteration);
7980
for (iROFs = 0; iROFs < nROFsIterations; ++iROFs) {
80-
iVertex = (!mTrkParams[0].PerPrimaryVertexProcessing) ? -1 : 0;
81+
if (mTimeFrame->getPrimaryVertices(iROFs).empty()) {
82+
continue;
83+
}
84+
85+
std::vector<int> vertOrder(mTimeFrame->getPrimaryVerticesNum(iROFs), -1);
86+
if (mTrkParams[0].PerPrimaryVertexProcessing) {
87+
// do low mult. cluster first, should steal less, keep relative order though
88+
std::iota(vertOrder.begin(), vertOrder.end(), 0);
89+
std::stable_sort(vertOrder.begin(), vertOrder.end(), [&](int a, int b) -> bool { return mTimeFrame->getPrimaryVertices(iROFs)[a].getNContributors() < mTimeFrame->getPrimaryVertices(iROFs)[b].getNContributors(); });
90+
iVertex = 0;
91+
}
92+
8193
do {
82-
timeTracklets += evaluateTask(&Tracker::computeTracklets, StateNames[mCurState = Trackleting], iteration, evalLog, iteration, iROFs, iVertex);
94+
// LOGP(info, "iVtx={} -> {} / {}", iVertex, vertOrder[iVertex], vertOrder.size());
95+
timeTracklets += evaluateTask(&Tracker::computeTracklets, StateNames[mCurState = Trackleting], iteration, evalLog, iteration, iROFs, vertOrder[iVertex]);
8396
nTracklets += mTraits->getTFNumberOfTracklets();
8497
float trackletsPerCluster = mTraits->getTFNumberOfClusters() > 0 ? float(mTraits->getTFNumberOfTracklets()) / float(mTraits->getTFNumberOfClusters()) : 0.f;
8598
if (trackletsPerCluster > mTrkParams[iteration].TrackletsPerClusterLimit) {
@@ -98,7 +111,7 @@ void Tracker::clustersToTracks(const LogFunc& logger, const LogFunc& error)
98111
timeNeighbours += evaluateTask(&Tracker::findCellsNeighbours, StateNames[mCurState = Neighbouring], iteration, evalLog, iteration);
99112
nNeighbours += mTimeFrame->getNumberOfNeighbours();
100113
timeRoads += evaluateTask(&Tracker::findRoads, StateNames[mCurState = Roading], iteration, evalLog, iteration);
101-
} while (iVertex >= 0 && ++iVertex < mTimeFrame->getPrimaryVerticesNum(iROFs));
114+
} while (vertOrder[iVertex] >= 0 && ++iVertex < mTimeFrame->getPrimaryVerticesNum(iROFs));
102115
}
103116
logger(std::format(" - Tracklet finding: {} tracklets found in {:.2f} ms", nTracklets, timeTracklets));
104117
logger(std::format(" - Cell finding: {} cells found in {:.2f} ms", nCells, timeCells));

0 commit comments

Comments
 (0)