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
Branches
Tags
No related merge requests found
......@@ -37,7 +37,7 @@ void HeuristicProcessor::ProcessUnkResidue(DiagnosticsPtr diags,
i = atoms.begin(), e = atoms.end(); i != e; ++i) {
mol::AtomHandle a = *i;
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));
......
......@@ -133,7 +133,7 @@ mol::ChemClass GuessChemClass(mol::ResidueHandle res)
return mol::ChemClass();
}
String GuessAtomElement(const String& aname, int atom_count)
String GuessAtomElement(const String& aname, bool hetatm, int atom_count)
{
static String l1[] = {
"H","C","N","O","P","S","K"
......@@ -158,7 +158,7 @@ String GuessAtomElement(const String& aname, int atom_count)
if(ele[0]=='H') {
return "H";
}
if (atom_count > 1) {
if (!hetatm || atom_count > 1) {
if (ele=="CA" || ele=="CB") {
return "C";
}
......
......@@ -126,7 +126,8 @@ String DLLEXPORT_OST_CONOP StringFromConopAction(ConopAction action);
/// \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
mol::ChemClass DLLEXPORT_OST_CONOP GuessChemClass(mol::ResidueHandle res);
......
......@@ -102,7 +102,7 @@ void RuleBasedProcessor::ProcessUnkResidue(DiagnosticsPtr diags,
e = atoms.end(); i !=e; ++i) {
remaining_atoms.push_back(*i);
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
......@@ -139,7 +139,7 @@ void RuleBasedProcessor::ProcessUnkAtoms(DiagnosticsPtr diags,
e = unks.end(); i !=e; ++i) {
remaining_atoms.push_back(*i);
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