diff --git a/modules/seq/base/pymod/export_sequence.cc b/modules/seq/base/pymod/export_sequence.cc index e0104a51cd53ac3cbae14452bc2fd737f502a69d..b6c500cf23563263799c8ace1cba7e6b2d75b78a 100644 --- a/modules/seq/base/pymod/export_sequence.cc +++ b/modules/seq/base/pymod/export_sequence.cc @@ -304,6 +304,7 @@ void export_sequence() .def("AttachView", attach_view_b) .def("Cut", &AlignmentHandle::Cut) .def("MakeRegion", &AlignmentHandle::MakeRegion) + .def("RemoveSequence", &AlignmentHandle::RemoveSequence) .def("Replace",&AlignmentHandle::Replace) .def("__getitem__", &slice_aln) .def("__getitem__", &AlignmentHandle::operator[]) diff --git a/modules/seq/base/src/alignment_handle.cc b/modules/seq/base/src/alignment_handle.cc index d4611b5623a69ec8bcfd653f7dd66fd3e2513981..edc54340b7d4a4ea017035465f7c5c468c53b302 100644 --- a/modules/seq/base/src/alignment_handle.cc +++ b/modules/seq/base/src/alignment_handle.cc @@ -82,6 +82,12 @@ String AlignmentHandle::ToString(int width) const return impl_->ToString(width); } +void AlignmentHandle::RemoveSequence(int seq_index) +{ + this->CheckValidity(); + impl_->RemoveSequence(seq_index); +} + int AlignmentHandle::GetLength() const { this->CheckValidity(); diff --git a/modules/seq/base/src/alignment_handle.hh b/modules/seq/base/src/alignment_handle.hh index 998618b520ed6e90fa88b81f45ddadf4f4e5dcaa..8c66888f1e7d53c3ffede857c24193987677a0f2 100644 --- a/modules/seq/base/src/alignment_handle.hh +++ b/modules/seq/base/src/alignment_handle.hh @@ -80,7 +80,9 @@ public: /// \brief Get sequence with given index. /// \return sequence or invalid handle if the index is out of bounds ConstSequenceHandle GetSequence(int seq_id) const; - + + /// \brief remove sequence at seq_index from alignment + void RemoveSequence(int seq_index); /// \brief Convert multiple sequence alignment to string. String ToString(int width=80) const; diff --git a/modules/seq/base/src/impl/sequence_list_impl.cc b/modules/seq/base/src/impl/sequence_list_impl.cc index 01f22c779d1ee95ffed4d2202b91ad1e01763f8a..e1e152059122c57a6c14b6828dd87d87318673a9 100644 --- a/modules/seq/base/src/impl/sequence_list_impl.cc +++ b/modules/seq/base/src/impl/sequence_list_impl.cc @@ -96,7 +96,13 @@ String SequenceListImpl::ToString(int width) const return buffer.str(); } - +void SequenceListImpl::RemoveSequence(int index) +{ + if (index<0 || index>=static_cast<int>(list_.size())) { + return; + } + list_.erase(list_.begin()+index); +} int SequenceListImpl::GetMinLength() const { int min_length=std::numeric_limits<int>::max(); diff --git a/modules/seq/base/src/impl/sequence_list_impl.hh b/modules/seq/base/src/impl/sequence_list_impl.hh index 3f1970f511d56e97defc73f78b69d407e024a71d..66bedd61f47c4cb5d40374b92dfc94c2213ecee9 100644 --- a/modules/seq/base/src/impl/sequence_list_impl.hh +++ b/modules/seq/base/src/impl/sequence_list_impl.hh @@ -57,6 +57,8 @@ public: throw std::out_of_range("Index not covered SequenceList"); } + + void RemoveSequence(int index); int GetPos(int seq_index, int residue_index) const; int GetResidueIndex(int seq_index, int pos) const;