23 namespace seqan3::detail
30 template <
typename alignment_configuration_t>
31 class policy_affine_gap_recursion_banded :
protected policy_affine_gap_recursion<alignment_configuration_t>
35 using base_policy_t = policy_affine_gap_recursion<alignment_configuration_t>;
37 using typename base_policy_t::traits_type;
38 using typename base_policy_t::score_type;
39 using typename base_policy_t::affine_cell_type;
42 using base_policy_t::gap_extension_score;
43 using base_policy_t::gap_open_score;
48 policy_affine_gap_recursion_banded() =
default;
49 policy_affine_gap_recursion_banded(policy_affine_gap_recursion_banded
const &) =
default;
50 policy_affine_gap_recursion_banded(policy_affine_gap_recursion_banded &&) =
default;
51 policy_affine_gap_recursion_banded & operator=(policy_affine_gap_recursion_banded
const &) =
default;
52 policy_affine_gap_recursion_banded & operator=(policy_affine_gap_recursion_banded &&) =
default;
53 ~policy_affine_gap_recursion_banded() =
default;
64 explicit policy_affine_gap_recursion_banded(alignment_configuration_t
const & config) : base_policy_t{config}
84 template <
typename affine_cell_t>
86 requires is_type_specialisation_of_v<affine_cell_t, affine_cell_proxy>
88 affine_cell_type initialise_band_first_cell(score_type diagonal_score,
89 affine_cell_t previous_cell,
90 score_type
const sequence_score)
const noexcept
92 diagonal_score += sequence_score;
93 score_type horizontal_score = previous_cell.horizontal_score();
95 diagonal_score = (diagonal_score < horizontal_score) ? horizontal_score : diagonal_score;
97 score_type from_optimal_score = diagonal_score + gap_open_score;
98 horizontal_score += gap_extension_score;
99 horizontal_score = (horizontal_score < from_optimal_score) ? from_optimal_score : horizontal_score;
100 return {diagonal_score, horizontal_score, from_optimal_score};