From d56055729552a5cc2496038bef86ae0461a1c003 Mon Sep 17 00:00:00 2001 From: Felix Schlepper Date: Tue, 24 Jun 2025 21:29:36 +0200 Subject: [PATCH] ITS: redefine seeding vertex label Signed-off-by: Felix Schlepper --- .../include/ITStracking/VertexerTraits.h | 20 ++++++++++++------- .../ITS/tracking/src/VertexerTraits.cxx | 18 ++++++++--------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/VertexerTraits.h b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/VertexerTraits.h index 6554e53fa2ee8..a842f04abfc62 100644 --- a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/VertexerTraits.h +++ b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/VertexerTraits.h @@ -101,19 +101,25 @@ class VertexerTraits virtual bool usesMemoryPool() const noexcept { return true; } void setMemoryPool(std::shared_ptr& pool) { mMemoryPool = pool; } - template - static std::pair computeMain(const bounded_vector& elements) + static std::pair computeMain(const bounded_vector& elements) { - T elem; + // we only care about the source&event of the tracks, not the trackId + auto composeVtxLabel = [](const o2::MCCompLabel& lbl) -> o2::MCCompLabel { + return {o2::MCCompLabel::maxTrackID(), lbl.getEventID(), lbl.getSourceID(), lbl.isFake()}; + }; + std::unordered_map frequency; + for (const auto& element : elements) { + ++frequency[composeVtxLabel(element)]; + } + o2::MCCompLabel elem{}; size_t maxCount = 0; - for (auto& element : elements) { - size_t count = std::count(elements.begin(), elements.end(), element); + for (const auto& [key, count] : frequency) { if (count > maxCount) { maxCount = count; - elem = element; + elem = key; } } - return std::make_pair(elem, static_cast(maxCount) / elements.size()); + return std::make_pair(elem, static_cast(maxCount) / static_cast(elements.size())); } protected: diff --git a/Detectors/ITSMFT/ITS/tracking/src/VertexerTraits.cxx b/Detectors/ITSMFT/ITS/tracking/src/VertexerTraits.cxx index 51cd98aa1366d..11304e17d234a 100644 --- a/Detectors/ITSMFT/ITS/tracking/src/VertexerTraits.cxx +++ b/Detectors/ITSMFT/ITS/tracking/src/VertexerTraits.cxx @@ -506,18 +506,18 @@ void VertexerTraits::computeVertices(const int iteration) if (beamDistance2 < nsigmaCut && o2::gpu::GPUCommonMath::Abs(mTimeFrame->getTrackletClusters(rofId)[iCluster].getVertex()[2]) < mVrtParams[iteration].maxZPositionAllowed) { atLeastOneFound = true; - vertices.emplace_back(o2::math_utils::Point3D(mTimeFrame->getTrackletClusters(rofId)[iCluster].getVertex()[0], - mTimeFrame->getTrackletClusters(rofId)[iCluster].getVertex()[1], - mTimeFrame->getTrackletClusters(rofId)[iCluster].getVertex()[2]), - mTimeFrame->getTrackletClusters(rofId)[iCluster].getRMS2(), // Symm matrix. Diagonal: RMS2 components, - // off-diagonal: square mean of projections on planes. - mTimeFrame->getTrackletClusters(rofId)[iCluster].getSize(), // Contributors - mTimeFrame->getTrackletClusters(rofId)[iCluster].getAvgDistance2()); // In place of chi2 + auto& vertex = vertices.emplace_back(o2::math_utils::Point3D(mTimeFrame->getTrackletClusters(rofId)[iCluster].getVertex()[0], + mTimeFrame->getTrackletClusters(rofId)[iCluster].getVertex()[1], + mTimeFrame->getTrackletClusters(rofId)[iCluster].getVertex()[2]), + mTimeFrame->getTrackletClusters(rofId)[iCluster].getRMS2(), // Symm matrix. Diagonal: RMS2 components, + // off-diagonal: square mean of projections on planes. + mTimeFrame->getTrackletClusters(rofId)[iCluster].getSize(), // Contributors + mTimeFrame->getTrackletClusters(rofId)[iCluster].getAvgDistance2()); // In place of chi2 if (iteration) { - vertices.back().setFlags(Vertex::UPCMode); + vertex.setFlags(Vertex::UPCMode); } - vertices.back().setTimeStamp(mTimeFrame->getTrackletClusters(rofId)[iCluster].getROF()); + vertex.setTimeStamp(mTimeFrame->getTrackletClusters(rofId)[iCluster].getROF()); if (mTimeFrame->hasMCinformation()) { bounded_vector labels(mMemoryPool.get()); for (auto& index : mTimeFrame->getTrackletClusters(rofId)[iCluster].getLabels()) {