From e6b1cf9fa9f4e2c1f1184df4cfca1c4a8c2cb7d5 Mon Sep 17 00:00:00 2001 From: Marco Biasini <marco.biasini@unibas.ch> Date: Mon, 4 Oct 2010 19:37:56 +0200 Subject: [PATCH] rule-based-builder: override the atom element, if it is bogus --- modules/conop/src/conop.cc | 9 +++++++++ modules/conop/src/conop.hh | 2 ++ modules/conop/src/rule_based_builder.cc | 8 ++++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/modules/conop/src/conop.cc b/modules/conop/src/conop.cc index 9d34eba51..d7edd9aa8 100644 --- a/modules/conop/src/conop.cc +++ b/modules/conop/src/conop.cc @@ -318,6 +318,15 @@ Real Conopology::GetDefaultAtomRadius(const String& element) const return it==ele_rad_map_.end() ? 1.5 : it->second; } +bool Conopology::IsValidElement(const String& element) const +{ + String upper_ele=element; + std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper); + + std::map<String,Real>::const_iterator it = ele_mass_map_.find(upper_ele); + return it!=ele_mass_map_.end(); +} + Real Conopology::GetDefaultAtomMass(const String& element) const { String upper_ele=element; diff --git a/modules/conop/src/conop.hh b/modules/conop/src/conop.hh index f8133a078..e8ad4bc0b 100644 --- a/modules/conop/src/conop.hh +++ b/modules/conop/src/conop.hh @@ -53,6 +53,8 @@ public: void RegisterBuilder(const BuilderP& b, const String& name); void SetDefaultBuilder(const String& default_name); + + bool IsValidElement(const String& element) const; private: Conopology(); Conopology(const Conopology&) {} diff --git a/modules/conop/src/rule_based_builder.cc b/modules/conop/src/rule_based_builder.cc index 8264dc5ba..e47c96e35 100644 --- a/modules/conop/src/rule_based_builder.cc +++ b/modules/conop/src/rule_based_builder.cc @@ -83,11 +83,11 @@ bool RuleBasedBuilder::HasUnknownAtoms(mol::ResidueHandle res) void RuleBasedBuilder::FillAtomProps(mol::AtomHandle atom, const AtomSpec& spec) { + Conopology& conop_inst=Conopology::Instance(); mol::AtomProp props=atom.GetAtomProps(); - if (props.element=="") { + if (!conop_inst.IsValidElement(props.element)) { props.element=spec.element; } - Conopology& conop_inst=Conopology::Instance(); if (props.radius==0.0) { props.radius=conop_inst.GetDefaultAtomRadius(spec.element); } @@ -331,10 +331,10 @@ void RuleBasedBuilder::FillAtomProps(mol::AtomHandle atom) bool RuleBasedBuilder::OnUnknownAtom(mol::AtomHandle atom) { mol::AtomProp props=atom.GetAtomProps(); - if (props.element=="") { + Conopology& conop_inst=Conopology::Instance(); + if (!conop_inst.IsValidElement(props.element)) { props.element=Builder::GuessAtomElement(atom.GetName(), props.is_hetatm); } - Conopology& conop_inst=Conopology::Instance(); if (props.radius==0.0) { props.radius=conop_inst.GetDefaultAtomRadius(props.element); } -- GitLab