{ "metadata": { "name": "", "signature": "sha256:cd97b051861b344997e38a4a92a074891a9d2f70e2f655acdae9da4665a2811e" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Beaker: Using RDKit without RDKit" ] }, { "cell_type": "heading", "level": 3, "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": "heading", "level": 1, "metadata": {}, "source": [ "Configuration" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# 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://127.0.0.1:80/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" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['MMFFctab23D', 'MMFFsmiles23D', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'breakbonds', 'call_spore_function', 'canonicalizeSmiles', 'cipStereoInfo', 'clean', 'ctab23D', 'ctab2image', 'ctab2inchi', 'ctab2json', 'ctab2smiles', 'ctab2svg', 'description', 'descriptors', 'getNumAtoms', 'hydrogenize', 'image2ctab', 'image2smiles', 'inchi2ctab', 'inchi2inchiKey', 'kekulize', 'logP', 'mcs', 'molExport', 'molWt', 'neutralise', 'official', 'rules', 'sdf2SimilarityMap', 'sdf2fps', 'session', 'smiles23D', 'smiles2SimilarityMap', 'smiles2ctab', 'smiles2image', 'smiles2json', 'smiles2svg', 'standardise', 'status', 'tpsa', 'unsalt']\n" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Format conversion" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# 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" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "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" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "# 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" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "SMILES Name \n", "CC(=O)Oc1ccccc1C(=O)O \n", "\n", "CC(=O)Oc1ccccc1C(=O)O\n" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "# Having our aspirin molfile (ctab), we can compute InCHI:\n", "inchi = utils.ctab2inchi(ctab)\n", "print inchi" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "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" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "# And, of course, an InCHIKey from InCHI:\n", "inchiKey = utils.inchi2inchiKey(inchi)\n", "print inchiKey" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "BSYNRYMUTXBXSQ-UHFFFAOYSA-N\n" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "# 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" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "True" ] } ], "prompt_number": 6 }, { "cell_type": "heading", "level": 1, "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", "collapsed": false, "input": [ "# 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)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "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" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "# 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" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "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" ] } ], "prompt_number": 8 }, { "cell_type": "heading", "level": 1, "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", "collapsed": false, "input": [ "# 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\")))]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[Na+].O=C([O-])c1ccccc1\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAUBUlEQVR4nO3df1TV9f0H8KcoPxT8\ngZaKisAlMULrTEJJBVqm0cHquFhhTe3MFJi5uVbOzLaWaMRmRzfLScnm1FL6QSQpbM4fMxwpuGlD\nNOGqgAqKBwyUn5fX94/7laR7efvr3s/nAz4f59xT3vf1fp63e559ftzP5/3pJiICIrLLRe8AREbG\nghApsCBECiwIkQILQqTAghApsCBECiwIkQILQqTAghApsCBECiwIkQILQqTAghApsCBECiwIkQIL\nQqTAghApsCBECiwIkQILQqTAghApsCBECiwIkQILQqTAghApsCBECiwIkQILQqTAghApsCBECiwI\nkQILQqTAghApsCBECiwIkQILQqTAghApsCBECiwIkQILQqTAghApsCBECiwIkQILQqTAghApsCBE\nCiwIkQILQqTAghApsCBECiwIkQILQqTAghApsCBECiwIkQILQqTAghApsCBECiwIkQILQqTAghAp\nsCBECj30DnC9WlpasHjxYmzcuBGBgYEIDAyEyWSCyWRq+/dBgwbpHZO6mG4iInqHuB6LFi3CunXr\nsGzZMly8eBFmsxlmsxklJSUoLS1Fc3MzPD0928ry/QL5+fnBzc1N749BnUynKMhHH32EZ555Bjt2\n7EBUVJTd11RXV7eV5vuPkydPorW1Fd7e3m2l+f7D398fLi7c4qT2DF+QoqIijB07FkuWLMGvf/3r\nm3qPxsZGnD592m55ioqKcPnyZbi5uWHYsGF2y3P33XfD09PTwZ+MOgNDF+TSpUsIDw9HUFAQPv74\nY3Tr1s3hy2hsbMTJkyfbNteu3nQzm81t5fHz82vbXHvttdcwePBgh2ch4zF0QZ555hn85z//wf79\n+9G7d29dMlRUVLSVpaSkBP/6179w4sQJFBcXo3v37rpkIg2JQa1Zs0Z69eolhw8f1jtKO3V1ddK3\nb1/JyMjQOwppwJBrkAMHDiAiIgLr1q3Ds88+a/c1M2fORFZWVoc73X5+fk77P/z8+fPxzTffICcn\nxynvT8ZhuIJUVVUhNDQUU6ZMwXvvvdfh644ePYr//e9/NjvdVw759uvXr93h3qt/O/H19b2l8hQV\nFWHUqFEoKipCUFDQTb8PGZ+hCtLa2orHHnsMlZWV+PLLL+Hh4XFT73Orh3xNJtM1l/Hggw/i/vvv\n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\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "[None, None]" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "# 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\")))]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "NCC(Cc1nn[nH]n1)(C[N+](=O)[O-])C(=O)O\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n6927U0MD0d//ThQaKj5vS2NAKivFPZOqKg6Iar777jvq3bs3rVmz5p6+LzExkXQ6HSUlJSlUmfzm\nzJlD8fHxrbYnJSXRyJEj1S+oGalu3caAEBG99RbRm29yQFT12WefUY8ePWhPY6tQgtFopLi4OOrT\npw/t27dPherks2nTJnJ3d281eriwsJBsbGw6fTNTac0DUl0tziKDB3NAVLVq1SpydnamnMbnWdpw\n5coVCgkJIQ8PD8n3mauysjKytbVts3YfHx/F7w91VvOAEBGtWSN6tTggKluwYAF5enrS5cuXW33t\n+++/Jx8fHxo/fjxdunRJg+rkERgYSImJia22L1myhGbMmKFBReal282LJad169bBy8sLM2fORG1t\n7e3tBw8exMSJExEYGIjDhw/D1dVVwyq7ZsqUKdi/f3+b2zMyMmA0GjWoyoxonVBzV15eTj4+PjR7\n9mxqaGho8xkOS3bs2DHq0aNHq/s/NTU15OjoSJmZmdoUZiY4IB2QnZ1Nzs7OFBoaSvb29vThhx9q\nXZJs6uvraeDAgbRt27ZWX5s6dSotW7ZMg6rMB19idYCPjw/8/f1x4sQJrFixAs8884zWJcnG1tYW\nERERbV5mzZz5Do4fX6ZBVe2rqwPefBOorFTneByQuygpKcGECRNgMBjw8ssv44033sCxY8e0LktW\nERER+OGHC7hzAqjJk4fh8OGB+OknTcpq0759wD//qeIyk1qfwsxZW89wLFq0iAYNGqTpI7tyKysj\nsrMjOnWq9deGDydat071ktr1+OPi0V+1cEDa0d4zHCaTiaZNm0ajRo2S7cEncxASIsY23WnZMvEs\nhjkoLxcPUB05ot4xOSB36MgzHJWVlaTX6ykqKkqxB6DUtmoVUVBQ6+2ZmUS9erU/DF1NGzeKeUDU\n7DzkgDRzL89wFBcX04ABA2j58uUqVaes06fFZVZZWcvtRqN4VsMcRtH87ndEr72m7jHvGpCyMjEQ\nrDlfX6Kff27//Wo9zCKnzjzDceTIEXJwcKD3339f4eqU19BA5O5O1NajIY8/TrRokfo1NXfuHJGt\nLZHaj9co0otlaevTfffddxg7dix69+6N//3vf/Dx8enQ9wUHByM5ORlLlizBwYMHFa5SWTY2wJQp\nQBu9vZgyBfj8c/Vram7LFrHOSAf/aWSjSEAsaX26Xbt24aGHHsJjjz2G9PR03H///ff0/TExMVi2\n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\nwpgEDghjEv4fzpOp++er/44AAAAASUVORK5CYII=\n", "text": [ "" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "[None, None]" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "# 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\")))]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Nc1nccc2cc[nH]c(=O)c12\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nAAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "[None, None]" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "# 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\")))]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "NCc1ccc(CC(=O)O)cc1\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nuEqHE+SjFAAAAABJRU5ErkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nrkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "[None, None]" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "# 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\")))]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "NCc1ccc(CC(=O)O)cc1\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nQF1dXa1+1qjh2T9XV1ezpgi9fPkyvfzyy7RkyRKr1tIe2O4slgJXf6qpqaE1a9aQi4sLabXaFn/y\nnzlzhuLi4kitVtMLL7xASUlJdEfk1LSlUlJSqFOnTkbTfbbGDz/8UHeCQGxdjloN+yOOjo40atQo\nq/7d2gvFXqxoS0eOHKE+ffpQeHi4Ub+h4VoXzXW6renChQv0/PPPU1BQkMVLB1RWVlJqaiqFhoaa\nvS6HOf0RVu+pDAiRMFv5xIkT61ZjMhgMpNVqqVevXuTj40M6nY5KS0slqeXu3bv0m9/8hrp06UJp\naWktvv7q1auk1Wqpd+/eZq1pWNsfmTJlCjk5ObXYH2H1ntqAEAmj72+++SZ1796dVCoVhYSE0JYt\nW9q81kVrmbO++aZNm8jV1ZWGDh1KSUlJooOh5eXlpNPpzL4agRl7qgNS6+eff7bpGSVL5Obmkp+f\nH40bN45+NjEmpNfrW1xfsOGApb+/f4v9EdY8DogClZWVUWRkJHl4eNDBgwfNek/DAcsOHTqYvU4g\nE8cBUShz1zcvKiqq63T36tXL4jXWmTgOiMLVLnDZcH3zpp3utq6xzprnQERkq2vwmXUUFhZi9uzZ\nuH37NubOnYs9e/bgp59+wpw5c7Bo0SKMHDlS7hLbLQ6InXj06BFWrVqFwsJCjBkzBq+//rrRsgXM\n+jggjIlQ3iwHjCkIB4QxERwQxkRwQBgTwQFhTAQHhDERHBDGRHBAGBPBAWFMBAeEMREcEMZEcEAY\nE8EBYUwEB4QxERwQxkRwQBgTwQFhTAQHhDERHBDGRHBAGBPBAWFMBAeEMREcEMZEcEAYE8EBYUwE\nB4QxERwQxkRwQBgTwQFhTAQHhDERHBDGRHBAGBPxf4A12NGOP9UTAAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nrkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "[None, None]" ] } ], "prompt_number": 13 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Descriptors calculation" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# 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" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "num atoms = 13\n", "mol_wt = 180.159\n", "log_p = 1.3101\n", "tpsa = 63.6\n", "{u'MaxEStateIndex': 10.611948223733938, u'Chi4v': 0.8871712192374142, u'Kappa3': 2.297415032519928, u'Chi4n': 0.8871712192374142, u'SMR_VSA10': 11.938610575903699, u'MinAbsPartialCharge': 0.33900378687731025, u'MinPartialCharge': -0.4775395271554559, u'SlogP_VSA6': 24.26546827384644, u'ExactMolWt': 180.042258736, u'MolWt': 180.15899999999996, u'NumAromaticRings': 1, u'NumSaturatedHeterocycles': 0, u'NumAliphaticHeterocycles': 0, u'VSA_EState10': 0.0, u'TPSA': 63.60000000000001, u'PEOE_VSA14': 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'Chi0n': 6.981359543650051, 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'NumAliphaticCarbocycles': 0, u'NumValenceElectrons': 68.0, u'MinEStateIndex': -1.1140277777777772, u'HallKierAlpha': -1.8399999999999999, u'VSA_EState4': 0.0, u'VSA_EState5': 0.0, u'VSA_EState6': 0.0, u'VSA_EState7': 0.0, u'NumHDonors': 1, u'VSA_EState2': 0.0, u'VSA_EState3': 0.0, u'MaxAbsEStateIndex': 10.611948223733938, u'SlogP_VSA12': 0.0, u'VSA_EState9': 40.166666666666664, u'SlogP_VSA10': 0.0, u'SlogP_VSA11': 5.749511833283905, u'NHOHCount': 1, u'NumSaturatedRings': 0, u'MaxPartialCharge': 0.33900378687731025, u'Kappa2': 3.7092512583454584, 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'SlogP_VSA1': 4.736862953800049, u'SlogP_VSA2': 17.045137970744406, u'SlogP_VSA3': 4.794537184071822, u'NumRadicalElectrons': 0.0, u'NumHeteroatoms': 4, u'BertzCT': 343.2228677267164, u'LabuteASA': 74.75705264447721, u'Chi3n': 1.3711546649445034, u'SMR_VSA3': 0.0, u'SMR_VSA2': 0.0, u'SMR_VSA1': 19.432464716784395, u'Chi3v': 1.3711546649445034, u'SMR_VSA6': 0.0, u'SMR_VSA5': 6.923737199690624, u'SMR_VSA4': 0.0, u'EState_VSA6': 12.13273413692322, u'SMR_VSA7': 29.828919765543436, u'SMR_VSA9': 5.749511833283905, u'SMR_VSA8': 0.0, u'EState_VSA2': 11.3129633249809, u'EState_VSA3': 0.0, u'EState_VSA1': 11.938610575903699, u'EState_VSA8': 4.736862953800049, u'Ipc': 729.6807528797516, u'EState_VSA9': 5.106527394840706, u'EState_VSA7': 0.0, u'EState_VSA4': 0.0, u'VSA_EState1': 0.0, u'EState_VSA5': 19.056471336613846, u'Chi2n': 2.3949556783206725, u'Chi2v': 2.3949556783206725, u'HeavyAtomCount': 13, u'NumHAcceptors': 3, u'VSA_EState8': 0.0, u'NOCount': 4, u'Chi1n': 3.6174536478673316, u'PEOE_VSA8': 6.923737199690624, 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'FractionCSP3': 0.1111111111111111, u'Chi1v': 3.6174536478673316, u'NumAromaticHeterocycles': 0, u'Kappa1': 9.249605734767023, u'MinAbsEStateIndex': 0.01601851851851821, u'MolMR': 44.71030000000002, u'PEOE_VSA9': 0.0, u'RingCount': 1, u'Chi0v': 6.981359543650051, u'NumRotatableBonds': 2, u'MaxAbsPartialCharge': 0.4775395271554559}\n" ] } ], "prompt_number": 14 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Fingerprints" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# 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" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "#FPS1\n", "#num_bits=2048\n", "#software=RDKit/2014.03.1\n", "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000001000000000000000000000000000000000000000000000004000000008000000000000000000000000000800000000000000000000000002000000000000000000000000000020008800002000000010000000000000000000000008000000000000000000000000000000000000000000000100000000400000080000010000000000000000000000000000000000000010000000000000000000000000002004000008000000000000000000000000002000000002000000000000004008000000000000000\tBSYNRYMUTXBXSQ-UHFFFAOYSA-N\n", "\n" ] } ], "prompt_number": 15 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Compound Images" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# 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))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "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\": 68.82435582039928, \"x\": 36.16605010679536, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 74.10138922031632, \"x\": 41.443083506712405, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 10.554066799834093, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 112.08181049999853, \"x\": 75.20399443565375, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 117.35884389991557, \"x\": 80.4810278355708, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 10.554066799834093, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 143.16014370297427, \"x\": 176.5, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 148.43717710289133, \"x\": 181.77703339991706, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 21.108133599668186, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 155.33926517959776, \"x\": 98.41083856476102, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"HO\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 160.61629857951482, \"x\": 108.96490536459511, \"type\": \"text\"}, {\"path\": \"M39.796866991,82.1786106761L42.523138707,94.9336928811\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M42.523138707,94.9336928811L45.249410423,107.688775086\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M46.2474572713,80.7998612843L48.9737289873,93.5549434893\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M48.9737289873,93.5549434893L51.7000007033,106.310025694\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M48.4747055631,106.99940039L61.8393499994,111.325116975\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M61.8393499994,111.325116975L75.2039944357,115.650833559\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M85.7580612355,112.596554577L95.6068966487,103.708416077\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M95.6068966487,103.708416077L105.455732062,94.8202775767\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M105.455732062,94.8202775767L98.4241120107,61.9222677437\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M111.203160406,90.151727524L105.577864365,63.8333196576\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M98.4241120107,61.9222677437L123.398815569,39.3837014205\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M123.398815569,39.3837014205L155.405139178,49.7431435935\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M124.568184755,46.6953953751L150.173243642,54.9829491136\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M155.405139178,49.7431435935L162.436755887,82.6411547633\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M162.436755887,82.6411547633L137.462055671,105.179721421\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M155.51995876,79.9980110429L135.540198587,98.0288643688\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M137.462055671,105.179721421L144.493675054,138.077732256\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M143.478043268,141.215607061L156.842689041,145.541324275\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M156.842689041,145.541324275L170.207334814,149.867041489\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M145.50930684,134.939857452L158.873952613,139.265574666\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M158.873952613,139.265574666L172.238598386,143.59129188\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M144.493675054,138.077732256L134.644840309,146.965870629\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M134.644840309,146.965870629L124.796005564,155.854009002\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M48.4747055631,106.99940039L23.5,129.537966713\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M137.462055671,105.179721421L105.455732062,94.8202775767\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}]\n" ] }, { "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\": 68.82435582039928, \"x\": 36.16605010679536, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 74.10138922031632, \"x\": 41.443083506712405, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 10.554066799834093, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 112.08181049999853, \"x\": 75.20399443565375, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 117.35884389991557, \"x\": 80.4810278355708, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 10.554066799834093, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 143.16014370297427, \"x\": 176.5, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"O\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 148.43717710289133, \"x\": 181.77703339991706, \"type\": \"text\"}, {\"height\": 10.554066799834093, \"width\": 21.108133599668186, \"stroke\": \"rgb(255, 255, 255)\", \"y\": 155.33926517959776, \"x\": 98.41083856476102, \"type\": \"rect\", \"fill\": \"rgb(255, 255, 255)\"}, {\"font-size\": 10.554066799834093, \"text\": \"HO\", \"stroke\": \"rgb(255, 0, 0)\", \"y\": 160.61629857951482, \"x\": 108.96490536459511, \"type\": \"text\"}, {\"path\": \"M39.796866991,82.1786106761L42.523138707,94.9336928811\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M42.523138707,94.9336928811L45.249410423,107.688775086\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M46.2474572713,80.7998612843L48.9737289873,93.5549434893\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M48.9737289873,93.5549434893L51.7000007033,106.310025694\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M48.4747055631,106.99940039L61.8393499994,111.325116975\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M61.8393499994,111.325116975L75.2039944357,115.650833559\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M85.7580612355,112.596554577L95.6068966487,103.708416077\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M95.6068966487,103.708416077L105.455732062,94.8202775767\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M105.455732062,94.8202775767L98.4241120107,61.9222677437\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M111.203160406,90.151727524L105.577864365,63.8333196576\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M98.4241120107,61.9222677437L123.398815569,39.3837014205\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M123.398815569,39.3837014205L155.405139178,49.7431435935\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M124.568184755,46.6953953751L150.173243642,54.9829491136\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M155.405139178,49.7431435935L162.436755887,82.6411547633\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M162.436755887,82.6411547633L137.462055671,105.179721421\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M155.51995876,79.9980110429L135.540198587,98.0288643688\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M137.462055671,105.179721421L144.493675054,138.077732256\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M143.478043268,141.215607061L156.842689041,145.541324275\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M156.842689041,145.541324275L170.207334814,149.867041489\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M145.50930684,134.939857452L158.873952613,139.265574666\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M158.873952613,139.265574666L172.238598386,143.59129188\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M144.493675054,138.077732256L134.644840309,146.965870629\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M134.644840309,146.965870629L124.796005564,155.854009002\", \"stroke\": \"rgb(255, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M48.4747055631,106.99940039L23.5,129.537966713\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}, {\"path\": \"M137.462055671,105.179721421L105.455732062,94.8202775767\", \"stroke\": \"rgb(0, 0, 0)\", \"stroke-width\": 1.2, \"type\": \"path\"}]);\n", " $(paper.canvas).delay( 2000 ).fadeOut( 400 );\n", "});\n" ], "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "\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)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 17, "svg": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ], "text": [ "" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "# And finally our old friends - raster images:\n", "aspirin = 'O=C(Oc1ccccc1C(=O)O)C'\n", "img = utils.smiles2image(aspirin)\n", "Image(img)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "png": "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\nAH/uGWxd6POdAAAAAElFTkSuQmCC\n", "prompt_number": 18, "text": [ "" ] } ], "prompt_number": 18 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Maximum Common Substructure" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# 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" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[#6]:1(:[#6]:[#6](:[#6](:[#6]:[#6]:1)-[#8])-[#8]-[#6])-[#6]\n" ] } ], "prompt_number": 19 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Compouting 3D coordinates" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# 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" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "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 1 0 0 0 0 0 0\n", " -1.0923 3.4536 -0.0391 H 0 0 0 0 0 1 0 0 0 0 0 0\n", " -3.2876 2.3148 0.0083 H 0 0 0 0 0 1 0 0 0 0 0 0\n", " -3.4158 -0.1328 0.0875 H 0 0 0 0 0 1 0 0 0 0 0 0\n", " -3.1218 -2.0424 1.3144 H 0 0 0 0 0 1 0 0 0 0 0 0\n", " 4.5068 -0.3053 -0.2249 H 0 0 0 0 0 1 0 0 0 0 0 0\n", " 3.7327 -1.8128 -0.8640 H 0 0 0 0 0 1 0 0 0 0 0 0\n", " 3.5345 -1.3564 0.8755 H 0 0 0 0 0 1 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" ] } ], "prompt_number": 20 }, { "cell_type": "heading", "level": 1, "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", "collapsed": false, "input": [ "# Traditionally, let's start with aspirin SMILES:\n", "aspirin = 'CC(=O)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" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 21, "text": [ "True" ] } ], "prompt_number": 21 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Kekulisation" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# 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))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "png": "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\n", "prompt_number": 22, "text": [ "" ] } ], "prompt_number": 22 } ], "metadata": {} } ] }