24namespace seqan3::detail
46template <
typename alignment_algorithm_t,
typename score_matrix_t,
typename trace_matrix_t>
47class alignment_matrix_policy
51 friend alignment_algorithm_t;
56 constexpr alignment_matrix_policy() =
default;
57 constexpr alignment_matrix_policy(alignment_matrix_policy
const &) =
default;
58 constexpr alignment_matrix_policy(alignment_matrix_policy &&) =
default;
59 constexpr alignment_matrix_policy & operator=(alignment_matrix_policy
const &) =
default;
60 constexpr alignment_matrix_policy & operator=(alignment_matrix_policy &&) =
default;
61 ~alignment_matrix_policy() =
default;
64 template <
typename configuration_t>
65 alignment_matrix_policy(configuration_t
const & )
81 template <
typename sequence1_t,
typename sequence2_t>
82 constexpr void allocate_matrix(sequence1_t && sequence1, sequence2_t && sequence2)
84 score_matrix = score_matrix_t{sequence1, sequence2};
85 trace_matrix = trace_matrix_t{sequence1, sequence2};
87 initialise_matrix_iterator();
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,
115 alignment_algorithm_state<score_t>
const & state)
117 assert(state.gap_extension_score <= 0);
120 score_matrix = score_matrix_t{sequence1, sequence2, band, inf};
121 trace_matrix = trace_matrix_t{sequence1, sequence2, band};
123 initialise_matrix_iterator();
127 constexpr void initialise_matrix_iterator() noexcept
129 score_matrix_iter = score_matrix.begin();
130 trace_matrix_iter = trace_matrix.begin();
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
150 size_t seq1_size = std::ranges::distance(sequence1);
151 size_t seq2_size = std::ranges::distance(sequence2);
153 auto trim_sequence1 = [&]()
constexpr
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);
160 auto trim_sequence2 = [&]()
constexpr
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);
167 return std::tuple{trim_sequence1(), trim_sequence2()};
178 constexpr auto current_alignment_column() noexcept
180 assert(!std::ranges::empty(*score_matrix_iter));
181 assert(!std::ranges::empty(*trace_matrix_iter));
183 return views::zip(*score_matrix_iter, *trace_matrix_iter);
192 constexpr void next_alignment_column() noexcept
198 score_matrix_t score_matrix{};
199 trace_matrix_t trace_matrix{};
201 typename score_matrix_t::iterator score_matrix_iter{};
202 typename trace_matrix_t::iterator trace_matrix_iter{};
Provides seqan3::detail::align_config_band.
Provides seqan3::detail::alignment_algorithm_state.
Provides various type traits on generic types.
constexpr auto slice
A view adaptor that returns a half-open interval on the underlying range.
Definition: slice.hpp:178
seqan::std::views::zip zip
A view adaptor that takes several views and returns tuple-like values from every i-th element of each...
Definition: zip.hpp:27
Provides seqan3::views::slice.
Provides seqan3::views::zip.