24template <
typename configuration_t>
25 requires seqan3::detail::is_type_specialisation_of_v<configuration_t, configuration>
26class policy_alignment_result_builder;
40template <
typename sequence1_id_t,
41 typename sequence2_id_t,
77template <
typename sequence1_
id_t,
typename sequence2_
id_t,
typename score_t>
83template <
typename sequence1_
id_t,
typename sequence2_
id_t,
typename score_t,
typename end_positions_t>
88template <
typename sequence1_id_t,
89 typename sequence2_id_t,
91 typename end_positions_t,
92 typename begin_positions_t>
97template <
typename sequence1_id_t,
98 typename sequence2_id_t,
100 typename end_positions_t,
101 typename begin_positions_t,
102 typename alignment_t>
113template <
typename result_t>
114struct alignment_result_value_type_accessor;
144template <
typename alignment_result_value_t>
145 requires detail::is_type_specialisation_of_v<alignment_result_value_t, detail::alignment_result_value_type>
150 alignment_result_value_t
data{};
171 template <
typename configuration_t>
172 requires seqan3::detail::is_type_specialisation_of_v<configuration_t, configuration>
210 static_assert(!std::is_same_v<sequence1_id_t, std::nullopt_t *>,
211 "Trying to access the id of the first sequence, although it was not requested in the"
212 " alignment configuration.");
213 return data.sequence1_id;
221 static_assert(!std::is_same_v<sequence2_id_t, std::nullopt_t *>,
222 "Trying to access the id of the second sequence, although it was not requested in the"
223 " alignment configuration.");
224 return data.sequence2_id;
232 static_assert(!std::is_same_v<score_t, std::nullopt_t *>,
233 "Trying to access the score, although it was not requested in the alignment configuration.");
253 static_assert(!std::is_same_v<end_positions_t, std::nullopt_t *>,
254 "Trying to access the end position of the first sequence, although it was not requested in the"
255 " alignment configuration.");
256 return data.end_positions.first;
275 static_assert(!std::is_same_v<end_positions_t, std::nullopt_t *>,
276 "Trying to access the end position of the second sequence, although it was not requested in the"
277 " alignment configuration.");
278 return data.end_positions.second;
299 static_assert(!std::is_same_v<begin_positions_t, std::nullopt_t *>,
300 "Trying to access the begin position of the first sequence, although it was not requested in the"
301 " alignment configuration.");
302 return data.begin_positions.first;
323 static_assert(!std::is_same_v<begin_positions_t, std::nullopt_t *>,
324 "Trying to access the begin position of the second sequence, although it was not requested in the"
325 " alignment configuration.");
326 return data.begin_positions.second;
337 static_assert(!std::is_same_v<alignment_t, std::nullopt_t *>,
338 "Trying to access the alignment, although it was not requested in the alignment configuration.");
339 return data.alignment;
359 "Trying to access the score matrix, although it was not requested in the alignment configuration.");
360 return data.score_debug_matrix;
378 "Trying to access the trace matrix, although it was not requested in the alignment configuration.");
379 return data.trace_debug_matrix;
397template <
typename result_value_t>
416template <
typename result_value_t>
425 template <
typename stream_t,
typename arg_t>
426 constexpr void operator()(stream_t & stream, arg_t && arg)
const noexcept
430 constexpr bool has_sequence1_id = !std::is_same_v<typename result_t::sequence1_id_t, disabled_t>;
431 constexpr bool has_sequence2_id = !std::is_same_v<typename result_t::sequence2_id_t, disabled_t>;
432 constexpr bool has_score = !std::is_same_v<typename result_t::score_t, disabled_t>;
433 constexpr bool has_end_positions = !std::is_same_v<typename result_t::end_positions_t, disabled_t>;
434 constexpr bool has_begin_positions = !std::is_same_v<typename result_t::begin_positions_t, disabled_t>;
435 constexpr bool has_alignment = !std::is_same_v<typename result_t::alignment_t, disabled_t>;
437 bool prepend_comma =
false;
438 auto append_to_stream = [&](
auto &&... args)
441 << ... << std::forward<decltype(args)>(args));
442 prepend_comma =
true;
446 if constexpr (has_sequence1_id)
447 append_to_stream(
"sequence1 id: ", arg.sequence1_id());
448 if constexpr (has_sequence2_id)
449 append_to_stream(
"sequence2 id: ", arg.sequence2_id());
450 if constexpr (has_score)
451 append_to_stream(
"score: ", arg.score());
452 if constexpr (has_begin_positions)
453 append_to_stream(
"begin: (", arg.sequence1_begin_position(),
",", arg.sequence2_begin_position(),
")");
454 if constexpr (has_end_positions)
455 append_to_stream(
"end: (", arg.sequence1_end_position(),
",", arg.sequence2_end_position(),
")");
456 if constexpr (has_alignment)
457 append_to_stream(
"\nalignment:\n", arg.alignment());
Stores the alignment results and gives access to score, alignment and the front and end positions.
Definition alignment_result.hpp:147
constexpr sequence2_id_t sequence2_id() const noexcept
Returns the alignment identifier of the second sequence.
Definition alignment_result.hpp:219
alignment_result & operator=(alignment_result &&)=default
Defaulted.
alignment_result & operator=(alignment_result const &)=default
Defaulted.
decltype(data.sequence1_id) sequence1_id_t
The type for the alignment identifier for the first sequence.
Definition alignment_result.hpp:157
constexpr sequence1_id_t sequence1_id() const noexcept
Returns the alignment identifier of the first sequence.
Definition alignment_result.hpp:208
alignment_result_value_t data
Object that stores the computed alignment results.
Definition alignment_result.hpp:150
constexpr auto sequence2_end_position() const noexcept
Returns the end position of the second sequence of the alignment.
Definition alignment_result.hpp:273
constexpr auto sequence1_begin_position() const noexcept
Returns the begin position of the first sequence of the alignment.
Definition alignment_result.hpp:297
alignment_result(alignment_result const &)=default
Defaulted.
decltype(data.sequence2_id) sequence2_id_t
The type for the alignment identifier for the second sequence.
Definition alignment_result.hpp:159
constexpr alignment_t const & alignment() const noexcept
Returns the actual alignment, i.e. the base pair matching.
Definition alignment_result.hpp:335
constexpr auto sequence2_begin_position() const noexcept
Returns the begin position of the second sequence of the alignment.
Definition alignment_result.hpp:321
~alignment_result()=default
Defaulted.
constexpr score_t score() const noexcept
Returns the alignment score.
Definition alignment_result.hpp:230
constexpr auto sequence1_end_position() const noexcept
Returns the end position of the first sequence of the alignment.
Definition alignment_result.hpp:251
alignment_result()=default
decltype(data.score) score_t
The type for the resulting score.
Definition alignment_result.hpp:161
decltype(data.end_positions) end_positions_t
The type for the end positions.
Definition alignment_result.hpp:163
constexpr auto const & score_matrix() const noexcept
Returns the score matrix used to compute the alignment.
Definition alignment_result.hpp:355
constexpr auto const & trace_matrix() const noexcept
Returns the trace matrix used to compute the alignment.
Definition alignment_result.hpp:374
alignment_result(alignment_result_value_t value)
Constructs a seqan3::alignment_result from an value_type object.
Definition alignment_result.hpp:187
alignment_result(alignment_result &&)=default
Defaulted.
decltype(data.alignment) alignment_t
The type for the alignment.
Definition alignment_result.hpp:167
decltype(data.begin_positions) begin_positions_t
The type for the begin positions.
Definition alignment_result.hpp:165
Implements the alignment result builder.
Definition policy_alignment_result_builder.hpp:34
Provides seqan3::configuration and utility functions.
Provides seqan3::debug_stream and related types.
The internal SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
The main SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
SeqAn specific customisations in the standard namespace.
constexpr void operator()(stream_t &stream, arg_t &&arg) const noexcept
Prints the formatted output of the alignment result to the stream.
Definition alignment_result.hpp:426
Definition default_printer.hpp:30
result_value_t type
The underlying value type used for the given alignment result type.
Definition alignment_result.hpp:401
A struct that contains the actual alignment result data.
Definition alignment_result.hpp:49
alignment_t alignment
The alignment, i.e. the actual base pair matching.
Definition alignment_result.hpp:61
begin_positions_t begin_positions
The begin positions of the alignment.
Definition alignment_result.hpp:59
sequence1_id_t sequence1_id
The alignment identifier for the first sequence.
Definition alignment_result.hpp:51
trace_debug_matrix_t trace_debug_matrix
The trace matrix. Only accessible with seqan3::align_cfg::detail::debug.
Definition alignment_result.hpp:66
end_positions_t end_positions
The end positions of the alignment.
Definition alignment_result.hpp:57
sequence2_id_t sequence2_id
The alignment identifier for the second sequence.
Definition alignment_result.hpp:53
score_debug_matrix_t score_debug_matrix
The score matrix. Only accessible with seqan3::align_cfg::detail::debug.
Definition alignment_result.hpp:64
score_t score
The alignment score.
Definition alignment_result.hpp:55
Provides type traits for working with templates.