diff --git a/cookbook/generate_ligand_network.ipynb b/cookbook/generate_ligand_network.ipynb index f0e4124..8580a05 100644 --- a/cookbook/generate_ligand_network.ipynb +++ b/cookbook/generate_ligand_network.ipynb @@ -176,6 +176,13 @@ " scorer=scorer,\n", ")\n", "\n", + "# # Choose the lomap network that adds some closed ligand cycles\n", + "# ligand_network = openfe.ligand_network_planning.generate_lomap_network(\n", + "# molecules=ligands,\n", + "# mappers=mappers,\n", + "# scorer=scorer,\n", + "# )\n", + "\n", "# # Connect each ligand to a central ligand\n", "# ligand_network = openfe.ligand_network_planning.generate_radial_network(\n", "# ligands=ligands[1:],\n", @@ -211,7 +218,7 @@ "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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", + "image/png": "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6tatm2JjY9WhQwdt27bN6lhOjQIIAADyPHd3dy1fvlxBQUGKiYlRYGCg9uzZY3Usp0UBBAAA+YKHh4c+/PBDtW7dWteuXVObNm20f/9+q2M5JQogAADINwoUKKB169YpICBAV65cUatWrfTdd99ZHcvpUAABAEC+UqhQIW3cuFH/93//p4iICLVo0UJHjhyxOpZToQACAIB8x9vbW//+97/14IMP6uLFiwoICNAvv/xidSynQQEEAAD5kq+vr7Zs2aLatWvr7NmzCggI0IkTJ6yO5RQogAAAIN8qXry4tm/frmrVqunUqVNq1qyZTp8+bXUsy1EAAQBAvla6dGnt3LlTFStW1B9//KGAgACdPXvW6liWogACAIB8r2zZstq5c6fKlSunY8eO6bHHHtPFixetjmUZCiAAAHAJd999tz7//HP5+/vrxx9/VIsWLXT58mWrY1mCAggAAFxGpUqVtGPHDpUsWVLfffedWrdurStXrlgdK9dRAAEAgEupUaOGtm/frqJFi2rfvn168sknde3aNatj5SoKIAAAcDn333+/tm7dqiJFimj37t1q3769bty4YXWsXEMBBAAALql+/fr697//rcKFC2vLli3q3Lmzbt68aXWsXEEBBAAALqtRo0batGmTChYsqNDQUPXo0UNxcXFWx8pxFEAAAODSmjdvrnXr1snT01MhISHq16+f4uPjrY6VoyiAAADA5T3xxBNavXq13NzctHz5cg0dOlR2u93qWDmGAggAACApKChIwcHBstlsWrRokUaPHp1vSyAFEAAA4H+6d++ud955R5I0e/Zsvfrqq9YGygA3N8drHQUQAAAgif79+2vevHmSpMmTJ2v69OkWJ3KMj4+Pw8+lAAIAANxi2LBh/xS/l156SfPnz7c4UfaiAAIAAKRg7NixmjhxoiTp+eef13vvvWdxouxDAQQAAEjFq6++qlGjRkmSBgwYoA8++MDiRNmDAggAAJAKm82mN954Q4MGDZLdblfPnj21du1aq2NlGQUQAAAgDTabTQsWLFDv3r0VHx+vLl26aPPmzVbHyhIKIAAAQDrc3Nz03nvvqXPnzoqNjVVQUJC2b99udaxMowACAAA4wN3dXStWrFBgYKBiYmLUtm1bffHFF1bHyhQKIAAAgIMSrhfcqlUrXbt2TU888YR+/PHHTO2rVy8pMDBb4zmMAggAAJABBQsW1Pr169W0aVNduXJFQ4YMsTRPTEzGX0MBBAAAyKDChQtr06ZNatiwoaKiotJ87tq1Uq1aUuHCUokSUvPm0ujRUnCwtHGjZLOZ2+7dUrNm0q198uJFqWBB6fPPzf0KFaQpU8wIop+f1L+/efyrrxzPTwEEAADIBB8fH3322WeqXr16qs8JC5O6dJH69JGOHjUlr3176ZVXpI4dpVatzHPCwqSHH5b69ZM+/FC6cSNxH6tWSWXLSk2bJj42c6ZUs6Z08KA0YYL0449Sy5aOZ6cAAgAAZJKfn5/eeuutVLeHhUmxsab0VahgRgIHDZJ8fMyIYMGCUpky5laggBQUZEYDN25M3MeyZWa0z2ZLfKxZM2nUKKlSJXObOVPq2tXx3BRAAACALChatGiq2+67TwoIMMWvQwfpvfekS5dS31fBglL37tLSpeb+4cPS99+bApjUAw8kv3/woLR8ueOZKYAAAAA5xN1d2r5d+uwzqUYNacECqWpV6Y8/Un9Nv37mNadOmSIYECDdfXfy53h7J78fHy8NGOB4LgogAABADrLZpEcekSZNkg4dMod6N2wwf8bF3f78WrXMCN9775n5gH36pP8edetKR444nsnD8acCAAAgI77+Wtq5U2rRQipd2tw/f16qXl26fl3aulU6dsysDvbzkzw9zev69TOrgb28pHbt0n+fsWOlBg0cz8UIIAAAQA7x9ZW++EJq3VqqUkUaP16aPVt6/HFz+paqVc1oX6lS0t69ia/r0kXy8DALOwoVSv99ateW9uxxPJfNbrfb03tSZGSk/Pz8FBERIV9fX8f3DgAAgAw7edKsGv7mG3N411E2m82hvsYhYAAAACdx86Y5dcyLL5pDuhkpfxnBIWAAAAAnsXevWfF78KC0eHHOvQ8jgAAAAE6iSRMp/cl5WccIIAAAgIuhAAIAALgYCiAAAICLoQACAAC4GAogAABAPnDlyhWHn0sBBAAAyAfi4+Mdfi4FEAAAwMVQAAEAAFwMBRAAAMDFUAABAABcjEOXgrP/75okkZGRORoGAAAAmZPQ0+wOXEvOoQIYFRUlSSpXrlwWYgEAACCnRUVFyc/PL83n2OwO1MT4+HidOXNGRYoUkc1my7aAAAAAyB52u11RUVEqW7as3NzSnuXnUAEEAABA/sEiEAAAABdDAQQAAHAxFEAAAAAXQwEEAABwMRRAAAAAF0MBBAAAcDEUQAAAABfz/wo/gxfZwPljAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -226,6 +233,14 @@ "\n", "plot_atommapping_network(ligand_network)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7e7cb163-6bc6-4172-9170-dc9c778cc9d6", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -244,7 +259,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.5" + "version": "3.11.8" }, "widgets": { "application/vnd.jupyter.widget-state+json": { diff --git a/cookbook/generate_lomap_network.ipynb b/cookbook/generate_lomap_network.ipynb new file mode 100644 index 0000000..07183fe --- /dev/null +++ b/cookbook/generate_lomap_network.ipynb @@ -0,0 +1,380 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "035c0099-6892-4ed2-b0d6-80b1c247c1e7", + "metadata": {}, + "source": [ + "# Planning a Ligand Network with Lomap" + ] + }, + { + "cell_type": "markdown", + "id": "5da95fa6-c9a7-48a2-9d8e-e35b3b6818f6", + "metadata": {}, + "source": [ + "A [Ligand Network] is a graph of transformations between small molecules, typically such that every small molecule can reach every other small molecule via a series of transformations. This eventually forms the graph of the free energy campaign. A `LigandNetwork` can be generated from a collection of `SmallMoleculeComponent` instances by optimising over possible networks according to some criteria; in OpenFE, this involves combining a network generating strategy with a scoring function for individual mappings.\n", + "In this cookbook we are generating a network using the network generator provided in [LOMAP].\n", + "\n", + "[Ligand Network]: https://docs.openfree.energy/en/stable/reference/api/generated/openfe.setup.LigandNetwork.html\n", + "[LOMAP]: https://github.com/OpenFreeEnergy/Lomap/tree/main" + ] + }, + { + "cell_type": "markdown", + "id": "27106bff-dbcf-49ee-b119-2c0f15305618", + "metadata": {}, + "source": [ + "## Setup" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f8f4ce1e-98e9-4c9b-98d3-aea1d21e0c12", + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "from rdkit import Chem\n", + "from openmm import unit\n", + "\n", + "import openfe" + ] + }, + { + "cell_type": "markdown", + "id": "7f1a272a-ffe7-4397-a8a6-c590d3a210bc", + "metadata": {}, + "source": [ + "This cookbook assumes you've already loaded a collection of `SmallMoleculeComponent` objects into an iterable called `ligands`. For more information, see [Loading Small Molecules]:\n", + "\n", + "[Loading Small Molecules]: https://docs.openfree.energy/en/stable/cookbook/loading_molecules.html#loading-small-molecules" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "80072b52-ded4-4b38-a5c2-72b87d483f53", + "metadata": {}, + "outputs": [], + "source": [ + "ligands = [\n", + " openfe.SmallMoleculeComponent(mol) \n", + " for mol in Chem.SDMolSupplier(\n", + " \"assets/somebenzenes.sdf\", \n", + " removeHs=False,\n", + " )\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "7096ed4e-1f5a-4df1-8566-e73fe8b81c00", + "metadata": {}, + "source": [ + "## Choose an atom mapper" + ] + }, + { + "cell_type": "markdown", + "id": "020cf05c-7bcc-4b10-9ba5-f4ded80d2d66", + "metadata": {}, + "source": [ + "An atom mapper produces mappings between two given ligands. Atom mapper classes inherit from [LigandAtomMapper]. Each atom mapper suggests one or more mappings, which can be scored seperately. As a result, multiple atom mappers can be used to generate additional mappings for network planning.\n", + "\n", + "[LigandAtomMapper]: https://docs.openfree.energy/en/stable/reference/api/generated/openfe.setup.atom_mapping.LigandAtomMapper.html" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5019c471-a173-4097-b6c8-b42bfb701e03", + "metadata": {}, + "outputs": [], + "source": [ + "mappers = [\n", + " openfe.setup.LomapAtomMapper(\n", + " time=20, # Time out if MCS algorithm takes 20 seconds\n", + " threed=True, # Use atom positions to prune symmetric mappings\n", + " max3d=1.0, # Forbid mapping between atoms more than 1.0 Å apart\n", + " element_change=True, # Allow mappings that change an atoms element\n", + " seed='', # Empty SMARTS string causes MCS search to start from scratch\n", + " shift=False, # Keep pre-aligned atom positions for 3D position checks\n", + " ),\n", + " # openfe.setup.PersesAtomMapper(\n", + " # allow_ring_breaking=True, # Propose mappings that break cyclic systems\n", + " # preserve_chirality=True, # Forbid mappings that change stereochemistry\n", + " # use_positions=True, # Use atom positions rather than MCS to choose mappings\n", + " # coordinate_tolerance=0.25 * unit.angstrom, # Forbid mappings between distant atoms\n", + " # ),\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "3e3dc22c-7e03-46be-b6bc-e88a4e9e01e8", + "metadata": {}, + "source": [ + "This approach of interchangeable mappers is possible as they all provide a common `.suggest_mappings` method,\n", + "which in turn creates a common `LigandAtomMapping` object,\n", + "allowing tooling to mix and match which mapper they use." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9337f7e1-a25e-43a1-ba1f-cace9b7f5f00", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[0;31mSignature:\u001b[0m\n", + "\u001b[0mmappers\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msuggest_mappings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mcomponentA\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mgufe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcomponents\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msmallmoleculecomponent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSmallMoleculeComponent\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mcomponentB\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mgufe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcomponents\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msmallmoleculecomponent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSmallMoleculeComponent\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterable\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mgufe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmapping\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mligandatommapping\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mLigandAtomMapping\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mDocstring:\u001b[0m\n", + "Generate one or more mappings between two small molecules\n", + "\n", + "Parameters\n", + "----------\n", + "componentA, componentB: gufe.SmallMoleculeComponent\n", + "\n", + "Returns\n", + "-------\n", + "mapping : Iterable[LigandAtomMapping]\n", + " potential mappings\n", + "\u001b[0;31mFile:\u001b[0m ~/miniconda3/envs/openfe_dev/lib/python3.11/site-packages/lomap/gufe_bindings/mapper.py\n", + "\u001b[0;31mType:\u001b[0m method" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "?mappers[0].suggest_mappings" + ] + }, + { + "cell_type": "markdown", + "id": "409a3866-a5ac-4295-b91f-3101dd646dc9", + "metadata": {}, + "source": [ + "## Choose a scoring function" + ] + }, + { + "cell_type": "markdown", + "id": "5998c002-4d39-42c0-b37f-bd0357f27fe6", + "metadata": {}, + "source": [ + "Many ligand network planners require some way to score each possible network so that the optimal network can be identified. OpenFE scores networks by the quality of the mappings between ligands - transformations that are expected to converge quickly without introducing artifacts are scored highly, and more drastic or risky alchemy is penalised. A scoring function is a function that takes an atom mapping and returns a float between 0.0 and 1.0, with higher numbers representing better maps." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "3bbf3f5b-9e29-467f-aff8-07e8dad7fd4c", + "metadata": {}, + "outputs": [], + "source": [ + "# The product of other LOMAP scorers\n", + "scorer = openfe.lomap_scorers.default_lomap_score \n", + "\n", + "# # The default PERSES scoring function\n", + "# scorer = openfe.perses_scorers.default_perses_score \n", + "\n", + "# # Or define your own scoring function\n", + "# scorer = lambda m: (\n", + "# openfe.lomap_scorers.default_lomap_score(m) \n", + "# * openfe.perses_scorers.default_perses_scorer(m)\n", + "# )" + ] + }, + { + "cell_type": "markdown", + "id": "c8c40d49-9657-4691-b6b3-d3c133e215d2", + "metadata": {}, + "source": [ + "## Plan the network" + ] + }, + { + "cell_type": "markdown", + "id": "10232f7b-7aac-4773-8c39-15f672a654b5", + "metadata": {}, + "source": [ + "Finally, pass the ligands, mapper and scorer to a planner to generate the LOMAP network. A planner takes these three arguments (and perhaps some more) and returns a `LigandNetwork`. The LOMAP network provides edge redundancy for troubleshooting:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9492e2e7-33df-449e-9bd1-847ff52d2029", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:\tTrying to remove edge 4-5 with similarity 0.670320\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 4-5\n", + "INFO:\tTrying to remove edge 3-4 with similarity 0.670320\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 3-4\n", + "INFO:\tTrying to remove edge 3-5 with similarity 0.704688\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 3-5\n", + "INFO:\tTrying to remove edge 3-6 with similarity 0.704688\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 3-6\n", + "INFO:\tTrying to remove edge 4-6 with similarity 0.704688\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 4-6\n", + "INFO:\tTrying to remove edge 2-3 with similarity 0.740818\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 2-3\n", + "INFO:\tTrying to remove edge 2-5 with similarity 0.740818\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 2-5\n", + "INFO:\tTrying to remove edge 2-6 with similarity 0.740818\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 2-6\n", + "INFO:\tTrying to remove edge 1-3 with similarity 0.778801\n", + "INFO:\tRejecting edge deletion on cycle covering\n", + "INFO:\tTrying to remove edge 1-5 with similarity 0.778801\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 1-5\n", + "INFO:\tTrying to remove edge 1-6 with similarity 0.778801\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 1-6\n", + "INFO:\tTrying to remove edge 0-3 with similarity 0.818731\n", + "INFO:\tRejecting edge deletion on cycle covering\n", + "INFO:\tTrying to remove edge 0-4 with similarity 0.818731\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 0-4\n", + "INFO:\tTrying to remove edge 0-5 with similarity 0.818731\n", + "INFO:\tRejecting edge deletion on cycle covering\n", + "INFO:\tTrying to remove edge 0-6 with similarity 0.818731\n", + "INFO:\tRejecting edge deletion on cycle covering\n", + "INFO:\tTrying to remove edge 1-4 with similarity 0.860708\n", + "INFO:\tRejecting edge deletion on cycle covering\n", + "INFO:\tTrying to remove edge 0-1 with similarity 0.904837\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 0-1\n", + "INFO:\tTrying to remove edge 0-2 with similarity 0.904837\n", + "INFO:\tRejecting edge deletion on cycle covering\n", + "INFO:\tTrying to remove edge 2-4 with similarity 0.904837\n", + "INFO:\tRejecting edge deletion on cycle covering\n", + "INFO:\tTrying to remove edge 1-2 with similarity 0.951229\n", + "INFO:\tChecking edge deletion on distance-to-actives 0 vs 0\n", + "INFO:\tRemoved edge 1-2\n", + "INFO:\tTrying to remove edge 5-6 with similarity 0.951229\n", + "INFO:\tRejecting edge deletion on cycle covering\n" + ] + } + ], + "source": [ + "# Choose the LOMAP network that adds some closed ligand cycles\n", + "ligand_network = openfe.ligand_network_planning.generate_lomap_network(\n", + " molecules=ligands,\n", + " mappers=mappers,\n", + " scorer=scorer,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "6c2f585e-d609-440a-9498-2affc2badc5c", + "metadata": {}, + "source": [ + "## Visualize" + ] + }, + { + "cell_type": "markdown", + "id": "59727251-0644-4768-9d68-50edc37f501d", + "metadata": {}, + "source": [ + "For more ways to visualize a `LigandNetwork`, see [Visualizing Ligand Networks].\n", + "\n", + "[Visualizing Ligand Networks]: https://docs.openfree.energy/en/stable/cookbook/ligandnetwork_vis.html" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "92e0b934-8494-41f4-a0ad-0d0b01b3a8f9", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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O3eu6UhJKjY2lo0bN7omkRw6dMi1LSAggJo1a9KsWTOaNGlC9uzZDSYVERFRAZQU0r9/f8aOHUuOHDnYuXOnV58RsyyL7du3s2DBAhYuXMhff/3l2uZwOHj88cdp2rQpTZs2JX/+/AaTioiIr1IBlGT3yy+/UKlSJZxOJ0uWLKFRo0amI6WoPXv2uM4M/vLLLwm2Pfroo67lZUqUKKHlZUREJEWoAEqyioqKomzZsvz111+0bt2ajz76yHQko44ePcqiRYtYuHAh69atS7C8TMGCBV3Ly5QvX17Ly4iISLJRAZRkNXToUEaOHEnWrFnZuXMnmTNnNh3JbZw7d45vvvmGBQsW8P333xMVFeXaljNnTtfyMtWrV9fyMiIikqRUACXZbN++nXLlyhETE8NXX33FM888YzqS24qIiGD58uUsXLiQpUuXcunSJde2TJkyJVheJk2aNAaTioiIN1ABlGRx7do1ypcvz/bt22nevDlffvml6UgeIyoqKsHyMmfOnHFtCw4Odi0v89RTT3n1ZBoREUk+KoCSLEaNGsWQIUPInDkzf/31F9myZTMdySPFxsayYcMG1ySSw4cPu7YFBgYmWF5G37GIiCSWCqAkub/++ovSpUtz7do1Pv74Y1q1amU6klewLIvffvvNtbzMzp07XdscDgeVK1d2zSjOmzevuaAiIuL2VAAlScXExPD444+zZcsWGjVqxOLFi7W0STLZvXu368zgli1bEmwrXbq0a0ZxsWLF9L+BiIgkoAIoSWrcuHH069ePDBkysHPnTnLmzGk6kk84cuRIguVlnE6na1uhQoVcZwbLlSun5WVEREQFUJLO7t27efTRR4mKimLu3Lm0b9/edCSfdPbs2QTLy0RHR7u25cqVi6effppmzZpRrVo1AgICDCYVERFTVAAlScTGxlK9enU2bNjAk08+yfLlyzXs6AYuXbrE8uXLWbBgAd9++y0RERGubQ888ACNGzemadOm1KlTR8vLiIj4EBVASRJTp06lR48ehISE8OeffxIaGmo6kvzH1atXWbVqFQsXLmTx4sWcPXvWtS1t2rQJlpfJkCGDwaQiIpLcVADlvu3fv59HHnmEK1euMGPGDF566SXTkeQOYmJiEiwvc+TIEde2wMBAatWq5VpeJmvWrAaTiohIclABlPvidDqpXbs2a9as4YknnuCHH37QJAMP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UEREfErv3r3JkycPR48eZdy4cabjSCJZlkWXLl04f/48pUqVYtCgQaYjeTQVQBER8Slp0qRxFb+xY8dy+PBhw4kkMT766CMWL15MYGAgH3zwAUFBQaYjeTQVQBER8TnNmzenWrVqREZG0r9/f9Nx5A6OHTvGq6++CsDw4cMpWbKk4USeTwVQRER8jsPhYPLkyTgcDj777DN++ukn05HkFizLolOnToSHh1OuXDn69etnOpJXUAEUERGfVLp0aTp27AjYy8I4nU7DieRm5syZw4oVK0iVKhXz588nICDAdCSvoAIoIiI+a9SoUaRPn55t27Yxf/5803HkPw4dOkSvXr0A+3+rokWLGk7kPVQARUTEZ2XLlo0hQ4YAMGDAAC5evGg4kcRxOp107NiRS5cuUblyZV577TXTkbyKCqCIiPi07t27U7BgQU6dOsVbb71lOo78vxkzZrBq1SrSpElDWFgY/v7+piN5FRVAERHxaUFBQUycOBGASZMmsX//fsOJZP/+/fTt2xeA0aNHU6hQIcOJvI8KoIiI+LyGDRtSp04doqOjXcVDzHA6nbRv354rV65Qo0YNXnnlFdORvJIKoIiI+DyHw8GkSZPw9/dn4cKFrF692nQknzV16lTWr19PunTpmDt3Ln5+qirJQd+qiIgIULx4cV5++WXAXhYmJibGcCLfs3v3bte9msePH0++fPkMJ/JeKoAiIiL/b/jw4WTKlIk//viD2bNnm47jU2JjY2nXrh1Xr16lTp06vPjii6YjeTUVQBERkf+XOXNmRowYAcDgwYO5cOGC4US+Y/z48WzevJn06dMzZ84cHA6H6UheTQVQRETkOl26dKFYsWKcO3fOVQYlef31118MHToUgMmTJ5M7d27DibyfCqCIiMh1AgICmDRpEgDvvPMOf//9t+FE3u3atWu0bduW6OhoGjZsSLt27UxH8gkqgCIiIv9Rt25dGjVqRExMjOtWZJI8Ro8ezbZt28iUKROzZs3S0G8KUQEUERG5iQkTJhAYGMjy5ctZtmyZ6Theafv27a5h9nfeeYccOXIYTuQ7VABFRERuolChQnTv3h2AXr16ce3aNcOJvEt0dDRt27YlJiaGpk2b8r///c90JJ+iAigiInILQ4YM4cEHH2T37t28++67puN4lZEjR7Jjxw6yZMnCjBkzNPSbwlQARUREbiFDhgy8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6+waN7aHZ3PnTtyx//4bTp2yZxrnyBH/KFfO3t6liz08+txz9lIt584lPBt4M+PG2bN0GzeG2rWhShV7mZXr3W/uOH5+9rWAsbH28a5XsaJ97eK0afY1i99/b18zeL0nn4SlS2HlSvt3rlgRJk6EPHnuLoe7cFjWnUe+L168SIYMGQgPDyd9+vQpkUtEREQkSXXubJfYJUtMJ0ked9PXNAQsIiIiXi083B6O/vhjWLzYdBr3oAIoIiIiXq1JE/jlF/vayDp1TKdxDyqAIiIi4tVudus4X6dJICIiIiI+RgVQRERExMeoAIqIiIj4GBVAERERER+jAigiIiLiY1QARURERHyMCqCIiIiIj1EBFBEREfExKoAiIiIiPkYFUERERMTHqACKiIiI+BgVQBEREREfowIoIiIi4mNUAEVERER8jAqgiIiIiI9RARQRERHxMSqAIiIiIj5GBVBERETExwQkZifLsgC4ePFisoYRERERkXsT19PietvtJKoAXrp0CYDcuXPfRywRERERSW6XLl0iQ4YMt93HYSWiJjqdTo4fP05ISAgOhyPJAoqIiIhI0rAsi0uXLpEzZ078/G5/lV+iCqCIiIiIeA9NAhERERHxMSqAIiIiIj5GBVBERETEx6gAioiIiPgYFUARERERH6MCKCIiIuJjVABFREREfMz/AUyz/EyZqZqMAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "execution_count": 7, + "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": "1e5d7b45-8cd2-45f2-a38b-ede71d8c35f2", + "metadata": {}, + "source": [ + "## What next\n", + "\n", + "With a ligand network defined, a next logical step would be to choose and customise a free energy estimation method (in OpenFE parlance, a `Protocol`). This is applied to edges of the network to estimate the free energy differences of traversing this network." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a17eb44d-8b91-49a0-a00c-76cdfbf90ca8", + "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.11.6" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}