SeqAn3 3.4.0-rc.1
The Modern C++ library for sequence analysis.
Loading...
Searching...
No Matches
find_optimum_policy.hpp
Go to the documentation of this file.
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
10#pragma once
11
12#include <type_traits>
13
17
18namespace seqan3::detail
19{
20
31template <typename alignment_algorithm_t>
33{
34private:
37
39 bool test_every_cell{false};
41 bool test_last_row_cell{false};
44
48 constexpr find_optimum_policy() = default;
49 constexpr find_optimum_policy(find_optimum_policy const &) = default;
50 constexpr find_optimum_policy(find_optimum_policy &&) = default;
51 constexpr find_optimum_policy & operator=(find_optimum_policy const &) = default;
54
56 template <typename configuration_t>
57 find_optimum_policy(configuration_t const & config)
58 {
59 if constexpr (configuration_t::template exists<align_cfg::method_local>())
60 test_every_cell = true;
61
62 auto method_global_config = config.get_or(align_cfg::method_global{});
63 test_last_row_cell = method_global_config.free_end_gaps_sequence1_trailing;
64 test_last_column_cell = method_global_config.free_end_gaps_sequence2_trailing;
65 }
67
68protected:
80 template <typename cell_t, typename score_t>
81 constexpr void check_score_of_cell([[maybe_unused]] cell_t const & current_cell,
82 [[maybe_unused]] alignment_algorithm_state<score_t> & state) const noexcept
83 {
85 check_and_update(current_cell, state);
86 }
87
89 template <typename other_alignment_algorithm_t, typename score_t, typename is_local_t>
90 friend class affine_gap_policy;
91
92 template <typename other_alignment_algorithm_t, simd_concept score_t, typename is_local_t>
93 friend class simd_affine_gap_policy;
94
96 template <typename other_alignment_algorithm_t>
98
111 template <typename cell_t, typename score_t>
112 constexpr void
113 check_score_of_last_row_cell([[maybe_unused]] cell_t const & last_row_cell,
114 [[maybe_unused]] alignment_algorithm_state<score_t> & state) const noexcept
115 {
116 // Only search in last row if requested and not done already.
118 check_and_update(last_row_cell, state);
119 }
120
133 template <typename alignment_column_t, typename score_t>
134 constexpr void
135 check_score_of_cells_in_last_column([[maybe_unused]] alignment_column_t && last_column,
136 [[maybe_unused]] alignment_algorithm_state<score_t> & state) const noexcept
137 {
138 // Only check last cell if not done before.
140 for (auto && cell : last_column)
141 check_and_update(cell, state);
142 }
143
156 template <typename cell_t, typename score_t>
157 constexpr void check_score_of_last_cell([[maybe_unused]] cell_t const & last_cell,
158 [[maybe_unused]] alignment_algorithm_state<score_t> & state) const noexcept
159 {
160 // Only check last cell if not done before.
162 check_and_update(last_cell, state);
163 }
164
173 template <typename cell_t, typename score_t>
174 constexpr void check_and_update(cell_t const & cell, alignment_algorithm_state<score_t> & state) const noexcept
175 {
176 auto const & [score_cell, trace_cell] = cell;
177 state.optimum.update_if_new_optimal_score(score_cell.current,
178 column_index_type{trace_cell.coordinate.first},
179 row_index_type{trace_cell.coordinate.second});
180 }
181};
182
183} // namespace seqan3::detail
Provides global and local alignment configurations.
Provides seqan3::detail::alignment_algorithm_state.
Provides seqan3::detail::alignment_optimum.
Sets the global alignment method.
Definition align_config_method.hpp:119
The CRTP-policy that implements the initialisation of the dynamic programming matrix with affine gaps...
Definition affine_gap_init_policy.hpp:34
The CRTP-policy that computes a single cell in the alignment matrix.
Definition affine_gap_policy.hpp:44
The CRTP-policy to determine the optimum of the dynamic programming matrix.
Definition find_optimum_policy.hpp:33
~find_optimum_policy()=default
Defaulted.
constexpr void check_score_of_cells_in_last_column(alignment_column_t &&last_column, alignment_algorithm_state< score_t > &state) const noexcept
Checks all cells of the last alignment column for a new alignment optimum.
Definition find_optimum_policy.hpp:135
constexpr find_optimum_policy & operator=(find_optimum_policy &&)=default
Defaulted.
constexpr void check_score_of_last_cell(cell_t const &last_cell, alignment_algorithm_state< score_t > &state) const noexcept
Checks if the last cell of the alignment matrix is a new optimum in the alignment.
Definition find_optimum_policy.hpp:157
friend alignment_algorithm_t
Befriends the derived class to grant it access to the private members.
Definition find_optimum_policy.hpp:36
constexpr void check_and_update(cell_t const &cell, alignment_algorithm_state< score_t > &state) const noexcept
Tests if the score in the current cell is greater than the current alignment optimum.
Definition find_optimum_policy.hpp:174
constexpr void check_score_of_last_row_cell(cell_t const &last_row_cell, alignment_algorithm_state< score_t > &state) const noexcept
Checks if a cell in the last row of the alignment matrix is a new optimum in the alignment.
Definition find_optimum_policy.hpp:113
constexpr void check_score_of_cell(cell_t const &current_cell, alignment_algorithm_state< score_t > &state) const noexcept
Checks if a given cell is a new optimum in the alignment.
Definition find_optimum_policy.hpp:81
bool test_last_column_cell
Whether cells of the last column shall be tracked.
Definition find_optimum_policy.hpp:43
constexpr find_optimum_policy()=default
Defaulted.
bool test_every_cell
Whether every cell of the alignment matrix shall be tracked.
Definition find_optimum_policy.hpp:39
bool test_last_row_cell
Whether cells of the last row shall be tracked.
Definition find_optimum_policy.hpp:41
constexpr find_optimum_policy & operator=(find_optimum_policy const &)=default
Defaulted.
constexpr find_optimum_policy(find_optimum_policy &&)=default
Defaulted.
find_optimum_policy(configuration_t const &config)
Initialises the policy with the configuration.
Definition find_optimum_policy.hpp:57
constexpr find_optimum_policy(find_optimum_policy const &)=default
Defaulted.
The CRTP-policy that computes a batch of cells in the alignment matrix using simd instructions.
Definition simd_affine_gap_policy.hpp:51
The internal SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
Local state for the standard alignment algorithm.
Definition alignment_algorithm_state.hpp:32
A strong type for designated initialisation of the column index of a matrix.
Definition matrix_coordinate.hpp:29
A strong type for designated initialisation of the row index of a matrix.
Definition matrix_coordinate.hpp:58
Hide me