From c970c9c2c896c103b0b308cd39882aa63f3ebd5d Mon Sep 17 00:00:00 2001
From: Marco Biasini <marco.biasini@unibas.ch>
Date: Fri, 29 Oct 2010 16:34:51 +0200
Subject: [PATCH] skip leading numeric characters when guessing element

---
 modules/conop/src/builder.cc        |  6 +++++-
 modules/conop/tests/test_builder.cc | 15 ++++++++++++---
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/modules/conop/src/builder.cc b/modules/conop/src/builder.cc
index 50b7d54f0..9fce604d8 100644
--- a/modules/conop/src/builder.cc
+++ b/modules/conop/src/builder.cc
@@ -147,7 +147,11 @@ String Builder::GuessAtomElement(const String& aname, bool hetatm)
       if(ele==l3[i]) return ele;
     }
   }
-  return String(1, aname[0]);
+  size_t i=0;
+  while (i<aname.size() && isdigit(aname[i])) {
+    ++i;
+  }
+  return i<aname.size() ? String(1, aname[i]) : "";
 }
 
 bool Builder::AreResiduesConsecutive(const mol::ResidueHandle& r1, 
diff --git a/modules/conop/tests/test_builder.cc b/modules/conop/tests/test_builder.cc
index 0c0c54cf0..4ba860bb1 100644
--- a/modules/conop/tests/test_builder.cc
+++ b/modules/conop/tests/test_builder.cc
@@ -34,14 +34,23 @@ BOOST_AUTO_TEST_CASE( test_builder )
 {
   BOOST_CHECK_EQUAL(Builder::GuessAtomElement("CA", false), "C");
   BOOST_CHECK_EQUAL(Builder::GuessAtomElement("CB", false), "C");
-  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("N", false), "N");  
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("N", false), "N");
   BOOST_CHECK_EQUAL(Builder::GuessAtomElement("O", false), "O");
   BOOST_CHECK_EQUAL(Builder::GuessAtomElement("CG1", false), "C");
   BOOST_CHECK_EQUAL(Builder::GuessAtomElement("CG2", false), "C");
-  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("OG1", false), "O");  
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("OG1", false), "O");
   BOOST_CHECK_EQUAL(Builder::GuessAtomElement("SG", false), "S");
-  
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("1HA", false), "H");
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("1HB", false), "H");
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("1DA", false), "D");
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("1DB", false), "D");
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("1HA", true), "H");
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("1HB", true), "H");
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("1DA", true), "D");
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("1DB", true), "D");  
   BOOST_CHECK_EQUAL(Builder::GuessAtomElement("CA", true), "CA");
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("11", true), "");
+  BOOST_CHECK_EQUAL(Builder::GuessAtomElement("11", false), "");  
 }
 
 BOOST_AUTO_TEST_SUITE_END()
-- 
GitLab