{ "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": [ "## Ligand Network Setup" ] }, { "cell_type": "code", "execution_count": 1, "id": "aa30a8bc-bdf0-4382-98bd-2f33e703eb2d", "metadata": { "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/atravitz/micromamba/envs/openfe_env/lib/python3.13/site-packages/openmoltools/utils.py:9: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n", " from pkg_resources import resource_filename\n" ] } ], "source": [ "%matplotlib inline\n", "\n", "import rdkit.Chem\n", "\n", "import openfe" ] }, { "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": "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": "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": 3, "id": "7615197d-8b60-47de-8275-e67a1a454d91", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/atravitz/software/gufe/gufe/components/smallmoleculecomponent.py:286: UserWarning: The atom hybridization data was not found and has been set to unspecified. This can be fixed by recreating the SmallMoleculeComponent from the rdkit molecule after running sanitization.\n", " warnings.warn(\n" ] } ], "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": 4, "id": "96de1e7a-baad-4c28-9668-72670d1d6882", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 4, "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": 5, "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": 6, "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": 6, "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": 7, "id": "7beba61c-4500-411d-a947-6beec171accf", "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": [ "from openfe.utils.visualization_3D import view_components_3d\n", "\n", "view_components_3d(ligand_network.nodes)" ] } ], "metadata": { "kernelspec": { "display_name": "openfe_env", "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.8" }, "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 }