14#include <hibf/config.hpp>
15#include <hibf/layout/data_store.hpp>
19namespace seqan::hibf::layout
34 size_t num_user_bins{};
36 size_t num_technical_bins{};
39 struct maximum_bin_tracker
43 size_t max_split_id{};
44 size_t max_split_size{};
46 void update_max(
size_t const new_id,
size_t const new_size)
48 if (new_size > max_size)
56 void update_split_max(
size_t const new_id,
size_t const new_size)
58 if (new_size > max_split_size)
60 max_split_id = new_id;
61 max_split_size = new_size;
80 if (max_id == max_split_id)
87 .elements = max_split_size})};
92 .elements = max_size})};
95 if ((minimum_bits > merged_bits))
119 data{
std::addressof(data_)},
120 num_user_bins{data->positions.size()},
121 num_technical_bins{data->previous.empty() ?
config.tmax : needed_technical_bins(num_user_bins)}
123 assert(data !=
nullptr);
133 [[nodiscard]]
size_t needed_technical_bins(
size_t const requested_num_ub)
const;
138 [[nodiscard]]
size_t max_merge_levels(
size_t const num_ubs_in_merge)
const;
189 void backtrack_merged_bin(
size_t trace_j,
192 maximum_bin_tracker & max_tracker,
193 bool is_first_row =
false);
195 void backtrack_split_bin(
size_t trace_j,
196 size_t const number_of_bins,
198 maximum_bin_tracker & max_tracker);
203 data_store initialise_libf_data(
size_t const trace_j)
const;
205 void process_merged_bin(
data_store & libf_data,
size_t const bin_id)
const;
207 void update_libf_data(
data_store & libf_data,
size_t const bin_id)
const;
209 size_t add_lower_level(
data_store & libf_data)
const;
Implements seqan::hibf::bin_size_in_bits.
Hierarchical binning algorithm.
Definition hierarchical_binning.hpp:26
size_t execute()
Executes the hierarchical binning algorithm and layouts user bins into technical bins.
hierarchical_binning()=default
Defaulted.
hierarchical_binning & operator=(hierarchical_binning &&)=default
Defaulted.
hierarchical_binning(hierarchical_binning const &)=delete
Deleted. Would modify same data.
hierarchical_binning(data_store &data_, seqan::hibf::config const &config_)
The constructor from user bin names, their kmer counts and a config.
Definition hierarchical_binning.hpp:117
hierarchical_binning(hierarchical_binning &&)=default
Defaulted.
~hierarchical_binning()=default
Defaulted.
hierarchical_binning & operator=(hierarchical_binning const &)=delete
Deleted. Would modify same data.
constexpr size_t bin_size_in_bits(bin_size_parameters const ¶ms)
Computes the bin size.
Definition bin_size_in_bits.hpp:35
Provides seqan::hibf::md_vector.
The configuration used to build an (H)IBF.
Definition config.hpp:74
size_t number_of_hash_functions
The number of hash functions for the underlying Bloom Filters.
Definition config.hpp:132
double maximum_fpr
The desired maximum false positive rate of the underlying Bloom Filters. [RECOMMENDED_TO_ADAPT].
Definition config.hpp:150
double relaxed_fpr
Allow a higher FPR in non-accuracy-critical parts of the HIBF structure.
Definition config.hpp:178
Contains information used for the layout.
Definition data_store.hpp:25
Definition md_vector.hpp:21