SeqAn3  3.2.0
The Modern C++ library for sequence analysis.
align_result_selector.hpp
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------------------------------
2 // Copyright (c) 2006-2022, Knut Reinert & Freie Universität Berlin
3 // Copyright (c) 2016-2022, Knut Reinert & MPI für molekulare Genetik
4 // This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5 // shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
6 // -----------------------------------------------------------------------------------------------------
7 
13 #pragma once
14 
15 #include <optional>
16 #include <ranges>
17 #include <type_traits>
18 
33 
34 namespace seqan3::detail
35 {
42 template <std::ranges::forward_range first_range_t, std::ranges::forward_range second_range_t, typename configuration_t>
43  requires is_type_specialisation_of_v<std::remove_cvref_t<configuration_t>, configuration>
44 struct align_result_selector
45 {
46 private:
48  using traits_type = alignment_configuration_traits<configuration_t>;
50  using score_type =
51  typename alignment_configuration_traits<std::remove_reference_t<configuration_t>>::original_score_type;
53  using disabled_type = std::nullopt_t *;
55  using debug_score_matrix_type = two_dimensional_matrix<std::optional<score_type>,
57  matrix_major_order::column>;
59  using debug_trace_matrix_type = two_dimensional_matrix<std::optional<trace_directions>,
61  matrix_major_order::column>;
65  using configured_end_position_type = std::conditional_t<traits_type::compute_end_positions,
66  seqan3::detail::advanceable_alignment_coordinate<>,
67  disabled_type>;
69  using configured_begin_position_type = std::conditional_t<traits_type::compute_begin_positions,
70  seqan3::detail::advanceable_alignment_coordinate<>,
71  disabled_type>;
73  using configured_alignment_type =
74  typename lazy_conditional_t<traits_type::compute_sequence_alignment,
75  lazy<make_pairwise_alignment_type, first_range_t &, second_range_t &>,
76  std::type_identity<disabled_type>>::type;
77 
82 
84  using configured_debug_score_matrix_type =
86 
88  using configured_debug_trace_matrix_type =
89  std::conditional_t<traits_type::is_debug && traits_type::compute_sequence_alignment,
90  debug_trace_matrix_type,
91  disabled_type>;
92 
93 public:
95  using type = alignment_result_value_type<configured_sequence1_id_type,
96  configured_sequence2_id_type,
97  configured_score_type,
98  configured_end_position_type,
99  configured_begin_position_type,
100  configured_alignment_type,
101  configured_debug_score_matrix_type,
102  configured_debug_trace_matrix_type>;
103 };
104 
105 } // namespace seqan3::detail
Provides seqan3::detail::advanceable_alignment_coordinate.
Provides seqan3::align_cfg::detail::debug.
Provides seqan3::detail::aligned_sequence_builder.
Provides helper type traits for the configuration and execution of the alignment algorithm.
Provides various type traits on generic types.
Provides seqan3::configuration and utility functions.
Provides various transformation traits used by the range module.
Provides seqan3::gap_decorator.
Provides seqan3::gapped.
requires requires
The rank_type of the semi-alphabet; defined as the return type of seqan3::to_rank....
Definition: alphabet/concept.hpp:164
Provides lazy template instantiation traits.
The <ranges> header from C++20's standard library.
Provides type traits for working with templates.
Provides the declaration of seqan3::detail::trace_directions.
Provides seqan3::detail::transformation_trait_or.
Provides seqan3::detail::two_dimensional_matrix.