30 template <
typename derived_t,
typename traits_type = default_affine_init_traits>
31 class affine_gap_banded_init_policy :
32 public affine_gap_init_policy<affine_gap_banded_init_policy<derived_t, traits_type>, traits_type>
37 using base_t = affine_gap_init_policy<affine_gap_banded_init_policy<derived_t, traits_type>, traits_type>;
45 constexpr affine_gap_banded_init_policy() noexcept = default;
46 constexpr affine_gap_banded_init_policy(affine_gap_banded_init_policy const &) noexcept = default;
47 constexpr affine_gap_banded_init_policy(affine_gap_banded_init_policy &&) noexcept = default;
48 constexpr affine_gap_banded_init_policy & operator=(affine_gap_banded_init_policy const &) noexcept = default;
51 constexpr affine_gap_banded_init_policy & operator=(affine_gap_banded_init_policy &&) noexcept = default;
52 ~affine_gap_banded_init_policy() noexcept = default;
61 template <typename cell_t, typename cache_t>
62 constexpr auto init_origin_cell(cell_t && current_cell, cache_t & cache) const noexcept
67 auto & [main_score, hz_score, hz_trace] = get<0>(get<0>(current_cell));
68 auto & trace_value = get<2>(current_cell);
69 auto & vt_score = get<1>(get<0>(cache));
70 auto & vt_trace = get<2>(get<0>(cache));
75 if constexpr (traits_type::free_second_leading_t::value)
78 vt_trace = trace_directions::none;
82 vt_score = get<1>(cache);
83 vt_trace = trace_directions::up_open;
86 if constexpr (traits_type::free_first_leading_t::value)
89 hz_trace = trace_directions::none;
93 hz_score = get<1>(cache);
94 hz_trace = trace_directions::left_open;
96 trace_value = trace_directions::none;
105 template <
typename cell_t,
typename cache_t>
106 constexpr
auto init_column_cell(cell_t && current_cell, cache_t & cache)
const noexcept
111 auto & [main_score, hz_score, hz_trace] = get<0>(get<0>(current_cell));
112 auto & trace_value = get<2>(current_cell);
113 auto & vt_score = get<1>(get<0>(cache));
114 auto & vt_trace = get<2>(get<0>(cache));
116 main_score = vt_score;
117 trace_value = vt_trace;
120 if constexpr (traits_type::free_second_leading_t::value)
123 vt_trace = trace_directions::none;
127 vt_score += get<2>(cache);
128 vt_trace = trace_directions::up;
130 hz_score = main_score + get<1>(cache);
131 hz_trace = trace_directions::left_open;
140 template <
typename cell_t,
typename cache_t>
141 constexpr
auto init_row_cell(cell_t && current_cell, cache_t & cache)
const noexcept
143 auto & [current_entry, next_entry] = get<0>(current_cell);
144 auto & trace_value = get<2>(current_cell);
145 auto & main_score = get<0>(current_entry);
146 auto & hz_trace = get<2>(current_entry);
147 auto const & prev_hz_score = get<1>(next_entry);
148 auto const & prev_hz_trace = get<2>(next_entry);
149 auto & vt_score = get<1>(get<0>(cache));
150 auto & vt_trace = get<2>(get<0>(cache));
152 main_score = prev_hz_score;
153 trace_value = prev_hz_trace;
154 vt_score += main_score + get<1>(cache);
155 vt_trace = trace_directions::up_open;
158 if constexpr (traits_type::free_first_leading_t::value)
160 get<1>(current_entry) = 0;
161 hz_trace = trace_directions::none;
165 get<1>(current_entry) = prev_hz_score + get<2>(cache);
166 hz_trace = trace_directions::left;
183 template <
typename optimum_type,
typename band_type,
typename gap_scheme_type>
184 constexpr
void balance_leading_gaps(optimum_type & total,
185 band_type
const & band,
186 gap_scheme_type
const & scheme)
const noexcept
188 if constexpr (!traits_type::free_second_leading_t::value)
190 if (0 > band.upper_bound)
191 total.score += scheme.score(std::abs(band.upper_bound));
193 if constexpr (!traits_type::free_first_leading_t::value)
195 if (band.lower_bound > 0)
196 total.score += scheme.score(band.lower_bound);
Provides seqan3::align_cfg::aligned_ends.
Provides seqan3::detail::affine_gap_init_policy.
Definition: aligned_sequence_concept.hpp:35
auto const get
A view calling std::get on each element in a range.
Definition: get.hpp:66
Provides seqan3::detail::configuration and utility functions.