38 template <std::ranges::view urng_t>
40 requires std::ranges::sized_range<urng_t> &&
41 std::ranges::random_access_range<urng_t> &&
42 nucleotide_alphabet<reference_t<urng_t>>
46 template <std::ranges::view urng_t>
48 requires std::ranges::sized_range<urng_t> &&
49 std::ranges::random_access_range<urng_t> &&
50 nucleotide_alphabet<reference_t<urng_t>>
52 class view_translate_single;
96 template <
bool single>
107 return detail::adaptor_from_functor{*
this, tf};
115 template <std::ranges::range urng_t>
116 constexpr
auto operator()(urng_t && urange,
translation_frames const tf = default_frames)
const 118 static_assert(std::ranges::viewable_range<urng_t>,
119 "The range parameter to views::translate[_single] cannot be a temporary of a non-view range.");
120 static_assert(std::ranges::sized_range<urng_t>,
121 "The range parameter to views::translate[_single] must model std::ranges::sized_range.");
122 static_assert(std::ranges::random_access_range<urng_t>,
123 "The range parameter to views::translate[_single] must model std::ranges::random_access_range.");
125 "The range parameter to views::translate[_single] must be over elements of seqan3::nucleotide_alphabet.");
128 return detail::view_translate_single{std::forward<urng_t>(urange), tf};
130 return detail::view_translate{std::forward<urng_t>(urange), tf};
134 template <std::ranges::range urng_t>
135 constexpr
friend auto operator|(urng_t && urange, translate_fn
const & me)
137 return me(std::forward<urng_t>(urange));
151 template <std::ranges::view urng_t>
153 requires std::ranges::sized_range<urng_t> &&
154 std::ranges::random_access_range<urng_t> &&
157 class view_translate_single :
public ranges::view_base
165 static constexpr
small_string multiple_frame_error{
"Error: Invalid type of frame. Choose one out of FWD_FRAME_0, " 166 "REV_FRAME_0, FWD_FRAME_1, REV_FRAME_1, FWD_FRAME_2 and " 183 using iterator = detail::random_access_iterator<view_translate_single>;
185 using const_iterator = detail::random_access_iterator<view_translate_single const>;
191 view_translate_single() noexcept =
default;
192 constexpr view_translate_single(view_translate_single
const & rhs) noexcept =
default;
193 constexpr view_translate_single(view_translate_single && rhs) noexcept =
default;
194 constexpr view_translate_single & operator=(view_translate_single
const & rhs) noexcept =
default;
195 constexpr view_translate_single & operator=(view_translate_single && rhs) noexcept =
default;
196 ~view_translate_single() noexcept =
default;
210 if (__builtin_popcount(static_cast<uint8_t>(_tf)) > 1)
224 template <
typename rng_t>
227 std::ranges::viewable_range<rng_t> &&
231 : view_translate_single{
std::views::all(std::forward<rng_t>(_urange)), _tf}
251 iterator begin() noexcept
257 const_iterator begin()
const noexcept
263 const_iterator cbegin()
const noexcept
281 iterator end() noexcept
283 return {*
this,
size()};
287 const_iterator end()
const noexcept
289 return {*
this,
size()};
293 const_iterator cend()
const noexcept
322 return (std::max<size_type>(
seqan3::size(urange), 1) - 1) / 3;
327 return (std::max<size_type>(
seqan3::size(urange), 2) - 2) / 3;
348 return (std::max<size_type>(
seqan3::size(urange), 1) - 1) / 3;
353 return (std::max<size_type>(
seqan3::size(urange), 2) - 2) / 3;
385 return translate_triplet((urange)[n * 3], (urange)[n * 3 + 1], (urange)[n * 3 + 2]);
391 return translate_triplet((urange)[n * 3 + 1], (urange)[n * 3 + 2], (urange)[n * 3 + 3]);
397 return translate_triplet((urange)[n * 3 + 2], (urange)[n * 3 + 3], (urange)[n * 3 + 4]);
415 return translate_triplet((urange)[n * 3], (urange)[n * 3 + 1], (urange)[n * 3 + 2]);
421 return translate_triplet((urange)[n * 3 + 1], (urange)[n * 3 + 2], (urange)[n * 3 + 3]);
427 return translate_triplet((urange)[n * 3 + 2], (urange)[n * 3 + 3], (urange)[n * 3 + 4]);
441 template <
typename urng_t>
442 view_translate_single(urng_t &&,
translation_frames const) -> view_translate_single<std::ranges::all_view<urng_t>>;
446 template <
typename urng_t>
447 view_translate_single(urng_t &&) -> view_translate_single<std::ranges::all_view<urng_t>>;
523 template <std::ranges::view urng_t>
525 requires std::ranges::sized_range<urng_t> &&
526 std::ranges::random_access_range<urng_t> &&
529 class view_translate :
public ranges::view_base
543 using reference = view_translate_single<urng_t>;
554 using iterator = detail::random_access_iterator<view_translate>;
556 using const_iterator = detail::random_access_iterator<view_translate const>;
566 template <
typename t>
567 requires (dimension_v<t> == dimension_v<value_type> + 1) &&
568 std::is_same_v<remove_cvref_t<innermost_value_type_t<value_type>>,
570 static constexpr
bool is_compatible_this_aux =
true;
579 view_translate() noexcept =
default;
580 constexpr view_translate(view_translate
const & rhs) noexcept =
default;
581 constexpr view_translate(view_translate && rhs) noexcept =
default;
582 constexpr view_translate & operator=(view_translate
const & rhs) noexcept =
default;
583 constexpr view_translate & operator=(view_translate && rhs) noexcept =
default;
584 ~view_translate() noexcept =
default;
594 selected_frames.push_back(translation_frames::FWD_FRAME_0);
596 selected_frames.push_back(translation_frames::FWD_FRAME_1);
598 selected_frames.push_back(translation_frames::FWD_FRAME_2);
600 selected_frames.push_back(translation_frames::REV_FRAME_0);
602 selected_frames.push_back(translation_frames::REV_FRAME_1);
604 selected_frames.push_back(translation_frames::REV_FRAME_2);
611 template <
typename rng_t>
614 std::ranges::viewable_range<rng_t> &&
638 iterator begin() noexcept
644 const_iterator begin()
const noexcept
650 const_iterator cbegin()
const noexcept
668 iterator end() noexcept
670 return {*
this,
size()};
674 const_iterator end()
const noexcept
676 return {*
this,
size()};
680 const_iterator cend()
const noexcept
699 return (
size_type) selected_frames.size();
705 return (
size_type) selected_frames.size();
742 template <
typename urng_t>
744 requires std::ranges::sized_range<urng_t> &&
745 std::ranges::random_access_range<urng_t> &&
Provides seqan3::add_enum_bitwise_operators.
constexpr bool add_enum_bitwise_operators< translation_frames >
Enable bitwise operators for enum translation_frames.
Definition: translate.hpp:82
constexpr auto complement
Return the complement of a nucleotide object.
Definition: concept.hpp:93
A concept that indicates whether an alphabet represents nucleotides.
constexpr auto translate_single
A view that translates nucleotide into aminoacid alphabet for one of the six frames.
Definition: translate.hpp:504
Provides seqan3::aa27, container aliases and string literals.
The text is a single range.
Definition: concept.hpp:84
Provides the seqan3::detail::random_access_iterator class.
The main SeqAn3 namespace.
Provides seqan3::dna5, container aliases and string literals.
typename difference_type< t >::type difference_type_t
Shortcut for seqan3::difference_type (transformation_trait shortcut).
Definition: pre.hpp:166
Implements a small string that can be used for compile time computations.
Definition: small_string.hpp:42
The twenty-seven letter amino acid alphabet.
Definition: aa27.hpp:43
detail::search_mode_all constexpr all
Configuration element to receive all hits within the error bounds.
Definition: mode.hpp:43
The SeqAn namespace for views.
Definition: view_to_simd.hpp:672
Provides seqan3::views::deep.
Exposes the difference_type of another type.
Definition: pre.hpp:159
Adaptations of concepts from the Ranges TS.
The first third and third reverse frame.
Exposes the size_type of another type.
Definition: pre.hpp:188
constexpr auto translate
A view that translates nucleotide into aminoacid alphabet with 1, 2, 3 or 6 frames.
Definition: translate.hpp:805
The second forward and second reverse frame.
constexpr aa27 translate_triplet(nucl_type const &n1, nucl_type const &n2, nucl_type const &n3) noexcept
Translate one nucleotide triplet into single amino acid (single nucleotide interface).
Definition: translation.hpp:53
constexpr size_t size
The size of a type pack.
Definition: traits.hpp:116
A constexpr vector implementation with dynamic size at compile time.
Definition: small_vector.hpp:44
typename size_type< t >::type size_type_t
Shortcut for seqan3::size_type (transformation_trait shortcut).
Definition: pre.hpp:195
The second forward frame starting at position 1.
Definition: aligned_sequence_concept.hpp:36
A constexpr string implementation to manipulate string literals at compile time.
The std::constructible_from concept specifies that a variable of type T can be initialized with the g...
A wrapper type around an existing view adaptor that enables "deep view" behaviour for that view...
Definition: deep.hpp:101
auto const move
A view that turns lvalue-references into rvalue-references.
Definition: move.hpp:68
auto operator|(validator1_type &&vali1, validator2_type &&vali2)
Enables the chaining of validators.
Definition: validators.hpp:1023
Exposes the const_reference of another type.
Definition: pre.hpp:130
The first forward and first reverse frame.
Exposes the reference of another type.
Definition: pre.hpp:70
Provides various transformation traits used by the range module.
typename reference< t >::type reference_t
Shortcut for seqan3::reference (transformation_trait shortcut).
Definition: pre.hpp:77
The third forward frame starting at position 2.
The first forward frame starting at position 0.
The second reverse frame starting at position 1.
Adaptations of concepts from the standard library.
Exposes the value_type of another type.
Definition: pre.hpp:41
Provides functions for translating a triplet of nucleotides into an amino acid.
The concept std::same_as<T, U> is satisfied if and only if T and U denote the same type...
The first reverse frame starting at position 0.
translation_frames
Specialisation values for single and multiple translation frames.
Definition: translate.hpp:64
Auxiliary header for the views submodule .
The third reverse frame starting at position 2.