From 52c0d4a8f845df1a93a205f69ecdbe07619756d6 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Thu, 25 Mar 2021 02:10:23 -0400 Subject: [PATCH] fix: fix SMILES converting bug (resolve #1056) (#1066) * fix: fix SMILES converting bug (resolve #1056) Co-authored-by: Hesy * add doctests Co-authored-by: Hesy --- reacnetgenerator/_reachtml.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/reacnetgenerator/_reachtml.py b/reacnetgenerator/_reachtml.py index c9a9cce39..da02df37b 100644 --- a/reacnetgenerator/_reachtml.py +++ b/reacnetgenerator/_reachtml.py @@ -47,10 +47,20 @@ def report(self): f"Report is generated. Please see {self.resultfilename} for more details.") def _re(self, smi): - for an in self.atomname: - if an != 'H': - smi = smi.replace(an.upper(), f"[{an.upper()}]").replace( - an.lower(), f"[{an.lower()}]") + """If you use RDkit to convert a methyl radical to SMILES, you will get something + like [H]C([H])[H]. However, OpenBabel will consider it as a methane molecule. So, + you have to use [H][C]([H])[H], if you need to process some radicals. + + Examples: + >>> self._re('C') + [C] + >>> self._re('[C]') + [C] + >>> self._re('[CH]') + [CH] + """ + elements = "".join([an.upper() + an.lower() for an in self.atomname if an != 'H']) + smi = re.sub(r'(?