Skip to content
Snippets Groups Projects
Commit c1b689f9 authored by Marco Biasini's avatar Marco Biasini
Browse files

added convenience predicates for chain types

parent 6d910ae5
No related branches found
No related tags found
No related merge requests found
......@@ -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<>())
......
......@@ -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
......@@ -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_;
}
......
......@@ -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.
///
......
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment