Skip to content
Snippets Groups Projects
Commit 1a7c3f9f authored by Gerardo Tauriello's avatar Gerardo Tauriello
Browse files

Added new ChainTypes to mmCIF parser

parent 8f30e404
No related branches found
No related tags found
No related merge requests found
...@@ -669,7 +669,7 @@ of the annotation available. ...@@ -669,7 +669,7 @@ of the annotation available.
Since this function is at the moment mainly used to create biounits from Since this function is at the moment mainly used to create biounits from
mmCIF files to be saved as PDBs, the function assumes that the mmCIF files to be saved as PDBs, the function assumes that the
:class:`ChainType` properties are set correctly. :class:`~ost.mol.ChainType` properties are set correctly.
:param asu: Asymmetric unit to work on. Should be created from a mmCIF :param asu: Asymmetric unit to work on. Should be created from a mmCIF
file. file.
......
...@@ -26,30 +26,36 @@ ChainType ChainTypeFromString(StringRef identifier) ...@@ -26,30 +26,36 @@ ChainType ChainTypeFromString(StringRef identifier)
{ {
// chain types as found in the entity category of a mmcif file // chain types as found in the entity category of a mmcif file
if(StringRef("polymer", 7) == identifier) { if (StringRef("polymer", 7) == identifier) {
return CHAINTYPE_POLY; return CHAINTYPE_POLY;
}else if(StringRef("non-polymer", 11) == identifier) { } else if (StringRef("non-polymer", 11) == identifier) {
return CHAINTYPE_NON_POLY; return CHAINTYPE_NON_POLY;
}else if(StringRef("water", 5) == identifier) { } else if (StringRef("water", 5) == identifier) {
return CHAINTYPE_WATER; return CHAINTYPE_WATER;
} else if (StringRef("macrolide", 9) == identifier) {
return CHAINTYPE_MACROLIDE;
// chain types as found in the entity_poly category of a mmcif file // chain types as found in the entity_poly category of a mmcif file
} else if(StringRef("polypeptide(D)", 14) == identifier) { } else if (StringRef("polypeptide(D)", 14) == identifier) {
return CHAINTYPE_POLY_PEPTIDE_D; return CHAINTYPE_POLY_PEPTIDE_D;
} else if(StringRef("polypeptide(L)", 14) == identifier) { } else if (StringRef("polypeptide(L)", 14) == identifier) {
return CHAINTYPE_POLY_PEPTIDE_L; return CHAINTYPE_POLY_PEPTIDE_L;
} else if(StringRef("polydeoxyribonucleotide", 23) == identifier) { } else if (StringRef("polydeoxyribonucleotide", 23) == identifier) {
return CHAINTYPE_POLY_DN; return CHAINTYPE_POLY_DN;
} else if(StringRef("polyribonucleotide", 18) == identifier) { } else if (StringRef("polyribonucleotide", 18) == identifier) {
return CHAINTYPE_POLY_RN; return CHAINTYPE_POLY_RN;
} else if(StringRef("polysaccharide(D)", 17) == identifier) { } else if (StringRef("polysaccharide(D)", 17) == identifier) {
return CHAINTYPE_POLY_SAC_D; return CHAINTYPE_POLY_SAC_D;
} else if(StringRef("polysaccharide(L)", 17) == identifier) { } else if (StringRef("polysaccharide(L)", 17) == identifier) {
return CHAINTYPE_POLY_SAC_L; return CHAINTYPE_POLY_SAC_L;
} else if(StringRef("polydeoxyribonucleotide/polyribonucleotide hybrid", } else if (StringRef("polydeoxyribonucleotide/polyribonucleotide hybrid",
49) == identifier) { 49) == identifier) {
return CHAINTYPE_POLY_DN_RN; return CHAINTYPE_POLY_DN_RN;
} else if(StringRef("other", 5) == identifier) { } else if (StringRef("cyclic-pseudo-peptide", 21) == identifier) {
return CHAINTYPE_UNKNOWN; return CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE;
} else if (StringRef("peptide nucleic acid", 20) == identifier) {
return CHAINTYPE_POLY_PEPTIDE_DN_RN;
} else if (StringRef("other", 5) == identifier) {
return CHAINTYPE_UNKNOWN;
} }
throw Error("Unrecognised chain type descriptor found: '" + throw Error("Unrecognised chain type descriptor found: '" +
...@@ -69,10 +75,12 @@ String StringFromChainType(ChainType type) ...@@ -69,10 +75,12 @@ String StringFromChainType(ChainType type)
return "polymer"; return "polymer";
} else if (CHAINTYPE_NON_POLY == type) { } else if (CHAINTYPE_NON_POLY == type) {
return "non-polymer"; return "non-polymer";
} else if (CHAINTYPE_WATER == type) { } else if (CHAINTYPE_WATER == type) {
return "water"; return "water";
} else if (CHAINTYPE_MACROLIDE == type) {
return "macrolide";
// chain types as found in the entity_poly category of a mmcif file // chain types as found in the entity_poly category of a mmcif file
} else if (CHAINTYPE_POLY_PEPTIDE_D == type) { } else if (CHAINTYPE_POLY_PEPTIDE_D == type) {
return "polypeptide(D)"; return "polypeptide(D)";
} else if (CHAINTYPE_POLY_PEPTIDE_L == type) { } else if (CHAINTYPE_POLY_PEPTIDE_L == type) {
return "polypeptide(L)"; return "polypeptide(L)";
...@@ -86,11 +94,15 @@ String StringFromChainType(ChainType type) ...@@ -86,11 +94,15 @@ String StringFromChainType(ChainType type)
return "polysaccharide(L)"; return "polysaccharide(L)";
} else if (CHAINTYPE_POLY_DN_RN == type) { } else if (CHAINTYPE_POLY_DN_RN == type) {
return "polydeoxyribonucleotide/polyribonucleotide hybrid"; return "polydeoxyribonucleotide/polyribonucleotide hybrid";
} else if (CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE == type) {
return "cyclic-pseudo-peptide";
} else if (CHAINTYPE_POLY_PEPTIDE_DN_RN == type) {
return "peptide nucleic acid";
} else if (CHAINTYPE_UNKNOWN == type) { } else if (CHAINTYPE_UNKNOWN == type) {
return "other"; return "other";
} }
std::stringstream ss("Unknonw ChainType item found: '"); std::stringstream ss("Unknown ChainType item found: '");
ss << type << "'!"; ss << type << "'!";
throw Error(ss.str()); throw Error(ss.str());
} }
......
...@@ -38,8 +38,12 @@ typedef enum { ...@@ -38,8 +38,12 @@ typedef enum {
CHAINTYPE_POLY_RN, ///< polyribonucleotide CHAINTYPE_POLY_RN, ///< polyribonucleotide
CHAINTYPE_POLY_SAC_D, ///< polysaccharide(D) CHAINTYPE_POLY_SAC_D, ///< polysaccharide(D)
CHAINTYPE_POLY_SAC_L, ///< polysaccharide(L) CHAINTYPE_POLY_SAC_L, ///< polysaccharide(L)
CHAINTYPE_POLY_DN_RN, ///<polydeoxyribonucleotide/ -ribonucleotide hybrid CHAINTYPE_POLY_DN_RN, ///< polydeoxyribonucleotide/ -ribonucleotide hybrid
CHAINTYPE_UNKNOWN, ///< guess what CHAINTYPE_UNKNOWN, ///< guess what
// new chain types
CHAINTYPE_MACROLIDE, ///< macrolide
CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE, ///< cyclic-pseudo-peptide
CHAINTYPE_POLY_PEPTIDE_DN_RN, ///< peptide nucleic acid
CHAINTYPE_N_CHAINTYPES ///< no. of chain types CHAINTYPE_N_CHAINTYPES ///< no. of chain types
} ChainType; } ChainType;
......
...@@ -68,7 +68,8 @@ public: ...@@ -68,7 +68,8 @@ public:
bool IsPolymer() const bool IsPolymer() const
{ {
return type_==CHAINTYPE_POLY || this->IsPolypeptide() || return type_==CHAINTYPE_POLY || this->IsPolypeptide() ||
this->IsPolynucleotide() || this->IsPolysaccharide(); this->IsPolynucleotide() || this->IsPolysaccharide() ||
type_==CHAINTYPE_POLY_PEPTIDE_DN_RN;
} }
/// \brief whether the chain is a polysaccharide /// \brief whether the chain is a polysaccharide
bool IsPolysaccharide() const bool IsPolysaccharide() const
...@@ -78,7 +79,8 @@ public: ...@@ -78,7 +79,8 @@ public:
/// \brief whether the chain is a polypeptide /// \brief whether the chain is a polypeptide
bool IsPolypeptide() const bool IsPolypeptide() const
{ {
return type_==CHAINTYPE_POLY_PEPTIDE_D || type_==CHAINTYPE_POLY_PEPTIDE_L; return type_==CHAINTYPE_POLY_PEPTIDE_D || type_==CHAINTYPE_POLY_PEPTIDE_L ||
type_==CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE;
} }
/// \brief whether the chain is a polynucleotide /// \brief whether the chain is a polynucleotide
bool IsPolynucleotide() const bool IsPolynucleotide() const
......
...@@ -302,6 +302,24 @@ BOOST_AUTO_TEST_CASE(chain_type) ...@@ -302,6 +302,24 @@ BOOST_AUTO_TEST_CASE(chain_type)
BOOST_CHECK(ch1.GetType() == CHAINTYPE_N_CHAINTYPES); BOOST_CHECK(ch1.GetType() == CHAINTYPE_N_CHAINTYPES);
e.SetChainType(ch1, CHAINTYPE_UNKNOWN); e.SetChainType(ch1, CHAINTYPE_UNKNOWN);
BOOST_CHECK(ch1.GetType() == CHAINTYPE_UNKNOWN); BOOST_CHECK(ch1.GetType() == CHAINTYPE_UNKNOWN);
e.SetChainType(ch1, CHAINTYPE_MACROLIDE);
BOOST_CHECK(ch1.GetType() == CHAINTYPE_MACROLIDE);
BOOST_CHECK(!ch1.IsPolymer());
BOOST_CHECK(!ch1.IsPolysaccharide());
BOOST_CHECK(!ch1.IsPolypeptide());
BOOST_CHECK(!ch1.IsPolynucleotide());
e.SetChainType(ch1, CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE);
BOOST_CHECK(ch1.GetType() == CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE);
BOOST_CHECK(ch1.IsPolymer());
BOOST_CHECK(!ch1.IsPolysaccharide());
BOOST_CHECK(ch1.IsPolypeptide());
BOOST_CHECK(!ch1.IsPolynucleotide());
e.SetChainType(ch1, CHAINTYPE_POLY_PEPTIDE_DN_RN);
BOOST_CHECK(ch1.GetType() == CHAINTYPE_POLY_PEPTIDE_DN_RN);
BOOST_CHECK(ch1.IsPolymer());
BOOST_CHECK(!ch1.IsPolysaccharide());
BOOST_CHECK(!ch1.IsPolypeptide());
BOOST_CHECK(!ch1.IsPolynucleotide());
// string -> chain type // string -> chain type
BOOST_CHECK(ChainTypeFromString("polymer") == CHAINTYPE_POLY); BOOST_CHECK(ChainTypeFromString("polymer") == CHAINTYPE_POLY);
...@@ -323,6 +341,11 @@ BOOST_AUTO_TEST_CASE(chain_type) ...@@ -323,6 +341,11 @@ BOOST_AUTO_TEST_CASE(chain_type)
"polydeoxyribonucleotide/polyribonucleotide hybrid") == "polydeoxyribonucleotide/polyribonucleotide hybrid") ==
CHAINTYPE_POLY_DN_RN); CHAINTYPE_POLY_DN_RN);
BOOST_CHECK(ChainTypeFromString("other") == CHAINTYPE_UNKNOWN); BOOST_CHECK(ChainTypeFromString("other") == CHAINTYPE_UNKNOWN);
BOOST_CHECK(ChainTypeFromString("macrolide") == CHAINTYPE_MACROLIDE);
BOOST_CHECK(ChainTypeFromString("cyclic-pseudo-peptide") ==
CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE);
BOOST_CHECK(ChainTypeFromString("peptide nucleic acid") ==
CHAINTYPE_POLY_PEPTIDE_DN_RN);
BOOST_CHECK_THROW(ChainTypeFromString("supposed to fail"), BOOST_CHECK_THROW(ChainTypeFromString("supposed to fail"),
Error); Error);
...@@ -344,6 +367,11 @@ BOOST_AUTO_TEST_CASE(chain_type) ...@@ -344,6 +367,11 @@ BOOST_AUTO_TEST_CASE(chain_type)
BOOST_CHECK(StringFromChainType(CHAINTYPE_POLY_DN_RN) == BOOST_CHECK(StringFromChainType(CHAINTYPE_POLY_DN_RN) ==
"polydeoxyribonucleotide/polyribonucleotide hybrid"); "polydeoxyribonucleotide/polyribonucleotide hybrid");
BOOST_CHECK(StringFromChainType(CHAINTYPE_UNKNOWN) == "other"); BOOST_CHECK(StringFromChainType(CHAINTYPE_UNKNOWN) == "other");
BOOST_CHECK(StringFromChainType(CHAINTYPE_MACROLIDE) == "macrolide");
BOOST_CHECK(StringFromChainType(CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE) ==
"cyclic-pseudo-peptide");
BOOST_CHECK(StringFromChainType(CHAINTYPE_POLY_PEPTIDE_DN_RN) ==
"peptide nucleic acid");
BOOST_CHECK_THROW(StringFromChainType(CHAINTYPE_N_CHAINTYPES), BOOST_CHECK_THROW(StringFromChainType(CHAINTYPE_N_CHAINTYPES),
Error); Error);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment