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

improve GuessAtomElement

It seems, just looking at the number of atoms is not enough,
we also have to look at the hetatm flag. The whole element
guessing code is still quite shaky and should be improved.
parent f18f0cb0
No related branches found
No related tags found
No related merge requests found
...@@ -37,7 +37,7 @@ void HeuristicProcessor::ProcessUnkResidue(DiagnosticsPtr diags, ...@@ -37,7 +37,7 @@ void HeuristicProcessor::ProcessUnkResidue(DiagnosticsPtr diags,
i = atoms.begin(), e = atoms.end(); i != e; ++i) { i = atoms.begin(), e = atoms.end(); i != e; ++i) {
mol::AtomHandle a = *i; mol::AtomHandle a = *i;
if (!Conopology::Instance().IsValidElement(a.GetElement())) if (!Conopology::Instance().IsValidElement(a.GetElement()))
a.SetElement(GuessAtomElement(a.GetName(), atoms.size())); a.SetElement(GuessAtomElement(a.GetName(), a.IsHetAtom(), atoms.size()));
} }
res.SetChemClass(GuessChemClass(res)); res.SetChemClass(GuessChemClass(res));
......
...@@ -133,7 +133,7 @@ mol::ChemClass GuessChemClass(mol::ResidueHandle res) ...@@ -133,7 +133,7 @@ mol::ChemClass GuessChemClass(mol::ResidueHandle res)
return mol::ChemClass(); return mol::ChemClass();
} }
String GuessAtomElement(const String& aname, int atom_count) String GuessAtomElement(const String& aname, bool hetatm, int atom_count)
{ {
static String l1[] = { static String l1[] = {
"H","C","N","O","P","S","K" "H","C","N","O","P","S","K"
...@@ -158,7 +158,7 @@ String GuessAtomElement(const String& aname, int atom_count) ...@@ -158,7 +158,7 @@ String GuessAtomElement(const String& aname, int atom_count)
if(ele[0]=='H') { if(ele[0]=='H') {
return "H"; return "H";
} }
if (atom_count > 1) { if (!hetatm || atom_count > 1) {
if (ele=="CA" || ele=="CB") { if (ele=="CA" || ele=="CB") {
return "C"; return "C";
} }
......
...@@ -126,7 +126,8 @@ String DLLEXPORT_OST_CONOP StringFromConopAction(ConopAction action); ...@@ -126,7 +126,8 @@ String DLLEXPORT_OST_CONOP StringFromConopAction(ConopAction action);
/// \brief guess element of atom based on name and hetatm flag /// \brief guess element of atom based on name and hetatm flag
String DLLEXPORT_OST_CONOP GuessAtomElement(const String& atom_name, int atom_count); String DLLEXPORT_OST_CONOP GuessAtomElement(const String& atom_name, bool hetatm,
int atom_count);
/// \brief guess chemclass based on atoms of residue /// \brief guess chemclass based on atoms of residue
mol::ChemClass DLLEXPORT_OST_CONOP GuessChemClass(mol::ResidueHandle res); mol::ChemClass DLLEXPORT_OST_CONOP GuessChemClass(mol::ResidueHandle res);
......
...@@ -102,7 +102,7 @@ void RuleBasedProcessor::ProcessUnkResidue(DiagnosticsPtr diags, ...@@ -102,7 +102,7 @@ void RuleBasedProcessor::ProcessUnkResidue(DiagnosticsPtr diags,
e = atoms.end(); i !=e; ++i) { e = atoms.end(); i !=e; ++i) {
remaining_atoms.push_back(*i); remaining_atoms.push_back(*i);
if (!Conopology::Instance().IsValidElement(i->GetElement())) if (!Conopology::Instance().IsValidElement(i->GetElement()))
i->SetElement(GuessAtomElement(i->GetName(), atoms.size())); i->SetElement(GuessAtomElement(i->GetName(), i->IsHetAtom(), atoms.size()));
} }
} }
// Don't do anything if treatment is set to SILENT // Don't do anything if treatment is set to SILENT
...@@ -139,7 +139,7 @@ void RuleBasedProcessor::ProcessUnkAtoms(DiagnosticsPtr diags, ...@@ -139,7 +139,7 @@ void RuleBasedProcessor::ProcessUnkAtoms(DiagnosticsPtr diags,
e = unks.end(); i !=e; ++i) { e = unks.end(); i !=e; ++i) {
remaining_atoms.push_back(*i); remaining_atoms.push_back(*i);
if (!Conopology::Instance().IsValidElement(i->GetElement())) if (!Conopology::Instance().IsValidElement(i->GetElement()))
i->SetElement(GuessAtomElement(i->GetName(), res.GetAtomCount())); i->SetElement(GuessAtomElement(i->GetName(), i->IsHetAtom(), res.GetAtomCount()));
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment