SeqAn3  3.0.3
The Modern C++ library for sequence analysis.
seqan3::counting_vector< value_t > Class Template Reference

A data structure that behaves like a std::vector and can be used to consolidate the results of multiple calls to seqan3::interleaved_bloom_filter::membership_agent::bulk_contains. More...

#include <seqan3/search/dream_index/interleaved_bloom_filter.hpp>

+ Inheritance diagram for seqan3::counting_vector< value_t >:

Public Member Functions

counting_vectoroperator+= (counting_vector const &rhs)
 Bin-wise addition of two seqan3::counting_vectors. More...
 
template<typename rhs_t >
counting_vectoroperator+= (rhs_t const &rhs)
 Bin-wise adds the bits of a seqan3::interleaved_bloom_filter::membership_agent::binning_bitvector. More...
 
Constructors, destructor and assignment
 counting_vector ()=default
 Defaulted.
 
 counting_vector (counting_vector const &)=default
 Defaulted.
 
counting_vectoroperator= (counting_vector const &)=default
 Defaulted.
 
 counting_vector (counting_vector &&)=default
 Defaulted.
 
counting_vectoroperator= (counting_vector &&)=default
 Defaulted.
 
 ~counting_vector ()=default
 Defaulted.
 

Detailed Description

template<std::integral value_t>
class seqan3::counting_vector< value_t >

A data structure that behaves like a std::vector and can be used to consolidate the results of multiple calls to seqan3::interleaved_bloom_filter::membership_agent::bulk_contains.

Template Parameters
value_tThe type of the count. Must model std::integral.

When using the seqan3::interleaved_bloom_filter::membership_agent::bulk_contains operation, a common use case is to add up, for example, the results for all k-mers in a query. This yields, for each bin, the number of k-mers of a query that are in the respective bin. Such information can be used to apply further filtering or abundance estimation based on the k-mer counts.

The seqan3::counting_vector offers an easy way to add up the individual seqan3::interleaved_bloom_filter::membership_agent::binning_bitvector by offering an += operator.

The value_t template parameter should be chosen in a way that no overflow occurs if all calls to bulk_contains return a hit for a specific bin. For example, uint8_t will suffice when processing short Illumina reads, whereas long reads will require at least uint32_t.

Example

int main()
{
ibf.emplace(126, seqan3::bin_index{0u});
ibf.emplace(126, seqan3::bin_index{3u});
ibf.emplace(126, seqan3::bin_index{9u});
ibf.emplace(712, seqan3::bin_index{3u});
ibf.emplace(237, seqan3::bin_index{9u});
// The counting_vector must be at least as big as there are bins.
auto agent = ibf.membership_agent();
counts += agent.bulk_contains(712); // `counts` contains the number of occurrences of 712 in each bin.
seqan3::debug_stream << counts << '\n'; // prints [0,0,0,1,0,0,0,0,0,0,0,0]
counts += agent.bulk_contains(237); // `counts` contains the number of occurrences of 712 and 237 in each bin.
seqan3::debug_stream << counts << '\n'; // prints [0,0,0,1,0,0,0,0,0,1,0,0]
counts += agent.bulk_contains(126); // `counts` contains the number of occurrences of 712, 237 and 126 in each bin.
seqan3::debug_stream << counts << '\n'; // prints [1,0,0,2,0,0,0,0,0,2,0,0]
counts += counts; // multiple counts can also be added together
seqan3::debug_stream << counts << '\n'; // prints [2,0,0,4,0,0,0,0,0,4,0,0]
}
A data structure that behaves like a std::vector and can be used to consolidate the results of multip...
Definition: interleaved_bloom_filter.hpp:830
The IBF binning directory. A data structure that efficiently answers set-membership queries for multi...
Definition: interleaved_bloom_filter.hpp:132
Provides seqan3::debug_stream and related types.
debug_stream_type debug_stream
A global instance of seqan3::debug_stream_type.
Definition: debug_stream.hpp:42
Provides seqan3::interleaved_bloom_filter.
A strong type that represents the number of bins for the seqan3::interleaved_bloom_filter.
Definition: interleaved_bloom_filter.hpp:38
A strong type that represents the bin index for the seqan3::interleaved_bloom_filter.
Definition: interleaved_bloom_filter.hpp:56
A strong type that represents the number of bits for each bin in the seqan3::interleaved_bloom_filter...
Definition: interleaved_bloom_filter.hpp:44

Member Function Documentation

◆ operator+=() [1/2]

template<std::integral value_t>
counting_vector& seqan3::counting_vector< value_t >::operator+= ( counting_vector< value_t > const &  rhs)
inline

Bin-wise addition of two seqan3::counting_vectors.

Parameters
rhsThe other seqan3::counting_vector.
Attention
The seqan3::counting_vector must be at least as big as rhs.

Example

int main()
{
ibf.emplace(126, seqan3::bin_index{0u});
ibf.emplace(126, seqan3::bin_index{3u});
ibf.emplace(126, seqan3::bin_index{9u});
ibf.emplace(712, seqan3::bin_index{3u});
ibf.emplace(237, seqan3::bin_index{9u});
// The counting_vector must be at least as big as there are bins.
auto agent = ibf.membership_agent();
counts += agent.bulk_contains(712); // `counts` contains the number of occurrences of 712 in each bin.
seqan3::debug_stream << counts << '\n'; // prints [0,0,0,1,0,0,0,0,0,0,0,0]
counts += agent.bulk_contains(237); // `counts` contains the number of occurrences of 712 and 237 in each bin.
seqan3::debug_stream << counts << '\n'; // prints [0,0,0,1,0,0,0,0,0,1,0,0]
counts += agent.bulk_contains(126); // `counts` contains the number of occurrences of 712, 237 and 126 in each bin.
seqan3::debug_stream << counts << '\n'; // prints [1,0,0,2,0,0,0,0,0,2,0,0]
counts += counts; // multiple counts can also be added together
seqan3::debug_stream << counts << '\n'; // prints [2,0,0,4,0,0,0,0,0,4,0,0]
}

◆ operator+=() [2/2]

template<std::integral value_t>
template<typename rhs_t >
counting_vector& seqan3::counting_vector< value_t >::operator+= ( rhs_t const &  rhs)
inline

Bin-wise adds the bits of a seqan3::interleaved_bloom_filter::membership_agent::binning_bitvector.

Template Parameters
rhs_tThe type of the right-hand side. Must be seqan3::interleaved_bloom_filter::membership_agent::binning_bitvector.
Parameters
rhsThe seqan3::interleaved_bloom_filter::membership_agent::binning_bitvector.
Attention
The counting_vector must be at least as big as rhs.

Example

int main()
{
ibf.emplace(126, seqan3::bin_index{0u});
ibf.emplace(126, seqan3::bin_index{3u});
ibf.emplace(126, seqan3::bin_index{9u});
ibf.emplace(712, seqan3::bin_index{3u});
ibf.emplace(237, seqan3::bin_index{9u});
// The counting_vector must be at least as big as there are bins.
auto agent = ibf.membership_agent();
counts += agent.bulk_contains(712); // `counts` contains the number of occurrences of 712 in each bin.
seqan3::debug_stream << counts << '\n'; // prints [0,0,0,1,0,0,0,0,0,0,0,0]
counts += agent.bulk_contains(237); // `counts` contains the number of occurrences of 712 and 237 in each bin.
seqan3::debug_stream << counts << '\n'; // prints [0,0,0,1,0,0,0,0,0,1,0,0]
counts += agent.bulk_contains(126); // `counts` contains the number of occurrences of 712, 237 and 126 in each bin.
seqan3::debug_stream << counts << '\n'; // prints [1,0,0,2,0,0,0,0,0,2,0,0]
counts += counts; // multiple counts can also be added together
seqan3::debug_stream << counts << '\n'; // prints [2,0,0,4,0,0,0,0,0,4,0,0]
}

The documentation for this class was generated from the following file: