2   Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
 
    5 #include "src/detail/MeasurementIndex.h"
 
    7 namespace ActsTrk::detail {
 
    9   inline void DuplicateSeedDetector::newTrajectory() {
 
   10     if (m_disabled || m_foundSeeds == 0u || m_nextSeed == m_nUsedMeasurements.size())
 
   13     auto beg = m_nUsedMeasurements.begin();
 
   14     if (m_nextSeed < m_nUsedMeasurements.size()) {
 
   15       std::advance(beg, m_nextSeed);
 
   18     std::fill(beg, m_nUsedMeasurements.end(), 0u);
 
   21   inline void DuplicateSeedDetector::addMeasurement(const ActsTrk::ATLASUncalibSourceLink &sl, const MeasurementIndex& measurementIndex) {
 
   22     if (m_disabled || m_nextSeed == m_nUsedMeasurements.size())
 
   25     std::size_t hitIndex = measurementIndex.index(ActsTrk::getUncalibratedMeasurement(sl));
 
   26     if (!(hitIndex < m_seedIndex.size()))
 
   29     for (index_t iseed : m_seedIndex[hitIndex]) {
 
   30       assert(iseed < m_nUsedMeasurements.size());
 
   32       if (iseed < m_nextSeed || m_isDuplicateSeed[iseed])
 
   36       // Here is to decide how many hits need to be on the seed to mark it as duplicate
 
   37       if (++m_nUsedMeasurements[iseed] >= std::max(1u, m_nSeedMeasurements[iseed] - m_measOffset)) {
 
   38     assert(m_nUsedMeasurements[iseed] <= m_nSeedMeasurements[iseed]);  // shouldn't ever find more
 
   39         m_isDuplicateSeed[iseed] = true;
 
   45   // For complete removal of duplicate seeds, assumes isDuplicate(iseed) is called for monotonically increasing typeIndex,iseed.
 
   46   inline bool DuplicateSeedDetector::isDuplicate(std::size_t typeIndex, index_t iseed) {
 
   50     if (typeIndex < m_seedOffset.size()) {
 
   51       iseed += m_seedOffset[typeIndex];
 
   54     assert(iseed < m_isDuplicateSeed.size());
 
   55     // If iseed not increasing, we will miss some duplicate seeds, but won't exclude needed seeds.
 
   56     if (iseed >= m_nextSeed) {
 
   57       m_nextSeed = iseed + 1;
 
   60     return m_isDuplicateSeed[iseed];
 
   63 }  // namespace ActsTrk::detail