SeqAn3 3.1.0
The Modern C++ library for sequence analysis.
align_result_selector.hpp
Go to the documentation of this file.
1// -----------------------------------------------------------------------------------------------------
2// Copyright (c) 2006-2021, Knut Reinert & Freie Universität Berlin
3// Copyright (c) 2016-2021, 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 <seqan3/std/ranges>
17#include <type_traits>
18
33
34namespace seqan3::detail
35{
42template <std::ranges::forward_range first_range_t,
43 std::ranges::forward_range second_range_t,
44 typename configuration_t>
46 requires is_type_specialisation_of_v<std::remove_cvref_t<configuration_t>, configuration>
48struct align_result_selector
49{
50private:
52 using traits_type = alignment_configuration_traits<configuration_t>;
54 using score_type = typename alignment_configuration_traits<
55 std::remove_reference_t<configuration_t>>::original_score_type;
57 using disabled_type = std::nullopt_t *;
59 using debug_score_matrix_type = two_dimensional_matrix<std::optional<score_type>,
61 matrix_major_order::column>;
63 using debug_trace_matrix_type = two_dimensional_matrix<std::optional<trace_directions>,
65 matrix_major_order::column>;
69 using configured_end_position_type = std::conditional_t<traits_type::compute_end_positions,
70 seqan3::detail::advanceable_alignment_coordinate<>,
71 disabled_type>;
73 using configured_begin_position_type = std::conditional_t<traits_type::compute_begin_positions,
74 seqan3::detail::advanceable_alignment_coordinate<>,
75 disabled_type>;
77 using configured_alignment_type = typename lazy_conditional_t<traits_type::compute_sequence_alignment,
78 lazy<make_pairwise_alignment_type,
79 first_range_t &,
80 second_range_t &>,
82
87
89 using configured_debug_score_matrix_type = std::conditional_t<traits_type::is_debug,
90 debug_score_matrix_type,
91 disabled_type>;
92
94 using configured_debug_trace_matrix_type =
95 std::conditional_t<traits_type::is_debug && traits_type::compute_sequence_alignment,
96 debug_trace_matrix_type,
97 disabled_type>;
98
99public:
101 using type = alignment_result_value_type<configured_sequence1_id_type,
102 configured_sequence2_id_type,
103 configured_score_type,
104 configured_end_position_type,
105 configured_begin_position_type,
106 configured_alignment_type,
107 configured_debug_score_matrix_type,
108 configured_debug_trace_matrix_type>;
109};
110
111} // 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.
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.