├── .gitignore ├── DUD-E.ipynb ├── Drawing_Molecules.ipynb ├── LICENSE ├── PDBbind.ipynb ├── PLEC_fingerprints.ipynb ├── README.md ├── Shape_comparison.ipynb ├── Surface_plots.ipynb ├── environment.yml └── xiap ├── actives_docked.sdf ├── crystal_ligand.sdf └── receptor_rdkit.pdb /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # Jupyter Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # SageMath parsed files 80 | *.sage.py 81 | 82 | # dotenv 83 | .env 84 | 85 | # virtualenv 86 | .venv 87 | venv/ 88 | ENV/ 89 | 90 | # Spyder project settings 91 | .spyderproject 92 | .spyproject 93 | 94 | # Rope project settings 95 | .ropeproject 96 | 97 | # mkdocs documentation 98 | /site 99 | 100 | # mypy 101 | .mypy_cache/ 102 | -------------------------------------------------------------------------------- /DUD-E.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "

DUD-E: A Database of Useful Decoys: Enhanced

" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": {}, 14 | "outputs": [ 15 | { 16 | "name": "stdout", 17 | "output_type": "stream", 18 | "text": [ 19 | "0.4.1-12-ga7d79bd\n" 20 | ] 21 | } 22 | ], 23 | "source": [ 24 | "from __future__ import print_function, division, unicode_literals\n", 25 | "\n", 26 | "import oddt\n", 27 | "from oddt.datasets import dude\n", 28 | "print(oddt.__version__)" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "We'd like to read files from [DUD-E](http://dude.docking.org/).
\n", 36 | "You can download different targets and different numbers of targets, but I used only these five:\n", 37 | "[ampc](http://dude.docking.org/targets/ampc), \n", 38 | "[cxcr4](http://dude.docking.org/targets/cxcr4), \n", 39 | "[pur2](http://dude.docking.org/targets/pur2), \n", 40 | "[pygm](http://dude.docking.org/targets/pygm), \n", 41 | "[sahh](http://dude.docking.org/targets/sahh).
" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 2, 47 | "metadata": {}, 48 | "outputs": [], 49 | "source": [ 50 | "%%bash\n", 51 | "mkdir -p ./DUD-E_targets/\n", 52 | "wget -qO- http://dude.docking.org/targets/ampc/ampc.tar.gz | tar xz -C ./DUD-E_targets/\n", 53 | "wget -qO- http://dude.docking.org/targets/cxcr4/cxcr4.tar.gz | tar xz -C ./DUD-E_targets/\n", 54 | "wget -qO- http://dude.docking.org/targets/pur2/pur2.tar.gz | tar xz -C ./DUD-E_targets/\n", 55 | "wget -qO- http://dude.docking.org/targets/pygm/pygm.tar.gz | tar xz -C ./DUD-E_targets/\n", 56 | "wget -qO- http://dude.docking.org/targets/sahh/sahh.tar.gz | tar xz -C ./DUD-E_targets/" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 3, 62 | "metadata": { 63 | "collapsed": true 64 | }, 65 | "outputs": [], 66 | "source": [ 67 | "directory = './DUD-E_targets'" 68 | ] 69 | }, 70 | { 71 | "cell_type": "markdown", 72 | "metadata": {}, 73 | "source": [ 74 | "We will use the dude class." 75 | ] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "execution_count": 4, 80 | "metadata": {}, 81 | "outputs": [], 82 | "source": [ 83 | "dude_database = dude(home=directory)" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "Now we can get one target or iterate over all targets in our directory." 91 | ] 92 | }, 93 | { 94 | "cell_type": "markdown", 95 | "metadata": {}, 96 | "source": [ 97 | "Let's choose one target." 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": 5, 103 | "metadata": {}, 104 | "outputs": [], 105 | "source": [ 106 | "target = dude_database['cxcr4']" 107 | ] 108 | }, 109 | { 110 | "cell_type": "markdown", 111 | "metadata": {}, 112 | "source": [ 113 | "`target` has four properties: protein, ligand, actives and decoys:
\n", 114 | "protein - protein molecule
\n", 115 | "ligand - ligand molecule
\n", 116 | "actives - generator containing actives
\n", 117 | "decoys - generator containing decoys" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 6, 123 | "metadata": {}, 124 | "outputs": [ 125 | { 126 | "data": { 127 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAABmJLR0QA/wD/AP+gvaeTAAAgAElE\nQVR4nO2deVgT1/rH30lIwpKEsIOoBFRE0QeUCm51rS2iWAUtKhdtH4VqrVavbbH1V0GpVq2ttNVH\n0faCS11QXIhWqXVBtAqC7CDgAlQWIbIkYcs2vz9Om5vLErMNJDKfv2Ayc+ZM+PKeM+e8C4bjOJCQ\n6BtKX3eA5PWEFBYJIZDCIiEEUlgkhEAKi4QQSGGREAIpLBJCIIVFQgiksEgIgRQWCSGQwiIhBFJY\nJIRACouEEEhhkRACKSwSQiCFRUIIpLBICIEUFgkhkMIiIQRSWCSE8PoLi8/n19bWAkBHR0dZWVlf\nd6e/YEzCIiViRJj0dQd6g9raWoFAIJPJTEz6xfMaAkb2RWsnEUdHR0dHx46OjsrKSuL6RqKMkQmL\nlIixYExzLC0oLS2lUCiOjo4AwGAwhg0b1tc96i8Yk7BsbW2VJbJz504ej6fi/L/++svb23v16tW9\n1UGS/2JkQ6ECHMd3794tkUjy8/O5XG6352zfvr2trW3mzJm92zUSAADAjZZDhw4BwIwZM+RyeddP\ny8vL6XS6i4tLR0eHRs3W19fX1NTgON7e3l5aWqqfvvY/jGko7MTKlStnzZp148aNI0eOdP1069at\nYrE4OjqaTqf3ft9IMNyY0xiVl5ePHj2aSqUWFhY6Ozsrjj9+/HjEiBFcLre4uFjTtSs+n//8+XNz\nc3O0qEHO97Wjjy2WjovpXC5369atzc3NnWboW7dulUql0dHR2q2IOjo6uru7u7m5aXEtCcKIh0LE\n+vXrJ06cyOPxkpKS0JHS0tJTp065u7svXry4b/vWr+nbKV59fX12dnZJSUlRUZHWM+Xi4mJTU1NH\nR8eXL1/iOB4SEgIAp0+f1qKp8vJyiUSiXTdIlOl7YenlFSw6OhoA3n///YKCAgqF4unpKZPJNG0k\nMzOTSqVu27ZN626QKHhNhCWRSMaMGQMAkyZNAoBz585p0UhAQAAA/Pbbb1p3g0SBYa1jzZ49OzQ0\nVLtr09PTKRQKAAwfPrzblS3VZGRkYBg2YcIE7e5O0gnDmrxLJJJff/31+PHjml7Y0dFx6dIlHMcB\noKys7MMPP6yoqNCohc2bN+M4vm3bNk1vTdI9fa3s/6G0tNTMzMzGxqa2tlb9q+7duzdy5EgAGDBg\n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\nRU5ErkJggg==\n", 128 | "text/html": [ 129 | "\"*****\"" 130 | ], 131 | "text/plain": [ 132 | "\"*****\"" 133 | ] 134 | }, 135 | "execution_count": 6, 136 | "metadata": {}, 137 | "output_type": "execute_result" 138 | } 139 | ], 140 | "source": [ 141 | "target.ligand" 142 | ] 143 | }, 144 | { 145 | "cell_type": "markdown", 146 | "metadata": {}, 147 | "source": [ 148 | "Let's see which target has the most actives and decoys." 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 7, 154 | "metadata": {}, 155 | "outputs": [ 156 | { 157 | "name": "stdout", 158 | "output_type": "stream", 159 | "text": [ 160 | "Target: pygm\t\tNumber of actives: 114\t\tNumber of decoys: 4045\n", 161 | "Target: sahh\t\tNumber of actives: 190\t\tNumber of decoys: 3483\n", 162 | "Target: cxcr4\t\tNumber of actives: 122\t\tNumber of decoys: 3414\n", 163 | "Target: ampc\t\tNumber of actives: 62\t\tNumber of decoys: 2902\n", 164 | "Target: pur2\t\tNumber of actives: 201\t\tNumber of decoys: 2725\n" 165 | ] 166 | } 167 | ], 168 | "source": [ 169 | "for target in dude_database:\n", 170 | " actives = list(target.actives)\n", 171 | " decoys = list(target.decoys)\n", 172 | " print('Target: ' + target.dude_id, \n", 173 | " 'Number of actives: ' + str(len(actives)), \n", 174 | " 'Number of decoys: ' + str(len(decoys)), \n", 175 | " sep='\\t\\t')" 176 | ] 177 | } 178 | ], 179 | "metadata": { 180 | "kernelspec": { 181 | "display_name": "Python 3", 182 | "language": "python", 183 | "name": "python3" 184 | }, 185 | "language_info": { 186 | "codemirror_mode": { 187 | "name": "ipython", 188 | "version": 3 189 | }, 190 | "file_extension": ".py", 191 | "mimetype": "text/x-python", 192 | "name": "python", 193 | "nbconvert_exporter": "python", 194 | "pygments_lexer": "ipython3", 195 | "version": "3.6.1" 196 | } 197 | }, 198 | "nbformat": 4, 199 | "nbformat_minor": 2 200 | } 201 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2017, oddt 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /PDBbind.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "

PDBbind Database

" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": {}, 14 | "outputs": [ 15 | { 16 | "name": "stdout", 17 | "output_type": "stream", 18 | "text": [ 19 | "0.4.1-16-gb8cc8d0\n" 20 | ] 21 | } 22 | ], 23 | "source": [ 24 | "from __future__ import print_function, division, unicode_literals\n", 25 | "\n", 26 | "import oddt\n", 27 | "from oddt.datasets import pdbbind\n", 28 | "\n", 29 | "oddt.toolkit.image_size = (400, 400)\n", 30 | "\n", 31 | "print(oddt.__version__)" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "Download a dataset from [PDBbind](http://www.pdbbind.org.cn/) and unpack (I used [core-set 2016](http://www.pdbbind.org.cn/download/pdbbind_v2016_core.tar.gz))." 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": 2, 44 | "metadata": { 45 | "collapsed": true 46 | }, 47 | "outputs": [], 48 | "source": [ 49 | "%%bash\n", 50 | "wget -qO- http://www.pdbbind.org.cn/download/pdbbind_v2016_core.tar.gz | tar xz" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": 3, 56 | "metadata": { 57 | "collapsed": true 58 | }, 59 | "outputs": [], 60 | "source": [ 61 | "directory = './core-set/'" 62 | ] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "metadata": {}, 67 | "source": [ 68 | "We will use the pdbbind class. " 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 4, 74 | "metadata": { 75 | "collapsed": true 76 | }, 77 | "outputs": [], 78 | "source": [ 79 | "pdbbind_database = pdbbind(home=directory, \n", 80 | " version='2016', \n", 81 | " default_set='core') # Available sets in wrapper: core, refined, general_PL (general for 2007)" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "You can get one target or iterate over all of them. To do it you can use PDB ID of a target or an index from list in INDEX file (INDEX_refined_data.2016)." 89 | ] 90 | }, 91 | { 92 | "cell_type": "markdown", 93 | "metadata": {}, 94 | "source": [ 95 | "The class has two properties: ids and activities." 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 5, 101 | "metadata": {}, 102 | "outputs": [ 103 | { 104 | "name": "stdout", 105 | "output_type": "stream", 106 | "text": [ 107 | "Number of targets: 290\n", 108 | "First ten targets: ['3ao4', '3gv9', '1uto', '1ps3', '4ddk', '4jsz', '3g2z', '3dxg', '3l7b', '3gr2']\n" 109 | ] 110 | } 111 | ], 112 | "source": [ 113 | "all_ids = pdbbind_database.ids\n", 114 | "print('Number of targets:', len(all_ids))\n", 115 | "print('First ten targets:', all_ids[:10])" 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "execution_count": 6, 121 | "metadata": {}, 122 | "outputs": [ 123 | { 124 | "name": "stdout", 125 | "output_type": "stream", 126 | "text": [ 127 | "First ten activities: [2.07, 2.12, 2.27, 2.28, 2.29, 2.3, 2.36, 2.4, 2.4, 2.52]\n" 128 | ] 129 | } 130 | ], 131 | "source": [ 132 | "all_activities = pdbbind_database.activities\n", 133 | "print('First ten activities:', all_activities[:10])" 134 | ] 135 | }, 136 | { 137 | "cell_type": "markdown", 138 | "metadata": {}, 139 | "source": [ 140 | "Let's choose one target." 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 7, 146 | "metadata": { 147 | "collapsed": true 148 | }, 149 | "outputs": [], 150 | "source": [ 151 | "target = pdbbind_database[0]" 152 | ] 153 | }, 154 | { 155 | "cell_type": "markdown", 156 | "metadata": {}, 157 | "source": [ 158 | "You can always check PDB ID." 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": 8, 164 | "metadata": {}, 165 | "outputs": [ 166 | { 167 | "data": { 168 | "text/plain": [ 169 | "'3ao4'" 170 | ] 171 | }, 172 | "execution_count": 8, 173 | "metadata": {}, 174 | "output_type": "execute_result" 175 | } 176 | ], 177 | "source": [ 178 | "target.id" 179 | ] 180 | }, 181 | { 182 | "cell_type": "markdown", 183 | "metadata": {}, 184 | "source": [ 185 | "`Target` has three properties: protein, pocket and ligand. All of them are of `oddt.tolkit.Molecule` class." 186 | ] 187 | }, 188 | { 189 | "cell_type": "markdown", 190 | "metadata": {}, 191 | "source": [ 192 | "Let's find the largest ligand." 193 | ] 194 | }, 195 | { 196 | "cell_type": "code", 197 | "execution_count": 9, 198 | "metadata": {}, 199 | "outputs": [ 200 | { 201 | "name": "stdout", 202 | "output_type": "stream", 203 | "text": [ 204 | "Target ID: 3ag9 \n", 205 | "Number of atoms: 140\n" 206 | ] 207 | } 208 | ], 209 | "source": [ 210 | "max_atoms = 0\n", 211 | "\n", 212 | "for target in pdbbind_database:\n", 213 | " if max_atoms < len(target.ligand.atoms):\n", 214 | " max_atoms = len(target.ligand.atoms)\n", 215 | " largest = target\n", 216 | "\n", 217 | "print('Target ID:', largest.id, '\\nNumber of atoms:', max_atoms)" 218 | ] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": 10, 223 | "metadata": {}, 224 | "outputs": [ 225 | { 226 | "data": { 227 | "image/png": "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\nmUVERNy7d+9xr6yurmZTddeuXb///jvDMFeuXHnkkKe4uNjPz4+IrKys4uPj2/NZUlJSpk+fbmRk\nRETm5ubtKQXwSJ0isNjZ6snJyUI38qCqqqpp06YR0eDBg3Nzc1vyFo1GExsba29vz2ZcbGwsO256\nQH5+/vbt2xmGqa+vP3v2bPM1dTqdQqGQyWREFBQUVFlZ2apPodFo9u7d2/iFRv/+/WNiYioqKlpV\nBKAlOkVgubu7GxsbV1VVcVXw4EHGw4NRq5ncXGbFij8eb2bI87CysrLnnnuOiEaNGlVSUtKqBu7c\nuSOXy9lprl5eXidPnmx8at++fewPTxyvPSA9PX3IkCFENGDAgAsXLrTkLffu3VMoFD179mSjysfH\nZ9++fQ0NDa06LkDLGX5g3bt3z8jIaPjw4RzWPHiQCQlhYmMfDKw1a9YwDNOS3/acnBx2r+OXX365\npqambW1cvnx54sSJRCSVSj08PNgL5+25FFVZWfnWW28RkUwma3qp62E5OTkRERHW1tZEZGJiMmPG\njFOnTrX5uAAtZPjTGs6dO6fVats5A+thvr6UmkpVVX88wjCMVCrV6XTHjh3TarXffPMNwzBqtfrh\n92ZkZIwZM+batWtvvfXWt99+a2Zm1rYennnmmaNHj3733XempqaXLl1ityl9+umn21aNiCwsLHbs\n2LF7924LC4v8/PzHvWzOnDlPP/30mjVrJBJJRERETk7Ovn37Ro8e3ebjArRQRwRWYiIlJBARKZW0\nZMmDTw0fThoN3b5NK1fycvSkpCRq95TRR3pgsZpr167169cvMzNz0KBBGRkZlpaWFy9eTE5OVqlU\nd+/ebXzZiRMnxowZo1QqIyIiduzY0czdiy3k7+9vZmbWvXv3YcOGtbMUKyAgoLS0dOHChY98tqGh\n4fDhw717946JicnLy4uKisJ8K+gwwo+w2IVA+aDVards2bJ27Voi2r17N7uyaHtcunTp8uXLjX98\nYLEalUo1evTo69eve3l5XbhwwdPT8+zZsyNHjvz+++8lEskPP/zAMMyqVateeOGFqqqqLVu2REVF\ntbMfVlZWVllZGU8DnIf/RTE2Ns7Jybl27dqiRYvMzc35OCjAY3XAaefBg8xf/sLI5czcuUx4+INP\n7dnDvPMOc+XKny4Gtd/x48eHDh1KRMbGxhYWFkRkZmb24YcfVldXt61gQkJCly5dBg4c2JIXs9/c\n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\nymgAAAAASUVORK5CYII=\n", 228 | "text/html": [ 229 | "\"3ag9_ligand\"" 230 | ], 231 | "text/plain": [ 232 | "\"3ag9_ligand\"" 233 | ] 234 | }, 235 | "execution_count": 10, 236 | "metadata": {}, 237 | "output_type": "execute_result" 238 | } 239 | ], 240 | "source": [ 241 | "largest_ligand = largest.ligand\n", 242 | "largest_ligand.removeh()\n", 243 | "largest_ligand" 244 | ] 245 | }, 246 | { 247 | "cell_type": "markdown", 248 | "metadata": {}, 249 | "source": [ 250 | "If you want to check activity, you can use the `sets` dict." 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": 11, 256 | "metadata": {}, 257 | "outputs": [ 258 | { 259 | "data": { 260 | "text/plain": [ 261 | "8.05" 262 | ] 263 | }, 264 | "execution_count": 11, 265 | "metadata": {}, 266 | "output_type": "execute_result" 267 | } 268 | ], 269 | "source": [ 270 | "pdbbind_database.sets['core'][largest.id]" 271 | ] 272 | } 273 | ], 274 | "metadata": { 275 | "kernelspec": { 276 | "display_name": "Python 3", 277 | "language": "python", 278 | "name": "python3" 279 | }, 280 | "language_info": { 281 | "codemirror_mode": { 282 | "name": "ipython", 283 | "version": 3 284 | }, 285 | "file_extension": ".py", 286 | "mimetype": "text/x-python", 287 | "name": "python", 288 | "nbconvert_exporter": "python", 289 | "pygments_lexer": "ipython3", 290 | "version": "3.6.1" 291 | } 292 | }, 293 | "nbformat": 4, 294 | "nbformat_minor": 2 295 | } 296 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # notebooks 2 | 3 | 4 | [![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/oddt/notebooks/master) 5 | -------------------------------------------------------------------------------- /Shape_comparison.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "

Compare shapes of molecules" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": {}, 14 | "outputs": [ 15 | { 16 | "name": "stdout", 17 | "output_type": "stream", 18 | "text": [ 19 | "0.4.1-12-ga7d79bd\n" 20 | ] 21 | } 22 | ], 23 | "source": [ 24 | "from __future__ import print_function, division, unicode_literals\n", 25 | "\n", 26 | "import oddt\n", 27 | "from oddt.shape import usr, usr_similarity\n", 28 | "print(oddt.__version__)" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "We'd like to compare the shape of heroin with other molecules." 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": {}, 41 | "source": [ 42 | "ODDT supports three methods of molecular shape comparison: USR, USRCAT and Electroshape.
\n", 43 | "[USR](http://dx.doi.org/10.1002/jcc.20681) looks only at the shape of molecule.
\n", 44 | "[USR-CAT](http://dx.doi.org/10.1186/1758-2946-4-27) considers the shape and type of atoms.
\n", 45 | "[Electroshape](http://dx.doi.org/doi:10.1007/s10822-010-9374-0) accounts for the shape and charge of atoms.
\n", 46 | "All those methods have the same API.
\n", 47 | "We will use USR, because it's the simplest and the fastest." 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 2, 53 | "metadata": { 54 | "collapsed": true 55 | }, 56 | "outputs": [], 57 | "source": [ 58 | "heroin = oddt.toolkit.readstring('smi', \n", 59 | " 'CC(=O)Oc1ccc2c3c1O[C@@H]4[C@]35CC[NH+]([C@H](C2)[C@@H]5C=C[C@@H]4OC(=O)C)C')\n", 60 | "\n", 61 | "smiles = ['CC(=O)Oc1ccc2c3c1O[C@@H]4[C@]35CC[NH+]([C@H](C2)[C@@H]5C=C[C@@H]4OC(=O)Cc6cccnc6)C',\n", 62 | " 'CC(=O)O[C@@H]1C=C[C@@H]2[C@H]3Cc4ccc(c5c4[C@]2([C@H]1O5)CC[NH+]3C)OC', \n", 63 | " 'C[N+]1(CC[C@@]23c4c5ccc(c4O[C@H]2[C@@H](C=C[C@@H]3[C@@H]1C5)O)OC)C', \n", 64 | " 'C[NH2+][C@@H]1Cc2ccc(c3c2[C@]4([C@@H]1CC=C([C@H]4O3)OC)C=C)OC',\n", 65 | " 'CCOC(=O)CNC(=O)O[C@H]1C=C[C@H]2[C@H]3Cc4ccc(c5c4[C@]2([C@H]1O5)CC[NH+]3C)OCOC',\n", 66 | " 'CC(=O)OC1=CC[C@H]2[C@@H]3Cc4ccc(c5c4[C@@]2([C@@H]1O5)CC[NH+]3C)OC',\n", 67 | " 'C[NH+]1CC[C@]23c4c5cc(c(c4O[C@H]2[C@H](C=C[C@H]3[C@H]1C5)O)O)c6cc7c8c(c6O)O[C@@H]9[C@]81CC[NH+]([C@H](C7)[C@@H]1C=C[C@@H]9O)C']\n", 68 | "\n", 69 | "molecules = [oddt.toolkit.readstring('smi', smi) for smi in smiles]" 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "To compute the shape using USR we need the molecule's 3D coordinates." 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": 3, 82 | "metadata": { 83 | "collapsed": true 84 | }, 85 | "outputs": [], 86 | "source": [ 87 | "heroin.make3D()\n", 88 | "heroin.removeh()\n", 89 | "for mol in molecules:\n", 90 | " mol.make3D()\n", 91 | " mol.removeh()" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "metadata": {}, 97 | "source": [ 98 | "Now we can use the `usr` function." 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": 4, 104 | "metadata": {}, 105 | "outputs": [ 106 | { 107 | "data": { 108 | "text/plain": [ 109 | "array([ 3.12823939, 1.59761882, 0.55976415, 3.20355535,\n", 110 | " 2.18059039, 1.01127279, 6.30361271, 6.8250246 ,\n", 111 | " -10.16452217, 5.39781094, 5.79236984, 0.93677378])" 112 | ] 113 | }, 114 | "execution_count": 4, 115 | "metadata": {}, 116 | "output_type": "execute_result" 117 | } 118 | ], 119 | "source": [ 120 | "usr_heroin = usr(heroin)\n", 121 | "usr_heroin" 122 | ] 123 | }, 124 | { 125 | "cell_type": "markdown", 126 | "metadata": {}, 127 | "source": [ 128 | "USR represents shape with 12 descriptors, which summarize the distribution of atomic distances in the molecule. For more details see [Ballester & Richards (2007)](http://dx.doi.org/10.1002/jcc.20681).
\n", 129 | "USR-CAT and Electroshape use more descriptors, 60 and 15 respectively." 130 | ] 131 | }, 132 | { 133 | "cell_type": "markdown", 134 | "metadata": {}, 135 | "source": [ 136 | "Let's see how similar it is to a different molecule." 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": 5, 142 | "metadata": {}, 143 | "outputs": [ 144 | { 145 | "data": { 146 | "text/plain": [ 147 | "0.20657099769142923" 148 | ] 149 | }, 150 | "execution_count": 5, 151 | "metadata": {}, 152 | "output_type": "execute_result" 153 | } 154 | ], 155 | "source": [ 156 | "usr_similarity(usr_heroin, usr(molecules[0]))" 157 | ] 158 | }, 159 | { 160 | "cell_type": "markdown", 161 | "metadata": {}, 162 | "source": [ 163 | "The similarity function returns a number in range (0, 1], where a higher number means that the molecules are more similar and 1 means that the molecules have identical shapes.
\n", 164 | "All methods (USR, USR-CAT and Electroshape) use the same similarity function." 165 | ] 166 | }, 167 | { 168 | "cell_type": "markdown", 169 | "metadata": {}, 170 | "source": [ 171 | "We will find a molecule similar to oxamide. " 172 | ] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "execution_count": 6, 177 | "metadata": {}, 178 | "outputs": [], 179 | "source": [ 180 | "similar_mols = []\n", 181 | "for i, mol in enumerate(molecules):\n", 182 | " sim = usr_similarity(usr_heroin, usr(mol))\n", 183 | " similar_mols.append((i, sim))" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 7, 189 | "metadata": {}, 190 | "outputs": [ 191 | { 192 | "data": { 193 | "text/plain": [ 194 | "[(2, 0.48911179609705718),\n", 195 | " (3, 0.45645597603277854),\n", 196 | " (1, 0.39947994224342542),\n", 197 | " (5, 0.39212419145828936),\n", 198 | " (0, 0.20657099769142923),\n", 199 | " (6, 0.16292525187745338),\n", 200 | " (4, 0.15072869043524584)]" 201 | ] 202 | }, 203 | "execution_count": 7, 204 | "metadata": {}, 205 | "output_type": "execute_result" 206 | } 207 | ], 208 | "source": [ 209 | "similar_mols.sort(key=lambda similarity: similarity[1], reverse=True)\n", 210 | "similar_mols" 211 | ] 212 | }, 213 | { 214 | "cell_type": "code", 215 | "execution_count": 8, 216 | "metadata": {}, 217 | "outputs": [ 218 | { 219 | "data": { 220 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAABmJLR0QA/wD/AP+gvaeTAAAcFklE\nQVR4nO2de1hTR/rH3yBRQAURAQngbRWBVlGQinex0PWCwm6Lbn2k1svmcdWmXtBs7c/GKwJbMbhd\nK603lFalVdoAoqB21UpFEFRUQLpguSQi94vIJcn5/TE6RkAM4ZycJMzn8fEhJyczbzhfZubMmfc7\nHIqigECgGyO2AyAYJkRYBEYgwiIwAhEWgRGIsAiMQIRFYAQiLAIjEGERGIEIi8AIRFgERiDCIjAC\nERaBEYiwCIxAhEVgBCIsAiMQYREYgQiLwAhEWARGIMIiMAIRFoERiLB0gNu3wd8fAgLAzw+uX2c7\nGnrgkCwdlqmrgxkz4KefYOhQKCuDuXMhMREGD2Y7rO5CWiy2SUqCWbNg6FAAAFtb+OtfIS6O7Zho\ngAiLbaRScHB4+dLBAUpL2YuGNoiw2IbHg5KSly9LS8Henr1oaIMIi21mz4ZLl6CoCADgyRM4cwYC\nAtiOiQaM2Q6gx2NhAYcPw9q1YGQEra0gFoOdHQDU19c/ePBg4sSJbMenKRRBJ3nvvfcAQCQSsR2I\nhpCuULdQKpX5+fkAYG1tDQC7du26evUq20FpBNvKJrzC+vXrAWDjxo1VVVVDhgwBAAcHh4qKCrbj\n6jKkxdItlEolAERERPz222/Hjx/v1atXSUnJ0qVLKb2bx2Zb2YRXqK+vd3JyAgBra+vS0tItW7ag\ny3TgwAG2Q+saRFg6R3p6eu/evQFg5syZTU1NkydPBgATE5Pbt2+zHVoXIMLSRUJDQ1FDFRoaWlRU\nZGlpCQCurq5Pnz5lOzR1IcLSRRQKha+vLwAYGxunpqb+8MMPSGf/+Mc/2A5NXYiwdJSysrLBgwcD\nwIgRI2pra5cvX460derUKbZDUwsiLN0lKSmJw+EAwMKFCxsaGpydnQFgwIABjx490rjM4uLiyMjI\nvXv3hoWFJScnV1VVhYWF4Xc3b95MR+AURYSl46BpLQA4duzY3bt3TUxMAGDatGlyuVyD0hobG7du\n3fr48WP0MicnhzlhkWeFOs2ePXuuXLmSmZm5Zs2aW7du7dmzZ/369deuXdu1a5dIJGpzcmNjY3Fx\nsUwmKykpkUqlpaWlFRUVK1eu9Pb2RidkZ2e7uLjY2tqil87OztXV1e0rlclkJ06c4HA4lpaWy5cv\nNzLSZLKTCEun6dOnz+nTp93d3evr6xcvXpyamhofH3/58uUdO3bI5XIAQEoqLS0tLS2tqalpX4JU\nKsXCqq6uHjhwYJsTZDLZ/v37VY/Y2tpu3rwZAL777rv8/PzRo0drEjpdTR+BOY4cOYIu1tSpU9W8\nrIMGDRozZoyfn9/FixdxOWlpaSdPnlQtufOuMCYmpry8XLOYSYulByxbtiwlJeXkyZO//vorPtin\nTx97e3sej+fg4GBnZ+fo6GhnZ+fg4MDj8Xg8HhqNtWHMmDEJCQnl5eXoCXd+fv6gQYM6rDEnJycu\nLs7ExMTCwkKzmImw9IOvv/76ypUrUqkUAEJCQlauXInE0SVMTU35fD5qtORy+dixY18nLBcXFxcX\nl7i4uPT0dDT131VIlo7eMH/+/ISEBB6PV1hYiJ75MIRcLjc2NgaA8+fPW1lZeXp6alAIabH0g0eP\nHiUlJQHAJ598wqiqACA3Nzc5OZnD4Zibm6MHABpAWiz9YN26dZGRkWZmZkVFRVZWVmyH82bIeiw9\noK6u7ujRowCwfPlyvVAVEGHpBVFRUXV1dUZGRmvXrmU7FnUhwtJ15HL5V199BQALFizQcK6SDYiw\ndJ0ffvihqKgIAPBzQ72ADN51HS8vr7S0NA8Pj4yMDLZj6QKkxdJprl27lpaWBgAbNmxgO5auQYSl\n0+zbtw8A7O3tAwMD2Y6laxBh6S6FhYUSiQQABAIBl8tlO5yuQYSlu0RHRysUin79+v39739nO5Yu\nQx7p6C5Tpkzh8XgbNmxAWTr6BbkrJDAC6QoJjECERWAEIiwdw1CsuckYqzMSExPv3r37z3/+E+X3\nMY4BWXOTFqtjnjx5wufz/fz8tmzZ8tZbb6Hpb8YxIGtuIqy2tLa2RkREODk5ffvtt+hITk7OpEmT\nli5dipacM4gBWXMTYb3CxYsXx48fv3HjxtraWi6Xy+fzDx8+PGTIEIqijh8/PmrUqG3btjU1NTFV\nvSFZc2uWNWZ45OXl+fn54V+Lj49PdnY2equhoUEkEuGEKkdHx+joaFoqraurE4vFV65cef66poZy\nc6P++IOiKKqsjHJ3p6RSWirSPkRYVHV1tVAo7NOnD9LNqFGjYmNj259WVFQUFBSElTdz5szuOKEp\nFIojR44gPxlra+uXb2RkUPPnU/7+1Ny51NWrGpfPOj1aWAqFIjo62sbGBmmlX79+IpGoqalJ9ZwP\nP/xw4sSJ58+fRy8vX748duxYdL6RkVFQUFBZWVlX671+/fqECRNQIRwOh0YrDt2h5wrrl19+cXNz\nU5UItmHBPHv2DLdkfn5+eXl5VDs5DhgwIDQ0tLm5WZ1KS0pKgoKC8OTFhAkTrl+/Tv930wF6orCK\ni4tVr+7EiRNv3LjxupMvXLgwcuRIdGbv3r2Dg4NramooiqqqqhIKhTjFz8nJKSEhoZNKGxsbQ0ND\n+/fvj87n8XhRUVEKhYL+r6cb9CxhPX36VHUY7uDgEB0drVQqO/9US0uLWCzGLgZWVlZisRg5VOXm\n5s6dO1d1yH/v3r32JUgkkuHDh2N1CgSCuro6Rr6hztBThKVUKmNjY5ElPwCYmZkJhcL6+nr1S6io\nqBAIBL169UIljB8/Ht/NpaSkuLq6ouNcLlcgEKBWjaKozMzM6dOnY+X5+fkVFBTQ//V0jx4hrIyM\njClTpuDBcmBgoMZui7du3Zo2bVp7obRv1Xbv3v3JJ59gIbq4uOA7gJ6A4QtLdY7A09OTlsGyRCIZ\nNmwYKtPU1FQoFKKuTSaTtbfAs7a2PnjwoGbmjvqL4QtrxIgRAGBiYnL06FEaB8toMN6vXz+kHnt7\nezxcy8jIcHjxZGb9+vXV1dV0VapHGL6wFixYAADz5s1jovA//vhj0aJF+AZz/fr16DiyWgCAN94Z\nGCqG/6wQjXKQ4ZNcLj9y5EhWVhZdhQ8ZMuTUqVNXr151d3cHgLKyMnRcS8tsdJielUzx448/rlix\nwt7evkT1WW+3mTp1anp6ekZGBp6UJ/QsYVVVVQFAhx7U3cTIyOidd96hvVj9xfC7QgIrEGERGIEI\ni8AIRFgERiDCIjACERaBEYiwCIxAhEVgBCIsAiMQYREYgQiLwAhEWARGIMIiMAIRFoERepawkEvs\ngAEDaC9ZqVRmZmY2NzfTXrKe0rOEFRgY+M033/z888/0Fvvbb795eXl5eHisXLmS3pL1F8Nf6NfS\n0oL/NzY2ptczvbS0VCgUfv/99xRFAcDAgQNpLFy/YXvRPYMolcqYmBi02r1Xr14nTpygMbWhublZ\nLBZ3mDKflZWFM2MfPnxIV436hcEK6+bNm5MmTWrzV4R20up+4e1T5mtraymKQgaTOEkVAJydnUn6\nl4EglUr5fD7OGnV3dz948CAWGcqE/gOZm3WdrKysGTNmYN34+fn973//o15kQuPbgoEDBy5duhTl\n6vj6+ra2ttL6FfUAgxIWurrm5ubo6g4aNAi7dyDvBkdHR/SWmZmZSCR69uyZ+oVXVlaqejeopsyn\npKS89dZb6LixsTGfzy8vL6coauvWrejgihUrmPi+uozhCEsikfzpT39CFxI5c6DuSRXNTB/bt0ZY\nr20MJt99911sMElRlFKpXLx4MXpr//799H5fHccQhJWTkzNnzhx8dX18fB48eNDJ+V0yfbx48SLe\niZnL5X766adVVVWU2gaTz5498/LyQncP8fHx3f+y+oJ+C6uqqkogEKD7PgAYPXp0YmKimp9Vx/RR\n1dFv9uzZSK/I0c/W1hYd79BgUhWZTIa64P79+9+9e1fjL6tf6KuwWltbo6KirK2t0dW1tLRU368R\ngySCC+nQ9DEwMNDd3R279f33v/8dN26cqhzbG0y2JysrC9mHDBs2TAPPUn1EL4V16dKlMWPGqF7d\nJ0+eaFyamqaPXTKYbE9iYiIa+E+ZMqWT5s1g0DNh5efnq+6O7O3tfefOHVpKbm/6eP/+ffQWMpg0\nNTVFb6lpMNmesLAwVMJHH31ES8y6jN4IC93Q4RHPkCFD6HLxV6W96eOxY8eGos1tNDKYbAOfz0dF\n7dmzh8awdRD9ENaNGzfwBFL//v1DQ0OZ602amprCwsLwsxoEh8P58MMPi4uLu1l4S0uLt7c3KvDU\nqVO0BKyb6Iewtm3bhi5wUFCQVCu7gMhksqVLl6JKeTwejW7sFRUVo0aNAgBTU1Nani/pJvohrFOn\nTqFr3NjYqLVK8WZM3333Hb0l5+TkoOlWOzu77reCuknPWo+lGbTb8zk7O8fGxhobG8tkMn9//6dP\nn9Jbvi5AhMUOvr6+X3/9NQBkZmZ+9NFHSqWS7YhohgiLNVauXLl27VoAOHv2rEgkYjscmiHCYpN9\n+/b9+c9/BoCQkJCamhq2w6ETw1+arMsYGxufPn162bJlVlZWeFcLw4AIi2UsLCzOnj3LdhT0Q7pC\nAiP0FGGFhISwHYIa3L4N/v4QEAB+fnD9OtvRdAutdoUCgQA9jFNNN1CH4uJi9MOSJUu6+tm6urqc\nnBy8+5fuUlcHy5bBTz/B0KFQVgZz50JiIgwezHZYmqLN2Vh2NwJ5//33CwoKjh49qma0eOYdpQ0y\nzqlT1IYNL1/u2kUdOKCNepmBhcG7q6srj8fr0kfKysqys7MBYNasWW02bXsjv//+u0wma25uPnPm\nTHx8/OTJkz/44AO8a5cOIZXCiz3DAAAcHCA/n71ouo02VYxarCNHjnT1g915VigUCtskl9rZ2UVF\nRSUlJXX+QZZbrN279brFMnxhYb766isfHx/c4PF4vF9//bWT87UtrJoays2NQgmPZWWUuzullXUc\nDNFT7goBYOrUqSkpKTdu3Jg8eTIASKXSadOmLVy48MKFC2yHBgAAFhZw+DCsXQsBAbBsGYjFYGfH\ndkzdQJsqZrfFwmRnZ3/66afYXoHL5XaYvKqdFquxsZHP52/ZsoW5KlihJwoLgdY648kLR0fH/fv3\nq65k14KwlErlokWLUC0oXdFg6EFdYRv69u27bdu2CxcuoOTV4uJigUAwa9asO3fuaC2G7du3nz59\nGgBWr16NTOEMB22qWKdaLFUuX75sb2+PqjAyMlqyZElZWRnTLVZsbCz6hcyYMaOrGZG6T89tsVTx\n9vYuKiqKjo62sbFBrlqjR4/G2VpyuZz2Gm/duvXxxx9TFDV69Oi4uDic1Wg4aFPFOttiYaqqqvh8\nPs7ZR1hZWdHbaJWWlqIGcuDAgYbqzKYHwsrLy3N2dkbXeNOmTd1J61OTkJCQ9k8kg4KCGhoaul94\nfX29m5sbAHC53EuXLnW/QN1Ep4VVU1Ozdu3aNt0Ej8c7duwYjaaPqtTV1S1ZsuR1rbuTk1NWVlZ3\nylcoFP7+/qi0gwcP0hW2DqKjwlIoFNu3b8eOLn379l23bt2KFSvwvLmHh8e1a9foDS8tLc1B9Wld\nR3C53MjISI1lvXHjRlROcHAwvcHrGroorMjISOQpBQAcDmfx4sUymQy9lZ6ejubN4YXp46NHj7of\nmFKp3L59e/vH266urjNnzsRGbRhPT08ckvocPXoUfXzOnDnIt82A0aqwkPNCTExMh++WlZWdPHlS\n1RJt+PDhqampbU5Dpo943hyZPnZnUF9SUuLi4qKqGw6HM2/ePJz9/PjxY5FI1GbbgT59+hw7dkz9\nWq5evYq+vqura01NjcbR6gtaFdaBAwc+/vjjNr/W06epmJjz9+/f37NnD74dMzMz69zRBTnA4LZE\nYweYHTt2qI7Te/fuvWrVqg5bwaampujoaOxiinBzc6uoqHhjLQUFBciFy9bWVmNfXf2C5RT7HTt2\nrF2rEIsleE0Ll8sVCoVqdnBtTB9nzJih/uD69u3b2FIbSXnTpk1vfK6iUCgSEhJUWzgul7tz507k\n8N4htbW1yPrWxMSkfQNsqLAsrOTkZGvr742MRqIOaNGiRV988UVXC/nll1/QDTyo57JXWVmpaqFm\nYmISHBzcVcfsCxcuIG8PxIgRIzo0DpHL5ch2i8PhvG4MYJCwJqzGRmr2bMrLq7pvX6mpaZq1dYar\n69ed/N13DjJ9tLGxQZcZmT62tzpqaWmJiopSbR1Xr17dHRP2pKQk1RvJv/zlL216utWrV6O3RCJR\nVwuvqqoKCwvDLzdv3tzhacXFxZGRkXv37g0LC0tOTu5qLQxBv7BKSigfn5cvnZyeH+zXj/rpJ4qi\nqNZWavz45+/K5fJJk27OmLFMoVA8evRIY2EhkJMxnvdq42SsaqpmZGS0cOHC7hhMYpRK5aFDh3C6\nqampKV6EExkZiQ5+8MEHGoz/1BFWY2Pj1q1bcQudk5Oj6fegGe0Ja9w4auZMSql8RVgURQkE1P/9\n3xEab5Ty8vLmzZuHWxEfH5/ExERVg8np06fT7l7c0NDwxRdfYE07OjoGBwejexEPD4+nT59qUGaH\nwpJKpWFhYeHh4d9++61CoUhLS9PSAtcuoj1hzZ5NbdxIxce3FRZDxMfHOzk5wauMHDlSIpEwV2l+\nfv6CBQtUa3R0dNTYKa6qqmrdunWRL0DCwo16TExMbm7u+fPn8QYZOgUjwrK3pwICnv9TFVZpKeXt\nrSVhURTV3Nz85ZdfomlPIyOj8PBw7axOSU5OHjRoEBJWZmamxuV03hXGxMSUl5enpaWdPHlS81gZ\ng5FlMy4uEBf3/J8qPB6MGwfnzjFRZwf07t1748aN7777LgB4e3tv2rRJO6tTfH198ZIbbApPIzk5\nOSEhIWVlZRYWFmPGjHnw4EF5eTl6K19nMsa0nVe4YQO8/iEvI6AUQi0nEnY1XbtLuLi4uLi4xMXF\noQdcfD4fNVpyuXzs2LGqkyAsom1hOTjAuHFw9aqWq9VLLC0tN2/ejF+iVlAul6N7AlNTUy6XCwAO\nDg4CgYCtIF8H/cKyt4eUlJcv8/KeH0xKen5ELKa9zh5Ebm5ucnIyh8MxNzf39fVlO5zXwniL1dDQ\nkJOT4+npyXRFPYS333777bffbn98+/btra2tO3fuZNcgA8PsmneKombPnv3OO+8cPnyY0Yp6OAUF\nBdu2bdu9e/ft27fZjuU5zArrxIkT169fB62PnXsaZmZm6AeZTMZuJBgGhdXQ0PDZZ58BgIeHh+rE\nN4F2rKysUA9YUVHBdizPYVBYISEhUqmUw+GIxeKueg8RugSXy0UPKw1fWAUFBfv27QOAJUuWTJ06\nlaFaCBg0119ZWcl2IM9hSljBwcFNTU1mZma7du1iqAqCKkhYBt5iXb58OS4uDgC2bNmCF6cTGKVH\nCCs4OBgAhg0bhrOdCEzTI4SFdu/Yt29f+8QpAkPo2hiLkZn3GzduSKVSJh7sE16HlZUV6FKLxYiw\nbGxs8PJzgnbALRbFtu05gkwvGQhIWHK5XEd2EXuDsKqrq8PDw/FLoVDY4WklJSX79++PiIgIDw9P\nUV3bQNAWeM3qVd1Yk0RDV/js2bNvvvlmzZo1yMMjNze3+2UyyuPHj62srNBiJoMBjbEAICAgYNas\nWVu2bEFLZ9lCk65QJpOFh4f/61//OnTokFKpzM7OdnFxwc4w2MtKNzl//ry9vf3o0aMNbDM3c3Nz\n/PPly5d9fHy8vLxQ5ggr8bxZWDKZbP8L0BFbW9vNmzdv2rTJ1NQ0Pz+/urp64MCBDMepOeg3izdd\nRumphYWF77///qxZs+7evctqdPRw9+5dlG8NAHPnzkWrk9PS0vz9/ceOHXv8+HEm3C7fQOe5Fnqd\nKIJAv+X+/fvjNKlLly7htXK9evVatWpVeXk5jTUWFhbihY0MGcRh5HJ5aGgo8rEBADMzszNnzigU\nitjYWJydCwDDhw8Xi8XtveyZQ0NhPXjwYPfu3Xv37m1paUHJuDirWNdMNfGfMgD4+fnl5eVRr0nJ\n735yWENDw+eff46nhU1MTMLDw9Wxo9GMgoKC6dOno7pUE5AmTJhw9uxZuVwukUgmTpyIj9va2opE\notraWobiUaVbLdbZs2eREwayDxCLxV9++aXu2Adgzpw5g/98uVyuQCBAiddVVVWqKflOTk4JCQma\nVdHetWvdunXV1dXnzp2ztbUNDAxMSUmht/WKjo7Gyyd9fX0LCwujoqJGjBiBZeTq6nr8+PHW1tZr\n1675+fnh44MGDRKJRGjGizk0SVjFLhpJSUk3b96kNR6maGlpEYvF2GHByspKLBYjW73c3FzVVs3H\nx+fevXtdKjw9PR1vtNneZ/Dhw4dI1o6Ojuo7NHWCTCabP38+qs7U1FQsFmPJKhQKiUTi7u6Ov87Q\noUPFYnFjY+O1a9fmzp2L504tLCzi4+O7GUknaCKs7OzsvXv3RkREHDp0SL8sDysqKgQCAU76Gz9+\n/JUrV9BbqpYhqq1a50ilUj6f/0Zn1Lq6uoCAAHSOkZGRj49PbGxsS0uLBl8hNjYWzyx4eXmhnr0N\nSqVSIpFgu00AsLGxEYlENTU1mZmZgYGBKOBVq1ZpEICasOyPxQq3bt2aNm2a6sCroKCAoqjm5ubw\n8HB8325jY3P48OHX9V9oD0R8MtoDsZM/M6VSGRoaqrqS1tLSks/n37lzR82wq6ursaMz2ljqjX/V\nbTpBc3NzoVBYWVmZm5sbGRlJi9nO6+iJwkJIJJJhw4bhDkUoFNbV1VEUJZPJli9fjhXQoYmIRCLB\noxnUvKk5Iv7xxx/b55VMnz79jfdriYmJdi92mXNzc1NfjhRFpaamzp8/H3eC/fv337lz5ytnZGVR\nCxZQ/v7UvHlUp3s4qk/PFRZFUY2NjaGhofhK83g8bGSakZExffp0W1vbBw8eqH4kJydn9uzZqq3d\n77//3qVKc3Nz28whr1mzpvOPpKamIln06tXrs88+0+zu9c6dO3/729/wMODlDEttLTVuHIVGfo8f\nU+7uVNcNodvTo4WFKCkpUXWO9PT07NAptLKyUiAQYPtdZ2fnc+fOaVZjZWXle++9hzvEN86iZWdn\nm5mZOTk5dd/C9OHDhwKBYPfu3S8PMbPJORHWc9LS0lTN5YOCgrCTe2tra1RUFH7Ka2lpKRaLu2Mw\nSVGUXC4XCoUcDicyMvKVN17TK9XX13ezxtcSEUFFRLx8eewY9fnn3S+VCOslSqUyOjp68ODBSEB9\n+/YViUTnzp3D0/TGxsZ8Pp/GMa9EInnl3pCZXukNMLPJORFWW2prazt00vL19b1//z6zdTPTK70B\nZjY5Jwv92mJubh4eHn7v3j08CWlvb//zzz8nJyerPn1jBKkUVDfzcXCA0lJmawSmNjnXtj+WvjBq\n1CiJRPKf//znzp07//73v/FTXmbh8eDmzZcvS0vhxb6vzOLhARIJvUVyKJbW6xA6oLYWZswAiQSG\nDIEnT2DOHEhIoKX90D6kxdIlcK9kZAStrXT1SqxAWiwCI5DBO4ERiLAIjECERWAEIiwCIxBhERiB\nCIvACERYBEYgwiIwAhEWgRGIsAiMQIRFYAQiLAIjEGERGIEIi8AIRFgERiDCIjACERaBEYiwCIxA\nhEVghP8HHO3qr/GCarUAAAAASUVORK5CYII=\n", 221 | "text/html": [ 222 | "\"\"" 223 | ], 224 | "text/plain": [ 225 | "\"\"" 226 | ] 227 | }, 228 | "execution_count": 8, 229 | "metadata": {}, 230 | "output_type": "execute_result" 231 | } 232 | ], 233 | "source": [ 234 | "heroin" 235 | ] 236 | }, 237 | { 238 | "cell_type": "markdown", 239 | "metadata": {}, 240 | "source": [ 241 | "Heroin" 242 | ] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": 9, 247 | "metadata": {}, 248 | "outputs": [ 249 | { 250 | "data": { 251 | "image/png": "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\n", 252 | "text/html": [ 253 | "\"\"" 254 | ], 255 | "text/plain": [ 256 | "\"\"" 257 | ] 258 | }, 259 | "execution_count": 9, 260 | "metadata": {}, 261 | "output_type": "execute_result" 262 | } 263 | ], 264 | "source": [ 265 | "idx_most = similar_mols[0][0] \n", 266 | "molecules[idx_most]" 267 | ] 268 | }, 269 | { 270 | "cell_type": "markdown", 271 | "metadata": {}, 272 | "source": [ 273 | "The most similar molecule" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": 10, 279 | "metadata": {}, 280 | "outputs": [ 281 | { 282 | "data": { 283 | "image/png": "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\nTkSuQmCC\n", 284 | "text/html": [ 285 | "\"\"" 286 | ], 287 | "text/plain": [ 288 | "\"\"" 289 | ] 290 | }, 291 | "execution_count": 10, 292 | "metadata": {}, 293 | "output_type": "execute_result" 294 | } 295 | ], 296 | "source": [ 297 | "idx_least = similar_mols[-1][0] \n", 298 | "molecules[idx_least]" 299 | ] 300 | }, 301 | { 302 | "cell_type": "markdown", 303 | "metadata": {}, 304 | "source": [ 305 | "The least similar molecule" 306 | ] 307 | }, 308 | { 309 | "cell_type": "markdown", 310 | "metadata": {}, 311 | "source": [ 312 | "Similarity between these molecules:" 313 | ] 314 | }, 315 | { 316 | "cell_type": "code", 317 | "execution_count": 11, 318 | "metadata": {}, 319 | "outputs": [ 320 | { 321 | "data": { 322 | "text/plain": [ 323 | "0.13678393398437561" 324 | ] 325 | }, 326 | "execution_count": 11, 327 | "metadata": {}, 328 | "output_type": "execute_result" 329 | } 330 | ], 331 | "source": [ 332 | "usr_most = usr(molecules[idx_most])\n", 333 | "usr_least = usr(molecules[idx_least])\n", 334 | "usr_similarity(usr_most, usr_least)" 335 | ] 336 | } 337 | ], 338 | "metadata": { 339 | "kernelspec": { 340 | "display_name": "Python 3", 341 | "language": "python", 342 | "name": "python3" 343 | }, 344 | "language_info": { 345 | "codemirror_mode": { 346 | "name": "ipython", 347 | "version": 3 348 | }, 349 | "file_extension": ".py", 350 | "mimetype": "text/x-python", 351 | "name": "python", 352 | "nbconvert_exporter": "python", 353 | "pygments_lexer": "ipython3", 354 | "version": "3.6.1" 355 | } 356 | }, 357 | "nbformat": 4, 358 | "nbformat_minor": 2 359 | } 360 | -------------------------------------------------------------------------------- /environment.yml: -------------------------------------------------------------------------------- 1 | channels: 2 | - oddt 3 | - rdkit 4 | - openbabel 5 | - defaults 6 | dependencies: 7 | - oddt 8 | - rdkit 9 | - openbabel 10 | # additional dependencies 11 | - matplotlib 12 | - scikit-image 13 | -------------------------------------------------------------------------------- /xiap/crystal_ligand.sdf: -------------------------------------------------------------------------------- 1 | 9JZ_1_3HL5 2 | RDKit 3D 3 | 4 | 37 40 0 0 0 0 0 0 0 0999 V2000 5 | 7.2650 7.7770 -19.4560 C 0 0 0 0 0 0 0 0 0 0 0 0 6 | 8.4050 16.8550 -18.1220 C 0 0 0 0 0 0 0 0 0 0 0 0 7 | 7.9220 18.8070 -21.3610 C 0 0 0 0 0 0 0 0 0 0 0 0 8 | 13.9600 8.2810 -22.9420 C 0 0 0 0 0 0 0 0 0 0 0 0 9 | 13.8620 8.7140 -21.6220 C 0 0 0 0 0 0 0 0 0 0 0 0 10 | 8.3790 8.9380 -25.9920 C 0 0 0 0 0 0 0 0 0 0 0 0 11 | 12.8420 8.3280 -23.7700 C 0 0 0 0 0 0 0 0 0 0 0 0 12 | 12.6520 9.2010 -21.1370 C 0 0 0 0 0 0 0 0 0 0 0 0 13 | 8.4630 9.8620 -24.9520 C 0 0 0 0 0 0 0 0 0 0 0 0 14 | 9.3760 7.9750 -26.1190 C 0 0 0 0 0 0 0 0 0 0 0 0 15 | 9.9800 14.4840 -25.0840 C 0 0 0 0 0 0 0 0 0 0 0 0 16 | 8.4630 14.3590 -24.9150 C 0 0 0 0 0 0 0 0 0 0 0 0 17 | 10.7280 13.5190 -24.1600 C 0 0 0 0 0 0 0 0 0 0 0 0 18 | 8.0540 14.5740 -23.4590 C 0 0 0 0 0 0 0 0 0 0 0 0 19 | 10.2850 13.6620 -22.6990 C 0 0 0 0 0 0 0 0 0 0 0 0 20 | 6.2930 9.7010 -20.8050 C 0 0 0 0 0 0 0 0 0 0 0 0 21 | 6.8450 11.0300 -21.2960 C 0 0 0 0 0 0 0 0 0 0 0 0 22 | 11.6220 8.8150 -23.2890 C 0 0 0 0 0 0 0 0 0 0 0 0 23 | 11.5270 9.2650 -21.9680 C 0 0 0 0 0 0 0 0 0 0 0 0 24 | 10.4640 8.8560 -24.2310 C 0 0 0 0 0 0 0 0 0 0 0 0 25 | 7.5310 8.9340 -20.4120 C 0 0 1 0 0 0 0 0 0 0 0 0 26 | 8.7570 13.5560 -22.5550 C 0 0 0 0 0 0 0 0 0 0 0 0 27 | 8.4990 9.9800 -19.8640 C 0 0 1 0 0 0 0 0 0 0 0 0 28 | 8.4430 17.0640 -19.6330 C 0 0 1 0 0 0 0 0 0 0 0 0 29 | 8.2410 13.5790 -21.1010 C 0 0 1 0 0 0 0 0 0 0 0 0 30 | 9.8670 9.4940 -20.2350 C 0 0 0 0 0 0 0 0 0 0 0 0 31 | 7.8500 15.8680 -20.3170 C 0 0 0 0 0 0 0 0 0 0 0 0 32 | 8.7630 12.3680 -20.3720 C 0 0 0 0 0 0 0 0 0 0 0 0 33 | 9.5010 9.8070 -24.1000 N 0 0 0 0 0 0 0 0 0 0 0 0 34 | 10.3960 7.9550 -25.2470 N 0 0 0 0 0 0 0 0 0 0 0 0 35 | 7.7540 18.2890 -20.0140 N 0 0 0 0 0 0 0 0 0 0 0 0 36 | 10.2880 9.7190 -21.4890 N 0 0 0 0 0 0 0 0 0 0 0 0 37 | 8.6620 14.8220 -20.4610 N 0 0 0 0 0 0 0 0 0 0 0 0 38 | 8.0770 11.2240 -20.5180 N 0 0 0 0 0 0 0 0 0 0 0 0 39 | 10.5250 8.9130 -19.3870 O 0 0 0 0 0 0 0 0 0 0 0 0 40 | 6.6960 15.9000 -20.7290 O 0 0 0 0 0 0 0 0 0 0 0 0 41 | 9.7840 12.4600 -19.7000 O 0 0 0 0 0 0 0 0 0 0 0 0 42 | 21 1 1 1 43 | 24 2 1 1 44 | 3 31 1 0 45 | 4 5 2 0 46 | 4 7 1 0 47 | 5 8 1 0 48 | 6 9 2 0 49 | 6 10 1 0 50 | 7 18 2 0 51 | 8 19 2 0 52 | 9 29 1 0 53 | 10 30 2 0 54 | 11 12 1 0 55 | 11 13 1 0 56 | 12 14 1 0 57 | 13 15 1 0 58 | 14 22 1 0 59 | 15 22 1 0 60 | 16 17 1 0 61 | 16 21 1 0 62 | 17 34 1 0 63 | 18 19 1 0 64 | 18 20 1 0 65 | 19 32 1 0 66 | 20 29 2 0 67 | 20 30 1 0 68 | 21 23 1 0 69 | 22 25 1 0 70 | 23 26 1 6 71 | 23 34 1 0 72 | 24 27 1 0 73 | 24 31 1 0 74 | 25 28 1 0 75 | 25 33 1 1 76 | 26 32 1 0 77 | 26 35 2 0 78 | 27 33 1 0 79 | 27 36 2 0 80 | 28 34 1 0 81 | 28 37 2 0 82 | M CHG 1 31 1 83 | M END 84 | > <_TriposChargeType> (1) 85 | USER_CHARGES 86 | 87 | $$$$ 88 | --------------------------------------------------------------------------------