HIBF 1.0.0-rc.1
Loading...
Searching...
No Matches
config.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 <cinttypes> // for uint32_t, uint8_t
8#include <cstddef> // for size_t
9#include <functional> // for function
10#include <iosfwd> // for istream, ostream
11
12#include <cereal/access.hpp> // for access
13#include <cereal/cereal.hpp> // for make_nvp, CEREAL_NVP
14
15#include <hibf/misc/insert_iterator.hpp> // for insert_iterator
16#include <hibf/platform.hpp>
17
18namespace seqan::hibf
19{
20
73struct config
74{
109 std::function<void(size_t const, insert_iterator &&)> input_fn{};
110
121
133
150 double maximum_fpr{0.05};
151
178 double relaxed_fpr{0.3};
179
191 size_t threads{1u};
193
210 uint8_t sketch_bits{12};
211
229 size_t tmax{};
230
246 double alpha{1.2};
247
261
272
284
285 void read_from(std::istream & stream);
286 void write_to(std::ostream & stream) const;
287
314
316 constexpr bool operator==(config const & other) const
317 {
318 // clang-format off
320 maximum_fpr == other.maximum_fpr &&
321 relaxed_fpr == other.relaxed_fpr &&
322 threads == other.threads &&
323 sketch_bits == other.sketch_bits &&
324 tmax == other.tmax &&
325 alpha == other.alpha &&
329 // clang-format on
330 }
331
332private:
333 friend class cereal::access;
334
335 template <typename archive_t>
336 void serialize(archive_t & archive)
337 {
338 uint32_t version{1};
339 archive(CEREAL_NVP(version));
340
341 archive(CEREAL_NVP(number_of_user_bins));
342 archive(CEREAL_NVP(number_of_hash_functions));
343 archive(CEREAL_NVP(maximum_fpr));
344 archive(CEREAL_NVP(relaxed_fpr));
345 archive(CEREAL_NVP(threads));
346
347 archive(CEREAL_NVP(sketch_bits));
348 archive(CEREAL_NVP(tmax));
349 archive(CEREAL_NVP(alpha));
350 archive(CEREAL_NVP(max_rearrangement_ratio));
351 archive(CEREAL_NVP(disable_estimate_union));
352 archive(CEREAL_NVP(disable_rearrangement));
353 }
354};
355
356} // namespace seqan::hibf
Definition insert_iterator.hpp:24
Provides platform and dependency checks.
The configuration used to build an (H)IBF.
Definition config.hpp:74
uint8_t sketch_bits
The number of bits for HyperLogLog sketches.
Definition config.hpp:210
void validate_and_set_defaults()
Checks several variables of seqan::hibf::config and sets default values if necessary.
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
bool disable_estimate_union
Whether to disable union estimate of user bins to improve the layout.
Definition config.hpp:271
double alpha
A scaling factor to influence the amount of merged bins produced by the layout algorithm.
Definition config.hpp:246
bool disable_rearrangement
Whether to disable rearranging user bins based on their content similarity.
Definition config.hpp:282
size_t number_of_user_bins
The number of user bins.
Definition config.hpp:120
constexpr bool operator==(config const &other) const
Two configs are equal if all options, except seqan::hibf::config::input_fn, are equal.
Definition config.hpp:316
double relaxed_fpr
Allow a higher FPR in non-accuracy-critical parts of the HIBF structure.
Definition config.hpp:178
size_t threads
The number of threads to use during construction. [RECOMMENDED_TO_ADAPT].
Definition config.hpp:191
std::function< void(size_t const, insert_iterator &&) input_fn)
A function for how to hash your input [REQUIRED].
Definition config.hpp:109
double max_rearrangement_ratio
The maximal cardinality ratio in the clustering intervals of the layout rearrangement algorithm.
Definition config.hpp:260
size_t tmax
The maximum number of technical bins of each IBF in the HIBF.
Definition config.hpp:229