diff --git a/modules/conop/src/heuristic.cc b/modules/conop/src/heuristic.cc index 8c5277206ce487c7b9496b876f7422651db5c28c..a2f931848be7de153884c77358c6804e96d6fed3 100644 --- a/modules/conop/src/heuristic.cc +++ b/modules/conop/src/heuristic.cc @@ -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)); diff --git a/modules/conop/src/processor.cc b/modules/conop/src/processor.cc index 4ce93eba6d6fcc2f1df40dc64d1ab92fc8f950df..a2e32c0bf56ddf041d57c56ef3ed4ed00afbc98c 100644 --- a/modules/conop/src/processor.cc +++ b/modules/conop/src/processor.cc @@ -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"; } diff --git a/modules/conop/src/processor.hh b/modules/conop/src/processor.hh index d66f6ccbc65459e16933bea7cc7053d5770d3b73..1283fd8632af352e2f8d47253faa570825012517 100644 --- a/modules/conop/src/processor.hh +++ b/modules/conop/src/processor.hh @@ -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); diff --git a/modules/conop/src/rule_based.cc b/modules/conop/src/rule_based.cc index c4c870005e5c3d33332c921a5c371b89cfdbe834..902aec33d9860e5432aedb966e4793d48a86c6db 100644 --- a/modules/conop/src/rule_based.cc +++ b/modules/conop/src/rule_based.cc @@ -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())); } }