Skip to content

Commit 2e76347

Browse files
committed
FilterFalsePositives for solid k-mers in rare cases
1 parent 87eef9b commit 2e76347

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

veritymap/src/projects/veritymap/kmer_index/index_builders/approx_kmer_indexer_builder.hpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,16 @@ class ApproxKmerIndexBuilder : public AbstractKmerIndexBuilder {
119119
}
120120
}
121121

122+
void FilterFalsePositives(kmer_index::KmerIndex::Kmer2Pos &kmer2pos,
123+
kmer_index::KmerIndex::KmerCounter &kmer_counter) const {
124+
for (auto it = begin(kmer_counter); it != end(kmer_counter);) {
125+
if (it->second > kmer_indexer_params.max_rare_cnt_target) {
126+
for (kmer_index::KmerIndex::Kmer2PosSingle &kmer2pos_single : kmer2pos) { kmer2pos_single.erase(it->first); }
127+
it = kmer_counter.erase(it);// previously this was something like m_map.erase(it++);
128+
} else
129+
++it;
130+
}
131+
}
122132
[[nodiscard]] kmer_index::KmerIndex GetKmerIndex(const std::vector<Contig> &contigs,
123133
const kmer_index::kmer_filter::KmerFilter &kmer_filter) const {
124134
kmer_index::KmerIndex::KmerCounter kmer_counter;
@@ -129,6 +139,9 @@ class ApproxKmerIndexBuilder : public AbstractKmerIndexBuilder {
129139
kmer_index::KmerIndex::Kmer2PosSingle &kmer2pos_single = kmer2pos.emplace_back();
130140
GetKmerIndex(contig, kmer_filter, kmer_counter, kmer2pos_single, it - contigs.cbegin());
131141
}
142+
logger.info() << "Filtering potential false positive solid k-mers...\n";
143+
FilterFalsePositives(kmer2pos, kmer_counter);
144+
logger.info() << "Finished filtering\n";
132145
return {kmer2pos, kmer_counter, contigs};
133146
}
134147

0 commit comments

Comments
 (0)