{ "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": [ "## Generate or load a Ligand Network" ] }, { "cell_type": "markdown", "id": "0d405db9-1ab5-43e1-aa51-89b5bdb283d7", "metadata": {}, "source": [ "You will to create a `LigandNetwork` for your system of interest. For more information, see [Generating a Ligand Network](https://docs.openfree.energy/en/stable/cookbook/generate_ligand_network.html)." ] }, { "cell_type": "markdown", "id": "c07d0639-ebd0-4a9b-ae15-f902edff2850", "metadata": {}, "source": [ "Briefly, to do this you can create a new network. Here we demonstrate how to do this for a minimum spanning network for a series of benzene modifications:" ] }, { "cell_type": "code", "execution_count": 2, "id": "aa30a8bc-bdf0-4382-98bd-2f33e703eb2d", "metadata": { "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "%matplotlib inline\n", "from rdkit import Chem\n", "import openfe\n", "\n", "# load the ligands\n", "supplier = Chem.SDMolSupplier(\"assets/somebenzenes.sdf\", removeHs=False)\n", "ligands = [openfe.SmallMoleculeComponent(mol) for mol in supplier]\n", "\n", "# generate the network\n", "ligand_network = openfe.ligand_network_planning.generate_minimal_spanning_network(\n", " ligands=ligands,\n", " mappers=[openfe.setup.KartografAtomMapper(map_hydrogens_on_hydrogens_only=True)],\n", " scorer=openfe.lomap_scorers.default_lomap_score,\n", ")" ] }, { "cell_type": "markdown", "id": "5f25c5b2-e2d6-4686-a3c8-bca78b1cd5af", "metadata": {}, "source": [ "Alternatively, you can load a ligand network that you have previously written to file (as a `.graphml`). Here we load the same benzene modification network under `assets/benzenes/ligand_network.graphml`:" ] }, { "cell_type": "code", "execution_count": 4, "id": "7615197d-8b60-47de-8275-e67a1a454d91", "metadata": {}, "outputs": [], "source": [ "with open(\"assets/benzenes/ligand_network.graphml\") as f:\n", " graphml = f.read()\n", "\n", "ligand_network = openfe.LigandNetwork.from_graphml(graphml)" ] }, { "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": 5, "id": "96de1e7a-baad-4c28-9668-72670d1d6882", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 5, "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": 6, "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:" ] }, { "cell_type": "code", "execution_count": 7, "id": "ac76190d-25fb-4c74-8213-4e0adb41b8f6", "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

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

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "benzene_to_toluene.view_3d()" ] }, { "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": 10, "id": "7beba61c-4500-411d-a947-6beec171accf", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/atravitz/micromamba/envs/openfe-notebooks/lib/python3.13/site-packages/openfe/utils/visualization_3D.py:140: DeprecationWarning: Use gufe.LigandAtomMapping.view_3d() instead.\n", " warnings.warn(\"Use gufe.LigandAtomMapping.view_3d() instead.\", DeprecationWarning)\n" ] }, { "data": { "application/3dmoljs_load.v0": "
\n

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

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

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from openfe.utils.visualization_3D import view_components_3d\n", "\n", "view_components_3d(ligand_network.nodes)" ] }, { "cell_type": "code", "execution_count": null, "id": "c8bd3e3f-06f5-44bb-b158-2f8b963f6cd9", "metadata": {}, "outputs": [], "source": [] } ], "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.13.11" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "0c2cba877a364f27ac1d6c656b93f196": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "0cfcf01e6ce4478bb9a55882a14dfd3f": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "0d93f49265534e17b8dcedd7616a5c8d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "113d72e014ab4472aa85c0dca2606acf": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_3d8efd16695a495f8bf7a0fba53f0a77", "style": "IPY_MODEL_4d73b055fe2c41328c0a11315dc28328", "value": "100%" } }, "3d8efd16695a495f8bf7a0fba53f0a77": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "4d73b055fe2c41328c0a11315dc28328": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", "state": { "description_width": "", "font_size": null, "text_color": null } }, "56fe25f092ce482cb2f4b8451f7a74c3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, "62a30ad106cc48298cfd61f7a8650b9c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { "layout": "IPY_MODEL_0c2cba877a364f27ac1d6c656b93f196", "style": "IPY_MODEL_0d93f49265534e17b8dcedd7616a5c8d", "value": " 21/21 [00:00<00:00, 203.73it/s]" } }, "c7b006db880344bfb5fc63abd10c08e3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", "layout": "IPY_MODEL_0cfcf01e6ce4478bb9a55882a14dfd3f", "max": 21, "style": "IPY_MODEL_56fe25f092ce482cb2f4b8451f7a74c3", "value": 21 } }, "d57c25c1d7454808b5d221d8d2d94772": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, "ec52d6042daa4d708dfad762225ff5b2": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ "IPY_MODEL_113d72e014ab4472aa85c0dca2606acf", "IPY_MODEL_c7b006db880344bfb5fc63abd10c08e3", "IPY_MODEL_62a30ad106cc48298cfd61f7a8650b9c" ], "layout": "IPY_MODEL_d57c25c1d7454808b5d221d8d2d94772" } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }