HIBF 1.0.0-rc.1
Loading...
Searching...
No Matches
simple_binning.hpp
1// SPDX-FileCopyrightText: 2006-2024, Knut Reinert & Freie Universität Berlin
2// SPDX-FileCopyrightText: 2016-2024, Knut Reinert & MPI für molekulare Genetik
3// SPDX-License-Identifier: BSD-3-Clause
4
5#pragma once
6
7#include <cassert> // for assert
8#include <cstddef> // for size_t
9#include <memory> // for addressof
10#include <stdexcept> // for runtime_error
11#include <vector> // for vector
12
13#include <hibf/layout/data_store.hpp> // for data_store
14#include <hibf/misc/next_multiple_of_64.hpp> // for next_multiple_of_64
15
16namespace seqan::hibf::layout
17{
18
87{
88private:
90 data_store * data{nullptr};
91
97 size_t num_user_bins{};
98
104 size_t num_technical_bins{};
105
106public:
107 simple_binning() = default;
108 simple_binning(simple_binning const &) = delete;
112 ~simple_binning() = default;
113
124 simple_binning(data_store & data_, size_t const num_bins = 0) :
125 data{std::addressof(data_)},
126 num_user_bins{data->positions.size()},
127 num_technical_bins{num_bins ? num_bins : next_multiple_of_64(num_user_bins)}
128 {
129 assert(data != nullptr);
130
131 if (num_user_bins > num_technical_bins)
132 {
133 throw std::runtime_error{"You cannot have less technical bins than user bins for this simple binning "
134 "algorithm. Please see the hierarchical_binning algorithm or increase the number "
135 "of technical bins."};
136 }
137 }
138
139 size_t get_num_technical_bins() const
140 {
141 return num_technical_bins;
142 }
143
145 size_t execute();
146};
147
148} // namespace seqan::hibf::layout
Distributes x Technical Bins across y User Bins while minimizing the maximal Technical Bin size.
Definition simple_binning.hpp:87
simple_binning & operator=(simple_binning const &)=delete
Deleted. Would modify same data.
size_t execute()
Executes the simple binning algorithm and layouts user bins into technical bins.
simple_binning(simple_binning const &)=delete
Deleted. Would modify same data.
simple_binning(data_store &data_, size_t const num_bins=0)
The constructor from user bin names, their kmer counts and a configuration.
Definition simple_binning.hpp:124
~simple_binning()=default
Defaulted.
simple_binning(simple_binning &&)=default
Defaulted.
simple_binning()=default
Defaulted.
simple_binning & operator=(simple_binning &&)=default
Defaulted.
constexpr size_t next_multiple_of_64(size_t const value) noexcept
Returns the smallest integer that is greater or equal to value and a multiple of 64....
Definition next_multiple_of_64.hpp:18
Contains information used for the layout.
Definition data_store.hpp:25