Skip to content

Instantly share code, notes, and snippets.

@jose-manuel
Last active March 13, 2020 08:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jose-manuel/a11ecda5b6989c2a5416d252bbf4c3db to your computer and use it in GitHub Desktop.
Save jose-manuel/a11ecda5b6989c2a5416d252bbf4c3db to your computer and use it in GitHub Desktop.
Potential roblem with a canonical tautomer
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Problem with the Canonical Tautomer"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2020-03-13 09:47:19,492 | INFO : test\n"
]
}
],
"source": [
"import logging\n",
"import sys\n",
"# activate logging messages\n",
"logging.basicConfig(format='%(asctime)s | %(levelname)s : %(message)s', level=logging.INFO, stream=sys.stdout)\n",
"logger = logging.getLogger()\n",
"logger.setLevel(logging.INFO)\n",
"logger.info('test')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"RDKit WARNING: [09:47:19] Enabling RDKit 2019.09.3 jupyter extensions\n"
]
}
],
"source": [
"from itertools import tee\n",
"import six\n",
"from rdkit import Chem\n",
"from rdkit.Chem import BondDir\n",
"from rdkit.Chem import BondStereo\n",
"from rdkit.Chem import BondType\n",
"from rdkit.Chem import Draw\n",
"from rdkit.Chem import rdChemReactions\n",
"from rdkit.Chem.MolStandardize.tautomer import TautomerEnumerator\n",
"from rdkit.Chem.MolStandardize.tautomer import TautomerCanonicalizer\n",
"from rdkit.Chem.MolStandardize.tautomer import TautomerScore\n",
"from IPython.display import Image\n",
"from IPython.display import HTML\n",
"from IPython.display import SVG\n",
"from IPython.display import Image"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Problem"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<rdkit.Chem.rdchem.Mol at 0x7f130446b530>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mol = Chem.MolFromSmiles('O=C1C=NC=C[N+]1=O')\n",
"mol"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2020-03-13 09:47:19,744 | DEBUG : Applied rule: oxim/nitroso r to O=C1C=NC=C[N+]1=O\n",
"2020-03-13 09:47:19,746 | DEBUG : New tautomer produced: O=C1C=NC=C=[N+]1O\n",
"2020-03-13 09:47:19,752 | DEBUG : Applied rule: oxim/nitroso f to O=C1C=NC=C=[N+]1O\n",
"2020-03-13 09:47:19,754 | DEBUG : Previous tautomer produced again: O=C1C=NC=C[N+]1=O\n",
"2020-03-13 09:47:19,760 | DEBUG : Tautomer: O=C1C=NC=C[N+]1=O\n",
"2020-03-13 09:47:19,767 | DEBUG : Score +2 (C=O)\n",
"2020-03-13 09:47:19,769 | DEBUG : Score +2 (N=O)\n",
"2020-03-13 09:47:19,771 | DEBUG : Score +1 (C=hetero)\n",
"2020-03-13 09:47:19,774 | DEBUG : Score +1 (C=hetero)\n",
"2020-03-13 09:47:19,777 | DEBUG : New highest tautomer: O=C1C=NC=C[N+]1=O (6)\n",
"2020-03-13 09:47:19,778 | DEBUG : Tautomer: O=C1C=NC=C=[N+]1O\n",
"2020-03-13 09:47:19,780 | DEBUG : Score +4 (oxim)\n",
"2020-03-13 09:47:19,782 | DEBUG : Score +2 (C=O)\n",
"2020-03-13 09:47:19,783 | DEBUG : Score +1 (C=hetero)\n",
"2020-03-13 09:47:19,784 | DEBUG : Score +1 (C=hetero)\n",
"2020-03-13 09:47:19,784 | DEBUG : Score +1 (C=hetero)\n",
"2020-03-13 09:47:19,786 | DEBUG : New highest tautomer: O=C1C=NC=C=[N+]1O (9)\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<rdkit.Chem.rdchem.Mol at 0x7f130447b9e0>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"logger.setLevel(logging.DEBUG)\n",
"tc = TautomerCanonicalizer()\n",
"canon = tc.canonicalize(mol)\n",
"canon"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This means I have the transformation below:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2020-03-13 09:47:19,825 | DEBUG : STREAM b'IHDR' 16 13\n",
"2020-03-13 09:47:19,826 | DEBUG : STREAM b'bKGD' 41 6\n",
"2020-03-13 09:47:19,826 | DEBUG : b'bKGD' 41 6 (unknown)\n",
"2020-03-13 09:47:19,827 | DEBUG : STREAM b'IDAT' 59 8192\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<PIL.PngImagePlugin.PngImageFile image mode=RGB size=900x300 at 0x7F1308344978>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rxn_str = f\"{Chem.MolToSmiles(mol)}>>{Chem.MolToSmiles(canon)}\"\n",
"rxn = rdChemReactions.ReactionFromSmarts(rxn_str, useSmiles=True)\n",
"Draw.ReactionToImage(rxn, subImgSize=(300, 300), useSVG=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I am not a chemist. Is this the expected behavior? \n",
"\n",
"I could found examples of molecules with allenes within rings, but only for larger rings:\n",
"\n",
"https://chemistry.stackexchange.com/questions/47568/do-allenes-form-rings "
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<rdkit.Chem.rdchem.Mol at 0x7f1303e10940>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Chem.MolFromSmiles(Chem.MolToSmiles(canon))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"No error is raised during the parsing of the molecule."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Considered Tautomers"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<PIL.PngImagePlugin.PngImageFile image mode=RGB size=600x200 at 0x7F1303F3C198>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def pairwise(iterable):\n",
" \"\"\"Utility function to iterate in a pairwise fashion.\"\"\"\n",
" a, b = tee(iterable)\n",
" next(b, None)\n",
" return six.moves.zip(a, b)\n",
"\n",
"\n",
"class TautomerScorer(TautomerCanonicalizer): \n",
" \n",
" def score(self, t):\n",
" \n",
" score = 0\n",
" # Add aromatic ring scores\n",
" ssr = Chem.GetSymmSSSR(t)\n",
" for ring in ssr:\n",
" btypes = {t.GetBondBetweenAtoms(*pair).GetBondType() for pair in pairwise(ring)}\n",
" elements = {t.GetAtomWithIdx(idx).GetAtomicNum() for idx in ring}\n",
" if btypes == {BondType.AROMATIC}:\n",
" logging.debug('Score +100 (aromatic ring)')\n",
" score += 100\n",
" if elements == {6}:\n",
" logging.debug('Score +150 (carbocyclic aromatic ring)')\n",
" score += 150\n",
" # Add SMARTS scores\n",
" for tscore in self.scores:\n",
" for match in t.GetSubstructMatches(tscore.smarts):\n",
" logging.debug('Score %+d (%s)', tscore.score, tscore.name)\n",
" score += tscore.score\n",
" # Add (P,S,Se,Te)-H scores\n",
" for atom in t.GetAtoms():\n",
" if atom.GetAtomicNum() in {15, 16, 34, 52}:\n",
" hs = atom.GetTotalNumHs()\n",
" if hs:\n",
" logging.debug('Score %+d (%s-H bonds)', -hs, atom.GetSymbol())\n",
" score -= hs\n",
" return score\n",
"\n",
" \n",
"logger.setLevel(logging.INFO)\n",
"te = TautomerEnumerator()\n",
"tautomers = te.enumerate(mol)\n",
"ts = TautomerScorer()\n",
"scores = [str(ts.score(t)) for t in tautomers]\n",
"Draw.MolsToGridImage(tautomers, legends=scores)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Adding a penalty to the score"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2020-03-13 09:47:19,897 | DEBUG : Applied rule: oxim/nitroso r to O=C1C=NC=C[N+]1=O\n",
"2020-03-13 09:47:19,897 | DEBUG : New tautomer produced: O=C1C=NC=C=[N+]1O\n",
"2020-03-13 09:47:19,899 | DEBUG : Applied rule: oxim/nitroso f to O=C1C=NC=C=[N+]1O\n",
"2020-03-13 09:47:19,899 | DEBUG : Previous tautomer produced again: O=C1C=NC=C[N+]1=O\n",
"2020-03-13 09:47:19,901 | DEBUG : Tautomer: O=C1C=NC=C[N+]1=O\n",
"2020-03-13 09:47:19,902 | DEBUG : Score +2 (C=O)\n",
"2020-03-13 09:47:19,903 | DEBUG : Score +2 (N=O)\n",
"2020-03-13 09:47:19,903 | DEBUG : Score +1 (C=hetero)\n",
"2020-03-13 09:47:19,904 | DEBUG : Score +1 (C=hetero)\n",
"2020-03-13 09:47:19,905 | DEBUG : New highest tautomer: O=C1C=NC=C[N+]1=O (6)\n",
"2020-03-13 09:47:19,906 | DEBUG : Tautomer: O=C1C=NC=C=[N+]1O\n",
"2020-03-13 09:47:19,907 | DEBUG : Score +4 (oxim)\n",
"2020-03-13 09:47:19,908 | DEBUG : Score +2 (C=O)\n",
"2020-03-13 09:47:19,909 | DEBUG : Score +1 (C=hetero)\n",
"2020-03-13 09:47:19,909 | DEBUG : Score +1 (C=hetero)\n",
"2020-03-13 09:47:19,910 | DEBUG : Score +1 (C=hetero)\n",
"2020-03-13 09:47:19,911 | DEBUG : Score -300 (bug)\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<rdkit.Chem.rdchem.Mol at 0x7f1303e108f0>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"logger.setLevel(logging.DEBUG)\n",
"\n",
"tc.scores = (TautomerScore('benzoquinone', '[#6]1([#6]=[#6][#6]([#6]=[#6]1)=,:[N,S,O])=,:[N,S,O]', 25),\n",
" TautomerScore('oxim', '[#6]=[N][OH]', 4),\n",
" TautomerScore('C=O', '[#6]=,:[#8]', 2),\n",
" TautomerScore('N=O', '[#7]=,:[#8]', 2),\n",
" TautomerScore('P=O', '[#15]=,:[#8]', 2),\n",
" TautomerScore('C=hetero', '[#6]=[!#1;!#6]', 1),\n",
" TautomerScore('methyl', '[CX4H3]', 1),\n",
" TautomerScore('guanidine terminal=N', '[#7][#6](=[NR0])[#7H0]', 1),\n",
" TautomerScore('guanidine endocyclic=N', '[#7;R][#6;R]([N])=[#7;R]', 2),\n",
" TautomerScore('aci-nitro', '[#6]=[N+]([O-])[OH]', -4),\n",
" TautomerScore('bug', '[*;R1]=[*;R1]=[*;R1]', -300), # this smarts is not specific enough\n",
" )\n",
"\n",
"tc.canonicalize(mol)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Of course this work-around is sub-optimal:\n",
"\n",
"- the smarts applied here is not nearly specific enough and side effects are to be expected in other molecules\n",
"- maybe it would be wiser to prevent the enumeration of such tautomer instead of applying a penalty to the score?"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment