49template <std::ranges::viewable_range range_t>
62 using type = lazy_conditional_t<is_class_template_declarable_with_v<gap_decorator, unaligned_sequence_type>,
74template <std::ranges::viewable_range first_sequence_t, std::ranges::viewable_range second_sequence_t>
83 "first_aligned_t is required to model seqan3::writable_aligned_sequence!");
85 "second_aligned_t is required to model seqan3::writable_aligned_sequence!");
112template <std::ranges::viewable_range fst_sequence_t, std::ranges::viewable_range sec_sequence_t>
168 template <std::ranges::input_range trace_path_t>
171 static_assert(std::same_as<std::ranges::range_value_t<trace_path_t>,
trace_directions>,
172 "The value type of the trace path must be seqan3::detail::trace_directions");
176 std::tie(res.first_sequence_slice_positions.second, res.second_sequence_slice_positions.second) =
181 while (trace_it != std::ranges::end(trace_path))
185 for (; trace_it != std::ranges::end(trace_path) && *trace_it == last_dir; ++trace_it, ++span)
191 std::tie(res.first_sequence_slice_positions.first, res.second_sequence_slice_positions.first) =
195 std::get<0>(res.alignment),
197 |
views::slice(res.first_sequence_slice_positions.first, res.first_sequence_slice_positions.second));
199 std::get<1>(res.alignment),
201 |
views::slice(res.second_sequence_slice_positions.first, res.second_sequence_slice_positions.second));
205 std::get<0>(res.alignment),
206 std::get<1>(res.alignment));
218 template <
typename reverse_traces_t,
typename fst_aligned_t,
typename sec_aligned_t>
220 fst_aligned_t & fst_aligned,
221 sec_aligned_t & sec_aligned)
const
223 if (std::ranges::empty(rev_traces))
229 for (
auto const & [dir, span] : rev_traces)
234 fst_it = insert_gap(fst_aligned, fst_it, span);
237 sec_it = insert_gap(sec_aligned, sec_it, span);
253template <std::ranges::viewable_range fst_sequence_t, std::ranges::viewable_range sec_sequence_t>
Includes the aligned_sequence and the related insert_gap and erase_gap functions to enable stl contai...
Builds the alignment for a given pair of sequences and the respective trace.
Definition aligned_sequence_builder.hpp:114
typename make_pairwise_alignment_type< fst_sequence_t, sec_sequence_t >::type alignment_type
The pairwise alignment type of the two sequences.
Definition aligned_sequence_builder.hpp:117
constexpr aligned_sequence_builder()=default
Defaulted.
type_reduce_t< fst_sequence_t > fst_rng
A view over the first range.
Definition aligned_sequence_builder.hpp:244
aligned_sequence_builder(fst_sequence_t &&, sec_sequence_t &&) -> aligned_sequence_builder< fst_sequence_t, sec_sequence_t >
Deduces the type from the passed constructor arguments.
result_type operator()(trace_path_t &&trace_path)
Builds the aligned sequences from the given trace path.
Definition aligned_sequence_builder.hpp:169
void fill_aligned_sequence(reverse_traces_t &&rev_traces, fst_aligned_t &fst_aligned, sec_aligned_t &sec_aligned) const
Fills the sequences with gaps according to the given trace segments.
Definition aligned_sequence_builder.hpp:219
type_reduce_t< sec_sequence_t > sec_rng
A view over the second range.
Definition aligned_sequence_builder.hpp:245
T emplace_back(T... args)
Provides seqan3::gap_decorator.
trace_directions
The possible directions a trace can have. The values can be combined by the logical |-operator.
Definition trace_directions.hpp:26
@ up
Trace comes from the above entry.
@ left
Trace comes from the left entry.
@ diagonal
Trace comes from the diagonal entry.
@ alignment
The (pairwise) alignment stored in an object that models seqan3::detail::pairwise_alignment.
constexpr auto slice
A view adaptor that returns a half-open interval on the underlying range.
Definition slice.hpp:175
constexpr auto type_reduce
A view adaptor that behaves like std::views::all, but type erases certain ranges.
Definition type_reduce.hpp:147
The generic concept for an aligned sequence that is writable.
Provides a type trait for verifying valid template declarations.
Provides lazy template instantiation traits.
Provides seqan3::detail::matrix_index, seqan3::detail::matrix_coordinate and associated strong types.
The internal SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
decltype(views::type_reduce(std::declval< t >())) type_reduce_t
Deduces the return value of seqan3::views::type_reduce.
Definition type_reduce.hpp:159
SeqAn specific customisations in the standard namespace.
Provides seqan3::views::slice.
The result type when building the aligned sequences.
Definition aligned_sequence_builder.hpp:121
An empty type whose only purpose is to hold an uninstantiated template plus its arguments.
Definition lazy_conditional.hpp:30
A transformation trait that returns the correct aligned sequence type for a given sequence type.
Definition aligned_sequence_builder.hpp:51
decltype(std::declval< range_t >()|views::type_reduce|views::slice(0, 1)) unaligned_sequence_type
The unaligned sequence type that will be used to assign a sequence to seqan3::assign_unaligned.
Definition aligned_sequence_builder.hpp:58
lazy_conditional_t< is_class_template_declarable_with_v< gap_decorator, unaligned_sequence_type >, lazy< gap_decorator, unaligned_sequence_type >, lazy< std::vector, gapped< std::ranges::range_value_t< unaligned_sequence_type > > > > type
The resulting aligned sequence type.
Definition aligned_sequence_builder.hpp:64
A transformation trait that returns the correct pairwise alignment type for two given sequence types.
Definition aligned_sequence_builder.hpp:76
typename make_aligned_sequence_type< second_sequence_t >::type second_aligned_t
The aligned sequence type for the second sequence.
Definition aligned_sequence_builder.hpp:80
typename make_aligned_sequence_type< first_sequence_t >::type first_aligned_t
The aligned sequence type for the first sequence.
Definition aligned_sequence_builder.hpp:78
Provides the declaration of seqan3::detail::trace_directions.
Provides seqan3::views::type_reduce.
Provides the concepts seqan3::transformation_trait and seqan3::unary_type_trait.
Provides seqan3::views::convert.