diff --git a/modules/mol/alg/pymod/export_sec_structure.cc b/modules/mol/alg/pymod/export_sec_structure.cc index d79dea60c5fc7e2fa7753fecb531951244b7cf49..0073a2f138bd23a1192f951e580573b1ffcd8252 100644 --- a/modules/mol/alg/pymod/export_sec_structure.cc +++ b/modules/mol/alg/pymod/export_sec_structure.cc @@ -19,8 +19,10 @@ #include <boost/python.hpp> +#include <boost/python/suite/indexing/vector_indexing_suite.hpp> #include <ost/mol/alg/sec_struct.hh> +#include <ost/mol/alg/sec_structure_segments.hh> using namespace boost::python; @@ -34,6 +36,31 @@ void AssignSecStructHandle(ost::mol::EntityHandle& handle) { ost::mol::alg::AssignSecStruct(handle); } +ost::mol::alg::SecStructureSegments +ExtractHelicalSegments_handle(const ost::mol::ChainHandle& chain) { + return ost::mol::alg::ExtractHelicalSegments(chain); +} +ost::mol::alg::SecStructureSegments +ExtractHelicalSegments_view(const ost::mol::ChainView& chain) { + return ost::mol::alg::ExtractHelicalSegments(chain); +} +ost::mol::alg::SecStructureSegments +ExtractExtendedSegments_handle(const ost::mol::ChainHandle& chain) { + return ost::mol::alg::ExtractExtendedSegments(chain); +} +ost::mol::alg::SecStructureSegments +ExtractExtendedSegments_view(const ost::mol::ChainView& chain) { + return ost::mol::alg::ExtractExtendedSegments(chain); +} +ost::mol::alg::SecStructureSegments +ExtractSecStructureSegments_handle(const ost::mol::ChainHandle& chain) { + return ost::mol::alg::ExtractSecStructureSegments(chain); +} +ost::mol::alg::SecStructureSegments +ExtractSecStructureSegments_view(const ost::mol::ChainView& chain) { + return ost::mol::alg::ExtractSecStructureSegments(chain); +} + } // ns void export_sec_struct() { @@ -41,3 +68,23 @@ void export_sec_struct() { def("AssignSecStruct", &AssignSecStructHandle, (arg("ent"))); } +void export_sec_struct_segments() { + + class_<ost::mol::alg::SecStructureSegment>("SecStructureSegment", init<int,int,ost::mol::SecStructure>()) + .def_readwrite("first", &ost::mol::alg::SecStructureSegment::first) + .def_readwrite("last", &ost::mol::alg::SecStructureSegment::last) + .def_readwrite("ss_type", &ost::mol::alg::SecStructureSegment::ss_type) + ; + + class_<ost::mol::alg::SecStructureSegments>("SecStructureSegments", init<>()) + .def(vector_indexing_suite<ost::mol::alg::SecStructureSegments>()) + ; + + def("ExtractHelicalSegments", &ExtractHelicalSegments_handle, (arg("chain"))); + def("ExtractHelicalSegments", &ExtractHelicalSegments_view, (arg("chain"))); + def("ExtractExtendedSegments", &ExtractExtendedSegments_handle, (arg("chain"))); + def("ExtractExtendedSegments", &ExtractExtendedSegments_view, (arg("chain"))); + def("ExtractSecStructureSegments", &ExtractSecStructureSegments_handle, (arg("chain"))); + def("ExtractSecStructureSegments", &ExtractSecStructureSegments_view, (arg("chain"))); +} + diff --git a/modules/mol/alg/pymod/wrap_mol_alg.cc b/modules/mol/alg/pymod/wrap_mol_alg.cc index d36877c0fb9024c9a200ca0e327fd9b68f900cbd..265df5dfd552a3dbf26b895855c582f744d2980b 100644 --- a/modules/mol/alg/pymod/wrap_mol_alg.cc +++ b/modules/mol/alg/pymod/wrap_mol_alg.cc @@ -47,6 +47,7 @@ void export_Molck(); void export_contact_overlap(); void export_accessibility(); void export_sec_struct(); +void export_sec_struct_segments(); void export_find_membrane(); #if OST_IMG_ENABLED void export_entity_to_density(); @@ -319,6 +320,7 @@ BOOST_PYTHON_MODULE(_ost_mol_alg) export_contact_overlap(); export_accessibility(); export_sec_struct(); + export_sec_struct_segments(); export_find_membrane(); #if OST_IMG_ENABLED export_entity_to_density(); diff --git a/modules/mol/alg/src/sec_structure_segments.hh b/modules/mol/alg/src/sec_structure_segments.hh index 958c285209dc7723ffd9aa31d4057eb9c3057c16..dc906c0757bce80af592a203a95c116af21b3d68 100644 --- a/modules/mol/alg/src/sec_structure_segments.hh +++ b/modules/mol/alg/src/sec_structure_segments.hh @@ -35,6 +35,15 @@ struct DLLEXPORT_OST_MOL_ALG SecStructureSegment { SecStructureSegment(): first(0), last(0), ss_type(SecStructure::COIL) { } + bool operator==(const SecStructureSegment& rhs) const + { + return first==rhs.first && last==rhs.last && ss_type==rhs.ss_type; + } + bool operator!=(const SecStructureSegment& rhs) const + { + return !(*this==rhs); + } + /// \brief index of first residue part of the segment int first; /// \brief index of last residue part of the segment