diff --git a/package/AUTHORS b/package/AUTHORS index 3e86580e235..683cc856670 100644 --- a/package/AUTHORS +++ b/package/AUTHORS @@ -220,6 +220,7 @@ Chronological list of authors - Mohit Kumar - Shubham Kumar - Zaheer Timol + - Geongi Moon External code ------------- diff --git a/package/CHANGELOG b/package/CHANGELOG index dc16ae96fe8..5c1d8902acf 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -13,11 +13,12 @@ The rules for this file: * release numbers follow "Semantic Versioning" http://semver.org ------------------------------------------------------------------------------ -??/??/?? IAlibay, hmacdope +??/??/?? IAlibay, hmacdope, pillose * 2.7.0 Fixes + * Fix Atom type guessing error (PR #4168, Issue #4167) Enhancements diff --git a/package/MDAnalysis/topology/guessers.py b/package/MDAnalysis/topology/guessers.py index 948b91fa7bf..a0847036de8 100644 --- a/package/MDAnalysis/topology/guessers.py +++ b/package/MDAnalysis/topology/guessers.py @@ -202,9 +202,14 @@ def guess_atom_element(atomname): try: return tables.atomelements[atomname.upper()] except KeyError: - # strip symbols and numbers + # strip symbols no_symbols = re.sub(SYMBOLS, '', atomname) - name = re.sub(NUMBERS, '', no_symbols).upper() + + # split name by numbers + no_numbers = re.split(NUMBERS, no_symbols) + no_numbers = list(filter(None, no_numbers)) #remove '' + # if no_numbers is not empty, use the first element of no_numbers + name = no_numbers[0].upper() if no_numbers else '' # just in case if name in tables.atomelements: diff --git a/testsuite/MDAnalysisTests/topology/test_guessers.py b/testsuite/MDAnalysisTests/topology/test_guessers.py index be6310bef77..1d946f22c8c 100644 --- a/testsuite/MDAnalysisTests/topology/test_guessers.py +++ b/testsuite/MDAnalysisTests/topology/test_guessers.py @@ -104,6 +104,11 @@ def test_guess_atom_element_1H(self): ('zn', 'ZN'), ('Ca2+', 'CA'), ('CA', 'C'), + ('N0A', 'N'), + ('C0U', 'C'), + ('C0S', 'C'), + ('Na+', 'NA'), + ('Cu2+', 'CU') )) def test_guess_element_from_name(self, name, element): assert guessers.guess_atom_element(name) == element