Skip to content

Commit 46f0963

Browse files
committed
track refit good
1 parent ced9644 commit 46f0963

1 file changed

Lines changed: 22 additions & 13 deletions

File tree

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

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -593,25 +593,32 @@ void TrackerTraits<nLayers>::findRoads(const int iteration)
593593
lastCellSeed.swap(updatedCellSeed);
594594
lastCellId.swap(updatedCellId);
595595
deepVectorClear(updatedCellSeed); /// tame the memory peaks
596-
updatedCellId.clear();
596+
deepVectorClear(updatedCellId); /// tame the memory peaks
597597
processNeighbours(iLayer, --level, lastCellSeed, lastCellId, updatedCellSeed, updatedCellId);
598598
}
599-
for (auto& seed : updatedCellSeed) {
600-
if (seed.getQ2Pt() > 1.e3 || seed.getChi2() > mTrkParams[0].MaxChi2NDF * ((startLevel + 2) * 2 - 5)) {
601-
continue;
602-
}
603-
trackSeeds.push_back(seed);
604-
}
599+
std::copy_if(updatedCellSeed.begin(), updatedCellSeed.end(), std::back_inserter(trackSeeds), [&](const CellSeed& seed) {
600+
return seed.getQ2Pt() <= 1.e3 && seed.getChi2() <= mTrkParams[0].MaxChi2NDF * ((startLevel + 2) * 2 - 5);
601+
});
605602
}
606603

607-
bounded_vector<TrackITSExt> tracks(trackSeeds.size(), mMemoryPool.get());
608-
std::atomic<size_t> trackIndex{0};
604+
if (trackSeeds.empty()) {
605+
continue;
606+
}
609607

608+
bounded_vector<TrackITSExt> tracks(mMemoryPool.get());
609+
tracks.reserve(trackSeeds.size());
610610
mTaskArena.execute([&] {
611+
tbb::combinable<bounded_vector<TrackITSExt>> locTracksData([&] {
612+
return bounded_vector<TrackITSExt>(mMemoryPool.get());
613+
});
614+
611615
tbb::parallel_for(
612616
tbb::blocked_range<size_t>(size_t(0), trackSeeds.size()),
613617
[&](const tbb::blocked_range<size_t>& Seeds) {
614618
for (int iSeed = Seeds.begin(); iSeed < Seeds.end(); ++iSeed) {
619+
auto& localTracks = locTracksData.local();
620+
localTracks.reserve(Seeds.size());
621+
615622
const CellSeed& seed{trackSeeds[iSeed]};
616623
TrackITSExt temporaryTrack{seed};
617624
temporaryTrack.resetCovariance();
@@ -631,13 +638,15 @@ void TrackerTraits<nLayers>::findRoads(const int iteration)
631638
if (!fitSuccess || temporaryTrack.getPt() < mTrkParams[iteration].MinPt[mTrkParams[iteration].NLayers - temporaryTrack.getNClusters()]) {
632639
continue;
633640
}
634-
tracks[trackIndex++] = temporaryTrack;
641+
localTracks.push_back(temporaryTrack);
635642
}
636643
});
637-
});
638644

639-
tracks.resize(trackIndex);
640-
mTaskArena.execute([&] {
645+
locTracksData.combine_each([&](const bounded_vector<TrackITSExt>& localTracks) {
646+
tracks.insert(tracks.end(), localTracks.begin(), localTracks.end());
647+
});
648+
tracks.shrink_to_fit();
649+
641650
tbb::parallel_sort(tracks.begin(), tracks.end(), [](const auto& a, const auto& b) {
642651
return a.getChi2() < b.getChi2();
643652
});

0 commit comments

Comments
 (0)