From c1b689f9a63f513872aec59fe68f7fbfec939eac Mon Sep 17 00:00:00 2001 From: Marco Biasini <marco.biasini@unibas.ch> Date: Tue, 9 Aug 2011 10:16:47 +0200 Subject: [PATCH] added convenience predicates for chain types --- modules/mol/base/pymod/export_chain.cc | 8 +++++ modules/mol/base/src/chain_base.cc | 27 +++++++++++++++ modules/mol/base/src/chain_base.hh | 15 +++++++++ modules/mol/base/src/impl/chain_impl.hh | 23 +++++++++++++ modules/mol/base/tests/test_chain.cc | 44 +++++++++++++++++++++++++ 5 files changed, 117 insertions(+) diff --git a/modules/mol/base/pymod/export_chain.cc b/modules/mol/base/pymod/export_chain.cc index 56bdf94ad..458234471 100644 --- a/modules/mol/base/pymod/export_chain.cc +++ b/modules/mol/base/pymod/export_chain.cc @@ -55,6 +55,14 @@ void export_Chain() .def("IsValid", &ChainBase::IsValid) .def("GetType", &ChainBase::GetType) .def("GetDescription", &ChainBase::GetDescription) + .def("IsPolypeptide", &ChainBase::IsPolypeptide) + .def("IsPolynucleotide", &ChainBase::IsPolynucleotide) + .def("IsPolysaccharide", &ChainBase::IsPolysaccharide) + .def("IsPolymer", &ChainBase::IsPolymer) + .add_property("is_polypeptide", &ChainBase::IsPolypeptide) + .add_property("is_polynucleotide", &ChainBase::IsPolynucleotide) + .add_property("is_polysaccharide", &ChainBase::IsPolysaccharide) + .add_property("is_polymer", &ChainBase::IsPolymer) ; generic_prop_def<ChainBase>(chain_base); class_<ChainHandle, bases<ChainBase> >("ChainHandle", init<>()) diff --git a/modules/mol/base/src/chain_base.cc b/modules/mol/base/src/chain_base.cc index 6e534a4dc..bbf0cfdad 100644 --- a/modules/mol/base/src/chain_base.cc +++ b/modules/mol/base/src/chain_base.cc @@ -67,5 +67,32 @@ std::ostream& operator<<(std::ostream& os, const ChainBase& chain) return os; } +bool ChainBase::IsPolymer() const +{ + this->CheckValidity(); + return impl_->IsPolymer(); + +} + +bool ChainBase::IsPolysaccharide() const +{ + this->CheckValidity(); + return impl_->IsPolysaccharide(); + +} + +bool ChainBase::IsPolypeptide() const +{ + this->CheckValidity(); + return impl_->IsPolypeptide(); + +} + +bool ChainBase::IsPolynucleotide() const +{ + this->CheckValidity(); + return impl_->IsPolynucleotide(); +} + }} // ns diff --git a/modules/mol/base/src/chain_base.hh b/modules/mol/base/src/chain_base.hh index 525ad3658..984c948fd 100644 --- a/modules/mol/base/src/chain_base.hh +++ b/modules/mol/base/src/chain_base.hh @@ -74,6 +74,21 @@ public: return impl_; } + /// \brief whether the chain is a polymer + /// + /// True if one of IsPolysaccharide(), IsPolynucleotide(), IsPolypeptide() is + /// true or the chain is of type CHAINTYPE_POLYMER. + bool IsPolymer() const; + + /// \brief whether the chain is a polysaccharide + bool IsPolysaccharide() const; + + /// \brief whether the chain is a polypeptide + bool IsPolypeptide() const; + + /// \brief whether the chain is a polynucleotide + bool IsPolynucleotide() const; + impl::ChainImplPtr& Impl() { return impl_; } diff --git a/modules/mol/base/src/impl/chain_impl.hh b/modules/mol/base/src/impl/chain_impl.hh index 546a2ae8d..1f871d504 100644 --- a/modules/mol/base/src/impl/chain_impl.hh +++ b/modules/mol/base/src/impl/chain_impl.hh @@ -63,6 +63,29 @@ public: { return type_; } + + /// \brief whether the chain is a polymer + bool IsPolymer() const + { + return type_==CHAINTYPE_POLY || this->IsPolypeptide() || + this->IsPolynucleotide() || this->IsPolysaccharide(); + } + /// \brief whether the chain is a polysaccharide + bool IsPolysaccharide() const + { + return type_==CHAINTYPE_POLY_SAC_D || type_==CHAINTYPE_POLY_SAC_L; + } + /// \brief whether the chain is a polypeptide + bool IsPolypeptide() const + { + return type_==CHAINTYPE_POLY_PEPTIDE_D || type_==CHAINTYPE_POLY_PEPTIDE_L; + } + /// \brief whether the chain is a polynucleotide + bool IsPolynucleotide() const + { + return type_==CHAINTYPE_POLY_DN || type_==CHAINTYPE_POLY_RN || + type_==CHAINTYPE_POLY_DN_RN; + } /// \brief Assign a description to a chain. /// diff --git a/modules/mol/base/tests/test_chain.cc b/modules/mol/base/tests/test_chain.cc index b0ffc3087..3b7bbd85b 100644 --- a/modules/mol/base/tests/test_chain.cc +++ b/modules/mol/base/tests/test_chain.cc @@ -210,26 +210,70 @@ BOOST_AUTO_TEST_CASE(chain_type) // setting/ getting BOOST_CHECK(ch1.GetType() == CHAINTYPE_UNKNOWN); + BOOST_CHECK(!ch1.IsPolymer()); + BOOST_CHECK(!ch1.IsPolysaccharide()); + BOOST_CHECK(!ch1.IsPolypeptide()); + BOOST_CHECK(!ch1.IsPolynucleotide()); e.SetChainType(ch1, CHAINTYPE_POLY); BOOST_CHECK(ch1.GetType() == CHAINTYPE_POLY); + BOOST_CHECK(ch1.IsPolymer()); + BOOST_CHECK(!ch1.IsPolysaccharide()); + BOOST_CHECK(!ch1.IsPolypeptide()); + BOOST_CHECK(!ch1.IsPolynucleotide()); e.SetChainType(ch1, CHAINTYPE_NON_POLY); BOOST_CHECK(ch1.GetType() == CHAINTYPE_NON_POLY); + BOOST_CHECK(!ch1.IsPolymer()); + BOOST_CHECK(!ch1.IsPolysaccharide()); + BOOST_CHECK(!ch1.IsPolypeptide()); + BOOST_CHECK(!ch1.IsPolynucleotide()); e.SetChainType(ch1, CHAINTYPE_WATER); BOOST_CHECK(ch1.GetType() == CHAINTYPE_WATER); + BOOST_CHECK(!ch1.IsPolymer()); + BOOST_CHECK(!ch1.IsPolysaccharide()); + BOOST_CHECK(!ch1.IsPolypeptide()); + BOOST_CHECK(!ch1.IsPolynucleotide()); e.SetChainType(ch1, CHAINTYPE_POLY_PEPTIDE_D); + BOOST_CHECK(ch1.IsPolymer()); + BOOST_CHECK(!ch1.IsPolysaccharide()); + BOOST_CHECK(ch1.IsPolypeptide()); + BOOST_CHECK(!ch1.IsPolynucleotide()); BOOST_CHECK(ch1.GetType() == CHAINTYPE_POLY_PEPTIDE_D); e.SetChainType(ch1, CHAINTYPE_POLY_PEPTIDE_L); + BOOST_CHECK(ch1.IsPolymer()); + BOOST_CHECK(!ch1.IsPolysaccharide()); + BOOST_CHECK(ch1.IsPolypeptide()); + BOOST_CHECK(!ch1.IsPolynucleotide()); BOOST_CHECK(ch1.GetType() == CHAINTYPE_POLY_PEPTIDE_L); e.SetChainType(ch1, CHAINTYPE_POLY_DN); + BOOST_CHECK(ch1.IsPolymer()); + BOOST_CHECK(!ch1.IsPolysaccharide()); + BOOST_CHECK(!ch1.IsPolypeptide()); + BOOST_CHECK(ch1.IsPolynucleotide()); BOOST_CHECK(ch1.GetType() == CHAINTYPE_POLY_DN); e.SetChainType(ch1, CHAINTYPE_POLY_RN); + BOOST_CHECK(ch1.IsPolymer()); + BOOST_CHECK(!ch1.IsPolysaccharide()); + BOOST_CHECK(!ch1.IsPolypeptide()); + BOOST_CHECK(ch1.IsPolynucleotide()); BOOST_CHECK(ch1.GetType() == CHAINTYPE_POLY_RN); e.SetChainType(ch1, CHAINTYPE_POLY_SAC_D); + BOOST_CHECK(ch1.IsPolymer()); + BOOST_CHECK(ch1.IsPolysaccharide()); + BOOST_CHECK(!ch1.IsPolypeptide()); + BOOST_CHECK(!ch1.IsPolynucleotide()); BOOST_CHECK(ch1.GetType() == CHAINTYPE_POLY_SAC_D); e.SetChainType(ch1, CHAINTYPE_POLY_SAC_L); + BOOST_CHECK(ch1.IsPolymer()); + BOOST_CHECK(ch1.IsPolysaccharide()); + BOOST_CHECK(!ch1.IsPolypeptide()); + BOOST_CHECK(!ch1.IsPolynucleotide()); BOOST_CHECK(ch1.GetType() == CHAINTYPE_POLY_SAC_L); e.SetChainType(ch1, CHAINTYPE_POLY_DN_RN); BOOST_CHECK(ch1.GetType() == CHAINTYPE_POLY_DN_RN); + BOOST_CHECK(ch1.IsPolymer()); + BOOST_CHECK(!ch1.IsPolysaccharide()); + BOOST_CHECK(!ch1.IsPolypeptide()); + BOOST_CHECK(ch1.IsPolynucleotide()); e.SetChainType(ch1, CHAINTYPE_N_CHAINTYPES); BOOST_CHECK(ch1.GetType() == CHAINTYPE_N_CHAINTYPES); e.SetChainType(ch1, CHAINTYPE_UNKNOWN); -- GitLab