SeqAn3 3.4.0-rc.1
The Modern C++ library for sequence analysis.
|
The CRTP-policy to determine the optimum of the dynamic programming matrix. More...
#include <seqan3/alignment/pairwise/policy/simd_find_optimum_policy.hpp>
Protected Member Functions | |
template<typename cell_t , typename score_t > | |
constexpr void | check_score_of_cell (cell_t const ¤t_cell, alignment_algorithm_state< score_t > &state) const noexcept |
Checks if a given cell is a new optimum in the alignment. | |
template<typename alignment_column_t , typename score_t > | |
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. | |
template<typename cell_t , typename score_t > | |
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. | |
template<typename cell_t , typename score_t > | |
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. | |
template<std::ranges::forward_range sequence1_collection_t, std::ranges::forward_range sequence2_collection_t, arithmetic score_t> | |
void | initialise_find_optimum_policy (sequence1_collection_t &&sequence1_collection, sequence2_collection_t &&sequence2_collection, score_t const padding_score) |
Initialises the global alignment state for the current batch of sequences. | |
Private Member Functions | |
template<typename cell_t , typename score_t > | |
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. | |
template<bool in_last_row, typename cell_t , typename score_t > | |
constexpr void | check_and_update (cell_t const &cell, alignment_algorithm_state< score_t > &state) const noexcept |
Tests if the current row, respectively column, is part of a global alignment to track. | |
Constructors, destructor and assignment | |
constexpr | simd_find_optimum_policy ()=default |
Defaulted. | |
constexpr | simd_find_optimum_policy (simd_find_optimum_policy const &)=default |
Defaulted. | |
constexpr | simd_find_optimum_policy (simd_find_optimum_policy &&)=default |
Defaulted. | |
constexpr simd_find_optimum_policy & | operator= (simd_find_optimum_policy const &)=default |
Defaulted. | |
constexpr simd_find_optimum_policy & | operator= (simd_find_optimum_policy &&)=default |
Defaulted. | |
~simd_find_optimum_policy ()=default | |
Defaulted. | |
template<typename configuration_t > | |
simd_find_optimum_policy (configuration_t const &config) | |
Initialise the policy. | |
Friends | |
template<typename other_alignment_algorithm_t > | |
class | affine_gap_init_policy |
Allow seqan3::detail::affine_gap_init_policy to access check_score. | |
template<typename other_alignment_algorithm_t , simd_concept score_t, typename is_local_t > | |
class | simd_affine_gap_policy |
Befriend the seqan3::detail::simd_affine_gap_policy to grant access to the check_score_of_cell function. | |
Additional Inherited Members | |
Public Attributes inherited from seqan3::detail::simd_global_alignment_state< simd_t > | |
simd_t | coordinate_offset {} |
A coordinate offset that needs to be subtracted for every alignment to get the correct end position. | |
simd_t | last_column_mask {} |
A mask vector storing the row indices for alignments that end in the last column of the global matrix. | |
simd_t | last_row_mask {} |
A mask vector storing the column indices for alignments that end in the last row of the global matrix. | |
simd_t | score_offset {} |
The score offset that needs to be subtracted for every alignment to get the correct result. | |
The CRTP-policy to determine the optimum of the dynamic programming matrix.
alignment_algorithm_t | The derived type (seqan3::detail::alignment_algorithm) to be augmented with this CRTP-policy. |
simd_t | The simd vector type used for computing the scores; must model seqan3::simd::simd_concept. |
This class determines the matrix wide optimum. The search space can be further refined using the traits_type
which configures the search space of the alignment matrix.
This class inherits from seqan3::detail::simd_global_alignment_state if it is a global alignment, otherwise it inherits from seqan3::detail::empty_type that is optimised away due to empty base class optimisation. The tracking behaviour for the optimum of the global alignment is slightly modified compared to the local alignment or free end gap computation. Specifically, instead of checking for a new optimal score the coordinates are checked. For the global alignment the cell which contains the optimum is already fixed (the sink of each matrix). To account for different sizes of the sequences a padding match score is used to always add match scores after the end of a smaller sequence has been reached. Accordingly, the target score will be mapped to a cell on the last row or last column of the global matrix. Note the dimensions of the global matrix is defined by the size of the longest sequence in collection 1 and 2 respectively. If the last cell of any of the contained matrices is projected to a cell on the last row (following the diagonal going through the sink of this particular matrix), then the column indices are tested to check if any sequence ends in this projected end point. Similarly, if the last cell is projected to a cell on the last column, then the row indices are compared. The found score as well as the indices are finally corrected to represent the original score and coordinates as if the sequence pair was computed in scalar mode.
|
inlineconstexprprivatenoexcept |
Tests if the score in the current cell is greater than the current alignment optimum.
cell_t | The type of the alignment matrix cell. The cell type corresponds to the value type of the range returned by seqan3::detail::alignment_matrix_policy::current_alignment_column. |
score_t | The alignment algorithm score type. |
[in] | cell | The current cell to get the score and the coordinate from. |
[in,out] | state | The state with the current optimum to update. |
|
inlineconstexprprivatenoexcept |
Tests if the current row, respectively column, is part of a global alignment to track.
in_last_row | A bool constant to indicate whether this check is done for the last row. |
cell_t | The type of the alignment matrix cell. The cell type corresponds to the value type of the range returned by seqan3::detail::alignment_matrix_policy::current_alignment_column. |
score_t | The alignment algorithm score type. |
[in] | cell | The current cell to get the score and the coordinate from. |
[in,out] | state | The state with the current optimum to update. |
Checks for the last row if the current column coordinate matches any column coordinate stored in the mask for the last row, respectively for the last column if the current row coordinate matches any row coordinate stored in the mask for the last column.
|
inlineconstexprprotectednoexcept |
Checks if a given cell is a new optimum in the alignment.
cell_t | The type of the alignment matrix cell. |
score_t | The type of the score. |
[in] | current_cell | The currently computed alignment matrix cell. |
[in,out] | state | The state with the current optimum to update. |
This function resolves to a "NO-OP" function if the trait for searching every cell is set to std::false_type.
|
inlineconstexprprotectednoexcept |
Checks all cells of the last alignment column for a new alignment optimum.
alignment_column_t | The type of an alignment column. |
score_t | The type of the optimal score. |
[in] | last_column | The last column of the alignment matrix. |
[in,out] | state | The state with the current optimum to update. |
This function resolves to a "NO-OP" function if the trait for searching the last column is set to std::false_type or if the trait for searching every cell is set to std::true_type.
|
inlineconstexprprotectednoexcept |
Checks if the last cell of the alignment matrix is a new optimum in the alignment.
cell_t | The type of the last cell. |
score_t | The type of the score. |
[in] | last_cell | The last cell of the alignment matrix. |
[in,out] | state | The state with the current optimum to update. |
This function resolves to a "NO-OP" function if the last cell has been checked already as part of the last row, last column, or in case every cell was checked.
|
inlineconstexprprotectednoexcept |
Checks if a cell in the last row of the alignment matrix is a new optimum in the alignment.
cell_t | The type of the alignment matrix cell. |
score_t | The type of the score. |
[in] | last_row_cell | The cell of the current column in the last row of the alignment matrix. |
[in,out] | state | The state with the current optimum to update. |
This function resolves to a "NO-OP" function if the trait for searching the last row is set to std::false_type or if the trait for searching every cell is set to std::true_type.
|
inlineprotected |
Initialises the global alignment state for the current batch of sequences.
sequence1_collection_t | The type of the first collection; must model std::ranges::forward_range and the value type must model std::ranges::forward_range. |
sequence2_collection_t | The type of the second collection; must model std::ranges::forward_range and the value type must model std::ranges::forward_range. |
score_t | The type of the scoring scheme's padding score; must model seqan3::arithmetic. |
[in] | sequence1_collection | The first collection used for initialisation. |
[in] | sequence2_collection | The second collection used for initialisation. |
[in] | padding_score | The padding match score used for determining the resulting score offset. |