{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Beaker: Using RDKit without RDKit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### myChEMBL team, ChEMBL group, EMBL-EBI." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are cases when one would need to use a chemoinformatics toolkit without having to install it. Such cases include a computer without sufficient privileges, a JavaScript web widget or mobile phone application. Another, very pragmatic, reason could be simply the lack of technical knowledge or experience to install such a toolkit or the need to quickly check some chemical properties without spending too much time on installation.\n", "\n", "In such cases, our tool called [Beaker](https://github.com/mnowotka/chembl_beaker) can be very helpful. To the less advanced users, Beaker can be seen as a part of public [web services](https://www.ebi.ac.uk/chembl/ws), provided by ChEMBL. In the same way, one can use ChEMBL web services to check details of a compound for the given ID, now one may call the same web services to convert molfiles to SMILES, depict them, calculate fingerprints, etc.\n", "\n", "The only requirement to use this functionality is having an internet connection. If you have myChEMBL VM, working internet connection is not required - web services are preloaded on the machine. This means you can use it straight away and the rest of this notebook shows how to do it in Python.\n", "\n", "In order to access web services from Python we will use official ChEMBL python client called \"chembl_webresource_client\"." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Configuration" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['MMFFctab23D', 'MMFFsmiles23D', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'addHs', 'atomIsInRing', 'atomRings', 'bondIsInRing', 'bondRings', 'breakBonds', 'call_spore_function', 'canonicalizeSmiles', 'cipStereoInfo', 'clean', 'ctab23D', 'ctab2image', 'ctab2inchi', 'ctab2inchiKey', 'ctab2json', 'ctab2smarts', 'ctab2smiles', 'ctab2svg', 'ctab2xyz', 'description', 'descriptors', 'getNumAtoms', 'getNumBonds', 'hydrogenize', 'image2ctab', 'image2smiles', 'inchi2ctab', 'inchi2inchiKey', 'inchi2svg', 'kekulize', 'logP', 'mcs', 'molExport', 'molWt', 'neutralise', 'numAtomRings', 'numBondRings', 'numRings', 'official', 'reactionConverter', 'reactionExport', 'removeHs', 'rules', 'sanitize', 'sdf2SimilarityMap', 'sdf2fps', 'session', 'smiles23D', 'smiles2SimilarityMap', 'smiles2ctab', 'smiles2image', 'smiles2inchi', 'smiles2inchiKey', 'smiles2json', 'smiles2svg', 'sssr', 'standardise', 'status', 'symmSSSR', 'tpsa', 'unsalt']\n" ] } ], "source": [ "# First of all we have to import some useful libraries:\n", "\n", "# json for converting python dicts to json objects back and forth\n", "import json\n", "\n", "# lxml.etree for pretty-printing XML documents\n", "from lxml import etree\n", "\n", "# Ipython helper for displaying images\n", "from IPython.display import Image, display\n", "from IPython.display import SVG\n", "from IPython.display import Javascript\n", "\n", "# By default our Python client will use public instance of web services, requiring internet connection.\n", "# We want to use a local instance provided with myChEMBL so we are doing some additional configuration.\n", "# You should skip this when using the client outside of myChEMBL\n", "from chembl_webresource_client.settings import Settings\n", "Settings.Instance().UTILS_SPORE_URL = 'http://localhost/utils/spore'\n", "\n", "# Finally, importing utils (aka Beaker) part of ChEMBL webservices, and we are ready to go!\n", "import chembl_webresource_client.utils as utils_mod\n", "utils = utils_mod.utils\n", "print dir(utils)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Format conversion" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " RDKit 2D\n", "\n", " 13 13 0 0 0 0 0 0 0 0999 V2000\n", " -3.0122 1.1850 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n", " -2.6987 -0.2818 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -1.2716 -0.7438 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n", " -0.1580 0.2612 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -0.4715 1.7281 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0.6420 2.7330 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " 2.0691 2.2711 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " 2.3827 0.8043 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1.2691 -0.2007 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1.5826 -1.6676 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " 3.0097 -2.1295 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0.4690 -2.6725 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n", " -3.8123 -1.2868 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 2 2 0\n", " 2 3 1 0\n", " 3 4 1 0\n", " 4 5 2 0\n", " 5 6 1 0\n", " 6 7 2 0\n", " 7 8 1 0\n", " 8 9 2 0\n", " 9 10 1 0\n", " 10 11 2 0\n", " 10 12 1 0\n", " 2 13 1 0\n", " 9 4 1 0\n", "M END\n", "$$$$\n", "\n" ] } ], "source": [ "# We will start with converting SMILES to molfile\n", "\n", "# Lets take SMILES of aspirin:\n", "smiles = 'O=C(Oc1ccccc1C(=O)O)C'\n", "\n", "# And this is how we do the conversion, simple!\n", "ctab = utils.smiles2ctab(smiles)\n", "\n", "# And here we can see the result:\n", "print ctab" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SMILES Name \n", "CC(=O)Oc1ccccc1C(=O)O 0\n", "\n", "CC(=O)Oc1ccccc1C(=O)O\n" ] } ], "source": [ "# OK, now having our molfile (ctab), let's convert is back to SMILES\n", "# By default, computed SMILES will be canonical:\n", "smi_file = utils.ctab2smiles(ctab)\n", "print smi_file\n", "# The result is a *.smi file with the header so in order to get only SMILES, we have to extract the relevant part:\n", "canonical_smiles = smi_file.split()[2]\n", "print canonical_smiles" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "InChI=1S/C9H8O4/c1-6(10)13-8-5-3-2-4-7(8)9(11)12/h2-5H,1H3,(H,11,12)\n" ] } ], "source": [ "# Having our aspirin molfile (ctab), we can compute InCHI:\n", "inchi = utils.ctab2inchi(ctab)\n", "print inchi" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BSYNRYMUTXBXSQ-UHFFFAOYSA-N\n" ] } ], "source": [ "# And, of course, an InCHIKey from InCHI:\n", "inchiKey = utils.inchi2inchiKey(inchi)\n", "print inchiKey" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# It's also possible to convert InCHI back to molfile (ctab2):\n", "ctab2 = utils.inchi2ctab(inchi)\n", "\n", "# And a molfile to smiles:\n", "smiles2 = utils.ctab2smiles(ctab2).split()[2]\n", "\n", "# Let's check if we've go the same canonical SMILES after this round trip:\n", "canonical_smiles == smiles2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Marvin utils" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Marvin 4 JS](https://www.chemaxon.com/products/marvin/marvin-js/) is a JavaScript port of very popular compound editor. To provide some extended functionality, such as importing/exporting from different formats, providing stereochemistry information or performing other calculations, Marvin 4 JS is using web services. The [specification](https://marvinjs-demo.chemaxon.com/latest/docs/dev/webservices.html) is open so everyone can provide own version of web services compatible with Marvin. Beaker provides set of methods conforming to that specification." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n" ] } ], "source": [ "# Again, let's start from the SMILES for Aspirin\n", "smiles = 'O=C(Oc1ccccc1C(=O)O)C'\n", "\n", "# We will convert it to *.mrv format\n", "mrv = json.loads(utils.molExport(structure=smiles, parameters=\"mrv\"))['structure']\n", "\n", "# Since *.mrv files are XML-based we can pretty-print it:\n", "root = etree.fromstring(mrv).getroottree()\n", "print etree.tostring(root, pretty_print=True)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{u'headers': {u'tetraHedral': {u'source': u'CALCULATOR', u'type': u'COMPLEX', u'name': u'tetraHedral'}, u'doubleBond': {u'source': u'CALCULATOR', u'type': u'COMPLEX', u'name': u'doubleBond'}}, u'tetraHedral': [{u'atomIndex': 6, u'chirality': u'S'}], u'doubleBond': []}\n" ] } ], "source": [ "# OK, now let's do the opposite. Starting with some mrv (cml) file, let's compute a stereo information:\n", "cml = '''\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " W\n", " \n", " \n", " \n", " \n", " \n", " \n", "'''\n", "\n", "# According to Marvin 4 JS WS specification, the result has to be json:\n", "stereo_info = json.loads(utils.cipStereoInfo(structure=cml))\n", "print stereo_info" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Standardisation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Standardiser](https://github.com/flatkinson/standardiser) is a tool written by Francis Atkinson, designed to provide a simple way of standardising molecules as a prelude to e.g. molecular modelling exercises. Thanks to Beaker, we don't have to install standardiser to use it." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "O=C([O-])c1ccccc1.[Na+]\n" ] }, { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAMuklEQVR4nO3df0xV9R/H8Td2uSAq\nGc5JOigYjCZNa6zJhpvmyAW1lr9qQ0Xb1FjL2SVdCmtroqlbyNpKXP8QmqtBc8MFNWdS6XeYv7gu\nWCbLIjHKpYwRP7zAfX3/uHHhyvWdBvd8Lve+Htv94x6bnzfOZ/eee+75GAEAQkR+TTI9AFEwYyBE\nCgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQK\nBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoG\nQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZC\npGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgFoqIiJCPP/541LH7\n/T3IOgzEYocOHZLW1lbTY9A9YiAW++CDD6SgoEDcbrffX4+IiJBJkyZJcnKyHD9+3OLp6E4MxGJz\n586VpUuXSllZmd9fByADAwNSUVEhW7ZsERFPNEMPf88pcBiIAW+88YacOHFCmpubfY6Xl5dLcnKy\nREVFyeLFi6WlpUVEPNEMPfw9p8CJAP+ULRMREeH9S93a2ir5+fny3XffeY89+OCD8umnn8qiRYvk\n5MmT8sILL4yKYOTvQYHHVxBDHnnkEXnllVd8jm3dulXy8vIkNTVVGhsbDU1GI/EVhEjBVxAiBQMh\nUjAQIgUDIVIwECIFAyFSMBAiBQMhUjAQIgUDIVIwEBq7/n6RbdtEHn7Y89i61XMsBDAQGru9e0Wc\nTpFz5zyPixdF9u0zPdW44JcVaexSU0VqakTmzvU8b2oSWbZM5J/7WSYyvoKISE1NjWRkZIjNZrPk\nsWHDBnG5XKZ/7PHT1iaSnDz8PCVF5Pp1c/OMo7B/Bbl165akpqbK5s2b5dlnnw34ei6XS/Lz82Xj\nxo1SXFwc8PUskZIicuxYSL6CCMKcw+FARkYGBgcHLVuzuroaU6dOxfXr1y1bM6DeeQfIzgauXfM8\nliwBSkpMTzUuwvoVpLm5WZ588kmpr6+XrKwsS9d++umnJTExUSorKy1dNyBcLpEdO0SOHBGJiBBZ\nvVpkzx6RyEjTk42d6UJNys7OxsqVK32OdXV14YEHHhj3x7Zt23zWcTqdsNlsOHPmjJU/8vi4dQvY\ntg3o7jY9ScCF7StIXV2drFq1Si5fviwJCQne4263W86ePTvu682ePVsSExN9jhUUFIjT6ZSGhoaJ\ntYXPa6+JXLgg0tAgMinEP+cxXagJfX19SElJQXFxsdE5bty4genTp+PQoUNG57gvTidgswENDcPH\nDhwATp0yN1MAhWUgpaWlSExMRHcQvEUoLS3FnDlz0NXVZXqUf+d2AwsXAmvWDB+7fBmw24GvvzY3\nVwCFXSDt7e2IjY0Nmv9ru1wupKWlGX81uyfV1cDUqUBb2/Cx558Hli0zN1OAhV0gr776KrKysuB2\nu02P4lVbW4vo6GhcvXrV9Ch3190NJCQAu3cPH6urA6KjgZ9/NjdXgIXVSfqFCxckMzNTzpw5IxkZ\nGabH8ZGbmytTpkyR6upq06P4V1Iicviw5yKg3e75MuK8eSLLl4vs3m16usAxXahV3G43srKykJ+f\nb3oUv3788UfY7XbU19ebHmW0X38FJk8Gjh4dPrZ/PzBnDjARzp3GIGwCqa6uRmxsLP744w/To9yV\nw+HA/PnzMTAwYHoUX3l5wNKlw8/b24HYWCBIzuMCKSwC6e7uRkJCAnbt2mV6FFVHRwdmzpyJgwcP\nmh7F69LZs2hMTwcaG4cPbtzo+TQriM7jAiUsAtm1axdSUlLQ19dnepR/VV5ejpkzZ6Kjo8P0KHC7\n3cjMzMSmTZuGD54757kOcuGCucEsFPKBtLa2IiYmBp9//rnpUe7JwMAA5s+fD4fDYXoUVFRUYMaM\nGbh165b32KcbN8IVpOdxgRDygaxduxbPPPOM6THuS319Pex2Oy5fvmxshs7OTsyaNQvvv/++99jR\no0cxZcoUXLt2zdhcVgvpQE6dOoXIyEg0NTWZHuW+rVixArm5ucbW3759Ox5//HH09/cDGD6P27Nn\nj7GZTAjZQAYHB5GRkYGCggLTo/wnV69eRXR0NOrq6ixf+8qVK7Db7Thx4oT32M6dO5Gamorbt29b\nPo9JIRtIZWUl4uLicPPmTdOj/GdFRUV47LHH4HK5LF13+fLleO6557zPW1tbMXnyZBwdeR0kTIRk\nIEPvn/fv3296lDHp6urC7NmzLf05jh8/jqioKLS0tHiPrV69GktHXgcJIyEZSFFREdLT073vnyey\nyspKTJ8+HTdu3Aj4Wv39/UhPT0dhYaH32NB5XHNzc8DXD0YhF0hLSwuioqKMvHcPBLfbjQULFlhy\nLvXll19ixowZ3relE/08bjyE3JcVHQ6HNDY2yjfffGN6lHFz+vRpyc7Olpdeekmio6MDulZPT4/M\nmzdP1q9fL1999ZUUFhbKlStXJC4uLqDrBqsQv1/S4/XXX5fPPvvM9Bj3ZGBgQHJycsTpdBpZPyYm\nRurq6mTNmjVSWloqb731VtjGISKh923etrY2TJ061efKeVlZGWbNmoXOzk6Dk92b9957D4mJiejp\n6QEwfF5g5ZX1oT/DioqKsPtY904hFwjg+e5VUlISent7AQz/JSsqKjI8ma69vR3Tpk3D4cOHvcfK\ny8sRHx9vedwlJSU+f4bhKiQD6e3tRVJSks+3d+vq6kZ9fBlsNm3ahIULF3rvdrx58ybi4uKMfLu3\nt7cXjz76KN59913L1w4mIRkI4H/3wtzcXKxYscLgVHd3/vx52Gw2nD9/3nvMxK6PI1VVVYXWDpD/\nQcgGAgCLFy/2uYNw6CPgYLtrb+hux3Xr1nmPNTU1ITIyEqdPnzY3GIBFixb5zBVuQjoQf7sXOhyO\noLuIWFVVNepuR3+7PprQ2NgIm82G77//3vQoRoR0IIBnF5MFCxZ439d3dnYiPj4+aO7aG/qW7O4R\nu4XU1tYiJiYGv/32m8HJhm3YsAGZmZlBtROMVUI+EH+7Fx48eDBo7torKSlBSkqK9+PUYNn1caTf\nf/8d06ZNQ1VVlelRLBfygQCjdy8Mlrv2/N3tGEy7Po70vw8/hOuJJ4B/rs+Ei7AIxN/uhadOnTJ+\n196ddzsG266PPm7fBtLSgLffNj2JpcIiEMD/7oUm79rzd7djMO766OOLLzw7KQbzDpDjLGwCAYCc\nnByfT4ZM3bXn71uy/q6DBKWcHCAIPl2zSlgF4m/3QhN37d15t2Ow7/roo6UFiIoCTp40PYklwioQ\nYPTuhUN37ZWVlVmyvr+7HSfCro8+CguB9HQgiK4lBUrYBeJv90Ir79orLi72uVA5UXZ99NHZCcTH\ne/7hnBAXdoEAo3cvtOquPX93O06kXR99fPQREBcH/PWX6UkCKiwD8XcdpKGhATabDU6nM2Dr3vmp\n2UTb9dHH4CDw1FPA5s2mJwmosAwE8L974csvv4xVq1YFZL0ffvhh1Me6E3HXRx/ffgsEyVd2AiXk\n7km/HytXrpTe3l6pra0VEZE///xT7Ha7PPTQQwFZ76effpK0tDQR8dxnvmTJEmlsbJT09PSArEfj\nwHShJgXTdZAJz+UCtm71nLzHxwNvvuk5NsGFxaYNd5OUlCSFhYVSWFgo/f39lq37ySefyC+//CK7\nQ+mfLtu7V8TpFDl3zvO4eFFk3z7TU41ZWL/FEhH5+++/JS0tTdauXSsvvvhiwNfr7u6WvLw82b59\nuzgcjoCvZ5nUVJGaGpG5cz3Pm5pEli0TaWkxO9cYhX0gIiI1NTWyc+dOuXTpkiXrrV+/Xg4cOCB2\nu92S9SwxebJIR4fI0L5dfX0icXEiPT1m5xojBkLjIyVF5Nixu7+CREQM/7cT6K9cWJ+D0Dhau1Zk\nyxaRtjbPY8sWkXXrhn8dGH5MIHwFofHhcons2CFy5Ijn1WL1apE9e0QiI01PNiYMhEjBt1hECgZC\npGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKk\nYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRg\nIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAg\nRAoGQqRgIEQKBkKkYCBECgZCpGAgRAoGQqRgIEQKBkKkYCBECgZCpGAgRIr/AzKe/DKQSPKPAAAA\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "[None, None]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# First method provided by standardiser is to break bonds to Group I and II metal atoms:\n", "# Before using it, we have to convert our input SMILES string to ctab:\n", "mol = utils.smiles2ctab(\"[Na]OC(=O)c1ccccc1\")\n", "\n", "# Now we can apply the function\n", "br = utils.breakBonds(mol)\n", "\n", "# In order to get our result back in SMILES format we have to make a conversion:\n", "smiles = utils.ctab2smiles(br).split()[2]\n", "\n", "# And here is the result:\n", "print smiles\n", "\n", "# We can even use Beaker to render input and output:\n", "[display(Image(utils.smiles2image(\"[Na]OC(=O)c1ccccc1\"))), display(Image(utils.smiles2image(\"[Na+].O=C([O-])c1ccccc1\")))]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NCC(Cc1nn[nH]n1)(C[N+](=O)[O-])C(=O)O\n" ] }, { "data": { "image/png": "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\nNUEKy6mQAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "[None, None]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The second method neutralizes charges by adding/removing protons\n", "# Again, we have to convert SMILES to ctab first, then apply the method and convert result back to SMILES:\n", "mol = utils.smiles2ctab(\"C(C(=O)[O-])(Cc1n[n-]nn1)(C[NH3+])(C[N+](=O)[O-])\")\n", "ne = utils.neutralise(mol)\n", "smiles = utils.ctab2smiles(ne).split()[2]\n", "\n", "# Now we can print the result\n", "print smiles\n", "\n", "# And render input and output\n", "[display(Image(utils.smiles2image(\"C(C(=O)[O-])(Cc1n[n-]nn1)(C[NH3+])(C[N+](=O)[O-])\"))), display(Image(utils.smiles2image(\"NCC(Cc1nn[nH]n1)(C[N+](=O)[O-])C(=O)O\")))]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Nc1nccc2cc[nH]c(=O)c12\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAARK0lEQVR4nO3dfVBU9f4H8DePAWmj\nOPHkL40M5MkKRcPRIaG01FEn79yr9kAPTvmQToqCY7fScLQaNQhLr44JqNcoHU3M1BvWRPmAUyIq\nGIROKE4lmqIhKiyf3x8rKyJ+W0vOd3fP+zWzM+d8gfm+V/bt2XN294ubiAiIqE3uugMQOTIWhEiB\nBSFSYEGIFFgQIgUWhEiBBSFSYEGIFFgQIgUWhEiBBSFSYEGIFFgQIgUWhEiBBSFSYEGIFFgQIgUW\nhEiBBSFSYEGIFFgQIgUWhEiBBSFSYEGIFFgQIgUWhEiBBSFSYEGIFFgQIgUWhEiBBSFSYEGIFFgQ\nIgUWhEiBBSFSYEGIFFgQIgUWhEiBBSFSYEGIFFgQIgUWhEiBBSFSYEGIFFgQIgUWhEiBBSFSYEGI\nFFgQIgUWxEG4uQE5OTeOtbWtGqPbiwVxIKtXA1VVulNQS24iIrpDOLrVq1fb/b3u7k+jqcnDru/9\n5z8BX1/rtpsbUFoKzJgBbN0KuLtbx5p/Oy23m7U1RrcXC6JgsViQlJSEqqoq+Pn52fUzvr6HUV9v\n34H5m2+Au++2bjc/2DMygKYma1FaF6Qt/O21L0/dARzZ0qVL8dNPP6G8vBwdO3Y0ZM5p04Bhw4An\nnrjxa20dQah98QhyE6dPn0Z4eDgWL16MF154od3na3m0qKoCkpOBwkI+xdKNJ+k3MWfOHISFheG5\n554zfO7u3QEDOkl24BGkDQcPHkSfPn1QWFiI/v37AwBycnLQp08f9OrVy7Acly4BPj6GTUdt4BGk\nDdOmTcOYMWNs5aioqMCECRNQU1NjWIbMTGDkSMOmo5vgEaSVjRs3Ijk5GeXl5ejatSsAYOTIkfDw\n8MCmTZsMy3HyJBARYX3x8B//MGxaak3Ipr6+XkJDQyU9Pd02tm3bNvHx8ZGjR48anmfePJHQUJH6\nesOnpqv4FKuF9957DwCQmpoKAGhoaEBKSgqmT5+O++67z/A8M2dar1JdjUU66G6oo6iurpYOHTrI\n+vXrbWMZGRkSEhIiFy5c0Jbr009FOnQQOXlSWwRT4znIVcnJyThx4gS+/vprAEBNTQ3Cw8ORmZmp\n5VJvS4MGAffee+ObGan9sSAAvvvuOyQlJaG4uBjR0dEAgEmTJqG4uBh79uyBm+aXrA8cAPr2BXbt\nAvr10xrFdExfkKamJvTr1w99+/bFsmXLAAAlJSWIi4vDt99+i/j4eM0JrV5+GTh0CNi9m28xMZLp\nC5Kbm4sZM2agoqIC/v7+EBEkJCQgNDT0lt7F295OnQLCw4EPPwSeflp3GhPRdvbjAGprayUwMFAy\nMjJsY+vXr5cOHTpIdXW1vmA3kZVVJUlJo+XixYu6o5iGqS/zvvPOO7j77rsxZcoUAMDFixeRkpKC\n2bNn214kdCQTJgTh5MlSLFiwQHcU89DdUF0qKirE29tbvvzyS9vYvHnzJCwsTC5fvqwxmdrnn38u\nPj4+cuzYMd1RTMG05yCjR49GQ0MDtmzZAgA4fvw4IiIisHbtWowePVpzOrVhw4bBz88PGzZs0B3F\n5ZmyIDt27MCoUaNQWlqKHj16AACeeeYZ1NTUYMeOHZrT/bnKykrExMRgy5YtGDx4sO44rk3vAcx4\nV65ckaioKElNTbWNFRYWipeXl5SWlmpMdmtSUlIkOjpaGhoadEdxaaYryJIlSyQ4OFjOnz8vIiIW\ni0V69+4tkydP1pzs1tTW1kpQUJAsXbrUkPkAkezsG8fa2laNORsXuAv2q6mpkc6dO8vKlSttY6tW\nrZIuXbrImTNnNCb7a1asWCH+/v4ya9Ys8fDwsOuWmJgvHh5i123ixGtzASKJiSI//3z9WFvbqjFn\nY6pzkKlTp6KoqAh79+6Fu7s76urq0LNnT6SkpCAlJUV3vFvW1NSE+Ph4xMTE4OWXX7brZzw970Fj\no32XsAMDgdBQ67ZplyXS3VAjDRo0SNasWWPbt1gskpeX59CXdf9Mbm6uJCYmtvs8zY+U994TWbTo\n+rHm7bZuzs5ULxQGBQUhOzvbtu/u7o4xY8bA29tbY6q/Jzc3F0FBQYbNN20aUFBgPZq01roersBU\nBVm4cCGKioqQn5+vO8ptsXnzZhQVFSEkJASenp523ZKStsDTE3bdJk26cU43N+A//wEmTzb+/upg\nqnMQAJg7dy7Wrl2L0tJS3HHHHbrj/GWXL19GVFQUkpOTMX78eFRXV9v1c3/nHKTlIyUnx7o0kauf\ng5iuIPX19YiMjMTkyZORlpamO85f9u6772LZsmU4cuQIfJsX+KXbznQFAYCPP/4YEyZMQHl5OYKD\ng3XHuWW//PILevbsiRUrVmDs2LG647g0UxYEABISEhAeHo6VK1fqjnLLxo8fj8rKSnzzzTe6o7g8\n0xakuLgY/fr1w+7du9G3b1/dcey2b98+DBgwAPv27UNsbKzuOC7PtAUBrP8THzlyBLt27dL+uXN7\niAgGDBiAqKgopzzyOSNTXeZt7e2330ZZWRk++eQT3VHskpeXh7KyMn5gykCmLkhAQABmz56N1NRU\n1NXV6Y6jVFdXh7S0NLz22msICAjQHcc0TF0QAJg+fTr8/PywaNEi3VGUFi5cCD8/P0ybNk13FFMx\n9TlIs82bN2PcuHE4cuQIunfvrjvODaqqqhAZGYm8vDyM5JLvhmJBrnriiSfg7++PdevW6Y5yg3Hj\nxuHs2bPYvn277iimw4JcVVZWhoceeggFBQVISEjQHcemsLAQjz32GEpKShAZGak7jumwIC1MnToV\nu3btwvfffw93d/2nZ01NTYiLi8PAgQORlZWlO44p6X8UOJD09HQcP34cOQ6ySnR2djZOnDiBt956\nS3cU8zL00ydOICsrSwICAuTcuXNac5w7d04CAgJkyZIlWnOYHZ9itWKxWBAbG4uhQ4fi3Xff1ZYj\nLS0N27dvR3FxMTw8PLTlMDsWpA1fffUVhg4dikOHDiE8PNzw+SsqKtCrVy9s27YNSUlJhs9P17Ag\nNzFq1Ci4ubnhs88+M9XcdD0W5CaOHj2K6OhobN68GY8//rhh8zav+lhWVqbl7yLS9VgQhbS0NGzd\nuhUHDhyAl5dXu8/X0NCABx98ECNGjNB6/kPXsCAK586dw/3334+4uDh069at3eerqqrCDz/8gMrK\nSnTq1Knd56M/x9dBiBR4BFFovRJje2teKTE+Pp6vnDsIFuQmDh06hN69e6OwsBD9+/c3bN49e/Yg\nISEB+/fvR69evQybl9rGgtzEo48+isDAwOve3Xvw4EF88MEHt32uKVOm4IEHHrDtjxs3DqdOncLO\nnTtv+1x0azx1B3BEzSsW/vjjj1rmX7hwISIiIpCfn8/Pf2jGI0grLVcsnDNnjrYcrrICpLPjVaxW\nMjMzYbFYtK+6OGvWLDQ2NuL999/XmsPseARpwdFWLHT2FSBdAQvSgiOuWOjMK0C6AhbkKkddsdBZ\nV4B0FSwIHH/FQmdbAdKV8CQdjr9iobOtAOlKTF8QZ1ix0JlWgHQ1pi+Is6xY6CwrQLoaU5+DONuK\nhY6+AqQrMnVBnHHFQkdeAdIVmbYgzrpioaOuAOmqTFkQZ1+x0NFWgHRlpvzXdfYVCx1tBUiX1q7L\n0jkgV1mx0FFWgHR1pjuCzJ8/H4GBgZg0aZLuKH/L5MmTERgYaNyLmw0NQGoqEBxsvc2caR1r1tYr\n/K7wqr/uhhqpvLxcvL29ZefOnbqj3BY7d+4Ub29vKS8vb//J0tNFHntM5MQJ6y0xUWTevGtfb+uh\n5AIPL1OdpLvCioUWi+W6tXpHjRqFS5cu2X0+FeLpiW6NjfZNFhgIhIZat8PCgM2bgago6/7hw8CT\nTwI//WTdd3MDWj+U2hpzNrobaqRBgwbJmjVrbPsWi0Xy8vLk8uXLGlPZr76+XmJiYqSwsNA2lpub\nK6GhoeLh4WHXLTUxUcTDw77bxInXJvfxEamvbxlGxNf32r61CjfenJzz34NbkJaWJpGRkXLlyhUR\nEfnjjz+ka9eusnjxYs3J7DN37lwJCwuzFfrKlSsSGRkps2bNav/Je/QQKS29tn/okMj991/bd9Gn\nWM5/D27B+fPnJTg4WLKysmxjeXl50qFDBzl58qTGZH/u559/Fl9fX9m0aZNtLDMzU0JCQuT8+fPt\nH2Du3OvPQZKSTHEO4vz34BZ99NFH0rlzZ6mpqbGNPfLII/L8889rTPXnnnrqKRkyZIht/9SpU9K5\nc2fJzs42JsDlyyIpKSKBgSJBQSIzZohcPRKLCAviKiwWi/Tr109eeeUV21hxcbF4enpKUVGRxmQ3\nV1hYKF5eXlLa4inOxIkT5eGHH5ampiaNyVyf6QoiIrJ7927x9PSUkpIS29hLL70k8fHxDveAs1gs\nEhsbe12hDxw4IJ6enrJnzx6NyczBlAURsT5lSUpKsu3/9ttv0qlTp+uucjmCVatWSZcuXeT3338X\nEZGmpiYZOHCgPPvss5qTmYNpC1JdXS133nmnbNy40Ta2aNEi6dq1q1y4cEFjsmv++ENk5Mi9kpm5\n3Db26aefyl133SW//vqrxmTmYdqCiIikp6dLaGio1F+9vn/lyhXp2bOnvP7665qTWc2aJdKrl0hD\ng3W/rq5O7rnnHlmwYIHeYCZi6oLU19fLvffeK/Pnz7eNbd26VXx8fOTYsWMak4lUVIh4e4sUFFwb\ny8o6LUlJqXLx4kV9wUzGVG81acv69evx4osvory8HCEhIQCA4cOHw9fXFxs2bNCW68knAYsFyM+3\n7h8/DkREAP/9r/VrZAzTFwQAEhMT0a1bN+Tm5gIAKisrERMTgy1btmDw4MGG5/nf/4CRI4HSUqBH\nD+vYM88ANTXAjh2GxzE3vQcwx9B82XTv3r22sZSUFImOjpaG5hMAgzQ0iERFicyceW3s229FvLyu\nf6cHGYMFuWrChAnSp08fsVgsIiJSW1srQUFBsnTpUkNzfPihSHCwSPO7RywWkd69RSZNMjQGXcWC\nXHXq1Cnp1KmT5Obm2saWL18u/v7+cvr0aUMyNDZa3//XspM5OSJduoicOWNIBGqFBWkhIyNDAgMD\npba2VkSsr2LHxcXJq6++aliGX3+1FkVEpLbW+tanjAzDpqdWeJLeQmNjI2JjYzFixAjbR1l37dqF\nxMRE7N+/HzExMYbm+fe/rZ9ROnAA8OQfy9OCBWmloKAAw4cPx+HDhxEWFgYAGDt2LE6fPo2CggLD\nclRWAjExwKZNwNChhk1LrbAgbRgxYgS8vLywceNGAEB1dTUiIiKwbt06w5YozcwEvvjCesmX9GFB\n2nD06FFER0cjPz8fQ4YMAQDk5OSgT58+hv7t8kuXAB8fw6ajNrAgN5GamoovvvgCJSUl8DTgBMDN\nDcjOBp5//vox/nb0Mt26WPZ68803cfbsWSxfvtywOVevBqqqDJuO7MCC3ETHjh2Rnp6ON954A2fO\nnDFkzg8+ACZOBJqaDJmO7MCnWAoWiwVJSUmoqqqCn5+fXT8THr4UFRWD7Pref/0LmDvXut38dCoj\nw1qQGTP4FMsRsCB2WL16td3f6+OThEuX/s+u7w0PB+LjrdvNZRABhg0DFi2yXublb0cvFsRBtDxa\nVFUByclAYSELohvPQRxQ9+7ACy/oTkEAjyBESjyCECmwIEQKLAiRAgtCpMCCECmwIEQKLAiRAgtC\npMCCECmwIEQKLAiRAgtCpMCCECmwIEQKLAiRAgtCpMCCECmwIEQKLAiRAgtCpMCCECmwIEQKLAiR\nAgtCpMCCECmwIEQKLAiRAgtCpMCCECmwIEQKLAiRAgtCpMCCECmwIEQKLAiRAgtCpMCCECmwIEQK\nLAiRAgtCpMCCECmwIEQKLAiRAgtCpMCCECmwIEQKLAiRAgtCpMCCECn8P/q7SrKmRd1xAAAAAElF\nTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "[None, None]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Third method applies many structure-normalisation transformations\n", "\n", "# Invoking it in standard way\n", "mol = utils.smiles2ctab(\"Oc1nccc2cc[nH]c(=N)c12\")\n", "ru = utils.rules(mol)\n", "smiles = utils.ctab2smiles(ru).split()[2]\n", "\n", "# Printing the results:\n", "print smiles\n", "\n", "# Rendering input and output:\n", "[display(Image(utils.smiles2image(\"Oc1nccc2cc[nH]c(=N)c12\"))), display(Image(utils.smiles2image(\"Nc1nccc2cc[nH]c(=O)c12\")))]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NCc1ccc(CC(=O)O)cc1\n" ] }, { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "[None, None]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Forth method can be used to discard any salt/solvate components\n", "\n", "# We alredy know what to do:\n", "mol = utils.smiles2ctab(\"[Na+].OC(=O)Cc1ccc(CN)cc1.OS(=O)(=O)C(F)(F)F\")\n", "un = utils.unsalt(mol)\n", "smiles = utils.ctab2smiles(un).split()[2]\n", "\n", "# printing results:\n", "print smiles\n", "\n", "# rendering input and output:\n", "[display(Image(utils.smiles2image(\"[Na+].OC(=O)Cc1ccc(CN)cc1.OS(=O)(=O)C(F)(F)F\"))), display(Image(utils.smiles2image(\"NCc1ccc(CC(=O)O)cc1\")))]" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NCc1ccc(CC(=O)O)cc1\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAATD0lEQVR4nO3de1RU5f4G8O8wwACB\noyBggkFkonhMF3ZRkdREIgGX1tJOnqzsQtlyaXlOjblO0jmdVnSxNLN+mp7URAvsLHHwgkilg5Wl\n5spLuLyAl7yQFwRSQJzn98fEAIovF5nZM/Z81mLVu2dm7+8UD/Pu2e/7bh0ACBE1yUPrAohcGQNC\npMCAECkwIEQKDAiRAgNCpMCAECkwIEQKDAiRAgNCpMCAECkwIEQKDAiRAgNCpMCAECkwIEQKDAiR\nAgNCpMCAECkwIEQKDAiRAgNCpMCAECkwIEQKDAiRAgNCpMCAECkwIEQKDAiRAgNCpMCAECkwIEQK\nDAiRAgNCpMCAECkwIEQKDAiRAgNCpMCAECkwIEQKDAiRAgNCpMCAECkwIEQKDAiRAgNCpMCAECkw\nIEQKDAiRAgNCpMCAECkwIEQKDAiRAgNCpMCAECkwIEQKDAiRAgNCpMCAECkwIEQKDAiRAgNCpMCA\nECkwIEQKDAiRAgNCpMCAECkwIEQKDAiRAgNCpMCAONHly5elsLBQdu/erXUp1EKeWhdwozt//rzk\n5eWJ2WyWdevWyYULFyQkJESSk5Nl7ty54uHBv1GujAFpZwBkx44dYjabJTc3V3766SeJjo6WUaNG\nyapVq2TgwIGyf/9+GTFihJw+fVqWLVsmXl5eWpdN16ADAK2LcHfV1dWyYcMGyc3Nlby8PDl+/LgM\nGTJEUlJSJDU1VaKioq56TUlJiSQkJEh0dLSsXLlSfH19NaicmsOAtNGvv/4qa9asEbPZLF999ZUY\nDAZ7IIYPHy6BgYHN7uPEiROSmJgoQUFBYjabJSAgwAmVU2swIC0EQLZs2SK5ubliNptl7969EhMT\nI6mpqZKSkiIDBw4UvV7f7H4OHjwo3t7e0q1bNxERKS0tlfvvv188PT1l/fr1EhQU5Oi3Qq3AgChU\nVlbKunXrxGw2S15enpSVlUliYqKkpqZKQkJCk12n5kyaNEnWrVsnGzdulO7du4uISFlZmSQnJ8v5\n8+clPz9fbr755vZ+K9RWoEaOHj2K2bNnIyEhAb6+vggNDUVaWhpWr16NysrK695/bW0tnnzySQQG\nBuL777+3b6+srMSIESMQHR2No0ePXvdxqH0wIH+orKzE888/D71ej8jISEyePBl5eXmoqqpq92NZ\nrVa88MILMBqNsFgs9u1VVVUYPXo0IiIisH///nY/LrUeA/KHlStXIiQkBLt27XLaMdPT0+Hn54f1\n69fbt9XU1GDcuHHo0qULfv75Z6fVQk1jQP4wdepUjBs3zunHzcjIgMFgQHZ2tn1bbW0tnnrqKQQG\nBmLr1q1Or4nq8ULhHywWi0ycONHpxzWZTGI0GmX8+PFSXl4uTz75pOj1evnkk0+kQ4cOkpiYKGvW\nrJG4uDin1yYiYrVaZevWrXLgwAGJjY2V3r17a1KHZrROqCsoKyuDXq/Hzp07AdjOESZOnIiSkhKn\n1bBs2TJ4eXnh/fffb7Q9IyMDfn5+yMvLc1ot5eXlyM7OxuOPP47g4GD4+Phg0KBB8Pf3R0FBgdPq\ncAUMCIB169ahY8eOuHz5MgBg165d8PDwwJkzZ5xaR05ODgwGA9LT0xttf+utt2AwGPDll1867Njb\ntm1Deno6+vfvDw8PD0RHR8NkMsFiseDSpUsAgA8//BAGgwFZWVkOq8PVMCAAZsyYgeTkZHv7o48+\nQu/evTWpZe3atfD19YXJZILVarVv//jjj+Hl5YXFixe3y3GqqqqwevVqpKWlITIyEl5eXkhISMDs\n2bNx8ODBa75u6dKlMBgMWLRoUbvU4eoYEADx8fHIyMiwtx955BFMmjRJs3o2bdqEDh064LnnnrN/\nqgFAZmYmDAYDFixY0Kb9Hj9+HPPnz0dKSgr8/PzQsWNHTJgwAVlZWTh9+nSL9/P555/D29v7qu7g\njehPH5CLFy/CYDBgy5Yt9m1hYWFYvny5hlXZujydO3fG+PHjUVNTY9+ek5MDHx8fvPvuu83uw2q1\nXtV16tWrl73rVFtb2+b6cnNz4evri9dee63N+3AHf/qAbN68GX5+fqiurgYAFBcXQ0Rw7NgxjSsD\n9uzZg65duyI1NRUXL160b2/YDbvSxYsX7V2niIiIFned2uKbb75BQEBAk3XcKP70AXnjjTcwZMgQ\ne3vp0qWIjIzUrqAr7Nu3D926dcPQoUNRXl5u375582Z06NABkydPvmp4TKdOnexdJ0d/0fDDDz8g\nMDAQkyZNatQdvFH86QOSlJSEV1991d5+5plnMGHCBA0rutrhw4dx++2346677mr0C2+xWBAUFAS9\nXo9bbrkFkyZNwtq1axt92jjDjh07EBwcjEcffdT+jZfmamqAf/wD6NLF9vP3v9u21WnqCkcT2/7U\nAamtrUWHDh2wYcMG+7aePXu2+STYkY4cOYLo6Gh8+umnjbZHRETg7bff1qaoBn755ReEh4dj3Lhx\njc6ZNPPvfwMJCcDRo7afYcOA11+vf7ylAWnueVlZQEwM4OsL3HknsGlT/XOu+H/V5DFd2Y4dO+Dp\n6YmKigoAwKlTp6DT6VBUVKRxZU1r2MUCbKEREZcZ/VtcXIzu3btj5MiRuHDhgrbFdO8O7NlT3961\ny7atTgsD0uyKAdnZIl98IXL2rMizz4o88kj9Y0uXihw+7LCL/A5nsVikX79+4u/vLyIiW7ZskeDg\nYOnRo4fGlTXtyhmHFotFIiIiJDw8XKOKGouMjBSLxSJHjhyRpKQkKS8v166YY8dEGs7X6d5d5Ndf\nGz9Hp2v804RmA5KVJfKXv4j4+IgMGybi51f/2Icfijz3nIjV2qa3oDmLxSLx8fGN2oMHDxbdNf5j\nuZor63cFXbp0kYKCAikvL5fhw4fLmTNnnHPg338XaRjIsDCRQ4fq2wcO2LY1ZPvMqP9pgodIi4Ik\nJ0+KPPywyOzZ9dtiYkQSE0Xef78t70hbAJoMiKv9wqm4ar0hISHy9ddfi7e3twwZMkROnDjhmAMd\nPizy0UciDzwg0rmzyH//W//YhAkiU6faPkmOHbP9++OPt+UozXfFtm4FIiOBZcuufo7VCiQlAbt3\nu9c5yL59+6DT6fDbb78BsPXvPT09sW3bNo0ra5nTp09Dp9Phl19+0bqUa2o4S/LIkSPXv8PqamD1\naiAtDYiKAjw8gLg4ICPD9gt45XOnTQNCQ6/vW6zmnrdgge0YDb7oueo5JSXAvfe6V0AWLlyIXr16\n2dsbNmyA0Wi8rqvLzpSTk4OQkJBG47VcUVVVFcaMGdPmWZKXysuB7GzgiSeA4GDAx8f2F3nePODw\nYQdU3Fiz80HS0mz/TEys31ZR0fg5EREiEyeKbN7clk8wbTTVvRowYECLViZxBRaLReLi4lz+fMlg\nMEhWVpY89dRTEh8fLxs2bJA+ffooX7N9+3b7wnsVJSVSFBIiulGjRP73P5EBA0Q8nTiNqb0Tl5UF\n7N3b3nttf1FRUfjss8/s7aFDh+I///mPhhW1zj333IP33ntP6zJarLa2Fk8//TQ6derUaLGKuscs\nFgtMJhNiYmKg0+kQGxuLmTNn4ocfftD0U7LdA/LMM7ZPwu3b23vP7afu+kHdhKjq6mr4+vpiU91F\nHhdXUVEBT09P/Pjjj1qX0ipWqxXTpk2D0WhETk5Ou4wsdjSHnDWkpwM33QQ4cRJcq6xYsQK33HKL\nvf3tt9/Cx8fHISuYOMLGjRsREBDgNudLdQoLC3Hbbbdh2rRp6N+/P8LCwpCWlgaz2az9hcVrcEhn\n7rXXRHx9RUaNElm+XOTBBx1xlLZr6vzjzjvvFIPBoGFVLWexWFq8kqMr2bRpk4SHh8usWbOksrJS\nVq1aJbNmzZL58+drXdo1OWztfZPJds3kr38VWbzYUUdpG17/0EbDuv39/WXz5s3St29fjatqhqM/\nojIzAW9vYPZsRx+pZc6cOQOdToc9DcbprFixAj/99JN2RbVCdXU1/Pz88M0332hdSqvUDQxtuPhE\nz549sXDhQg2rap5TrlyYzbavr7WefHb27Fm89NJLMBqNbjt34bvvvoPBYHDZPvu1bN++vcmBofv2\n7dO4MjWn3N4oJUVk5UqRhQt/k1mz/s8Zh7Tbt2+fvPvuuzJs2DAJCQmRTz75RADIBx984NQ62kvd\n+ZK73U/EYrFI37597QNDCwsLpUuXLi47MLSO0+7/lZwskpl5QP71r5fFZDIJHLSofGVlpWRnZ8tj\njz0moaGh0qtXL1m1apUkJSXJzp075dy5c7J69WqZOXOmTJ8+3SE1ONKNcP5R1x40aJCGFbWQsz+y\nHDH77MoppwEBARg7diyWLFmCU6dONfmaH3/8EUFBQVetHOLKLl++jE6dOmHNmjVal9IqVqsVwcHB\njdb1io2NxWxXOTFV0GT01PXOPrNarY2uvIoIevToAZPJhPz8/BZPOd29eze6du2K8ePHu85UUYVd\nu3ZBr9ejrKxM61JapaioCDqdDqWlpQDqV7Lc7spXk/+g2fDC4uJi3HbbbUhOTm7RCWd5eTmysrIw\nYcIEBAcHt9tqHUVFRejWrdtVK4e4onnz5qFv375al9FqCxYsQHR0tL29fv16txkYqtk9iOtmnx0+\nfFgeeOABqbhyBKSIHD16VObMmSMjRoyQkJAQefbZZ0VEZN68eXLy5EnJz8+XqVOntulOT3Wio6Ol\nsLBQioqKZOTIkVJZWdnmfTmaxWKRe++9V+syWi1g/34ZM3y4ve1WA0O1TuipU6fQr18/3HXXXSgt\nLb2q69S/f3+kp6dj27ZtDv2Lc/LkSdxxxx0YPHiwy3ZhwsLC3HNd3MhIYMkSezPziScw/623NCyo\n5TQPCACUlpYiNjYWvXv3hl6vx+DBg/Hmm2869WY2gO06yYABAxAbG2vvLztbTU0NCgoK8M477zTa\nfujQIYgITpw4oUldbXbkiG2i0KFDtvbFi4DBUL/6h4tziYAAthGqP//8s+YjOSsqKjB8+HD07NnT\naauFlJaWYvHixRg7diyMRiP8/f3x0EMP2Vd7BIAlS5age8NVOdzF8uVAt271bYvFdtXYTQaGanYO\nciV/f3/p06eP5rdB9vf3lzVr1kh0dLTEx8fLwYMH2/0YtbW1snHjRpk+fbr07t1bQkNDZe7cuRIT\nEyMFBQVSVlYmK1euFG9vb/tr3PX6hxQWijS8+Y/FItK/v4ibDAx1mU8QV1NdXY2xY8fi5ptvbpeu\n3rlz57BkyRKMHTsWQUFB8PHxQUpKCubPn4/i4uJrvq6qqgp5eXluMW6pSX362KbH1hk5EnjlFe3q\naSUGRKHhLZvbcq/APXv2ICMjA3FxcdDr9QgPD8eUKVOQn5+v/Gr7xIkTWLRoER588EH4+/vDaDRi\n+vTpbnGtppEzZwCdzrZoGwDU1gJGI7B2raZltQYD0gyr1YoXX3wRRqMRhYWFyudWV1fbV1aPioqC\nh4cH4uLikJGRgd1XrrrRQE1NDfLz8zFlyhRERUVBp9M1+vbOXa70X8VsBoKCbEvfAMDOnYBeD5w/\nr21drcCAtFBz9wqcMmWK/X5+SUlJmDdvnrLrdPbsWXuXKzAwsNHwmJMnTzroXTjZyy8Dqan17blz\ngX79tKunDXiX2xYymUyi0+lk1KhRsnz5cnnwimmSffv2lfvuu08SEhLkpptuanIfDVfr2Llzp4SF\nhcno0aPliy++kLi4OLcboduswkKR0aPr2xaLiLt90aB1Qt1N3b0Cr1xlvSkN7wN46623wtPTEwkJ\nCc12uW4Iv/9umynXcAWTrl1ty964EQakDTIzM+Ht7Y05c+Zc9dixY8fcYrUOhzt7Fpgxw7bCIQAc\nPGi7YOhm3Ud2sdpg/PjxEhAQIA8//LBUVVXJoEGDJDc3V8xms+zdu1diYmIkNTVVTCaTWy6u0C46\ndRJ54436tq+vbZGC0FDNSmoLHeCgmUt/AmazWV588UUpKSmRu+++W1JSUiQ5Odn1FyJwhkuXRGbM\nEFm2zNb+299E3nxTxMtL27paiQG5TtXV1VJRUSGdO3fWuhTX8vrrtrVoP/3U1n7sMZH77hP55z+1\nrauVGBByjNtvF8nJsd0jQ0Rk926RMWNE9u/Xtq5WYkDIMXx9Rc6ds915SUSkqkokMFDkwgVt62ol\nlxmsSDeYltzhyQ0wIOQY7XeHJ02xi0WOUVMj8sorIpmZtvv68VssohsPu1hECgwIkQIDQqTAgBAp\nMCBECgwIkQIDQqTAgBApMCBECgwIkQIDQqTAgBApMCBECgwIkQIDQqTAgBApMCBECgwIkQIDQqTA\ngBApMCBECgwIkQIDQqTAgBApMCBECgwIkQIDQqTAgBApMCBECgwIkQIDQqTAgBApMCBECgwIkQID\nQqTAgBApMCBECgwIkQIDQqTAgBApMCBECgwIkQIDQqTAgBApMCBECgwIkQIDQqTAgBApMCBECgwI\nkQIDQqTAgBApMCBECgwIkQIDQqTAgBApMCBECgwIkQIDQqTAgBApMCBECgwIkQIDQqTAgBApMCBE\nCgwIkQIDQqTAgBAp/D/Gbk02eGE0vwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "[None, None]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The last method from the Standardiser package aggregates four previous into one:\n", "mol = utils.smiles2ctab(\"[Na]OC(=O)Cc1ccc(C[NH3+])cc1.c1nnn[n-]1.O\")\n", "st = utils.standardise(mol)\n", "smiles = utils.ctab2smiles(st).split()[2]\n", "print smiles\n", "[display(Image(utils.smiles2image(\"[Na]OC(=O)Cc1ccc(C[NH3+])cc1.c1nnn[n-]1.O\"))), display(Image(utils.smiles2image(\"NCc1ccc(CC(=O)O)cc1\")))]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Descriptors calculation" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "num atoms = 13\n", "mol_wt = 180.159\n", "log_p = 1.3101\n", "tpsa = 63.6\n", "{u'fr_C_O_noCOO': 1, u'MaxEStateIndex': 10.611948223733938, u'Chi4v': 0.8871712192374142, u'fr_Ar_COO': 1, u'Chi4n': 0.8871712192374142, u'SMR_VSA4': 0.0, u'fr_urea': 0, u'fr_para_hydroxylation': 1, u'fr_barbitur': 0, u'fr_Ar_NH': 0, u'fr_halogen': 0, u'fr_dihydropyridine': 0, u'fr_priamide': 0, u'Chi0n': 6.981359543650051, u'fr_Al_COO': 0, u'fr_guanido': 0, u'MinPartialCharge': -0.4775395271554559, u'fr_furan': 0, u'fr_morpholine': 0, u'fr_term_acetylene': 0, u'SlogP_VSA6': 24.26546827384644, u'fr_amidine': 0, u'fr_benzodiazepine': 0, u'ExactMolWt': 180.042258736, u'SlogP_VSA1': 4.736862953800049, u'MolWt': 180.15899999999996, u'NumHDonors': 1, u'fr_hdrzine': 0, u'NumAromaticRings': 1, u'fr_quatN': 0, u'NumSaturatedHeterocycles': 0, u'NumAliphaticHeterocycles': 0, u'fr_benzene': 1, u'fr_phos_acid': 0, u'fr_sulfone': 0, u'VSA_EState10': 0.0, u'fr_aniline': 0, u'fr_N_O': 0, u'fr_sulfonamd': 0, u'fr_thiazole': 0, u'TPSA': 63.60000000000001, u'fr_piperzine': 0, u'SMR_VSA10': 11.938610575903699, u'PEOE_VSA13': 0.0, u'PEOE_VSA12': 0.0, u'PEOE_VSA11': 0.0, u'PEOE_VSA10': 11.3129633249809, u'BalabanJ': 3.0435273546341013, u'fr_lactone': 0, u'Chi3v': 1.3711546649445034, u'Chi2n': 2.3949556783206725, u'EState_VSA10': 9.589074368143644, u'EState_VSA11': 0.0, u'HeavyAtomMolWt': 172.09499999999997, u'Chi0': 9.844934982691242, u'Chi1': 6.109060905280622, u'NumAliphaticRings': 0, u'MolLogP': 1.3100999999999998, u'fr_nitro': 0, u'fr_Al_OH': 0, u'fr_azo': 0, u'NumAliphaticCarbocycles': 0, u'fr_C_O': 2, u'fr_ether': 1, u'fr_phenol_noOrthoHbond': 0, u'RingCount': 1, u'fr_alkyl_halide': 0, u'NumValenceElectrons': 68, u'fr_aryl_methyl': 0, u'MinEStateIndex': -1.1140277777777772, u'HallKierAlpha': -1.8399999999999999, u'fr_C_S': 0, u'fr_thiocyan': 0, u'fr_NH0': 0, u'VSA_EState4': 0.0, u'fr_nitroso': 0, u'VSA_EState6': 0.0, u'VSA_EState7': 0.0, u'VSA_EState1': 0.0, u'VSA_EState2': 0.0, u'VSA_EState3': 0.0, u'fr_HOCCN': 0, u'BertzCT': 343.2228677267164, u'SlogP_VSA12': 0.0, u'VSA_EState9': 40.166666666666664, u'SlogP_VSA10': 0.0, u'SlogP_VSA11': 5.749511833283905, u'fr_COO': 1, u'NHOHCount': 1, u'fr_unbrch_alkane': 0, u'NumSaturatedRings': 0, u'MaxPartialCharge': 0.33900378687731025, u'fr_methoxy': 0, u'fr_amide': 0, u'SlogP_VSA8': 0.0, u'SlogP_VSA9': 0.0, u'SlogP_VSA4': 0.0, u'SlogP_VSA5': 17.281725875459443, u'NumAromaticCarbocycles': 1, u'SlogP_VSA7': 0.0, u'fr_Imine': 0, u'SlogP_VSA2': 17.045137970744406, u'SlogP_VSA3': 4.794537184071822, u'fr_phos_ester': 0, u'fr_NH2': 0, u'MinAbsPartialCharge': 0.33900378687731025, u'SMR_VSA3': 0.0, u'NumHeteroatoms': 4, u'fr_NH1': 0, u'fr_ketone_Topliss': 0, u'fr_SH': 0, u'LabuteASA': 74.75705264447721, u'fr_thiophene': 0, u'Chi3n': 1.3711546649445034, u'fr_imidazole': 0, u'fr_nitrile': 0, u'SMR_VSA2': 0.0, u'SMR_VSA1': 19.432464716784395, u'SMR_VSA7': 29.828919765543436, u'SMR_VSA6': 0.0, u'EState_VSA8': 4.736862953800049, u'EState_VSA9': 5.106527394840706, u'EState_VSA6': 12.13273413692322, u'fr_nitro_arom': 0, u'SMR_VSA9': 5.749511833283905, u'EState_VSA5': 19.056471336613846, u'EState_VSA2': 11.3129633249809, u'fr_Ndealkylation2': 0, u'fr_Ndealkylation1': 0, u'EState_VSA1': 11.938610575903699, u'PEOE_VSA14': 11.938610575903699, u'Kappa3': 2.297415032519928, u'Ipc': 729.6807528797516, u'fr_diazo': 0, u'Kappa2': 3.7092512583454584, u'fr_Ar_N': 0, u'fr_Nhpyrrole': 0, u'EState_VSA7': 0.0, u'MolMR': 44.71030000000002, u'VSA_EState5': 0.0, u'EState_VSA4': 0.0, u'fr_COO2': 1, u'fr_prisulfonamd': 0, u'fr_oxime': 0, u'SMR_VSA8': 0.0, u'fr_isocyan': 0, u'EState_VSA3': 0.0, u'Chi2v': 2.3949556783206725, u'HeavyAtomCount': 13, u'fr_aldehyde': 0, u'SMR_VSA5': 6.923737199690624, u'NumHAcceptors': 3, u'fr_lactam': 0, u'fr_allylic_oxid': 0, u'VSA_EState8': 0.0, u'fr_oxazole': 0, u'fr_piperdine': 0, u'fr_Ar_OH': 0, u'NumRadicalElectrons': 0, u'fr_sulfide': 0, u'fr_alkyl_carbamate': 0, u'NOCount': 4, u'Chi1n': 3.6174536478673316, u'MaxAbsEStateIndex': 10.611948223733938, u'PEOE_VSA7': 12.13273413692322, u'PEOE_VSA6': 12.13273413692322, u'PEOE_VSA5': 0.0, u'PEOE_VSA4': 0.0, u'PEOE_VSA3': 4.794537184071822, u'PEOE_VSA2': 4.794537184071822, u'PEOE_VSA1': 9.843390348640755, u'NumSaturatedCarbocycles': 0, u'fr_imide': 0, u'FractionCSP3': 0.1111111111111111, u'Chi1v': 3.6174536478673316, u'fr_Al_OH_noTert': 0, u'fr_epoxide': 0, u'fr_hdrzone': 0, u'fr_isothiocyan': 0, u'NumAromaticHeterocycles': 0, u'fr_bicyclic': 0, u'Kappa1': 9.249605734767023, u'MinAbsEStateIndex': 0.01601851851851821, u'fr_phenol': 0, u'fr_ester': 1, u'PEOE_VSA9': 0.0, u'fr_azide': 0, u'PEOE_VSA8': 6.923737199690624, u'fr_pyridine': 0, u'fr_tetrazole': 0, u'fr_ketone': 0, u'fr_nitro_arom_nonortho': 0, u'Chi0v': 6.981359543650051, u'fr_ArN': 0, u'NumRotatableBonds': 2, u'MaxAbsPartialCharge': 0.4775395271554559}\n" ] } ], "source": [ "# We will now calculate a number of chemical descriptors\n", "\n", "# As prevously we will start with aspirin SMILES:\n", "aspirin = utils.smiles2ctab('O=C(Oc1ccccc1C(=O)O)C')\n", "\n", "# First descriptor will e the number of heavy atoms:\n", "num_atoms = json.loads(utils.getNumAtoms(aspirin))[0]\n", "print \"num atoms = %s\" % num_atoms\n", "\n", "# Molecular weight:\n", "mol_wt = json.loads(utils.molWt(aspirin))[0]\n", "print \"mol_wt = %s\" % mol_wt\n", "\n", "# Log_p:\n", "log_p = json.loads(utils.logP(aspirin))[0]\n", "print \"log_p = %s\" % log_p\n", "\n", "# TPSA:\n", "tpsa = json.loads(utils.tpsa(aspirin))[0]\n", "print \"tpsa = %s\" % tpsa\n", "\n", "# Or we can just calculate all those descriptors (and more!) at once: \n", "descriptors = json.loads(utils.descriptors(aspirin))[0]\n", "print descriptors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fingerprints" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "#FPS1\n", "#num_bits=2048\n", "#software=RDKit/2016.03.1\n", "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000001000000000000000000000000000000000000000000000004000000008000000000000000000000000000800000000000000000000000002000000000000000000000000000020008800002000000010000000000000000000000008000000000000000000000000000000000000000000000100000000400000080000010000000000000000000000000000000000000010000000000000000000000000002004000008000000000000000000000000002000000002000000000000004008000000000000000\tBSYNRYMUTXBXSQ-UHFFFAOYSA-N\n", "\n" ] } ], "source": [ "# As well as descriptor we can compute fingerprints.\n", "# The output will be an FPS format. You can use optional \"type\" argument to choose type of fingerprints.\n", "# This can be \"morgan\", \"pair\" or \"maccs\". Default is \"morgan\".\n", "\n", "aspirin = utils.smiles2ctab('O=C(Oc1ccccc1C(=O)O)C')\n", "fingerprints = utils.sdf2fps(aspirin)\n", "print fingerprints" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Compound Images" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{\"path\": \"M0,0L200,0L200,200L0,200Z\", \"type\": \"path\", \"fill\": \"rgb(255, 255, 255)\"}, {\"height\": 10.554066799834093, \"width\": 10.554066799834093, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 67.30090812747672, \"x\": 32.7215256071902, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 72.57794152739376, \"x\": 37.99855900710725, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 10.554066799834093, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 113.10291896469946, \"x\": 74.05581960245203, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 118.3799523646165, \"x\": 79.33285300236908, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 10.554066799834093, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 146.00938941490907, \"x\": 181.0, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 151.28642281482612, \"x\": 186.27703339991706, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 21.108133599668186, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 158.90492980192218, \"x\": 99.55901339796274, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"HO\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 164.18196320183924, \"x\": 110.11308019779683, \"type\": \"text\"}, {\"path\": \"M36.9974015195,80.517288044L39.9304856489,94.2399588128\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M39.9304856489,94.2399588128L42.8635697783,107.962629582\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M42.1578737437,79.4142885306L45.0909578731,93.1369592993\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M45.0909578731,93.1369592993L48.0240420025,106.859630068\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M45.4438058904,107.411129825L59.7498127464,112.041535924\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M59.7498127464,112.041535924L74.0558196025,116.671942024\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M84.6098864023,113.617663042L95.1932719398,104.066625532\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M95.1932719398,104.066625532L105.776657477,94.5155880224\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M105.776657477,94.5155880224L98.3314127172,59.6824011404\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M110.192605281,89.9292700787L104.236409473,62.0627205731\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M98.3314127172,59.6824011404L124.775216484,35.8180367982\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M124.775216484,35.8180367982L158.664265012,46.7868579225\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M126.539110798,41.9355187005L153.65034962,50.7105756\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M158.664265012,46.7868579225L166.109506233,81.62004622\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M166.109506233,81.62004622L139.665706005,105.484410916\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M159.929664526,80.0888823807L138.774624343,99.1803741375\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M139.665706005,105.484410916L147.110950057,140.31759886\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M146.298444628,142.827898703L160.6044529,147.458305472\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M160.6044529,147.458305472L174.910461171,152.08871224\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M147.923455486,137.807299016L162.229463757,142.437705785\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M162.229463757,142.437705785L176.535472029,147.068112553\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M147.110950057,140.31759886L136.527565227,149.868636242\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M136.527565227,149.868636242L125.944180398,159.419673624\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M45.4438058904,107.411129825L19.0,131.275494167\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M139.665706005,105.484410916L105.776657477,94.5155880224\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}]\n" ] }, { "data": { "application/javascript": [ "\n", "window.define = undefined;\n", "$.getScript('https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js', function(){\n", " var target = $(':focus').parent('div');\n", " var paper = Raphael(target, 320, 200);\n", " paper.add([{\"path\": \"M0,0L200,0L200,200L0,200Z\", \"type\": \"path\", \"fill\": \"rgb(255, 255, 255)\"}, {\"height\": 10.554066799834093, \"width\": 10.554066799834093, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 67.30090812747672, \"x\": 32.7215256071902, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 72.57794152739376, \"x\": 37.99855900710725, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 10.554066799834093, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 113.10291896469946, \"x\": 74.05581960245203, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 118.3799523646165, \"x\": 79.33285300236908, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 10.554066799834093, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 146.00938941490907, \"x\": 181.0, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 151.28642281482612, \"x\": 186.27703339991706, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 21.108133599668186, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 158.90492980192218, \"x\": 99.55901339796274, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"HO\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 164.18196320183924, \"x\": 110.11308019779683, \"type\": \"text\"}, {\"path\": \"M36.9974015195,80.517288044L39.9304856489,94.2399588128\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M39.9304856489,94.2399588128L42.8635697783,107.962629582\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M42.1578737437,79.4142885306L45.0909578731,93.1369592993\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M45.0909578731,93.1369592993L48.0240420025,106.859630068\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M45.4438058904,107.411129825L59.7498127464,112.041535924\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M59.7498127464,112.041535924L74.0558196025,116.671942024\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M84.6098864023,113.617663042L95.1932719398,104.066625532\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M95.1932719398,104.066625532L105.776657477,94.5155880224\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M105.776657477,94.5155880224L98.3314127172,59.6824011404\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M110.192605281,89.9292700787L104.236409473,62.0627205731\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M98.3314127172,59.6824011404L124.775216484,35.8180367982\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M124.775216484,35.8180367982L158.664265012,46.7868579225\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M126.539110798,41.9355187005L153.65034962,50.7105756\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M158.664265012,46.7868579225L166.109506233,81.62004622\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M166.109506233,81.62004622L139.665706005,105.484410916\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M159.929664526,80.0888823807L138.774624343,99.1803741375\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M139.665706005,105.484410916L147.110950057,140.31759886\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M146.298444628,142.827898703L160.6044529,147.458305472\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M160.6044529,147.458305472L174.910461171,152.08871224\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M147.923455486,137.807299016L162.229463757,142.437705785\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M162.229463757,142.437705785L176.535472029,147.068112553\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M147.110950057,140.31759886L136.527565227,149.868636242\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M136.527565227,149.868636242L125.944180398,159.419673624\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M45.4438058904,107.411129825L19.0,131.275494167\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M139.665706005,105.484410916L105.776657477,94.5155880224\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}]);\n", " $(paper.canvas).delay( 2000 ).fadeOut( 400 );\n", "});\n" ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# In addition to compute compound images in raster format (png), Beaker supports vector formats as well.\n", "# We will first introduce JSON-based format. You can for example use `smiles2json` method to generate json object\n", "# describing the visual representation. In order to render it, you can use raphael.js library and it's \n", "# `paper.add` method:\n", "\n", "aspirin = 'O=C(Oc1ccccc1C(=O)O)C'\n", "print utils.smiles2json(aspirin)\n", "code = \"\"\"\n", "window.define = undefined;\n", "$.getScript('https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js', function(){\n", " var target = $(':focus').parent('div');\n", " var paper = Raphael(target, 320, 200);\n", " paper.add(%s);\n", " $(paper.canvas).delay( 2000 ).fadeOut( 400 );\n", "});\n", "\"\"\"\n", "Javascript(code % utils.smiles2json(aspirin))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "# Most popular vector graphics format is XML-based SVG, this is how we can render compound as a SVG image:\n", "benzene = 'c1ccccc1'\n", "svg = utils.smiles2svg(benzene)\n", "\n", "# pretty-printing SVG input, just to prove this is a vector graphic:\n", "root = etree.fromstring(svg).getroottree()\n", "print etree.tostring(root, pretty_print=True)\n", "\n", "# And finally displaying it:\n", "SVG(svg)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# And finally our old friends - raster images:\n", "aspirin = 'O=C(Oc1ccccc1C(=O)O)C'\n", "img = utils.smiles2image(aspirin)\n", "Image(img)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Maximum Common Substructure" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[#6]:1(:[#6]:[#6](:[#6](:[#6]:[#6]:1)-[#8])-[#8]-[#6])-[#6]\n" ] } ], "source": [ "# This is how to find a maximum common substructure (MCS) of three molecules:\n", "smiles = [\"O=C(NCc1cc(OC)c(O)cc1)CCCC/C=C/C(C)C\", \"CC(C)CCCCCC(=O)NCC1=CC(=C(C=C1)O)OC\", \"c1(C=O)cc(OC)c(O)cc1\"]\n", "\n", "# converting out molecules SMILES to molfiles:\n", "mols = [utils.smiles2ctab(smile) for smile in smiles]\n", "\n", "# joining molfiles to create a SDF file:\n", "sdf = ''.join(mols)\n", "\n", "# and finally computing MCS\n", "result = utils.mcs(sdf)\n", "\n", "# and displaying results:\n", "print result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Compouting 3D coordinates" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " RDKit 3D\n", "\n", " 21 21 0 0 0 0 0 0 0 0999 V2000\n", " 2.4376 0.6881 -1.4041 O 0 0 0 0 0 0 0 0 0 0 0 0\n", " 2.3845 -0.1969 -0.5077 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1.1672 -0.5490 0.0891 O 0 0 0 0 0 0 0 0 0 0 0 0\n", " -0.0101 0.2162 0.0456 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0.0378 1.6234 0.0045 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -1.1394 2.3726 -0.0087 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -2.3762 1.7311 0.0254 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -2.4414 0.3379 0.0831 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -1.2652 -0.4345 0.1029 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -1.3587 -1.9150 0.1530 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -0.4684 -2.6234 -0.3874 O 0 0 0 0 0 0 0 0 0 0 0 0\n", " -2.4224 -2.5526 0.7899 O 0 0 0 0 0 0 0 0 0 0 0 0\n", " 3.6147 -0.9634 -0.1596 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0.9839 2.1470 0.0163 H 0 0 0 0 0 0 0 0 0 0 0 0\n", " -1.0923 3.4536 -0.0391 H 0 0 0 0 0 0 0 0 0 0 0 0\n", " -3.2876 2.3148 0.0083 H 0 0 0 0 0 0 0 0 0 0 0 0\n", " -3.4158 -0.1328 0.0875 H 0 0 0 0 0 0 0 0 0 0 0 0\n", " -3.1218 -2.0424 1.3144 H 0 0 0 0 0 0 0 0 0 0 0 0\n", " 4.5068 -0.3053 -0.2249 H 0 0 0 0 0 0 0 0 0 0 0 0\n", " 3.7327 -1.8128 -0.8640 H 0 0 0 0 0 0 0 0 0 0 0 0\n", " 3.5345 -1.3564 0.8755 H 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 2 2 0\n", " 2 3 1 0\n", " 3 4 1 0\n", " 4 5 2 0\n", " 5 6 1 0\n", " 6 7 2 0\n", " 7 8 1 0\n", " 8 9 2 0\n", " 9 10 1 0\n", " 10 11 2 0\n", " 10 12 1 0\n", " 2 13 1 0\n", " 9 4 1 0\n", " 5 14 1 0\n", " 6 15 1 0\n", " 7 16 1 0\n", " 8 17 1 0\n", " 12 18 1 0\n", " 13 19 1 0\n", " 13 20 1 0\n", " 13 21 1 0\n", "M END\n", "$$$$\n", "\n" ] } ], "source": [ "# It's very easy to compute a molfile with 3D coordinates:\n", "aspirin = 'O=C(Oc1ccccc1C(=O)O)C'\n", "mol_3D = utils.smiles23D(aspirin)\n", "print mol_3D" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Optical Structure Recognition - convering image to structure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[OSRA](http://cactus.nci.nih.gov/osra/) is an open source tool performing Optical Structure Recognition - it can be used to convert an image, containing one or more compounds to it's structures in *smi or *mol format. Beaker uses OSRA to implement \"image2ctab\" method." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Traditionally, let's start with aspirin SMILES:\n", "aspirin = 'CC(C)Oc1ccccc1C(=O)O'\n", "\n", "# Let's convert it to image:\n", "im = utils.smiles2image(aspirin)\n", "\n", "# And use OSRA to convert image to molfile:\n", "mol = utils.image2ctab(im)\n", "\n", "# We can now convert molfile to SMILES:\n", "smiles = utils.ctab2smiles(mol).split()[2]\n", "\n", "# And check if we get the same SMILES string:\n", "smiles == aspirin" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Kekulisation" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAJUklEQVR4nO3cX2jN/x/A8de+zshY\nK7QaqxU1hsXKSNjFqKHYpS13ptxQLDv+XBguMFxgikREDu4cJUeZmtrKkvl7bP7kz0RzMdJoh529\nfhffnJ+DXt/9OTvvfeb5KBfn7eL9Ouppn/N573xSVFUFwB/943oAYCgjEMBAIICBQAADgQAGAgEM\nBAIYCAQwEAhgIBDAQCCAgUAAA4EABgIBDAQCGAgEMBAIYCAQwEAggIFAAAOBAAYCAQwEAhgIBDAQ\nCGAgEMBAIICBQAADgQAGAgEMBAIYCAQwEAhgIBDAQCCAgUAAA4EABgIBDAQCGAgEMBAIYCAQwEAg\ngIFAAAOBAAYCAQwEAhgIBDAQCGAgEMBAIICBQAADgQAGAgEMBAIYCAQwEAhgIBDAQCCAgUAAA4EA\nBgIBDAQCGAgEMBAIYCAQwEAggIFAAAOBAAYCAQwEAhgIBDAQCGAgEMBAIICBQAZBS0uLlJaWis/n\nS8qflStXSmtrq+u3PSylqKq6HmK4Wbx4saSnp8vWrVuTst/evXuls7NT6urqkrLf34RAEiwYDMrq\n1aulpaVFsrOzk7Ln27dvZdq0aRIIBGTlypVJ2fNvwSVWAkUiEamsrJSqqqqkxSEikp2dLZs3b5bK\nykqJRCJJ2/dvQCAJdOjQIYlGo+L3++PW582bl/DPHfPmzYvbY8uWLdLd3S2HDx9O5lse9rjESpD3\n79/L1KlT5cSJE1JWVhb3d48ePZLOzs6E7jd27FiZOXNm3NqFCxdk3bp10traKllZWQnd729FIAlS\nUVEhz58/l/r6eqdzFBUVSW5urpw8edLpHMMFgSRAU1OTLFiwQJqamqSgoMDpLM3NzTJ37lxpbGyU\nwsJCp7MMBwQyQKoqCxYskOnTpw+Z/7UrKirkyZMn0tDQICkpKa7H8TQ+pA/QxYsXJRwOy549e1yP\nErN3714Jh8Ny6dIl16N4HoEMwJcvX8Tv98v27dslMzPT9TgxmZmZsm3bNqmqqpIvX764HsfTCGQA\nDhw4IGlpabJx40bXo/xm06ZNkpaWJgcPHnQ9iqfxGaSfXr9+LXl5eXLx4sUhe3odDAalvLxcnjx5\nIjk5Oa7H8SQC6afy8nL5+PGjhEIh16OYli5dKuPGjZNAIOB6FE8ikH64deuWLFmyRO7fvy95eXmu\nxzGFw2GZPXu23LhxQ4qKilyP4zkE0kc9PT0yZ84cWbhwoRw5csT1OL2yYcMGaWhokDt37sg///Cx\nsy/41+qj06dPS1tbm+zatcv1KL22e/duefPmjZw5c8b1KN6j6LVPnz5pZmam1tbWuh6lz44cOaKZ\nmZn66dMn16N4CpdYfeD3+yUUCklzc7OMGDHC9Th9Eo1GpaCgQJYtWyY1NTWux/EMAumlp0+fSn5+\nvly7dk2Ki4tdj9MvN2/elGXLlsnDhw8lNzfX9TieQCC9VFpaKikpKXL58mXXowzIcHkfyUIgvXD9\n+nUpLS2VcDgskydPdj3OgLx48UJmzJghwWBQSkpKXI8z5BHIf/j+/bvMmjVLVqxYMWyu3f1+v1y9\nelXu3bsnqamprscZ0rjN+x9CoZB8+PBBtm3b5nqUhNm+fbu0t7fL9evXXY8y5BFIP5w9e1YqKytd\nj9FrmzZtknPnzrkew5tc3V/2img0qoWFhbphw4bY2t27d9Xn8+nt27cdTtY7t2/fVp/Pp83NzbG1\n9evXa2FhoUajUXeDeQSB9EJjY6P6fD598OBBbK2iokLnz5+vPT09Diez9fT06Pz583Xt2rWxtQcP\nHqjP59PGxkaHk3kHgfRSWVmZFhcXx163t7drRkaGBgIBh1PZzp8/rxkZGdre3h5bKy4u1vLycodT\neQuB9FJbW5uOGTNGg8FgbK2mpkazs7O1s7PT4WR/1tnZqZMmTdL9+/fH1i5fvqxjxozRtrY2h5N5\nC4H0QXV1tU6ZMkW7urpUVTUSiWhubq5WV1e7HewPqqurNTc3VyORiKqqdnV16eTJk3Xnzp2OJ/MW\nAumDr1+/ak5OjtbU1MTWgsGgjh49Wl+9euVwsngvX77U0aNH65UrV2Jr+/bt05ycHP369avDybyH\nQPooEAhoenq6vnv3LrZWUlKiZWVlDqeKt2rVKl26dGns9bt37zQ9PV0vXLjgcCpvIpB+WLRokVZU\nVMReh8NhTU1N1fr6eodT/au+vl5TU1M1HA7H1tasWaNFRUUOp/IuAumHH+cgTU1NsbX169drQUGB\n07OFaDSqBQUFcWc2P85B7t6962wuLyOQflqzZk3cOUhHR4dOmDBBT5065WymkydP6oQJE7Sjo0NV\n/38O8vNPO/QNgfTTj3OQn6/ra2trnX1r78e3HY8ePRpbCwQCv52DoG8IZAD27dsXdw7S3d2t+fn5\n6vf7kz5LVVWV5ufna3d3t6r+ew6SnZ0dd8cNfUcgA/DjHOTns4W6ujodOXKktra2Jm2O1tZWHTly\npNbV1cXWfj0HQf/wfZAB+tPTC5P9rb1f9/PCUx89w3Whw0FJSUnc7zc9f/5cR40apaFQaND3DoVC\nOmrUKH3x4kVsraysTEtKSgZ9778BgSTA48ePfzsHqaqq0unTp+u3b98Gbd9v375pXl5e3GeeP52D\noP8IJEF+PQf5/PmzZmVlxd1VSrTa2lrNysrSz58/q+qfz0EwMASSIB0dHTp+/Pi4c5Bjx47ppEmT\nBuWnSCQS0YkTJ+rx48dja7+eg2DgCCSBfn16YXd3tz579mzQ9nv27Fnstq6Xn/o4lHEXK4FcPr3Q\ny099HMoIJMFcPL1wODz1cagikEFQWloqXV1dSXsC/I4dOyQtLY2nJQ4CAhkELS0tsmXLFrl69WpS\n9lu+fLkcOHBApk6dmpT9/iYEAhh4cBxgIBDAQCCAgUAAA4EABgIBDAQCGAgEMBAIYCAQwEAggIFA\nAAOBAAYCAQwEAhgIBDAQCGAgEMBAIICBQAADgQAGAgEMBAIYCAQwEAhgIBDAQCCAgUAAA4EABgIB\nDAQCGAgEMBAIYCAQwEAggIFAAAOBAAYCAQwEAhgIBDAQCGAgEMBAIICBQAADgQAGAgEMBAIYCAQw\nEAhgIBDAQCCAgUAAA4EABgIBDAQCGAgEMBAIYCAQwEAggIFAAAOBAAYCAQwEAhgIBDAQCGAgEMBA\nIICBQAADgQAGAgEMBAIYCAQwEAhgIBDAQCCA4X9Nz501p/DwpQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Last piece of Beaker functionality is kekulisation:\n", "\n", "# This time we will start with molfile:\n", "aromatic='''\n", " Mrv0541 08191414212D\n", "\n", " 6 6 0 0 0 0 999 V2000\n", " -1.7679 1.5616 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -2.4823 1.1491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -2.4823 0.3241 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -1.7679 -0.0884 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -1.0534 0.3241 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " -1.0534 1.1491 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 2 4 0 0 0 0\n", " 1 6 4 0 0 0 0\n", " 2 3 4 0 0 0 0\n", " 3 4 4 0 0 0 0\n", " 4 5 4 0 0 0 0\n", " 5 6 4 0 0 0 0\n", "M END\n", "\n", "'''\n", "\n", "# Kekulising is trivial:\n", "kek = utils.kekulize(aromatic)\n", "\n", "# Rendering the result\n", "Image(utils.ctab2image(kek))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" }, "widgets": { "state": {}, "version": "1.1.2" } }, "nbformat": 4, "nbformat_minor": 0 }