SeqAn3 3.3.0-rc.1
The Modern C++ library for sequence analysis.
alignment_matrix_policy.hpp
Go to the documentation of this file.
1// -----------------------------------------------------------------------------------------------------
2// Copyright (c) 2006-2022, Knut Reinert & Freie Universität Berlin
3// Copyright (c) 2016-2022, Knut Reinert & MPI für molekulare Genetik
4// This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5// shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
6// -----------------------------------------------------------------------------------------------------
7
13#pragma once
14
15#include <limits>
16#include <tuple>
17
23
24namespace seqan3::detail
25{
26
46template <typename alignment_algorithm_t, typename score_matrix_t, typename trace_matrix_t>
48{
49private:
52
56 constexpr alignment_matrix_policy() = default;
57 constexpr alignment_matrix_policy(alignment_matrix_policy const &) = default;
62
64 template <typename configuration_t>
65 alignment_matrix_policy(configuration_t const & /*config*/)
66 {}
68
81 template <typename sequence1_t, typename sequence2_t>
82 constexpr void allocate_matrix(sequence1_t && sequence1, sequence2_t && sequence2)
83 {
84 score_matrix = score_matrix_t{sequence1, sequence2};
85 trace_matrix = trace_matrix_t{sequence1, sequence2};
86
88 }
89
111 template <typename sequence1_t, typename sequence2_t, typename score_t>
112 constexpr void allocate_matrix(sequence1_t && sequence1,
113 sequence2_t && sequence2,
114 align_cfg::band_fixed_size const & band,
116 {
117 assert(state.gap_extension_score <= 0); // We expect it to never be positive.
118
120 score_matrix = score_matrix_t{sequence1, sequence2, band, inf};
121 trace_matrix = trace_matrix_t{sequence1, sequence2, band};
122
124 }
125
127 constexpr void initialise_matrix_iterator() noexcept
128 {
131 }
132
145 template <typename sequence1_t, typename sequence2_t>
146 constexpr auto slice_sequences(sequence1_t & sequence1,
147 sequence2_t & sequence2,
148 align_cfg::band_fixed_size const & band) const noexcept
149 {
150 size_t seq1_size = std::ranges::distance(sequence1);
151 size_t seq2_size = std::ranges::distance(sequence2);
152
153 auto trim_sequence1 = [&]() constexpr
154 {
155 size_t begin_pos = std::max<std::ptrdiff_t>(band.lower_diagonal - 1, 0);
156 size_t end_pos = std::min<std::ptrdiff_t>(band.upper_diagonal + seq2_size, seq1_size);
157 return sequence1 | views::slice(begin_pos, end_pos);
158 };
159
160 auto trim_sequence2 = [&]() constexpr
161 {
162 size_t begin_pos = std::abs(std::min<std::ptrdiff_t>(band.upper_diagonal + 1, 0));
163 size_t end_pos = std::min<std::ptrdiff_t>(seq1_size - band.lower_diagonal, seq2_size);
164 return sequence2 | views::slice(begin_pos, end_pos);
165 };
166
167 return std::tuple{trim_sequence1(), trim_sequence2()};
168 }
169
178 constexpr auto current_alignment_column() noexcept
179 {
180 assert(!std::ranges::empty(*score_matrix_iter));
181 assert(!std::ranges::empty(*trace_matrix_iter));
182
184 }
185
192 constexpr void next_alignment_column() noexcept
193 {
196 }
197
198 score_matrix_t score_matrix{};
199 trace_matrix_t trace_matrix{};
200
201 typename score_matrix_t::iterator score_matrix_iter{};
202 typename trace_matrix_t::iterator trace_matrix_iter{};
203};
204} // namespace seqan3::detail
Provides seqan3::detail::align_config_band.
Provides seqan3::detail::alignment_algorithm_state.
Provides various type traits on generic types.
Configuration element for setting a fixed size band.
Definition: align_config_band.hpp:63
Manages the alignment and score matrix.
Definition: alignment_matrix_policy.hpp:48
score_matrix_t::iterator score_matrix_iter
The matrix iterator over the score matrix.
Definition: alignment_matrix_policy.hpp:201
constexpr alignment_matrix_policy(alignment_matrix_policy const &)=default
Defaulted.
constexpr void allocate_matrix(sequence1_t &&sequence1, sequence2_t &&sequence2, align_cfg::band_fixed_size const &band, alignment_algorithm_state< score_t > const &state)
Allocates the memory of the underlying matrices.
Definition: alignment_matrix_policy.hpp:112
constexpr auto current_alignment_column() noexcept
Returns the current alignment column.
Definition: alignment_matrix_policy.hpp:178
constexpr void initialise_matrix_iterator() noexcept
Initialises the score and trace matrix iterator after allocating the matrices.
Definition: alignment_matrix_policy.hpp:127
constexpr alignment_matrix_policy()=default
Defaulted.
trace_matrix_t trace_matrix
The trace matrix if needed.
Definition: alignment_matrix_policy.hpp:199
~alignment_matrix_policy()=default
Defaulted.
constexpr void next_alignment_column() noexcept
Moves to the next alignment column.
Definition: alignment_matrix_policy.hpp:192
trace_matrix_t::iterator trace_matrix_iter
The matrix iterator over the trace matrix.
Definition: alignment_matrix_policy.hpp:202
constexpr alignment_matrix_policy & operator=(alignment_matrix_policy &&)=default
Defaulted.
constexpr alignment_matrix_policy(alignment_matrix_policy &&)=default
Defaulted.
alignment_matrix_policy(configuration_t const &)
Initialise the policy.
Definition: alignment_matrix_policy.hpp:65
friend alignment_algorithm_t
Allow alignment algorithm to instantiate this crtp base class.
Definition: alignment_matrix_policy.hpp:51
constexpr alignment_matrix_policy & operator=(alignment_matrix_policy const &)=default
Defaulted.
score_matrix_t score_matrix
The scoring matrix.
Definition: alignment_matrix_policy.hpp:198
constexpr auto slice_sequences(sequence1_t &sequence1, sequence2_t &sequence2, align_cfg::band_fixed_size const &band) const noexcept
Slices the sequences according to the band parameters.
Definition: alignment_matrix_policy.hpp:146
constexpr void allocate_matrix(sequence1_t &&sequence1, sequence2_t &&sequence2)
}
Definition: alignment_matrix_policy.hpp:82
@ band
ID for the band option.
constexpr auto slice
A view adaptor that returns a half-open interval on the underlying range.
Definition: slice.hpp:178
constexpr auto zip
A view adaptor that takes several views and returns tuple-like values from every i-th element of each...
Definition: zip.hpp:573
T lowest(T... args)
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
Provides seqan3::views::slice.
score_type gap_extension_score
The cached gap extension score.
Definition: alignment_algorithm_state.hpp:37
Provides seqan3::views::zip.