SeqAn3 3.4.0-rc.1
The Modern C++ library for sequence analysis.
Loading...
Searching...
No Matches
policy_affine_gap_with_trace_recursion_banded.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
13
14namespace seqan3::detail
15{
16
22template <typename alignment_configuration_t>
23class policy_affine_gap_with_trace_recursion_banded :
24 protected policy_affine_gap_with_trace_recursion<alignment_configuration_t>
25{
26protected:
28 using base_t = policy_affine_gap_with_trace_recursion<alignment_configuration_t>;
29 // Import base types.
30 using typename base_t::affine_cell_type;
31 using typename base_t::score_type;
32 using typename base_t::traits_type;
33
34 // Import base member.
35 using base_t::gap_extension_score;
36 using base_t::gap_open_score;
37
41 policy_affine_gap_with_trace_recursion_banded() = default;
43 policy_affine_gap_with_trace_recursion_banded(policy_affine_gap_with_trace_recursion_banded const &) = default;
45 policy_affine_gap_with_trace_recursion_banded(policy_affine_gap_with_trace_recursion_banded &&) = default;
46 policy_affine_gap_with_trace_recursion_banded &
47 operator=(policy_affine_gap_with_trace_recursion_banded const &) = default;
48 policy_affine_gap_with_trace_recursion_banded &
49 operator=(policy_affine_gap_with_trace_recursion_banded &&) = default;
50 ~policy_affine_gap_with_trace_recursion_banded() = default;
51
53 explicit policy_affine_gap_with_trace_recursion_banded(alignment_configuration_t const & config) : base_t{config}
54 {}
56
58 template <typename affine_cell_t>
59 affine_cell_type initialise_band_first_cell(score_type diagonal_score,
60 affine_cell_t previous_cell,
61 score_type const sequence_score) const noexcept
62 {
63 diagonal_score += sequence_score;
64 score_type horizontal_score = previous_cell.horizontal_score();
65 trace_directions best_trace{};
66
67 best_trace = previous_cell.horizontal_trace();
68 diagonal_score = (diagonal_score < horizontal_score)
69 ? horizontal_score
70 : (best_trace |= trace_directions::diagonal, diagonal_score);
71
72 score_type from_optimal_score = diagonal_score + gap_open_score;
73 trace_directions next_horizontal_trace = trace_directions::left;
74
75 horizontal_score += gap_extension_score;
76 horizontal_score = (horizontal_score < from_optimal_score)
77 ? (next_horizontal_trace = trace_directions::left_open, from_optimal_score)
78 : horizontal_score;
79
80 return {{diagonal_score, horizontal_score, from_optimal_score},
81 {best_trace, next_horizontal_trace, trace_directions::up_open}};
82 }
83};
84} // namespace seqan3::detail
Provides seqan3::detail::policy_affine_gap_with_trace_recursion.
Hide me