HIBF 1.0.0-rc.1
Loading...
Searching...
No Matches
minhashes.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2006-2026, Knut Reinert & Freie Universität Berlin
2// SPDX-FileCopyrightText: 2016-2026, Knut Reinert & MPI für molekulare Genetik
3// SPDX-License-Identifier: BSD-3-Clause
4
10#pragma once
11
12#include <cstddef> // for size_t
13#include <cstdint> // for uint64_t, uint32_t
14#include <span> // for span
15#include <vector> // for vector
16
17#include <cereal/access.hpp> // for access
18#include <cereal/cereal.hpp> // for make_nvp, CEREAL_NVP
19
20#include <hibf/platform.hpp>
21
22namespace seqan::hibf::sketch
23{
24
36{
37 static constexpr uint64_t register_id_mask{15};
38 static constexpr size_t num_sketches{16}; // lsh parameter b
39 static constexpr size_t sketch_size{40}; // lsh parameter r
40
42 {
43 std::vector<uint64_t> hashes{};
44
45 bool is_valid() const
46 {
47 return hashes.size() == sketch_size;
48 }
49
50 private:
51 friend class cereal::access;
52
53 template <typename archive_t>
54 void serialize(archive_t & archive)
55 {
56 archive(CEREAL_NVP(hashes));
57 }
58 };
59
62
66 minhashes() = default;
67 minhashes(minhashes const &) = default;
68 minhashes & operator=(minhashes const &) = default;
69 minhashes(minhashes &&) = default;
70 minhashes & operator=(minhashes &&) = default;
71 ~minhashes() = default;
73 minhashes(std::vector<uint64_t> const & smallest_values);
75
77 bool is_valid() const;
78
80 void fill_incomplete_sketches(std::span<uint64_t> const & more_smallest_values);
81
83 static void push_to_heap_if_smaller(uint64_t const value, std::vector<uint64_t> & heap);
84
85private:
86 friend class cereal::access;
87
88 template <typename archive_t>
89 void serialize(archive_t & archive)
90 {
91 uint32_t version{1};
92 archive(CEREAL_NVP(version));
93
94 // other members are const static currently
95 archive(CEREAL_NVP(table));
96 }
97};
98
99} // namespace seqan::hibf::sketch
Provides platform and dependency checks.
T size(T... args)
MinHash sketches design to be used for Locality sensitive hashing.
Definition minhashes.hpp:36
minhashes(minhashes const &)=default
Defaulted.
minhashes(std::vector< uint64_t > const &smallest_values)
construct from a vector of the smallest values in a set (sorted ascending).
minhashes()=default
Defaulted.
bool is_valid() const
Checks whether the minHash table is completely filled.
static void push_to_heap_if_smaller(uint64_t const value, std::vector< uint64_t > &heap)
Pushes wyhash(value) to the heap if it is smaller than the current largest element.
static constexpr size_t num_sketches
...00001111
Definition minhashes.hpp:38
minhashes(minhashes &&)=default
Defaulted.
minhashes & operator=(minhashes const &)=default
Defaulted.
minhashes & operator=(minhashes &&)=default
Defaulted.
std::vector< minhash_sketch > table
A table of minhash sketches. For LSH we need multiple sketches, stored in a table.
Definition minhashes.hpp:61
void fill_incomplete_sketches(std::span< uint64_t > const &more_smallest_values)
Adds more minhash values to an existing but incomplete table.