{ "cells": [ { "cell_type": "markdown", "id": "a2f0ee60-1060-4ca9-b0ff-529348dbc0e6", "metadata": { "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "# Visualizing Ligand Networks" ] }, { "cell_type": "markdown", "id": "1a979dae-5b75-4246-adfc-76a29b51822d", "metadata": {}, "source": [ "When constructing a ligand network, it is very helpful to visualize it, both to quickly check that it makes sense and to allow rapid iteration of settings." ] }, { "cell_type": "markdown", "id": "d4fe6c50-3971-4b9d-bc2f-71b5deb58fd4", "metadata": { "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Setup" ] }, { "cell_type": "code", "execution_count": 1, "id": "aa30a8bc-bdf0-4382-98bd-2f33e703eb2d", "metadata": { "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "import rdkit.Chem\n", "\n", "import openfe" ] }, { "cell_type": "markdown", "id": "0d405db9-1ab5-43e1-aa51-89b5bdb283d7", "metadata": {}, "source": [ "This cookbook assumes you've already loaded a `LigandNetwork`. For more information, see [Generate a Ligand Network Automatically]:\n", "\n", "[Generate a Ligand Network Automatically]: https://docs.openfree.energy/en/stable/cookbook/generate_ligand_network.html" ] }, { "cell_type": "code", "execution_count": 2, "id": "594364f7-00ab-4497-bf5e-74cb497802e7", "metadata": { "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "ligand_network = openfe.ligand_network_planning.generate_minimal_spanning_network(\n", " ligands=[\n", " openfe.SmallMoleculeComponent(mol) \n", " for mol in rdkit.Chem.SDMolSupplier(\n", " \"assets/somebenzenes.sdf\", \n", " removeHs=False,\n", " )\n", " ],\n", " mappers=[openfe.setup.LomapAtomMapper()],\n", " scorer=openfe.lomap_scorers.default_lomap_score,\n", ")" ] }, { "cell_type": "markdown", "id": "61b5687d-52f2-49aa-a71c-dd038bfa0ae1", "metadata": {}, "source": [ "## Visualize Network Topology" ] }, { "cell_type": "markdown", "id": "d106bd37-b21b-4c13-8937-21a2286d2fe1", "metadata": {}, "source": [ "The topology of the network describes how the ligands are transformed into each other. The network itself forms a graph that can be visualized with the `plot_atommapping_network` function:" ] }, { "cell_type": "code", "execution_count": 3, "id": "96de1e7a-baad-4c28-9668-72670d1d6882", "metadata": {}, "outputs": [ { "data": { "image/png": "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gAAAZLIZM2bo2rVrqlKlipo3b251HLggCiAAAJnoypUrmjVrliRG/2AdCiAAAJlo1qxZCgsL00MPPaTAwECr48BFUQABAMgkoaGhev/99yWZ0T83N34Nwxr8lwcAQCaZPXu2/v33X1WsWFGtW7e2Og5cGAUQAIBMEBYWpunTp0uSxowZw+gfLMV/fQAAZIK5c+fqypUrKl++vNq2bWt1HLg4CiAAABns2rVrmjZtmiRp9OjRcnd3tzgRXB0FEACADPbBBx/o8uXLKlOmjNq3b291HIACCABARrp+/bree+89SWb0z8PDw+JEAAUQAIAMNX/+fF26dEmlSpXSCy+8YHUcQBIFEACADBMeHq4pU6ZIkkaNGsXoH5wGBRAAgAyyYMEChYSE6IEHHlDnzp2tjgPcRgEEACADREREaPLkyZKkN954Q56enhYnAuJQAAEAyAAff/yxLl68qBIlSqhr165WxwESoAACAJDObty4oXfffVeSNHLkSHl5eVmcCEiIAggAQDr75JNPdP78ed13333q3r271XGAu1AAAQBIRzdv3tSkSZMkSa+//rpy5MhhcSLgbhRAAADS0eLFi3X27FkVLVpUL730ktVxgERRAAEASCeRkZGaOHGiJGnEiBHKmTOnxYmAxFEAAQBIJ0uXLtXp06dVpEgR9erVy+o4QJIogAAApINbt27dHv177bXXlCtXLosTAUmjAAIAkA6WL1+ukydPqlChQnr55ZetjgMkiwIIAMA9ioqK0oQJEyRJw4cPl7e3t8WJgORRAAEAuEcrV67U77//rgIFCqhv375WxwFSRAEEAOAeREdHa/z48ZKkYcOGycfHx+JEQMoogAAA3INVq1bpxIkTyp8/v1555RWr4wAOoQACAJBG8Uf/hg4dKl9fX4sTAY6hAAIAkEafffaZjh07prx586p///5WxwEcRgEEACANYmJiNG7cOEnSkCFD5OfnZ3EiwHEUQAAA0mDdunU6evSo/P39NXDgQKvjAKlCAQQAIJXij/4NHjxY/v7+FicCUocCCABAKgUFBenIkSPy8/PToEGDrI4DpBoFEACAVLDb7Ro7dqwkaeDAgcqbN6/FiYDUowACAJAKX3zxhX7++Wf5+vpq8ODBVscB0oQCCACAg+x2u9555x1J0oABA5Q/f36LEwFpQwEEAMBBmzZt0qFDh+Tj46OhQ4da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w4ctTgQ4L6cugJcvm1G50aPNodkKFaRUnM0kSWXLSkOGSFu3mhPALlpkHq9YUfrPfxI+97vvzPMTm05Svbp08aKZa1i6dMJbgQL3nhMAkDrvvvuuGjVqpPDwcAUGBury5ctWRwKcklMXwLx5zeHVBQvMnL4dO8wh3LSKiDCXkdq1S/rzT2nPHmn/flMsJbPaNzhYGjfOLOJYssRcSmrYsMT317ChWW0cGCht2WJWJX/3nSmsBw6kPScAIG08PDy0atUqPfjggzp58qQ6dOiQYVe0AbIypy6Abm7SqlVmrt1DD5lRu6lT074/d3czqti1qxnVa9dOevZZs3BEMiN6a9aY93zoIbPieOzYpC/3ZbOZ1b9160o9eph9duhgimDhwmnPCQBIu3z58ikoKEje3t7avn27Xn/9dasjAU4n218KDgDgmtauXau2bdtKkpYvX65OnTpZnAjIWKnpa049AggAQFq1adNGo0aNkiT17NlTBw8etDgR4DwogACAbOudd95Rs2bNdOPGDbVs2VIhISFWRwKcAgUQAJBtubu7a8WKFSpbtqzOnDmjtm3b6tatW1bHAixHAQQAZGv+/v7auHGjcufOrd27d2vIkCFWRwIsRwEEAGR75cuX14oVKyRJc+fO1cKFCy1OBFiLAggAcAnPP/+8xo4dK0nq16+f9u7da3EiwDoUQACAyxg1apRatWqlyMhItW7dWufPn7c6EmAJCiAAwGW4ublp8eLFqlSpki5cuKDWrVvr5s2bVscCMh0FEADgUnLnzq2NGzcqT5482rdvn/r16ycHrokAZCsUQACAyylVqpRWrVolNzc3ffLJJ5o3b57VkYBMRQEEALikxo0b691335UkDRo0SLt377Y4EZB5KIAAAJc1bNgwdezYUVFRUWrTpo1Onz5tdSQgU1AAAQAuy2az6eOPP1bVqlV16dIltWzZUhEREVbHAjIcBRAA4NK8vb0VFBSkAgUK6NChQ+rVqxeLQpDtUQABAC7v/vvv12effXb72sEzZsywOhKQoSiAAABIqlev3u3iN3z4cG3bts3iREDGoQACAPA//fv3V/fu3RUTE6P27dvrjz/+sDoSkCEogAAA/I/NZtMHH3ygmjVr6sqVKwoMDNS1a9esjgWkOwogAADx5MyZU+vXr1eRIkV05MgRde/enUUhyHYogAAA3KFYsWJat26d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", "text/plain": [ "
" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from openfe.utils.atommapping_network_plotting import plot_atommapping_network\n", "\n", "plot_atommapping_network(ligand_network)" ] }, { "cell_type": "markdown", "id": "62f9222a-ea8a-4243-9399-bb0009425b9e", "metadata": {}, "source": [ "## Visualizing Edges" ] }, { "cell_type": "markdown", "id": "672a53a4-da9c-44ba-beb6-af7ef53fe97a", "metadata": {}, "source": [ "The edges of the network each represent a single transformation. They include not only the identities of the two molecules being mutated between, but also the complete mapping between atoms in those molecules. " ] }, { "cell_type": "markdown", "id": "fcf76c63-6c66-442b-99d2-71de869e077f", "metadata": {}, "source": [ "Displaying an edge in the notebook will provide a 2D description of the atom mapping:" ] }, { "cell_type": "code", "execution_count": 4, "id": "1d9d7296-3510-44fa-98ad-d7d7e4ce36ea", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "benzene_to_toluene = [\n", " edge for edge in ligand_network.edges \n", " if {edge.componentA.name, edge.componentB.name} == {\"benzene\", \"toluene\"}\n", "][0]\n", "\n", "benzene_to_toluene" ] }, { "cell_type": "markdown", "id": "a7f293b4-2314-442c-a2c8-f2960b3bc3bb", "metadata": {}, "source": [ "Atoms created or destroyed over the course of the transformation are highlighted in red, while atoms that are transformed are highlighted in blue." ] }, { "cell_type": "markdown", "id": "0a351597-f88c-4879-90c9-bed39c6c049e", "metadata": {}, "source": [ "An edge can also be visualized in 3D with the `view_mapping_3d` function: " ] }, { "cell_type": "code", "execution_count": 5, "id": "ac76190d-25fb-4c74-8213-4e0adb41b8f6", "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from openfe.utils.visualization_3D import view_mapping_3d\n", "\n", "view_mapping_3d(benzene_to_toluene)" ] }, { "cell_type": "markdown", "id": "45153033-5add-4821-9b5c-06a9d4ecd6c6", "metadata": {}, "source": [ "In the middle, both molecules are overlaid to demonstrate their 3D alignment. Each molecule is also depicted on its own on either side, with colored spheres indicating atoms that are mutated into each other. For instance, one of the benzene's hydrogen atoms is highlighted in the same color as the toluene's methyl carbon, indicating that this hydrogen mutates into the methyl carbon. Atoms without spheres vanish over the transformation, rather than being mutated into another atom." ] }, { "cell_type": "markdown", "id": "0f12e51e-f9a9-44e1-a90f-80dea5989ab6", "metadata": {}, "source": [ "## Visualizing Ligand Overlap" ] }, { "cell_type": "markdown", "id": "673b85c6-b1d8-46a7-8efc-237f22003010", "metadata": {}, "source": [ "Sometimes it is helpful to visualize all the ligands together, for instance to inspect their alignment. This can be done with the `view_components_3d` function." ] }, { "cell_type": "code", "execution_count": 6, "id": "7beba61c-4500-411d-a947-6beec171accf", "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from openfe.utils.visualization_3D import view_components_3d\n", "\n", "view_components_3d(ligand_network.nodes)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.6" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "03f15d4d50144b568fe152f3adc6ce91": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_ad0801af5abf426fa62df9f468027059", "max": 21, "style": "IPY_MODEL_7cdbc422923b4949826ca526db3e66ca", "value": 21 } }, "18c708340e8244e0b54a42d0220a2de8": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_ac1ce9b1698c4d70a53be05fc968b129", "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] } }, "1b39600cd5ea44779c6c12a990b00700": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "33bac88400ff46a38a7f88a9e78b0986": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "3bd2dcb507f54462acf546d1d07f33ef": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "CheckboxStyleModel", "state": { "description_width": "" } }, "3dc198d047ff49b2b94c0ca00e0764b0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_1b39600cd5ea44779c6c12a990b00700", "style": "IPY_MODEL_d3f3f6f236074ca2864ddc82a63508d6", "value": " 21/21 [00:00<00:00, 87.19it/s]" } }, "41148a48fcaa4fe9981b346fe24ff07d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "CheckboxStyleModel", "state": { "description_width": "" } }, "63c7174727a74285aa4062710c12cac5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "benzene -> benzonitrile", "phenol -> anisole", "benzene -> toluene", "benzaldehyde -> styrene", "benzene -> benzaldehyde", "toluene -> phenol" ], "description": "mapping", "index": 0, "layout": "IPY_MODEL_88a44ec79144449680486f5dcd894a13", "style": "IPY_MODEL_fbe6aa513ecd45b6989fd84ffdd8ec4a" } }, "6828523d6ae84a1a9ad0e3847309396f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "CheckboxModel", "state": { "description": "spheres", "disabled": false, "layout": "IPY_MODEL_f0d3a159d0f243fbaf0d7e640049434d", "style": "IPY_MODEL_41148a48fcaa4fe9981b346fe24ff07d", "value": true } }, "6b7180b6ee9d421384c09afd927a4580": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "71a66b01cd45403d9ff73722f2cf9732": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "75ff673da66b49e999155c6242f8b459": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_79d6b54ce8cf4531976311837c0bb236", "IPY_MODEL_03f15d4d50144b568fe152f3adc6ce91", "IPY_MODEL_3dc198d047ff49b2b94c0ca00e0764b0" ], "layout": "IPY_MODEL_71a66b01cd45403d9ff73722f2cf9732" } }, "79d6b54ce8cf4531976311837c0bb236": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_6b7180b6ee9d421384c09afd927a4580", "style": "IPY_MODEL_d306a093913b4fdeab1342510371a25c", "value": "100%" } }, "7cdbc422923b4949826ca526db3e66ca": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "88a44ec79144449680486f5dcd894a13": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "ac1ce9b1698c4d70a53be05fc968b129": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "ad0801af5abf426fa62df9f468027059": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "d306a093913b4fdeab1342510371a25c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "d3f3f6f236074ca2864ddc82a63508d6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "da2d8b94c11d4f1b829d860752f93a24": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_63c7174727a74285aa4062710c12cac5", "IPY_MODEL_6828523d6ae84a1a9ad0e3847309396f", "IPY_MODEL_f0213e6cf1604bcbbddac1dada35dcd1", "IPY_MODEL_18c708340e8244e0b54a42d0220a2de8" ], "layout": "IPY_MODEL_e6e16f60d53e4e7ea2b21795c65d4162" } }, "e6e16f60d53e4e7ea2b21795c65d4162": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "f0213e6cf1604bcbbddac1dada35dcd1": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "CheckboxModel", "state": { "description": "show_atomIDs", "disabled": false, "layout": "IPY_MODEL_33bac88400ff46a38a7f88a9e78b0986", "style": "IPY_MODEL_3bd2dcb507f54462acf546d1d07f33ef", "value": true } }, "f0d3a159d0f243fbaf0d7e640049434d": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "fbe6aa513ecd45b6989fd84ffdd8ec4a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }