Skip to content

Commit d216f25

Browse files
pillotaphecetche
authored andcommitted
speedup cleaning of connected tracks
1 parent ddf4d18 commit d216f25

1 file changed

Lines changed: 14 additions & 13 deletions

File tree

Detectors/MUON/MCH/Tracking/src/TrackFinder.cxx

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,9 +1212,10 @@ void TrackFinder::removeConnectedTracks(int stMin, int stMax)
12121212
int chMax = 2 * stMax + 1;
12131213
int nPlane = 2 * (chMax - chMin + 1);
12141214

1215-
// first loop to fill the arrays of cluster Ids and number of fired chambers
1215+
// first loop to fill the arrays of cluster Ids, number of fired chambers and normalized chi2
12161216
std::vector<uint32_t> ClIds(nPlane * mTracks.size());
12171217
std::vector<uint8_t> nFiredCh(mTracks.size());
1218+
std::vector<double> nChi2(mTracks.size());
12181219
int previousCh(-1);
12191220
int iTrack(0);
12201221
for (auto itTrack = mTracks.begin(); itTrack != mTracks.end(); ++itTrack, ++iTrack) {
@@ -1228,23 +1229,22 @@ void TrackFinder::removeConnectedTracks(int stMin, int stMax)
12281229
ClIds[nPlane * iTrack + 2 * (ch - chMin) + itParam->getClusterPtr()->getDEId() % 2] = itParam->getClusterPtr()->uid;
12291230
}
12301231
}
1232+
nChi2[iTrack] = itTrack->first().getTrackChi2() / (itTrack->getNDF() - 1);
12311233
}
12321234

12331235
// second loop to tag the tracks to remove
1234-
int iTrack1 = mTracks.size() - 1;
1236+
std::vector<bool> remove(mTracks.size(), false);
12351237
int iindex = ClIds.size() - 1;
1236-
for (auto itTrack1 = mTracks.rbegin(); itTrack1 != mTracks.rend(); ++itTrack1, iindex -= nPlane, --iTrack1) {
1237-
int iTrack2 = iTrack1 - 1;
1238+
for (int iTrack1 = mTracks.size() - 1; iTrack1 > -1; --iTrack1, iindex -= nPlane) {
12381239
int jindex = iindex - nPlane;
1239-
for (auto itTrack2 = std::next(itTrack1); itTrack2 != mTracks.rend(); ++itTrack2, --iTrack2) {
1240+
for (int iTrack2 = iTrack1 - 1; iTrack2 > -1; --iTrack2) {
12401241
for (int iPlane = nPlane; iPlane > 0; --iPlane) {
1241-
if (ClIds[iindex] > 0 && ClIds[iindex] == ClIds[jindex]) {
1242-
if ((nFiredCh[iTrack2] > nFiredCh[iTrack1]) ||
1243-
((nFiredCh[iTrack2] == nFiredCh[iTrack1]) &&
1244-
(itTrack2->first().getTrackChi2() / (itTrack2->getNDF() - 1) < itTrack1->first().getTrackChi2() / (itTrack1->getNDF() - 1)))) {
1245-
itTrack1->connected();
1242+
if (ClIds[iindex] == ClIds[jindex] && ClIds[iindex] > 0) {
1243+
if (nFiredCh[iTrack2] > nFiredCh[iTrack1] ||
1244+
(nFiredCh[iTrack2] == nFiredCh[iTrack1] && nChi2[iTrack2] < nChi2[iTrack1])) {
1245+
remove[iTrack1] = true;
12461246
} else {
1247-
itTrack2->connected();
1247+
remove[iTrack2] = true;
12481248
}
12491249
iindex -= iPlane;
12501250
jindex -= iPlane;
@@ -1258,8 +1258,9 @@ void TrackFinder::removeConnectedTracks(int stMin, int stMax)
12581258
}
12591259

12601260
// third loop to remove them. That way all combinations are tested.
1261-
for (auto itTrack = mTracks.begin(); itTrack != mTracks.end();) {
1262-
if (itTrack->isConnected()) {
1261+
iTrack = 0;
1262+
for (auto itTrack = mTracks.begin(); itTrack != mTracks.end(); ++iTrack) {
1263+
if (remove[iTrack]) {
12631264
print("removeConnectedTracks: removing candidate at position #", getTrackIndex(itTrack));
12641265
itTrack = mTracks.erase(itTrack);
12651266
} else {

0 commit comments

Comments
 (0)