Skip to content
Snippets Groups Projects
Commit 13a4eca5 authored by juergen's avatar juergen
Browse files

adding reverse iterator for AlignedRegion

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2022 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent a606b90d
Branches
Tags
No related merge requests found
...@@ -57,8 +57,8 @@ T do_slice(const T& t, slice& sl) { ...@@ -57,8 +57,8 @@ T do_slice(const T& t, slice& sl) {
try { try {
end=extract<int>(sl.stop()); end=extract<int>(sl.stop());
} catch(error_already_set) { } catch(error_already_set) {
PyErr_Clear(); PyErr_Clear();
} }
return t.Slice(start, end-start); return t.Slice(start, end-start);
} }
...@@ -83,18 +83,38 @@ AlignedRegion slice_aln(const AlignmentHandle& aln, slice sl) { ...@@ -83,18 +83,38 @@ AlignedRegion slice_aln(const AlignmentHandle& aln, slice sl) {
try { try {
end=extract<int>(sl.stop()); end=extract<int>(sl.stop());
} catch(error_already_set) { } catch(error_already_set) {
PyErr_Clear(); PyErr_Clear();
} }
return aln.MakeRegion(start, end-start); return aln.MakeRegion(start, end-start);
} }
struct RevRegionRangeIter {
RevRegionRangeIter(AlignedColumnIterator b,
AlignedColumnIterator e):
b_(b), e_(e)
{ }
AlignedColumn next()
{
if (b_==e_) {
boost::python::objects::stop_iteration_error();
}
AlignedColumn col=*e_;
--e_;
return col;
}
private:
AlignedColumnIterator b_;
AlignedColumnIterator e_;
};
struct RegionRangeIter { struct RegionRangeIter {
RegionRangeIter(AlignedColumnIterator b, RegionRangeIter(AlignedColumnIterator b,
AlignedColumnIterator e): AlignedColumnIterator e):
b_(b), e_(e) b_(b), e_(e)
{ } { }
AlignedColumn next() AlignedColumn next()
{ {
if (b_==e_) { if (b_==e_) {
...@@ -120,6 +140,11 @@ RegionRangeIter iter_range2(AlignedRegion& aln_region) ...@@ -120,6 +140,11 @@ RegionRangeIter iter_range2(AlignedRegion& aln_region)
return RegionRangeIter(aln_region.begin(), aln_region.end()); return RegionRangeIter(aln_region.begin(), aln_region.end());
} }
RevRegionRangeIter iter_range3(AlignedRegion& aln_region)
{
return RevRegionRangeIter(aln_region.begin(), aln_region.end());
}
} }
void export_sequence() void export_sequence()
...@@ -131,12 +156,12 @@ void export_sequence() ...@@ -131,12 +156,12 @@ void export_sequence()
.def("GetResidue", &ConstSequenceHandle::GetResidue) .def("GetResidue", &ConstSequenceHandle::GetResidue)
.def("GetOneLetterCode", &ConstSequenceHandle::GetOneLetterCode) .def("GetOneLetterCode", &ConstSequenceHandle::GetOneLetterCode)
.def("__getitem__", &ConstSequenceHandle::GetOneLetterCode) .def("__getitem__", &ConstSequenceHandle::GetOneLetterCode)
.def("GetSequenceOffset", &ConstSequenceHandle::GetSequenceOffset) .def("GetSequenceOffset", &ConstSequenceHandle::GetSequenceOffset)
.def("Copy", &ConstSequenceHandle::Copy) .def("Copy", &ConstSequenceHandle::Copy)
.def("GetFirstNonGap", &ConstSequenceHandle::GetFirstNonGap) .def("GetFirstNonGap", &ConstSequenceHandle::GetFirstNonGap)
.def("GetLastNonGap", &ConstSequenceHandle::GetLastNonGap) .def("GetLastNonGap", &ConstSequenceHandle::GetLastNonGap)
.add_property("first_non_gap", &SequenceHandle::GetFirstNonGap) .add_property("first_non_gap", &SequenceHandle::GetFirstNonGap)
.add_property("last_non_gap", &SequenceHandle::GetLastNonGap) .add_property("last_non_gap", &SequenceHandle::GetLastNonGap)
.def("GetAttachedView", &ConstSequenceHandle::GetAttachedView) .def("GetAttachedView", &ConstSequenceHandle::GetAttachedView)
.def("GetGaplessString", &ConstSequenceHandle::GetGaplessString) .def("GetGaplessString", &ConstSequenceHandle::GetGaplessString)
.def("GetString", &ConstSequenceHandle::GetString, .def("GetString", &ConstSequenceHandle::GetString,
...@@ -145,7 +170,7 @@ void export_sequence() ...@@ -145,7 +170,7 @@ void export_sequence()
return_value_policy<copy_const_reference>()) return_value_policy<copy_const_reference>())
.def("HasAttachedView", &ConstSequenceHandle::HasAttachedView) .def("HasAttachedView", &ConstSequenceHandle::HasAttachedView)
.def("__len__", &SequenceHandle::GetLength) .def("__len__", &SequenceHandle::GetLength)
.add_property("length", &SequenceHandle::GetLength) .add_property("length", &SequenceHandle::GetLength)
.add_property("attached_view", &ConstSequenceHandle::GetAttachedView) .add_property("attached_view", &ConstSequenceHandle::GetAttachedView)
.add_property("name", .add_property("name",
make_function(&ConstSequenceHandle::GetName, make_function(&ConstSequenceHandle::GetName,
...@@ -155,10 +180,10 @@ void export_sequence() ...@@ -155,10 +180,10 @@ void export_sequence()
.add_property("string", .add_property("string",
make_function(&ConstSequenceHandle::GetString, make_function(&ConstSequenceHandle::GetString,
return_value_policy<copy_const_reference>())) return_value_policy<copy_const_reference>()))
.def("__str__", &ConstSequenceHandle::GetString, .def("__str__", &ConstSequenceHandle::GetString,
return_value_policy<copy_const_reference>()) return_value_policy<copy_const_reference>())
; ;
class_<SequenceHandle, bases<ConstSequenceHandle> >("SequenceHandle", init<>()) class_<SequenceHandle, bases<ConstSequenceHandle> >("SequenceHandle", init<>())
.def("SetSequenceOffset", &SequenceHandle::SetSequenceOffset) .def("SetSequenceOffset", &SequenceHandle::SetSequenceOffset)
.def("AttachView", attach_one) .def("AttachView", attach_one)
...@@ -174,7 +199,7 @@ void export_sequence() ...@@ -174,7 +199,7 @@ void export_sequence()
return_value_policy<copy_const_reference>()), return_value_policy<copy_const_reference>()),
&SequenceHandle::SetName) &SequenceHandle::SetName)
.add_property("sequence_offset", &SequenceHandle::GetSequenceOffset, .add_property("sequence_offset", &SequenceHandle::GetSequenceOffset,
&SequenceHandle::SetSequenceOffset) &SequenceHandle::SetSequenceOffset)
; ;
def("CreateSequence", &CreateSequence); def("CreateSequence", &CreateSequence);
/*class_<SequenceHandleList>("SequenceHandleList", init<>()) /*class_<SequenceHandleList>("SequenceHandleList", init<>())
...@@ -182,6 +207,9 @@ void export_sequence() ...@@ -182,6 +207,9 @@ void export_sequence()
;*/ ;*/
class_<RegionRangeIter>("RegionRangeIter", no_init) class_<RegionRangeIter>("RegionRangeIter", no_init)
.def("next", &RegionRangeIter::next) .def("next", &RegionRangeIter::next)
;
class_<RevRegionRangeIter>("RevRegionRangeIter", no_init)
.def("next", &RevRegionRangeIter::next)
; ;
class_<AlignmentHandle>("AlignmentHandle", init<>()) class_<AlignmentHandle>("AlignmentHandle", init<>())
.def("GetCount", &AlignmentHandle::GetCount) .def("GetCount", &AlignmentHandle::GetCount)
...@@ -199,6 +227,7 @@ void export_sequence() ...@@ -199,6 +227,7 @@ void export_sequence()
.def("AttachView", attach_view_a) .def("AttachView", attach_view_a)
.def("AttachView", attach_view_b) .def("AttachView", attach_view_b)
.def("Cut", &AlignmentHandle::Cut) .def("Cut", &AlignmentHandle::Cut)
.def("MakeRegion", &AlignmentHandle::MakeRegion)
.def("Replace",&AlignmentHandle::Replace) .def("Replace",&AlignmentHandle::Replace)
.def("__getitem__", &slice_aln) .def("__getitem__", &slice_aln)
.def("__getitem__", &AlignmentHandle::operator[]) .def("__getitem__", &AlignmentHandle::operator[])
...@@ -224,13 +253,14 @@ void export_sequence() ...@@ -224,13 +253,14 @@ void export_sequence()
.def("SetMaster", &AlignedRegion::SetMaster) .def("SetMaster", &AlignedRegion::SetMaster)
.def("GetMaster", &AlignedRegion::GetMaster) .def("GetMaster", &AlignedRegion::GetMaster)
.def("GetAlignmentHandle",&AlignedRegion::GetAlignmentHandle) .def("GetAlignmentHandle",&AlignedRegion::GetAlignmentHandle)
.add_property("master", &AlignedRegion::GetMaster, .add_property("master", &AlignedRegion::GetMaster,
&AlignedRegion::SetMaster) &AlignedRegion::SetMaster)
.def("__getitem__", &AlignedRegion::operator[]) .def("__getitem__", &AlignedRegion::operator[])
.def("__len__", &AlignedRegion::GetLength) .def("__len__", &AlignedRegion::GetLength)
.def("__iter__", iter_range2) .def("__iter__", iter_range2)
//~ .def("__iter__", iter_range3)
.add_property("start", &AlignedRegion::GetStart) .add_property("start", &AlignedRegion::GetStart)
.add_property("end", &AlignedRegion::GetEnd) .add_property("end", &AlignedRegion::GetEnd)
; ;
class_<ConstSequenceList>("ConstSequenceList", init<>()) class_<ConstSequenceList>("ConstSequenceList", init<>())
CONST_SEQ_LIST_DEF(ConstSequenceList) CONST_SEQ_LIST_DEF(ConstSequenceList)
...@@ -238,20 +268,20 @@ void export_sequence() ...@@ -238,20 +268,20 @@ void export_sequence()
; ;
class_<SequenceList>("SequenceList", init<>()) class_<SequenceList>("SequenceList", init<>())
CONST_SEQ_LIST_DEF(SequenceList) CONST_SEQ_LIST_DEF(SequenceList)
.def("__getitem__", &do_slice_b) .def("__getitem__", &do_slice_b)
; ;
class_<AlignmentList>("AlignmentList", init<>()) class_<AlignmentList>("AlignmentList", init<>())
.def(vector_indexing_suite<AlignmentList>()) .def(vector_indexing_suite<AlignmentList>())
.def("__getitem__", &do_slice_b) .def("__getitem__", &do_slice_b)
; ;
implicitly_convertible<SequenceList, ConstSequenceList>(); implicitly_convertible<SequenceList, ConstSequenceList>();
def("CreateSequenceList", &CreateSequenceList); def("CreateSequenceList", &CreateSequenceList);
def("SequenceFromChain", seq_from_chain_a); def("SequenceFromChain", seq_from_chain_a);
def("SequenceFromChain", seq_from_chain_b); def("SequenceFromChain", seq_from_chain_b);
def("SequenceToInfo", &SequenceToInfo); def("SequenceToInfo", &SequenceToInfo);
def("SequenceListToInfo", &SequenceListToInfo); def("SequenceListToInfo", &SequenceListToInfo);
def("SequenceFromInfo", &SequenceFromInfo); def("SequenceFromInfo", &SequenceFromInfo);
def("CreateAlignment", &CreateAlignment); def("CreateAlignment", &CreateAlignment);
def("AlignmentFromSequenceList", &AlignmentFromSequenceList); def("AlignmentFromSequenceList", &AlignmentFromSequenceList);
def("SequenceListFromInfo", &SequenceListFromInfo); def("SequenceListFromInfo", &SequenceListFromInfo);
} }
...@@ -41,36 +41,43 @@ public: ...@@ -41,36 +41,43 @@ public:
{ {
this->UpdateVal(); this->UpdateVal();
} }
AlignedColumnIterator& operator++() AlignedColumnIterator& operator++()
{ {
++curr_; ++curr_;
this->UpdateVal(); this->UpdateVal();
return *this; return *this;
} }
AlignedColumnIterator& operator--()
{
--curr_;
this->UpdateVal();
return *this;
}
AlignedColumnIterator operator++(int) AlignedColumnIterator operator++(int)
{ {
AlignedColumnIterator ans(*this); AlignedColumnIterator ans(*this);
++(*this); ++(*this);
return ans; return ans;
} }
AlignedColumn* operator->() AlignedColumn* operator->()
{ {
return &val_; return &val_;
} }
AlignedColumn& operator*() AlignedColumn& operator*()
{ {
return val_; return val_;
} }
bool operator==(const AlignedColumnIterator& rhs) const bool operator==(const AlignedColumnIterator& rhs) const
{ {
return aln_==rhs.aln_ && rhs.curr_==curr_; return aln_==rhs.aln_ && rhs.curr_==curr_;
} }
bool operator!=(const AlignedColumnIterator& rhs) const bool operator!=(const AlignedColumnIterator& rhs) const
{ {
return !(*this==rhs); return !(*this==rhs);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment