Created
June 24, 2021 16:55
-
-
Save ptosco/2b19142ff8fd6afdfee12836cec73d4f to your computer and use it in GitHub Desktop.
Use a custom normalization reaction list with the MolStandardizer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"2021.03.1\n" | |
] | |
} | |
], | |
"source": [ | |
"import rdkit\n", | |
"print(rdkit.__version__)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import tempfile\n", | |
"from rdkit import Chem\n", | |
"from rdkit.Chem.Draw import MolsToGridImage\n", | |
"from rdkit.Chem.MolStandardize import rdMolStandardize" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can pass the MolStandardizer a custom list of normalization reactions.<br/>\n", | |
"Here I copied the standard RDKit list and just tweaked the `Pyridine oxide to n+O` rule a bit to make it more specific such that it is not triggered by molecules which are not actually N-oxides (as yours):" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"custom_normalizations = \"\"\"// Opposite of #2.1 in InChI technical manual? Covered by RDKit\n", | |
"// Sanitization.\n", | |
"Nitro to N+(O-)=O\t[N,P,As,Sb;X3:1](=[O,S,Se,Te:2])=[O,S,Se,Te:3]>>[*+1:1]([*-1:2])=[*:3]\n", | |
"Sulfone to S(=O)(=O)\t[S+2:1]([O-:2])([O-:3])>>[S+0:1](=[O-0:2])(=[O-0:3])\n", | |
"Pyridine oxide to n+O-\t[nH0+0:1]=[O:2]>>[n+:1][O-:2]\n", | |
"Azide to N=N+=N-\t[*:1][N:2]=[N:3]#[N:4]>>[*:1][N:2]=[N+:3]=[N-:4]\n", | |
"Diazo/azo to =N+=N-\t[*:1]=[N:2]#[N:3]>>[*:1]=[N+:2]=[N-:3]\n", | |
"Sulfoxide to -S+(O-)-\t[!O:1][S+0;X3:2](=[O:3])[!O:4]>>[*:1][S+1:2]([O-:3])[*:4]\n", | |
"// Equivalent to #1.5 in InChI technical manual\n", | |
"Phosphate to P(O-)=O\t[O,S,Se,Te;-1:1][P+;D4:2][O,S,Se,Te;-1:3]>>[*+0:1]=[P+0;D5:2][*-1:3]\n", | |
"// Equivalent to #1.8 in InChI technical manual\n", | |
"C/S+N to C/S=N+\t[C,S&!$([S+]-[O-]);X3+1:1]([NX3:2])[NX3!H0:3]>>[*+0:1]([N:2])=[N+:3]\n", | |
"// Equivalent to #1.8 in InChI technical manual\n", | |
"P+N to P=N+\t[P;X4+1:1]([NX3:2])[NX3!H0:3]>>[*+0:1]([N:2])=[N+:3]\n", | |
"Normalize hydrazine-diazonium\t[CX4:1][NX3H:2]-[NX3H:3][CX4:4][NX2+:5]#[NX1:6]>>[CX4:1][NH0:2]=[NH+:3][C:4][N+0:5]=[NH:6]\n", | |
"// Equivalent to #1.3 in InChI technical manual\n", | |
"Recombine 1,3-separated charges\t[N,P,As,Sb,O,S,Se,Te;-1:1]-[A+0:2]=[N,P,As,Sb,O,S,Se,Te;+1:3]>>[*-0:1]=[*:2]-[*+0:3]\n", | |
"Recombine 1,3-separated charges\t[n,o,p,s;-1:1]:[a:2]=[N,O,P,S;+1:3]>>[*-0:1]:[*:2]-[*+0:3]\n", | |
"Recombine 1,3-separated charges\t[N,O,P,S;-1:1]-[a:2]:[n,o,p,s;+1:3]>>[*-0:1]=[*:2]:[*+0:3]\n", | |
"Recombine 1,5-separated charges\t[N,P,As,Sb,O,S,Se,Te;-1:1]-[A+0:2]=[A:3]-[A:4]=[N,P,As,Sb,O,S,Se,Te;+1:5]>>[*-0:1]=[*:2]-[*:3]=[*:4]-[*+0:5]\n", | |
"Recombine 1,5-separated charges\t[n,o,p,s;-1:1]:[a:2]:[a:3]:[c:4]=[N,O,P,S;+1:5]>>[*-0:1]:[*:2]:[*:3]:[c:4]-[*+0:5]\n", | |
"Recombine 1,5-separated charges\t[N,O,P,S;-1:1]-[c:2]:[a:3]:[a:4]:[n,o,p,s;+1:5]>>[*-0:1]=[c:2]:[*:3]:[*:4]:[*+0:5]\n", | |
"// Conjugated cation rules taken from Francis Atkinson's standardiser. Those\n", | |
"// that can reduce aromaticity aren't included\n", | |
"Normalize 1,3 conjugated cation\t[N,O;+0!H0:1]-[A:2]=[N!$(*[O-]),O;+1H0:3]>>[*+1:1]=[*:2]-[*+0:3]\n", | |
"Normalize 1,3 conjugated cation\t[n;+0!H0:1]:[c:2]=[N!$(*[O-]),O;+1H0:3]>>[*+1:1]:[*:2]-[*+0:3]\n", | |
"Normalize 1,5 conjugated cation\t[N,O;+0!H0:1]-[A:2]=[A:3]-[A:4]=[N!$(*[O-]),O;+1H0:5]>>[*+1:1]=[*:2]-[*:3]=[*:4]-[*+0:5]\n", | |
"Normalize 1,5 conjugated cation\t[n;+0!H0:1]:[a:2]:[a:3]:[c:4]=[N!$(*[O-]),O;+1H0:5]>>[n+1:1]:[*:2]:[*:3]:[*:4]-[*+0:5]\n", | |
"// Equivalent to #1.6 in InChI technical manual. RDKit Sanitization handles\n", | |
"// this for perchlorate.\n", | |
"Charge normalization\t[F,Cl,Br,I,At;-1:1]=[O:2]>>[*-0:1][O-:2]\n", | |
"Charge recombination\t[N,P,As,Sb;-1:1]=[C+;v3:2]>>[*+0:1]#[C+0:2]\n", | |
"\"\"\"" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"m = Chem.MolFromSmiles('Cn1c(=O)c2nc[nH][n+](=O)c2n(C)c1=O')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"params = rdMolStandardize.CleanupParameters()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"For a one-off cleanup job you can use `rdMolStandardize.Cleanup()`:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with tempfile.NamedTemporaryFile() as hnd:\n", | |
" hnd.write(custom_normalizations.encode(\"utf-8\"))\n", | |
" hnd.flush()\n", | |
" params.normalizationsFile = hnd.name\n", | |
" clean_mol = rdMolStandardize.Cleanup(m, params)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAf70lEQVR4nO3deVxTZ7oH8B97EVBWkVWk4FoVwSqIgsQQZHHq7mjvrbedEe0+rb21dWbazrS2Wu3UqTMd0S5TndYRBTcQCSFhEdE7bBYBtYjiwiYEZBdI3vtHUgIUZc9JyPP99A94ApwnRX+e8573vK8eYwyEEEIGS5/rBgghRLtRjBJCyJBQjBJCyJBQjBJCyJBQjBJCyJBQjBIN1dDQcPbs2cbGRq4bIaQPFKNEQ6WkpISHh4eHh3PdCCF9oBglGio5ORlAUFAQ140Q0geKUaKhFDHK4/G4boSQPujRU0xEA1VVVU2YMMHU1FQqlZqYmHDdDiGPQ2ejRBMlJyczxhYtWkQZSjQfxSjRRGKxGMCSJUu4boSQvlGMEk1EA6NEi9DYKNE4paWlbm5ulpaW1dXVBgYGXLdDSB/obJRonKSkJAA8Ho8ylGgFQ64bIKQnxRW9Ng2M1tfjzh2YmsLNDfp0aqJz6FdONAtjLCUlBdoSo3V12LABNjaYPx+TJ8PFBd99x3VPRN3obJRoloKCgoqKCkdHxylTpnDdS1/kcvzqV6ipwaVL8PZGSwsOHcJvfgNTU6xdy3VzRH3obHT0am7muoPB0KYr+uRknD+Pw4fh7Q0ApqbYvBkbNuD997nujKgVxeioU1KC1athZgYzM4wdi+eeQ3k51z0NwOXL4YGBn4WFbeS6kX5ITYWbmzJDO61Zg6tXUVnJUU+EAxSjo0tlJRYuhFQKiQRVVYiPR0EBAgPR0MB1Z/3S0YHYWI/U1Df9/LThbLSqCo6OPYvOzgBQUaH+dghXKEZHl927oaeH+HjMmwc7OyxahMRElJdj/36uO+uXrCw8eIDJkzFxItet9IepKerrexbr6gDAzEz97RCuUIyOLkIh1qyBqamqYmuLiAgkJnLX0wAkJwOAVoyLAsBTT6GkpOeZfl4ezM3h5sZNS4QLFKOjy717cHXtWXRzw927XHQzYGIxAGjNI6ArV0JfHx9/rKrcv4+9e/HcczCkOTA6hH7Zo4uREVpaehZbWmBszEU3A9PaisxM6Otj8WKuW+knGxt8+y02bEBuLhYvRk0NjhyBgwN27OC6M6JWdDY6ukyejGvXehaLitB1DmZHhzo76r+MDLS0YPZs2Npy3UqfmpuxaROOHsWqVSgowPz5yM9HXR0+/hgXLsDSkuv+iFrR2ejosnYt/vd/8ec/q8bmcnMhEiE6WvlpczPCwyEQ4N13OWrxkbRpYPT8eXz1FfLysG4dPDzwpz9x3RDhEp2Nji6bN8PPD/PnY/dunDyJjz5CUBBWr8bKlcovSEpCWhq2b8eePZw22gttitFee33vPfj6IiGBk44Ih2ihvFGnrQ0HD+LsWVRWwtkZK1bgv/4LXZdK+uYbbNoEuRwffog//IG7Rrt58AA2NjAwQE0NzM257qZPc+ciOxtCIYKDVUVfX1y6hLNnERrKXWeEAxSjOunIETz3HDo68Kc/4b33uO4GAE6dwvLlWLQIaWlct9KnujrY2sLAAFKpan7ogwfKMV2pFBYWHHZH1I8u6nVAa2vPWeLr1+PwYRga4v338c47HLXVjWKqk3Zc0YvFkMmwYEG3OfapqejogK8vZagOohgd7drasGYNeDxIpd3qv/41vv8ehobYtUsTklQx2KgdM0Z7HRjVppFdMswoRke7+/dRWIjsbCxditrabi+tXYsffoCREXbtwrZtHPUHAA0NuH8fZmaYP5/DLvqNYpR0R2OjOuDOHfB4KC7GnDlISoKNTbdXjx/Hhg1ob8dbb2H3brU11dyMigo4OCifXGUMRUUwNcWkSWprYVDKyuDkBAsL1NTAyEhZrKxUvhOpFLQjtO6hs1Ed4OKC9HRMn47cXPD5qK7u9urq1YiNhYkJ9uzB1q1qayopCU8+iVdfVX6qp4ebNzF5stqOP1iKs86AAFWGKoqMISCAMlQ3UYzqhgkTIBZj+nTk5YHPx/373V6NiMDRozA2bo+N/XT7drVdoBgb49//Rnq6eo42TOiKnvwCxajOsLeHWIynnsLlywgM7LmW8zPPdMTGBsrl2z755He/+516ktTUFK+/jhdfRHu7Go42PHg5ez73i67nr+xW1bIlVcgwoxjVJfb2SE7GzJkoKgKP1yNJDcPD34uKeuKJJ7744ostW7bI5XI1dPTuu6itxWefqeFQw+D6dUjybXfeWGPxlGo91AclNbLmh7C2hpcXh70RDlGM6pjx45VJevUqgoJQVtb1xaVLl546dcrU1PTAgQMjmqQymfIDc3Ps2YMPP8TNmyN0qOGkuHYPCoKenqoYnWxjWFX2x+X5tLWyzqJfvO6xs0NqKnx8cO0agoJw717XFwUCQUJCgpmZ2cGDByMjI4cxSWUyZGdj1y4EB2PZMlV9/Xr4+uLNN4frOCPoMeOijnN/sZsI0R2M6CaplD39dIeDw/MBAXfu3OnxYmpqqrm5OYAXXnhBJpMN5TglJWz/frZyJbO0ZIDyPwsLdvw4GzdO+TVFRczYmG3dygwNh3KokSWTMVtbBrAbN1RFuZzZ2zOAXbvGXWeEaxSjOqym5uXQUAAeHh63b9/u8WJaWpqFhQWA9evXt7e3D+gHNzWxpCS2bRvz8VFFJ8Dc3VlkJIuOZnV17ORJVYwyxt59l5mYaHSMZmczgLm6ditevswA5ujIUU9EM1CM6rTa2tr58+cDmDhxYklJSY9X09PTFUm6bt26PpNUJpNlZUl37GABAczISBWdVlZs9Wp24AC7davb1/eI0aYmNmkSMzRkcjk7dIh1dAzPGxxGu3czgL3wQrfi558zgD33HEc9Ec1AMarr6urqfH19Abi6ut7oer3KGGPs/PnzY8eOBbB27dpek7SioiI6OjoyMtLBwWHBgvWK6DQwYD4+bNs2lpTE2tp6P+716+zzz7tVMjPZp5+ybdsYwNavZwM8Ax5xS5cygH3/fbdiRAQD2HffcdQT0QwUo4TV1dX5+fkpkrS4uLjHqxkZGYok/eyzzxSV5ubmc+fOvfnmmzNmzOg6zu7tPW/zZhYTw+rqBt9MVhazsmIAW736kRGsfg8fMnNzpqfHyspUxfZ2NnYsA9gvxpaJbqEYJYwx1tjYuHjxYgAuLi4//fRTj1czMzPXr19fVFQUFRUVERHxxBNPdEbnmDFj+Hz+zp07s7KyhquZrCxmbc0AtmqVpiRpWhoD2IwZ3YoXLjCATZnCUU9EY1CMEqXGxsagoCAAEyZMKCgo6KynpKRs3LjRwcGhMzr19fXnzp27ffv2lJSUtpHJuexsZmPDABYezlpbR+IIA/P118zYmL36arfiRx8xgL30Ekc9EY1BMUpUmpqaeDweAHt7e0WSpqSkbNiwQZGe48ePX7NmTVRU1L1799TQTG6uMknDwlhLixoO2IfGRlZV1a0SFMQAdvw4Rw0RjUExSrppamri8/mKJM3Pz1dk6IoVK/Lz89XfTG6ucqrm0qVcJun168pJWp2Ki9nZs+yNN9i0aSwhgTU1cdYb0QQUo6SnziRdt26d4lq+sLCQq2YKC9mECQxgISGsuZmbHv76154X73//O/PwUH787LPsF5NuiW6hh0FJT2PGjDl9+vS777771ltvlZeX29vbT506latmpk2DWAwHByQmYvlytLRw04adHb75Bv/3f92KeXl4/XVkZeGDD7BjBzeNEU1AMUp6YWpq+vHHH2dmZgLg8/l6XZfiUDtFkjo6QihEaCgaGznowcEBW7ZgyxZ0dKiK06fjj3/EzJl4/XW89BIHXRENQTFKHik5ORnAEg1YjXjqVIhEcHBAaWnbxo0vNzc3q7+H99/H3bvYt09VMTaGrS1cXGBnBysr9XdENAXFKOmdTCZLS0sDoJgFxblp0yCRsHHjVsTGfhkWFtbU1KSGg3Z0qDYKsLTEp58qw7Srv/wFXSaDEV1EMUp6l52dXVtb6+Hh4ebmxnUvSlOm6B07ttfZ2Tk1NTUkJKShoWGEDlRSggMHsHYt7Ozw2muq+saN8PbG22+P0GGJtjLkugGioTTnir4rT0/P9PR0Ho+XkZGxdOnShIQExYOqQ1dfD4kEiYlISkJxsare9dxTTw9ffIG5c2FIf29IF3Q2SnqnmTEKwM3NTSKRuLu7X7hwgcfj1dbWDvpHyeWqlaTt7LB8Of7xDxQXw9wcERGIisKtWz133Js1C6+8gu+/H+q7IKMJ7VNPetHa2mptbd3a2lpZWWlnZ8d1O724ffs2j8e7ceOGj4+PUCi0trbu//feuXMnLY2dPu2anIyaGmXR0BC+vhAIIBBg7lwYGKi+/osv8PXXuHxZ+WlDA6ZNg6kpDh/GwYOIiqKTU11Hv3/SiwsXLrS0tHh5eWlmhgJwdXWVSCRBQUHZ2dl8Pj8pKcnGxuYxX9/S0pKRkSESiUQiUU5OTkDAq6mpfwXg7g4+H3w+goNhadn794aGouvEWQsLnD2L0lL8+tcoLcWDBzhypNuu9UTXUIySXojFYmjkFX1XLi4uEomEx+Pl5uby+XyRSNQjSRljly9fFgqFQqHw/PnzDx8+VNTHjh3r7o516yAQ4Mkn+z6Qpyc8PbtVZs3CrFlwdkZwMGJisGIFYmJgYjJsb41oF7qoJ73w8/O7ePFifHx8WFgY1730oaKiYsmSJYWFhV5eXklJSba2tvfv309JSRGJRPHx8fd+3rBPX19/zpw5fD6fz+cHBAQYGxsPy9Hz8sDno6YGoaGIjUWXFQSJDqEYJT3V12PaNJmHR2lc3HgLC3Ou2+lbWVkZj8e7du2ak5OTtbX1lStXOv9Uu7i4CAQCgUDA5/MHNH7af3l5CA5GdTWWLsWJE5SkuohilPR05gx+9Sv4++P8ea5b6bfKykpvb29jY+Nbt26Zmpr6+/srTjy9vb3V8CRrURF4PFRUICQEJ07A1HSkD0g0C42Nkp563Y1dw9nb29va2v7444979ux55ZVXTNQ7TjltGiQS8HjK9VNOnqQk1S10Nkp6mjUL+flITUVAANet9FtNTc348eONjY2lUqkpRxl27Rp4PJSVISAA8fEw14LhEDI8aPo96aaqCleuYMwYzJ/PdSuPkJWVFRMTI5VKuxYlEolcLvf39+cqQwFMmaJciSotDWFh3KxERThBMUq6EYvBGBYu1NzpO1FRUatXr/7qq6+6FhXPXCl2QOHQlCmQSODkhPR0hIZixB76J5qFYpR0o/kDo70+pao5j65Onozz5+HmhvPnERqK+nquGyIjj8ZGSTfu7rh5E1lZ8PHhupXelJaWurm5WVpaVldXG/z8wOa9e/ecnZ0tLCykUqmhZjyYWVqKoCDcvIkFC5CQgGFaPoVoKDobJSqlpbh5E5aW8PLiupVHEIlEAIKCggy6PPSelJSkKGpIhgKYOBESCdzdceECeDx0H8glow3FKFERiQCAx+u2MIdG6fXiXfHoKucDoz0okvTJJ5GdjeBgStLRjGKUqCgGRjUsjlQYYxKJBL+I0V6LmsDVFRIJPDyQk6N8ZpSMShSjRIkxSCSABt9fKigoqKiocHR07LpT6dWrV+/evTt+/PgZM2Zw2NujuLgok7SgAAkJ2LUL+fmqV0tLsWsXGMM//9lz29HERJw6peZmySBRjBKlggJUVMDREdztptyHx9+j53b70sdwdkZKCk6ehJ0d3nkHzz6L9nblS8XFeOcdyOXYvRticbfvOnoU336r/mbJYFCMEqWaGsyYobmnotD4qU6P4eSE0FAAMDJCayu++ILrhsiwohjVadnZiImBXA4AgYG4cgWvvooLF7huqzcymSw9PR3A4sWLO4tyuTw1NRWad3/pUfT1sWsXPvgAt29z3QoZPpoyQYRwIioKBw/ib3/Dyy8rK998g8pKxMZy2lZvsrKy6urqPD09J06c2FnMzc2VSqUTJ06cNGkSh70NyIoV8PXFa6/h5Mlu9dxcHDqk+vTGDVhZqbk1MkgUo7rOxQW//z1WrtT0zdYfc0UfHBzMTU+DtW8fZs/G6dMwM1MV8/Lw4IHq0xs3MHeu+lsjg0EX9bouMBDz5uHNN7nuoy/aOzD6S1OnYutWvPEGft7WBACefx7nzqn+Ewi4648MEMUowd69iImBUMh1H4/W2tqamZmpr6/fdWC0ra0tIyNDT0+va1Fb/OEPkMmwbx/XfZDhQDGqoxob0bnB+/TpeO01vPwyWls57enRMjIyWlpaZs+ebWtr21nMzMxsamp66qmnJkyYwGFvgzNmDPbuxblzXPdBhgPFqG4pKMCuXQgOhq0tvvxSVX//fbS24rPPuOvssR7zDKjWXdF3Wr4cERFcN0GGA91iGv3KyiAUIjERIhGqq5VFQ0OUl6u+xsICf/kLXngBS5ZAX/P+be31qXkNWWO0/wICcPkyystVd/OOHEFVFQwMEBeHceO6ffHHH0MmU3+PZDBoobzRqaUFGRkQiSASIScHnb9kBwfw+Vi2DHw+rKwQGYmWFhw+rHw1JAQiEZ55RrMmPD148MDW1lZPT08qlZr/vDVHY2OjtbU1Y6y6unpcjwTSYEIhQkKwdi2OHuW6FTJ86Gx0VMnPz09NdT9zxiwtTTXQaW6OoCAIBBAIMHny477973/HzJkAcP06TpzAtm0j3nB/pKamdnR0LFy40LzL9kZpaWnt7e2+vr5alKH4efEX7ZnkSvqFYlTrVVdXSyQSkUiUkJBw586dRYsK09OnAZg+XXnWuWjRI3cEeeONbleOHh7IyIBMhpAQ3LoFqRS7dqnlPTzWaBoY1fzNBcggUIxqJcVcH6FQKBQK8/Ly5IrHOQFHR0c/vysvvjiNz4edXd8/Z9q0nhVvbwD429+wahU+/RQdHdzfd3rMjFEtGhgFUFeHvDwYG2PBAq5bIcOKxka1SUlJiUgkEolEQqHwwc+PvJiamvr7+/P5fD6f7+3tPVwLHZ09i1Wr0NqKLVvw5ZfgavmkyspKBwcHU1NTqVTaufu8JmynPAgnTmDlSgQGIiWF61bIsKKzUe2wdevWmJiY0tLSzsrMmTNDQkIEAsHChQtHIkrCwhAbi5UrsX8/GMM//sFNkjY0NKxZs8bIyMiky8CEWCzmfDvlQaAr+tGKYlQ7lJSUlJaW2traBgUF8fn80NBQFxeXkT5oaChOnMCKFYiKglyO/fs5mAvl4eFx9Bd3tbX0GVCK0dGKLuq1Q25uLmPMy8tLX+1JJhRi+XK0tOC3v0VUlEbMKvX09CwuLr506dK8efO47qW/ysrg5AQLC9TUwMiI627IsKKzUe0wZ84crg4tECAhARER+OorMIYDBzhO0jt37hQXF48bN85HM/eAfgTFqWhAAGXoKKQBpxZE4wUGIj4e5ub4+mv89rf4eV4ANxRX9IGBgQYau39pbxR7hGjVzALSXxSjpF8CAnDmDMzM8O23eOEFyGScRamWDoxq+HaBZCgoRkl/LV6MxERYWKC09L1nn93Q0dGh5gYaGhpOnToVFxcHbYvRn35CaSlsbJQPiZFRhsZGyQD4+0MovC0Q7G1oaNDX1z906JCh4cj+EZLL5bm5uYrZsmlpaW1tbSYmJkZGRocPH965c+eIHnoYdd6j14QbdGTYUYySgfH1dRWLxQKB4MiRI+3t7T/88IPRCNw0uXv3ruIZLZFIVFNToygaGhr6+/s7OTnFxsbu2rXL0NDwo48+GvZDj4Rr1075+88KCZkAaNNEV9JfjJCBy8rKsra2BrBq1aq2trZh+ZnNzc1JSUnbtm3z8fHp+iyWu7t7ZGRkdHS0VCpVfOWxY8cU2f3WW28Ny6FHlFwut7OzA/DTTz9x3QsZERSjZJCys7NtbGwAhIeHt7a2Dvrn3LhxIyoqKiIi4oknnuiMTjMzMz6fv3PnzqysrF6/68yZM4rnmrZu3TroQ6tHbm4uAFdXV64bISOFYpQMXk5OjiJJw8LCWlpa+v+NVVVV0dHRkZGRzs7OndGpr6/v4+Ozbdu2pKSkhw8f9vlD4uLiFEn6xhtvyOXyIbyPkbVnzx4Azz//PNeNkJFCMUqGJDc3V7E/0tKlSx+fpO3t7enp6Ypr9q7PYtnb269ZsyYqKqqsrGygRz979qziHHbLli0am6ShoaEA/vWvf3HdCBkp9DAoGaqioiIej1dRURESEnLixIkey4V0rkqVmJhYX1+vKA7jqlTnzp1bsWJFa2trZGTk/v37h2uBq+HS0dFhbW3d0NBw9+5dJycnrtshI4PrHCejQVFRkYODAwCBQNDc3FxdXa24Zp84cWLXP2yKm0WnT58e0AhAn86dO6fI7k2bNslksmH8yUOXnp4OYPr06Vw3QkYQTXgiQ3Xr1q1PPvnk7bff3rlzp1AodHNzq66u7lxJ2t7eXiAQCASC4OBge3v7kWggJCTk5MmTy5cvP3jwoFwuP3DggPoXcAHQ2NjYdZsTBS195ooMCMUoGaqkpKRDhw41NzenpqZu3LhRJpNJpVI/P79ly5YN70rSjyEQCE6fPv3MM88cPnzUzu79HTtc1BOkjY2NEokkLi4uMTFx7ty5x48f7/EFve5pSkYZilEyVJ37eUyZMuXixYs3b960t7ffsmXLsWPHFi5cqLbBSj6fHxcX98EHnjt3OldU4OuvR+qRoY6OjosXLyqeDsjKypL9vJuViYkJY6zr+21ubr506ZKBgUFgYOCItEI0A8UoGRLGWEpKCrpct06aNAmAWCy+d++elZWVOpsJCgoyMkJYGP75T7S24vBhDOOjqjduICOj8MSJ34vF4s57ZSYmJoGBgYpRCy8vrx7/ZqSnpz98+PDpp59W8/8HomYUo2RI8vPzKysrnZycJnfZu7mwsPDevXv29vbTfrln3ghbuBAJCQgNxb//Dbkc338/pCRtakJmJkQiiETIzoaz85i7d08CcHd3V0wzCAkJGTt27KO+nQZGdQTFKBkSRVLw+fxei5xMP/L3x7lzCA1FdDQYww8/DCxJZTJkZ0MohFCIzEx0rmNlbQ0/P7ewsB94PH9XV9f+/CiKUR1BMUqG5DG7H3MYHwsWQCyGQIBjx5RJ2s/lU0pKMG8efl4LBYaGWLgQAgEEAsydCwMDAOv7/CEymSwrK+v06dO5ubkmJib+/v6DfydEG9D0ezJ4HR0dNjY29fX1d+7c6XysUyaT2dnZ1dbW3rx5083NjcP2cnIQHAypFBEROH4cXbYWfSS5HBMmwMICfD74fAQHw9Kyv4erqKhIT08/c+ZMfHy8VCoF4OTkdODAgbCwsCG8CaIF6GyUDN5//vOf+vr6qVOndn00Picnp7a29sknn+Q2QwF4e0MkQnAw4uKwahViYvpOUn19FBTAzq6/h2hqakpNTU1MTBQKhVevXu2se3h4KO47KZ4EJaMbxSgZvM6pTr8sasiA4Jw5yiSNj8eKFYiNRZdlpHrXnwwtKSk5c+ZMXFyc4l68omhmZubn58fn85ctWzZ9+vQh9060BsUoGTzNHBjtwcsLIhH4fCQkYMUKnDjRd5L2qqJCed+prm53fPzbiqKBgcH8+fMVJ56+vr4jvRcA0Uw0NkoGqbW11crKqq2trbKyUrHIE4C2tjYrK6uWlpby8vIRevRzcH78EXw+Jk/Gb36Dixfx4YcYP175UnQ0Kivx6qu9fFdHBy5eRFwcRCLk5EDxd2XatKza2mWLFi2KiIiIiIhQLF9NdBn940kGKT09vbW11cfHpzNDAVy4cKG5uXn27NkalaEAZs1CWhqcnLB9Ow4cQEsLDh1SvpSZiWvXusXolSvKE8+0NLS0KItmZli8WHHXfu7UqeXqfgNEg1GMkkEquXhRX0+v14FRzXyEfOpU5Qfz5+P4cfzP/3TbNb6mBmIxRCKcO4fbt1V1d3dERGDZMixa1K97/UQHUYySQdp85swma2tpSEjXoqYNjPbKxQV8PrZswY8/qsZJP/oIe/cqPx4/HoGB4PMRHg5aI5T0iWKUDEpdHXJy9A0MbH19O2usoWGjoeFDR8eAgAAOW+uPd97Bd9/h00/x3nvKSng4CgqUM+1nzoSGrf5MNBrFKBmUlBTIZPD3h5lZZ00vNXVzevrmBQtgYcFha/1hbo7PP8d//zeefVZZUcy3J2QQOFjdlowGyckA0OPiXSzupaipVq9GYCDeeovrPoj2o7NRMii9xqiiqJH3l3q1bx9mzcL06dCwaQVEy9DZKBm48nJcvQozMzz9tKpYVYX8fIwZAz8/7jobGE9PvP02cnK47oNoOYpRMnBiMRhDQACMjVVFiQSMwd9fu6YFbd+OLgulEjIYdFFPBu4xV/QaPzC6b1+3T01McO0aR62Q0YLORsnASSSAtsYoIcOOnqknA1RcDE9P2Nigqkq1aVxpKdzcYGmJ6mrF4saE6A46GyUD1Hk7vuvGmyIRAAQFUYYSHUQxSgZIMTm0x6ymXouE6Aa6qCcDwRjs7XH/Pq5fh6enqujkhPJyFBZC7VuBEsI5ulNPBqKlBZs24coVVYYCKCxEeTkcHFRrKBGiSyhGyUCMGYMdO3oWO+/R03oeRCdRjJIBSk9HTAzKyjBuHIKDsXo11q+HnR36t3U7IaMP3WIiA/HHPyIoCHV18PODuTkiIxEWBktLrF8P2o2d6Cq6xUT6LSMDixbh+HGsXKmsXL8OLy98+CG2buW0M0K4RDFK+u2ll5CZidzcbsUXX0RmJvLyOOqJEO7RRT3pt8JCzJjRszhzJoqKuOiGEE1BMUr6ra2t61r3Subm6OiAXM5FQ4RoBIpR0m8ODrh7t2fx9m1MmNDtwVBCdAz96Sf9tmQJUlJQVaWqMIboaFrVieg4ilHSbxs3wtERq1ejuBgAamqweTNu3MD27Vx3RgiXKEZJv5mZITkZFhaYOhUWFrC1RVYWRCJ6BpToOJrwRAaurg4VFbCyoq3gCAHFKCGEDBFd1BNCyJBQjBJCyJBQjBJCyJBQjBJCyJBQjBJCyJD8P19C2cUiJp/FAAABP3pUWHRyZGtpdFBLTCByZGtpdCAyMDIxLjAzLjEAAHice79v7T0GIOABYkYGCOAHYgEgbmBkY0gAiTOzO2gAaWZmNgjNwsEApplgfIR8BphmZHewADGAOhO0wCbg1gK1At1obqBzGJkSmJg1mJhYElhYE1jZMpjY2BPYORI4ODWYOLgSuLgTuHkYuHkTePk0mHgZE7hYMphEmNgYebm5WJjYWNnYObhYxGF+YuBPcU0/IOkcsB/EEdvCdUDj/5V9ILbNsZ79N5T3gMWfue3df+WL1QEQu75wo52oUydYPPDfFntBYQ6weJmAuUOiy12w+OkAfwenX71gcy7953L4dcrNHsTWcFB2WD6VzwHEFtllaf+a75AdiD1XeP2+E+nbwWqiKsRtz0yzAKtpev5kP1tbC1h81xGzA1xbWcHiYgBzjUmHYDfddQAAAUZ6VFh0TU9MIHJka2l0IDIwMjEuMDMuMQAAeJydVMtuxCAMvPMV/oFFfoAN582qlapupR76D733/1UTCMqhW61AKJoJ8WTigQRo43N7+/6BOXgLASgDKQD+OWut8MWIGPzxi0Ql0YYwFpLcNDD6KsIVHkmc567CkdS4qyRSPKncn1eh6OZKR0l3tODFa61Yd1WZ+KTy8bSKV0hSHa6MZckLuBdKODrEykt9AY5FMXUvxkXXvEhkqdIzYjNZ9UJGtdeaaf5fJT1UyRlLR8xWVzMyzsOBWMWlvlxa0v2LPC3hutYXrxDDkVZJvObF8y1FuheUvLbrfK+VnEd3sdSlE0BevF8bcSQ9zHAgniTPFUc6iSObxFGZxFGdpALhVHNCx4qjdnYHYSA57DSS5kpqf7shQN3YFJje3gGury+7QHs3ULtzu2/hFyhw0He5OMiNAAAA4HpUWHRTTUlMRVMgcmRraXQgMjAyMS4wMy4xAAB4nCWPO24DMQxEr5JSi2gF/j9YpHKTzgcwXKnfE/jwoZSK0vBxMPO4cbaf5zFptrs9jon1ed3f77bn73ve9PVpJw9DNuwnjEBWkn6dNNC8XqUJGkCWhgMyo9cUy5CtiIdzLzwJsSAYLKaWiwIn5iU5qaT12nkC1d2iMMV7GTCFLgi4TDuNCKFt7RFMRQAr/0cKVbdCIBK9X5XRMZavuynrUlTBsxCiOu8XD+LkXY28ghYRBrxLOIXVTUVAAVwdkAytH58/i0VBOrdWbcQAAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<rdkit.Chem.rdchem.Mol at 0x7fbf06e2a0d0>" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"clean_mol" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"As parsing the same file multiple times is not very efficient, if you need to clean up multiple molecules you might prefer to create objects once..." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"params = rdMolStandardize.CleanupParameters()\n", | |
"metal_disconnector = rdMolStandardize.MetalDisconnector()\n", | |
"normalizer = rdMolStandardize.NormalizerFromData(custom_normalizations, params)\n", | |
"reionizer = rdMolStandardize.Reionizer()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" ...and then re-use them (e.g., in a loop) for all the molecules you need to standardize; these are the operations that `rdMolStandardize.Cleanup()` carries out in sequence:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"clean_mol = metal_disconnector.Disconnect(m)\n", | |
"clean_mol = normalizer.normalize(clean_mol)\n", | |
"clean_mol = reionizer.reionize(clean_mol)\n", | |
"Chem.AssignStereochemistry(clean_mol)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"In either case, the amended pattern for pyridine _N_-oxides now does not cause trouble anymore, and you can get other tautomers of that molecule correctly:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"taut = rdMolStandardize.TautomerEnumerator()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<IPython.core.display.Image object>" | |
] | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"MolsToGridImage(list(taut.Enumerate(clean_mol)))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"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.8" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment