SeqAn3 3.4.0-rc.4
The Modern C++ library for sequence analysis.
|
A gap decorator allows the annotation of sequences with gap symbols while leaving the underlying sequence unmodified. More...
#include <seqan3/alignment/decorator/gap_decorator.hpp>
Classes | |
class | basic_iterator |
The iterator type over a seqan3::gap_decorator. More... | |
Public Types | |
using | unaligned_sequence_type = inner_type |
The underlying ungapped range type. | |
Range-associated member types | |
using | value_type = gapped< std::ranges::range_value_t< inner_type > > |
The variant type of the alphabet type and gap symbol type (see seqan3::gapped). | |
using | reference = value_type |
Use the value type as reference type because the underlying sequence must not be modified. | |
using | const_reference = reference |
const_reference type equals reference type equals value type because the underlying sequence must not be modified. | |
using | size_type = std::ranges::range_size_t< inner_type > |
The size_type of the underlying sequence. | |
using | difference_type = std::ranges::range_difference_t< inner_type > |
The difference type of the underlying sequence. | |
Public Member Functions | |
Constructors, destructor and assignment | |
gap_decorator ()=default | |
Default constructor. | |
gap_decorator (gap_decorator const &)=default | |
Defaulted. | |
gap_decorator & | operator= (gap_decorator const &)=default |
Defaulted. | |
gap_decorator (gap_decorator &&rhs)=default | |
Defaulted. | |
gap_decorator & | operator= (gap_decorator &&rhs)=default |
Defaulted. | |
~gap_decorator ()=default | |
Defaulted. | |
template<typename other_range_t > requires (!std::same_as<other_range_t, gap_decorator>) && std::same_as<std::remove_cvref_t<other_range_t>, std::remove_cvref_t<inner_type>> && std::ranges::viewable_range<other_range_t> | |
gap_decorator (other_range_t &&range) | |
Construct with the ungapped range type. | |
size_type | size () const |
Returns the total length of the aligned sequence. | |
Iterators | |
const_iterator | begin () const noexcept |
Returns an iterator to the first element of the container. | |
const_iterator | cbegin () const noexcept |
Returns an iterator to the first element of the container. | |
const_iterator | end () const noexcept |
Returns an iterator pointing behind the last element of the decorator. | |
const_iterator | cend () const noexcept |
Returns an iterator pointing behind the last element of the decorator. | |
Element access | |
reference | at (size_type const i) |
Return the i-th element as a reference. | |
const_reference | at (size_type const i) const |
Return the i-th element as a reference. | |
reference | operator[] (size_type const i) const |
Return the i-th element as a reference. | |
Private Types | |
using | anchor_gap_t = typename std::pair< size_t, size_t > |
The gap type as a tuple storing position and accumulated gap lengths. | |
using | anchor_set_type = std::set< anchor_gap_t > |
The type of set to store the anchor gaps. | |
using | const_iterator = iterator |
The const_iterator equals the iterator type. Since no references are ever returned and thus the underlying sequence cannot be modified through the iterator there is no need for const. | |
using | iterator = basic_iterator< true > |
The iterator type of this container (a bidirectional iterator). | |
using | set_iterator_type = typename anchor_set_type::iterator |
The iterator type for an anchor set. | |
using | ungapped_view_type = decltype(views::type_reduce(std::declval< inner_type && >())) |
The type of the underlying view wrapped in seqan3::views::type_reduce. | |
Private Member Functions | |
size_type | gap_length (set_iterator_type it) const |
Helper function to compute the length of the gap indicated by the input iterator. | |
void | rupdate (size_type const pos, size_type const offset) |
Update all anchor gaps after the indicated position by adding an offset. | |
void | update (set_iterator_type it, size_type const offset) |
Update all anchor gaps after indicated position by substracting an offset. | |
Private Attributes | |
anchor_set_type | anchors {} |
Set storing the anchor gaps. | |
ungapped_view_type | ungapped_view {} |
Stores a (copy of a) view to the ungapped, underlying sequence. | |
Static Private Attributes | |
static constexpr size_t | bound_dummy {std::numeric_limits<size_t>::max()} |
The maximum value is needed for a correct search with upper_bound() in the anchor set. | |
Friends | |||||||
Comparison operators | |||||||
Compares two seqan3::gap_decorator 's by underlying sequence and gaps.
ComplexityWorst case: ExceptionsStrong exception guarantee. | |||||||
bool | operator== (gap_decorator const &lhs, gap_decorator const &rhs) | ||||||
Checks whether lhs is equal to rhs . | |||||||
bool | operator!= (gap_decorator const &lhs, gap_decorator const &rhs) | ||||||
Checks whether lhs is not equal to rhs . | |||||||
bool | operator< (gap_decorator const &lhs, gap_decorator const &rhs) | ||||||
Checks whether lhs is less than rhs . | |||||||
bool | operator<= (gap_decorator const &lhs, gap_decorator const &rhs) | ||||||
Checks whether lhs is less than or equal to rhs . | |||||||
bool | operator> (gap_decorator const &lhs, gap_decorator const &rhs) | ||||||
Checks whether lhs is greater than rhs . | |||||||
bool | operator>= (gap_decorator const &lhs, gap_decorator const &rhs) | ||||||
Checks whether lhs is greater than or equal to rhs . | |||||||
Aligned sequence modifications | |
iterator | insert_gap (const_iterator const it, size_type const count=1) |
Insert a gap of length count at the aligned sequence iterator position. | |
iterator | erase_gap (const_iterator const it) |
Erase one gap symbol at the indicated iterator postion. | |
iterator | erase_gap (const_iterator const first, const_iterator const last) |
Erase gap symbols at the iterator postions [first, last[. | |
template<typename unaligned_sequence_t > requires std::assignable_from<gap_decorator &, unaligned_sequence_t> | |
void | assign_unaligned (gap_decorator &dec, unaligned_sequence_t &&unaligned) |
Assigns a new sequence of type seqan3::gap_decorator::unaligned_sequence_type to the decorator. | |
Additional Inherited Members | |
![]() | |
std::ranges::iterator_t< aligned_seq_t > | insert_gap (aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator pos_it) |
Insert a seqan3::gap into an aligned sequence. | |
std::ranges::iterator_t< aligned_seq_t > | insert_gap (aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator pos_it, typename aligned_seq_t::size_type size) |
Insert multiple seqan3::gap into an aligned sequence. | |
std::ranges::iterator_t< aligned_seq_t > | erase_gap (aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator pos_it) |
Erase a seqan3::gap from an aligned sequence. | |
std::ranges::iterator_t< aligned_seq_t > | erase_gap (aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator first, typename aligned_seq_t::const_iterator last) |
Erase multiple seqan3::gap from an aligned sequence. | |
void | assign_unaligned (aligned_seq_t &aligned_seq, unaligned_sequence_type &&unaligned_seq) |
Assign an ungapped sequence to a gapped sequence. | |
template<sequence_container aligned_seq_t> | |
aligned_seq_t::iterator | insert_gap (aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator pos_it) |
An implementation of seqan3::writable_aligned_sequence::insert_gap for sequence containers. | |
template<sequence_container aligned_seq_t> | |
aligned_seq_t::iterator | insert_gap (aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator pos_it, typename aligned_seq_t::size_type size) |
An implementation of seqan3::writable_aligned_sequence::insert_gap for sequence containers. | |
template<sequence_container aligned_seq_t> | |
aligned_seq_t::iterator | erase_gap (aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator pos_it) |
An implementation of seqan3::writable_aligned_sequence::erase_gap for sequence containers. | |
template<sequence_container aligned_seq_t> | |
aligned_seq_t::iterator | erase_gap (aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator first, typename aligned_seq_t::const_iterator last) |
An implementation of seqan3::writable_aligned_sequence::erase_gap for sequence containers. | |
template<sequence_container aligned_seq_t, std::ranges::forward_range unaligned_sequence_type> | |
void | assign_unaligned (aligned_seq_t &aligned_seq, unaligned_sequence_type &&unaligned_seq) |
An implementation of seqan3::writable_aligned_sequence::assign_unaligned_sequence for sequence containers. | |
template<typename range_type > | |
std::ranges::iterator_t< range_type > | insert_gap (range_type &rng, std::ranges::iterator_t< range_type > const pos_it, typename range_type::size_type const size=1) |
An implementation of seqan3::writable_aligned_sequence::insert_gap for ranges with the corresponding member function insert_gap(it, size). | |
template<typename range_type > | |
std::ranges::iterator_t< range_type > | erase_gap (range_type &rng, std::ranges::iterator_t< range_type > const pos_it) |
An implementation of seqan3::writable_aligned_sequence::erase_gap for ranges with the corresponding member function erase_gap(it). | |
template<typename range_type > | |
std::ranges::iterator_t< range_type > | erase_gap (range_type &rng, std::ranges::iterator_t< range_type > const first, std::ranges::iterator_t< range_type > const last) |
An implementation of seqan3::writable_aligned_sequence::erase_gap for ranges with the corresponding member function erase_gap(first, last). | |
A gap decorator allows the annotation of sequences with gap symbols while leaving the underlying sequence unmodified.
inner_type | The type of range that will be decorated with gaps; must model std::ranges::random_access_range and std::ranges::sized_range. |
This class may be used whenever you want to store or compute an alignment. The underlying (ungapped) sequence remains unmodified, and is augmented with gap information. The seqan3::gap_decorator behaves just like a vector over a gapped alphabet when iterating over it, inserting/erasing gaps or accessing a position. The only difference lies in the performance and size overhead (see below).
n The length of the underlying sequence. k The number of contiguous gaps (not gap symbols). l The total number of gap symbols.
access next | random access | gap insert/erase at end | gap insert/erase random | size overhead | |
---|---|---|---|---|---|
decorator | |||||
vector |
The size overhead refers to the space that is needed when using each of the data structures in addition to an already existing ungapped sequence.
This decorator stores a std::set over tuples of (pos, cumulative_size)
where every entry represents one contiguous stretch of gaps. pos
is the (virtual) insert position in the underlying range and cumulative_size
is the length of that contiguous stretch of gaps plus the length of all preceding elements. Resolving random access requires logarithmic access into the set and inserting or removing a gap symbol additionally entails updating all subsequent elements in the set to preserve correct cumulative sizes.
| stable-api |
const_reference type equals reference type equals value type because the underlying sequence must not be modified.
| stable-api |
The difference type of the underlying sequence.
| stable-api |
Use the value type as reference type because the underlying sequence must not be modified.
| stable-api |
The size_type of the underlying sequence.
| stable-api |
The underlying ungapped range type.
| stable-api |
The variant type of the alphabet type and gap symbol type (see seqan3::gapped).
|
stable-apidefault |
Default constructor.
|
experimental-apiinline |
Construct with the ungapped range type.
|
stable-apiinline |
Return the i-th element as a reference.
i | The element to retrieve. |
Throws std::out_of_range exception if i
is out of range.
|
stable-apiinline |
Return the i-th element as a reference.
i | The element to retrieve. |
Throws std::out_of_range exception if i
is out of range.
|
stable-apiinlinenoexcept |
Returns an iterator to the first element of the container.
If the container is empty, the returned iterator will be equal to end().
Constant.
No-throw guarantee.
|
stable-apiinlinenoexcept |
Returns an iterator to the first element of the container.
If the container is empty, the returned iterator will be equal to end().
Constant.
No-throw guarantee.
|
stable-apiinlinenoexcept |
Returns an iterator pointing behind the last element of the decorator.
Constant.
No-throw guarantee.
|
stable-apiinlinenoexcept |
Returns an iterator pointing behind the last element of the decorator.
Constant.
No-throw guarantee.
|
stable-apiinline |
Erase gap symbols at the iterator postions [first, last[.
[in] | first | The iterator pointing to the position where to start inserting gaps. |
[in] | last | The iterator pointing to the position where to stop erasing gaps. |
seqan3::gap_erase_failure | if [first , last [ does not correspond to a consecutive range of seqan3::gap 's. |
|
stable-apiinline |
Erase one gap symbol at the indicated iterator postion.
it | Iterator indicating the gap to be erased. |
seqan3::gap_erase_failure | if character is no seqan3::gap. |
|
no-apiinlineprivate |
Helper function to compute the length of the gap indicated by the input iterator.
[in] | it | Iterator over the internal gap set. |
it
.The length of a gap pointed to by it
is the difference of the current cumulative sum of gaps (second tuple position) and the one of its predecessor (if existing).
Strong exception guarantee.
|
stable-apiinline |
Insert a gap of length count at the aligned sequence iterator position.
it | Iterator indicating the gap start position in the aligned sequence. |
count | Number of gap symbols to be inserted. |
Average and worst case (insertion before last gap):
|
stable-apiinline |
Return the i-th element as a reference.
i | The element to retrieve. |
This function delegates to an iterator seqan3::gap_decorator.
|
no-apiinlineprivate |
Update all anchor gaps after the indicated position by adding an offset.
[in] | pos | Gap index after which to perform the update. |
[in] | offset | Offset to be added to the virtual gap positions and its accumulators. |
In order to avoid key conflicts when inserting into anchors, the update is done in reverse manner excluding the indicated gap.
Linear in the number of gaps.
|
stable-apiinline |
Returns the total length of the aligned sequence.
Constant.
Strong exception guarantee.
|
no-apiinlineprivate |
Update all anchor gaps after indicated position by substracting an offset.
[in] | it | Iterator pointing to the first anchor node to update. |
[in] | offset | Offset to be removed from the virtual gap positions and its accumulators. |
In order to avoid key conflicts when inserting into anchors, the decreasing is done in a forward manner excluding the indicated gap.
Linear in the number of gaps.
|
experimental-apifriend |
Assigns a new sequence of type seqan3::gap_decorator::unaligned_sequence_type to the decorator.
[in,out] | dec | The decorator to modify. |
[in] | unaligned | The unaligned sequence to assign. |
|
stable-apifriend |
Checks whether lhs
is not equal to rhs
.
|
stable-apifriend |
Checks whether lhs
is less than rhs
.
|
stable-apifriend |
Checks whether lhs
is less than or equal to rhs
.
|
stable-apifriend |
Checks whether lhs
is equal to rhs
.
|
stable-apifriend |
Checks whether lhs
is greater than rhs
.
|
stable-apifriend |
Checks whether lhs
is greater than or equal to rhs
.