diff --git a/networks/creating_networks_from_external_files.ipynb b/networks/creating_networks_from_external_files.ipynb new file mode 100644 index 0000000..f9214e4 --- /dev/null +++ b/networks/creating_networks_from_external_files.ipynb @@ -0,0 +1,349 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4d66b7af", + "metadata": {}, + "source": [ + "# Creating AlchemicalNetworks from externally defined transformation networks\n", + "\n", + "This notebook demonstrates how to load networks defined by FEP+ and Orion's NES planner for use within OpenFE." + ] + }, + { + "cell_type": "markdown", + "id": "8096a77a", + "metadata": {}, + "source": [ + "## Some setup things\n", + "\n", + "First we load our ligands from an SDF file `data/benzene_modifications.sdf`.\n", + "\n", + "We also load in a protein `data/tyk2_protein.pdb` to demonstrate how we can eventually go about creating a full AlchemicalNetwork and write it to disk.\n", + "\n", + "**Note:** the protein used is only for demonstration purposes, the ligands are not aligned in the binding site and therefore should not be direclty used for calculation purposes." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "870831ef", + "metadata": {}, + "outputs": [], + "source": [ + "from rdkit import Chem\n", + "import openfe" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a9ea3769", + "metadata": {}, + "outputs": [], + "source": [ + "# First we load in our ligands from an SDF file data/benzene_modifications.sdf\n", + "\n", + "supplier = Chem.SDMolSupplier('data/benzene_modifications.sdf', removeHs=False)\n", + "smcs = [openfe.SmallMoleculeComponent(mol) for mol in supplier]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8ad04ac5", + "metadata": {}, + "outputs": [], + "source": [ + "protein = openfe.ProteinComponent.from_pdb_file('data/tyk2_protein.pdb')" + ] + }, + { + "cell_type": "markdown", + "id": "7f0bdf6e", + "metadata": {}, + "source": [ + "## Loading an FEP+ edges network\n", + "\n", + "Here we show how to take an FEP+ edge network file, `data/benzenes.edge` and load it into an LigandNetwork object." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8c0cb597", + "metadata": {}, + "outputs": [], + "source": [ + "from openfe.setup.ligand_network_planning import load_fepplus_network\n", + "\n", + "atom_mapper = openfe.LomapAtomMapper(max3d=1.0, element_change=False)\n", + "\n", + "ligand_network = load_fepplus_network(\n", + " ligands=smcs,\n", + " mapper=atom_mapper,\n", + " network_file='./data/benzenes.edge'\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "deae71b4", + "metadata": {}, + "source": [ + "## Loading an Orion NES network file\n", + "\n", + "Similarly we can take an Orion network edge file, `data/benzenes.dat` and load it into an LigandNetwork object." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "d0eace14", + "metadata": {}, + "outputs": [], + "source": [ + "from openfe.setup.ligand_network_planning import load_orion_network\n", + "\n", + "atom_mapper = openfe.LomapAtomMapper(max3d=1.0, element_change=False)\n", + "\n", + "ligand_network = load_orion_network(\n", + " ligands=smcs,\n", + " mapper=atom_mapper,\n", + " network_file='./data/benzenes.dat'\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "d45e92bf", + "metadata": {}, + "source": [ + "## Visualizing the Network\n", + "\n", + "Once defined we can visualise the network as we normally would." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "69475818", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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3phs2O1n3j872xgdFShfvjCsSMZZtufbguRcCCwAXIIOC1By+Poa603/eUbt6e9r+M/XLjbbv28d8k/8JgHgEnRYAO/y009nXw4KksLDjc1V9+4t3ILEFdz6LCEAnosOC+Bddu40thZJTzfWrEyfLj32mDEK6tvXOAN37lxjt/d166TJk40zac3CbxIALkGHBfAu/foZ+5k1a2aMfh55pPA98+LjpYkTjf3Mdu0y1q60bCl17mze8xNYALgEHRbAe5y+p8qbb559e6lSxp5mBfua/dPpW4wUuOuui1vDwkgIgEuwcRzgOfLO9Q6/bobAAsAlGAkBnmHZsmW69957rS7jgrwusGRlZenFF19U48aNFRERoTZt2uijjz461Z4GUDwYCQHuLSMjQ3feeac6dOig9PR0q8u5IK8LLAEBAXryySf1zjvvqHTp0lq5cqXuu+8+hYeH64cffrC6PKDEoMMCuKf9+/frscceU7169fTll1/K19dXPXv2tLqsC/K6wFKgcePGWr16tWbOnKkrr7xS27ZtU7t27dS3b1/9+eefVpcHeD06LIB7OXnypF599VUFBQVp2rRpys3NVZcuXZSSkqKYmBiry7sgrw0skuTj46P+/fsrPT1dDz/8sGw2mz7++GMFBwfrlVdeYUwEuBAdFsA9OJ1OzZs3T/Xq1dPw4cP1999/q0GDBvr222/11VdfqW7dulaXWCReHVgKVK1aVW+88YbWrVun5s2b68iRI3r88ccZEwEuRIcFsN7GjRvVvn17de3aVZmZmapevbpmzJih5ORk3XLLLVaXd1FKRGApwJgIKD50WADr7Nq1S9HR0WrSpIl++OEHlS1bVk899ZQcDocGDBgg33++6Y8HKFGBRWJMBBQXOixA8Tt69KieffZZ2e12JSQkyOl0qk+fPkpPT9fEiRNVsWJFq0s8y5EjR4p0vxIXWAr825ho+elb+gG4JGwcBxSf/Px8JSQkyG6365lnntGxY8d044036qefftKsWbN07bXXWl3ieeXn5xfpfiU2sBQ415ioffv2jImAy1TQYWEkBLjWDz/8oKZNmyo6Olp//vmn6tSpo08//VQrV65U8+bNrS7PNCU+sEiMiQBXoMMCuJbD4VC3bt3Url07bdy4UZUqVdLkyZOVmpqqu+++WzabzeoSTUVgOQ1jIsA8LLoFXOPvv//WiBEjVK9ePX3xxRfy8fHRww8/LIfDoVGjRqls2bJWl+gSBJZzKBgTvfvuu4yJgEvEolvAXDk5OZo2bZoCAwMVGxurnJwcderUSVu2bNEbb7yhq666yuoSXYrAch4+Pj568MEHGRMBl4gOC2AOp9OpL7/8UvXr19djjz2mAwcOqF69elq0aJEWLlyoevXqWV1isSCwXABjIuDS0GEBLt+mTZvUsWNH3XnnncrIyNBVV12lt99+W5s2bdJtt91mdXnFisBSROcbE/Xp04cxEXAOdFiAS7d79271799fERERWrZsmcqUKaPRo0fL4XBo0KBBJfKFAIHlIpxrTJSYmMiYCDgHOizAxTt27JgmTJigoKAgvffee3I6nerVq5fS0tL04osvqlKlSlaXaBkCyyVgTARcGB0WoOjy8/P14Ycfym63a/z48Tp69KhatGih1atXKzExUXXq1LG6RMsRWC4DYyLg/OiwAEXz448/qnnz5urXr5927dql6667TrNnz9bq1avVsmVLq8tzGwSWy8SYCDg3No4D/t3PP/+sHj16qG3btlq/fr0qVqyoF198UWlpaerZs6fXbfx2uQgsJmFMBBTKz88/9f4gjISAMx08eFAjR45U3bp1NWfOHPn4+Oi///2vHA6HRo8e7bUbv10uAovJGBMBhd0ViQ4LUCAnJ0dxcXEKDAzU1KlTlZOTo1tvvVWbN2/WW2+9perVq1tdolsjsLjA6WOiwYMHnzEmKvhHCniz0wMLHRaUdE6nU19//bXCwsI0dOhQ7d+/X3Xr1tXChQu1aNEi1a9f3+oSPQKBxYWqVq2quLi4M8ZEI0eOVKNGjRgTwaudHsrpsKAk27Jli2699VbdfvvtSktL05VXXqk33nhDW7ZsUadOnVinchEILMXgn2Oi7du3MyaCV6PDgpJuz549GjhwoMLDw/X999+rdOnSGjVqlDIzM/Xwww8T5C8BgaWYMCZCSVLw79lms8nHh18zKDmOHz+u559/XkFBQZo5c6by8/N1zz33KC0tTZMnT1ZAQIDVJXosfpMUM8ZEKAnYNA4lTX5+/qk3yB07dqyOHDmiZs2aaeXKlfrkk090/fXXW12ixyOwWIQxEbwZm8ahJFm1apVatmypvn37aufOnapdu7ZmzZqlNWvWqFWrVlaX5zUILBZiTARvxaZxKAl++eUX3XPPPWrdurXWrl0rf39/Pf/880pPT1efPn0Yh5qM76YbYEwEb8NICN4sKytLo0aNUt26dfXZZ5/Jx8dHAwcOlMPh0JgxY1SuXDmrS/RKBBY3wpgI3oKRELxRbm6u3nzzTQUGBuqll17SyZMn1bFjRyUnJ+udd95RjRo1rC7RqxFY3AxjIngDOizwJk6nU998843CwsI0ePBg/fXXXwoJCdFXX32l7777TmFhYVaXWCIQWNxUwZho/fr1atGiBWMieBQ6LPAWW7duVWRkpDp37qzU1FRdccUVev3117VlyxZ16dKFjd+KEYHFzUVERGjVqlWMieBR6LDA0/3vf//TQw89pIYNG+rbb79VqVKl9PjjjyszM1NDhgzh37YFCCwegDERPA0dFniqEydOaNKkSQoKCtLbb7+t/Px8de/eXampqXr55ZdVuXJlq0sssQgsHoQxETwFHRZ4GqfTqdmzZyskJERPPvmkDh8+rCZNmmjFihX6/PPPdcMNN1hdYolHYPFAjIng7uiwwJOsWbNGN954o3r37q3ffvtNtWrV0ocffqikpCS1adPG6vLw/wgsHooxEdwZG8fBE+zYsUO9evXSjTfeqJ9++kkVKlTQhAkTlJ6ernvvvZeN39wMPw0Px5gI7qggMDMSgjs6dOiQnnzySYWEhOiTTz6RzWZT//795XA4NHbsWJUvX97qEnEOBBYvwZgI7oQOC9xRbm6u3n77bQUGBmrSpEnKzs5W+/bttXHjRs2cOVM1a9a0ukT8CwKLF2FMBHfBolu4m8WLF6tRo0Z66KGHtG/fPtntdn355ZdasmSJGjVqZHV5KAICixf6tzHRsmXLrC4PJQCLbuEutm/frs6dOysyMlLbtm1T1apVNW3aNG3dulV33HEHG795EAKLFzvXmKhDhw6MieBydFhgtb1792rw4MEKCwvTN998o1KlSmn48OHKzMzUI488wr9ND0Rg8XKMiWAFOiywyokTJzRlyhQFBQXpzTffVF5enrp27apt27bplVdeUZUqVawuEZeIwFJCMCZCcaLDguLmdDr12WefKTQ0VDExMTp06JAiIiK0fPlyzZ07V0FBQVaXiMtEYClhGBOhONBhQXFKSkpS69atdc899+jXX3/V1VdfrYSEBK1bt0433XST1eXBJASWEogxEVyNDguKw++//66+ffuqRYsWWr16tcqXL69nnnlGGRkZ6tevHxu/eRl+miUYYyK4Ch0WuNLhw4f11FNPKTg4WB9//LFsNpuio6OVkZGhp59+WhUqVLC6RLgAgQWMiWA6No6DK+Tl5WnGjBkKCgrSCy+8oBMnTuimm27S+vXrFR8fr2uuucbqEuFCBBZIYkwEczESgtm+//57hYeHa9CgQfrf//6nwMBAzZs3T8uWLVNERITV5aEYEFhwBsZEMAMjIZglNTVVt99+u2655RalpKSoSpUqevXVV7Vt2zbdeeedbPxWghBYcE4FY6L33nuPMREuGh0WXK6//vpLQ4cOVYMGDfT111/Lz89Pjz32mDIzM/XYY4+pdOnSVpeIYkZgwXn5+PjogQceUEZGhgYPHiwfHx/GRCgSOiy4VNnZ2Xr55ZcVGBiouLg45eXl6c4779S2bdv06quvqmrVqlaXCIsQWHBBVapUUVxcnNatW8eYCEVChwUXy+l0as6cOQoNDdUTTzyhrKwsNWrUSEuXLtW8efNkt9utLhEWI7CgyM43Jurdu7d27dpldXlwI3RYcDHWrVuntm3bqkePHvrll19Us2ZNvffee1q/fr3at29vdXlwEwQWXJRzjYlmz56tkJAQxkQ4hQ4LimLnzp2677771KxZM61cuVLlypXT+PHjlZGRoQceeEC+vr5Wlwg3QmDBJWFMhH9DhwX/5siRIxo/fryCg4P10UcfSZLuu+8+ZWRk6Nlnn5W/v7/FFcIdEVhwWRgT4VzYOA7nkpeXp/fee09BQUGaMGGCjh8/rjZt2mjdunX64IMPVKtWLatLhBsjsOCyMSbCPzESwj8tXbpUjRs3Vv/+/bVnzx7dcMMNmjNnjn744Qc1adLE6vLgAQgsMA1jIhRgJIQC6enpioqKUseOHbV582YFBARo6tSp2rZtm7p168bGbygyAgtMx5gIdFiwf/9+Pfroo6pfv74WLFggX19fPfLII8rMzNSIESNUpkwZq0uEhyGwwCVOHxMNGTLkjDHRyy+/zJjIy9FhKblOnjyp2NhYBQYGavr06crNzdUdd9yhrVu3atq0abryyiutLhEeisACl6pSpYpef/31M8ZETzzxBGMiL0eHpeRxOp364osvVK9ePY0YMUIHDx5UWFiYvvvuO3355ZcKCQmxukR4OAILigVjopKFDkvJsmHDBrVr107dunVTZmamqlevrpkzZ2rjxo26+eabrS4PXoLAgmLDmKjkoMNSMuzatUvR0dFq2rSpVqxYobJly2rs2LFyOBzq378/G7/BVAQWFDvGRN6PDot3O3r0qJ555hkFBQUpISFBTqdTffv2VUZGhiZMmKCKFStaXSK8EIEFlmFM5L3YOM475efn6/3331dQUJCeffZZHT9+XK1atVJSUpI++ugj1a5d2+oS4cUILLAUYyLvVPBzYyTkPZYvX64mTZrogQce0O7du3X99dfrs88+048//qhmzZpZXR5KAAIL3ELBmGj9+vVq2bIlYyIPR4fFezgcDnXt2lXt27dXcnKyKlWqpJdeekmpqanq0aMHG7+h2BBY4FbCw8O1cuVKxkQejkW3nu/AgQMaPny4QkNDNW/ePPn6+mrw4MHKzMzUyJEj2fgNxY7AArfDmMjzsejWc508eVKvvfaaAgMD9eqrryo3N1edO3fWli1bFBcXp2rVqlldIkooAgvcFmMiz0WHxfM4nU7Nnz9f9evX17Bhw/T333+rfv36Wrx4sb7++muFhoZaXSJKOAIL3B5jIs9Dh8WzJCcnq2PHjrrrrrvkcDh01VVX6Z133lFycrJuvfVWq8sDJBFY4CEYE3kWOiye4c8//9SDDz6oxo0ba9myZSpTpozGjBkjh8OhgQMHEjjhVggs8CiMiTwDHRb3dvToUT333HMKCgpSfHy8nE6nevfurfT0dD3//POqVKmS1SUCZyGwwCMxJnJvdFjcU35+vj744AMFBwfr6aef1rFjx9SyZUutWbNGH3/8sa677jqrSwTOi8ACj8WYyH3RYXE/K1asULNmzXT//fdr165dqlOnjj755BOtWrVKLVq0sLo84IIILPB4jInci9PpZOM4N5KZmanu3bvrpptu0oYNG1SxYkVNmjRJqampuueee9j4DR6DwAKvcfqYqFq1aoyJLJKfn3/qc0ZC1vn777/1+OOPKzQ0VHPnzpWPj48eeughZWZmKiYmRmXLlrW6ROCiEFjgVQrGROnp6YyJLHL695gOS/HLycnR9OnTFRgYqFdeeUU5OTmKjIzUli1b9Oabb+qqq66yukTgkhBY4JXONyZq2LChli5danV5Xq1gHCTRYSlOTqdTX331lRo0aKBHH31UBw4cUGhoqL755ht98803qlevntUlApeFwAKv9s8xUWpqqjp27MiYyIXosBS/zZs365ZbbtEdd9yh9PR0VatW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UM2ZM8e0gATA/RFYAC936NAhjR49WiEhIfrss8/k4+OjgQMHKjMzU08++aTKli1rdYkXFBERoRUrVigxMVG1atXSjh071KNHD3Xs2FEpKSlWlwegGBBYAC+Vm5urt99+W4GBgZo8ebJOnjypjh07Kjk5We+8846qV69u+nO6suNhs9nUq1cvpaWlady4cSpbtqyWLVumRo0aaejQodq/f7/LnhuA9QgsgBf67rvvFB4eroceekj79u2T3W7Xl19+qe+++05hYWHFUoPZI6YCFSpU0HPPPafU1FR1795d+fn5iouLk91uV1xcnHJzc13yvACsRWABvEhaWpq6dOmiW2+9VVu3blWVKlX02muvaevWrbrjjjtcFiIKFOeakjp16ujzzz/X0qVLVb9+fR04cEBDhw5VRESEli1bVmx1ACgeBBbAC+zfv1+PPPKI6tevr4ULF8rPz0+PPfaYMjMz9eijj5461bg4uTocFWjfvr2Sk5MVFxenqlWrKiUlRR06dFCPHj20Y8eOYqkBgOsRWAAPdvLkScXGxiowMFCvv/668vLydMcdd2jr1q169dVXVbVq1WKtx6qzdvz8/DR48GA5HA4NGTJEPj4+mjNnjkJCQjRu3DgdPXrUkroAmIfAAnggp9Op+fPnq379+hoxYoQOHjyosLAwff/99/ryyy8VHBxsdYnF1mE5XdWqVfX6669r06ZNat++vbKzszVx4kSFhIQoMTGR06ABD0ZgATzMpk2b1LFjR911111yOByqXr26ZsyYoY0bN6pjx45Wl+cWGjRooCVLlmjOnDmqU6eO/vjjD/Xp00dt27bVxo0brS4PwCUgsAAeYvfu3erfv/+pRaVlypTRk08+KYfDoQEDBrjFuym7UwfDZrOpW7du2r59uyZMmKDy5ctr5cqVatKkiQYOHKi9e/daXSKAi0BgAdzc8ePH9fzzzysoKEjvvfeenE6nevbsqbS0NL3wwguqWLGi1SWekxUjoXMpV66cxo4dq/T0dPXu3VtOp1MzZ86U3W5XbGyscnJyrC4RQBEQWAA35XQ69fHHHys4OFhjx47V0aNH1bx5c61evVqzZ89WnTp1rC7xLO7UYfmnWrVq6eOPP9aPP/546t2kR4wYobCwMC1evNjq8gBcAIEFcENr1qxRy5Yt1bdvX+3cuVO1a9fWrFmztHr1arVs2dLq8orEXTos/9S6dWutXbtWM2bMULVq1ZSWlqbIyEhFRUUpMzPT6vIAnAeBBXAjv/32m3r37q0bb7xRSUlJqlChgiZMmKC0tDT16dNHPj7u/b+sO3dYTufr66sBAwYoIyNDw4cPl5+fnxYsWKDQ0FDFxMTo8OHDVpcI4B/c+7cfUEIcPnxYY8aMUXBwsGbPni2bzaYHH3xQDodDY8eOVfny5a0u8aK5a4fldJUrV9Yrr7yiLVu26LbbblNOTo6mTJkiu92uhIQE5efnW10igP9HYAEslJeXp5kzZyooKEgvvviisrOz1a5dO23YsEHvvvuuatasaXWJJULdunX1zTffaMGCBQoMDNSePXsUHR2tli1bKikpyeryAIjAAlhm6dKlaty4sQYOHKj//e9/CgwM1BdffKGlS5cqPDzc6vIuiaeMhM7FZrPp9ttv19atWzV58mT5+/tr7dq1atGihaKjo7V7926rSwRKNAILUMwyMjJ05513qmPHjtq8efOpscS2bdt01113ecQopSg89esoU6aMRo0apYyMDEVHR0uSEhISZLfbNXnyZGVnZ1tbIFBCEViAYnLgwAENGzZM9erV05dffilfX18NHTpUDodDw4cPV+nSpa0u8bJ5cofln2rWrKn4+HglJSWpefPmOnLkiEaPHq369etrwYIFXvW1Ap6AwAK4WE5OjqZNm6agoCC99tprys3NVefOnZWSkqLp06fryiuvtLpEl/DUDss/NWvWTKtXr1ZCQoJq1KihzMxMRUVFqVOnTkpLS7O6PKDEILAALuJ0OvXVV1+pQYMGeuyxx3TgwAHVq1dPixcv1tdff626detaXaLpvLXr4OPjo379+ikjI0MxMTEqXbq0Fi9erAYNGpx680kArkVgAVxgy5YtuvXWW3XHHXcoPT1d1apV01tvvaVNmzbp1ltvtbq8YuEtHZbTVaxYUZMmTdK2bdsUFRWl3NxcxcbGym63a8aMGcrLy7O6RMBrEVgAE/3vf//ToEGDFB4eru+//16lS5fWqFGj5HA49N///ld+fn5WlwgTBAYGav78+Vq0aJFCQkK0b98+DRo0SE2bNtXKlSutLg/wSgQWwAQnTpzQpEmTFBQUpBkzZig/P189evRQamqqJk+erICAAKtLLBbeOhI6n9tuu01btmxRbGysAgIClJycrDZt2qhPnz7auXOn1eUBXoXAAlwGp9OpTz75RCEhIXryySd1+PBhNWnSRD/++KM+++wz/ec//7G6RMt440joXEqVKqVhw4bJ4XBo4MCBstlsSkxMVEhIiCZMmKDjx49bXSLgFQgswCVau3atWrdurV69eum3337TNddcow8++EBJSUlq3bq11eVZoqR1WE5XrVo1vfPOO1q/fr1at26tY8eOafz48QoNDdWcOXNK9PcGMAOBBbhIO3fu1L333qvmzZtr9erVKl++vJ555hmlp6frvvvuc/s3KCwuJaXD8k8RERFasWKFEhMTVatWLe3YsUM9evRQx44dlZKSYnV5gMfiNytQREeOHNH48eMVHBysWbNmSZLuv/9+ZWRk6Omnn1aFChUsrtB6dBEMNptNvXr1UlpamsaNG6eyZctq2bJlatSokYYMGaL9+/dbXSLgcQgswAXk5+crPj5edrv91JqENm3aaP369Xr//fd1zTXXWF2iWyqpHZbTVahQQc8995xSU1PVvXt35efn64033pDdbldcXJxyc3OtLhHwGAQW4F/88MMPatKkiR588EHt3r1b//nPf/T555/rhx9+UOPGja0uz+3QYTm3OnXq6PPPP9fSpUvVoEEDHThwQEOHDlVERISWLVtmdXmARyCwAOeQmZmpbt26qV27dkpOTlalSpU0ZcoUbd++Xd27d6d7UAR8j87Wvn17bdy4UXFxcapatapSUlLUoUMHde/eXTt27LC6PMCtEViA0xw8eFAjR45UaGiovvjiC/n4+Ojhhx9WZmamnnjiCZUpU8bqEuHh/Pz8NHjwYDkcDg0ZMkQ+Pj6aO3euQkJCNG7cOB09etTqEgG3RGABJOXm5iouLk6BgYGaOnWqcnJyTm0K9sYbb6hatWpWl+gRGAkVXdWqVfX6669r06ZN6tChg7KzszVx4kSFhIQoMTGR7yXwDwQWlHjffPONwsLCNHToUO3fv19169bVwoULtWjRItWrV8/q8jwWI6GiadCggb7//nvNmTNHderU0R9//KE+ffqoTZs22rhxo9XlAW6DwIISa9u2bYqMjFTnzp2VmpqqK664QnFxcdqyZYs6depkdXkeia7ApbHZbOrWrZu2b9+uCRMmqHz58lq1apWaNGmigQMHau/evVaXCFiOwIISZ9++fXr44YcVFhamxYsXq1SpUnr88ceVmZmpwYMH8waFJqHDcvHKlSun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8OE6ePCg1SXCjRBYSqC8vDzFx8fLbrdr4sSJOnHihNq2bav169crPj5e11xzjdUlwkPRYcGlqFixoiZNmqRt27YpKipKubm5evXVV2W32zVjxgzl5eVZXSLcAIGlhFm+fLmaNGmiBx98ULt379Z//vMfzZkzR8uXL1dERITV5cFL0GHBpQgMDNT8+fO1aNEi1a1bV/v27dOgQYNOLfxHyUZgKSEyMzPVtWtXtW/fXps2bVKlSpX00ksvafv27erWrRt/YGAKOiwww2233abNmzcrNjZWAQEBSk5OVps2bdS7d2/t3LnT6vJgEQKLlzt48KAef/xxhYaGat68efL19dXgwYOVmZmpkSNHqkyZMlaXCC9EAMblKlWqlIYNGyaHw6GBAwfKZrNp9uzZCgkJ0YQJE3T8+HGrS0QxI7B4qZycHL3++usKDAzUK6+8opycHEVGRmrLli2Ki4tTtWrVrC4RAC6oWrVqeuedd7Rhwwa1bt1ax44d0/jx4xUaGqo5c+bQ1StBCCxexul0auHChQoLC9Mjjzyi/fv3KzQ0VN98842++eYbhYaGWl0ivBh/POAq4eHhWrFihRITE1WrVi3t2LFDPXr0UMeOHZWSkmJ1eSgGBBYvsnXrVkVGRqpLly5KS0vTlVdeqTfeeEObN29WZGSk1eWhBGEkBFew2Wzq1auX0tLSNG7cOJUtW1bLli1To0aNNGTIEO3fv9/qEuFCBBYvsHfvXj300ENq2LChvv32W5UqVUojR46Uw+HQww8/zBsUotjQYUFxqFChgp577jmlpqaqR48eys/P1xtvvCG73a64uDjl5uZaXSJcgMDiwbKzszVlyhQFBQXp7bffVn5+vrp166bU1FS99NJLqly5stUlooSiw4LiUKdOHX322WdaunSpGjRooAMHDmjo0KEKDw/X0qVLrS4PJiOweCCn06nPP/9cdevWVUxMjA4dOqSIiAj98MMPmjNnjm644QarS0QJRYcFVmjfvr02btyouLg4Va1aVVu3blXHjh3VvXt37dixw+ryYBICi4dZv3692rZtq7vvvlu//vqrrr76ar3//vtat26d2rZta3V5gCQ6LCh+fn5+Gjx4sBwOh4YOHSpfX1/NnTtXISEhGjdunI4ePWp1ibhMBBYP8ccff6hfv36ndnwsV66cxo8fr4yMDN1///28QSEASKpataqm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", + "text/plain": [ + "
" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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3phs2O1n3j872xgdFShfvjCsSMZZtufbguRcCCwAXIIOC1By+Poa603/eUbt6e9r+M/XLjbbv28d8k/8JgHgEnRYAO/y009nXw4KksLDjc1V9+4t3ILEFdz6LCEAnosOC+Bddu40thZJTzfWrEyfLj32mDEK6tvXOAN37lxjt/d166TJk40zac3CbxIALkGHBfAu/foZ+5k1a2aMfh55pPA98+LjpYkTjf3Mdu0y1q60bCl17mze8xNYALgEHRbAe5y+p8qbb559e6lSxp5mBfua/dPpW4wUuOuui1vDwkgIgEuwcRzgOfLO9Q6/bobAAsAlGAkBnmHZsmW69957rS7jgrwusGRlZenFF19U48aNFRERoTZt2uijjz461Z4GUDwYCQHuLSMjQ3feeac6dOig9PR0q8u5IK8LLAEBAXryySf1zjvvqHTp0lq5cqXuu+8+hYeH64cffrC6PKDEoMMCuKf9+/frscceU7169fTll1/K19dXPXv2tLqsC/K6wFKgcePGWr16tWbOnKkrr7xS27ZtU7t27dS3b1/9+eefVpcHeD06LIB7OXnypF599VUFBQVp2rRpys3NVZcuXZSSkqKYmBiry7sgrw0skuTj46P+/fsrPT1dDz/8sGw2mz7++GMFBwfrlVdeYUwEuBAdFsA9OJ1OzZs3T/Xq1dPw4cP1999/q0GDBvr222/11VdfqW7dulaXWCReHVgKVK1aVW+88YbWrVun5s2b68iRI3r88ccZEwEuRIcFsN7GjRvVvn17de3aVZmZmapevbpmzJih5ORk3XLLLVaXd1FKRGApwJgIKD50WADr7Nq1S9HR0WrSpIl++OEHlS1bVk899ZQcDocGDBgg33++6Y8HKFGBRWJMBBQXOixA8Tt69KieffZZ2e12JSQkyOl0qk+fPkpPT9fEiRNVsWJFq0s8y5EjR4p0vxIXWAr825ho+elb+gG4JGwcBxSf/Px8JSQkyG6365lnntGxY8d044036qefftKsWbN07bXXWl3ieeXn5xfpfiU2sBQ415ioffv2jImAy1TQYWEkBLjWDz/8oKZNmyo6Olp//vmn6tSpo08//VQrV65U8+bNrS7PNCU+sEiMiQBXoMMCuJbD4VC3bt3Url07bdy4UZUqVdLkyZOVmpqqu+++WzabzeoSTUVgOQ1jIsA8LLoFXOPvv//WiBEjVK9ePX3xxRfy8fHRww8/LIfDoVGjRqls2bJWl+gSBJZzKBgTvfvuu4yJgEvEolvAXDk5OZo2bZoCAwMVGxurnJwcderUSVu2bNEbb7yhq666yuoSXYrAch4+Pj568MEHGRMBl4gOC2AOp9OpL7/8UvXr19djjz2mAwcOqF69elq0aJEWLlyoevXqWV1isSCwXABjIuDS0GEBLt+mTZvUsWNH3XnnncrIyNBVV12lt99+W5s2bdJtt91mdXnFisBSROcbE/Xp04cxEXAOdFiAS7d79271799fERERWrZsmcqUKaPRo0fL4XBo0KBBJfKFAIHlIpxrTJSYmMiYCDgHOizAxTt27JgmTJigoKAgvffee3I6nerVq5fS0tL04osvqlKlSlaXaBkCyyVgTARcGB0WoOjy8/P14Ycfym63a/z48Tp69KhatGih1atXKzExUXXq1LG6RMsRWC4DYyLg/OiwAEXz448/qnnz5urXr5927dql6667TrNnz9bq1avVsmVLq8tzGwSWy8SYCDg3No4D/t3PP/+sHj16qG3btlq/fr0qVqyoF198UWlpaerZs6fXbfx2uQgsJmFMBBTKz88/9f4gjISAMx08eFAjR45U3bp1NWfOHPn4+Oi///2vHA6HRo8e7bUbv10uAovJGBMBhd0ViQ4LUCAnJ0dxcXEKDAzU1KlTlZOTo1tvvVWbN2/WW2+9perVq1tdolsjsLjA6WOiwYMHnzEmKvhHCniz0wMLHRaUdE6nU19//bXCwsI0dOhQ7d+/X3Xr1tXChQu1aNEi1a9f3+oSPQKBxYWqVq2quLi4M8ZEI0eOVKNGjRgTwaudHsrpsKAk27Jli2699VbdfvvtSktL05VXXqk33nhDW7ZsUadOnVinchEILMXgn2Oi7du3MyaCV6PDgpJuz549GjhwoMLDw/X999+rdOnSGjVqlDIzM/Xwww8T5C8BgaWYMCZCSVLw79lms8nHh18zKDmOHz+u559/XkFBQZo5c6by8/N1zz33KC0tTZMnT1ZAQIDVJXosfpMUM8ZEKAnYNA4lTX5+/qk3yB07dqyOHDmiZs2aaeXKlfrkk090/fXXW12ixyOwWIQxEbwZm8ahJFm1apVatmypvn37aufOnapdu7ZmzZqlNWvWqFWrVlaX5zUILBZiTARvxaZxKAl++eUX3XPPPWrdurXWrl0rf39/Pf/880pPT1efPn0Yh5qM76YbYEwEb8NICN4sKytLo0aNUt26dfXZZ5/Jx8dHAwcOlMPh0JgxY1SuXDmrS/RKBBY3wpgI3oKRELxRbm6u3nzzTQUGBuqll17SyZMn1bFjRyUnJ+udd95RjRo1rC7RqxFY3AxjIngDOizwJk6nU998843CwsI0ePBg/fXXXwoJCdFXX32l7777TmFhYVaXWCIQWNxUwZho/fr1atGiBWMieBQ6LPAWW7duVWRkpDp37qzU1FRdccUVev3117VlyxZ16dKFjd+KEYHFzUVERGjVqlWMieBR6LDA0/3vf//TQw89pIYNG+rbb79VqVKl9PjjjyszM1NDhgzh37YFCCwegDERPA0dFniqEydOaNKkSQoKCtLbb7+t/Px8de/eXampqXr55ZdVuXJlq0sssQgsHoQxETwFHRZ4GqfTqdmzZyskJERPPvmkDh8+rCZNmmjFihX6/PPPdcMNN1hdYolHYPFAjIng7uiwwJOsWbNGN954o3r37q3ffvtNtWrV0ocffqikpCS1adPG6vLw/wgsHooxEdwZG8fBE+zYsUO9evXSjTfeqJ9++kkVKlTQhAkTlJ6ernvvvZeN39wMPw0Px5gI7qggMDMSgjs6dOiQnnzySYWEhOiTTz6RzWZT//795XA4NHbsWJUvX97qEnEOBBYvwZgI7oQOC9xRbm6u3n77bQUGBmrSpEnKzs5W+/bttXHjRs2cOVM1a9a0ukT8CwKLF2FMBHfBolu4m8WLF6tRo0Z66KGHtG/fPtntdn355ZdasmSJGjVqZHV5KAICixf6tzHRsmXLrC4PJQCLbuEutm/frs6dOysyMlLbtm1T1apVNW3aNG3dulV33HEHG795EAKLFzvXmKhDhw6MieBydFhgtb1792rw4MEKCwvTN998o1KlSmn48OHKzMzUI488wr9ND0Rg8XKMiWAFOiywyokTJzRlyhQFBQXpzTffVF5enrp27apt27bplVdeUZUqVawuEZeIwFJCMCZCcaLDguLmdDr12WefKTQ0VDExMTp06JAiIiK0fPlyzZ07V0FBQVaXiMtEYClhGBOhONBhQXFKSkpS69atdc899+jXX3/V1VdfrYSEBK1bt0433XST1eXBJASWEogxEVyNDguKw++//66+ffuqRYsWWr16tcqXL69nnnlGGRkZ6tevHxu/eRl+miUYYyK4Ch0WuNLhw4f11FNPKTg4WB9//LFsNpuio6OVkZGhp59+WhUqVLC6RLgAgQWMiWA6No6DK+Tl5WnGjBkKCgrSCy+8oBMnTuimm27S+vXrFR8fr2uuucbqEuFCBBZIYkwEczESgtm+//57hYeHa9CgQfrf//6nwMBAzZs3T8uWLVNERITV5aEYEFhwBsZEMAMjIZglNTVVt99+u2655RalpKSoSpUqevXVV7Vt2zbdeeedbPxWghBYcE4FY6L33nuPMREuGh0WXK6//vpLQ4cOVYMGDfT111/Lz89Pjz32mDIzM/XYY4+pdOnSVpeIYkZgwXn5+PjogQceUEZGhgYPHiwfHx/GRCgSOiy4VNnZ2Xr55ZcVGBiouLg45eXl6c4779S2bdv06quvqmrVqlaXCIsQWHBBVapUUVxcnNatW8eYCEVChwUXy+l0as6cOQoNDdUTTzyhrKwsNWrUSEuXLtW8efNkt9utLhEWI7CgyM43Jurdu7d27dpldXlwI3RYcDHWrVuntm3bqkePHvrll19Us2ZNvffee1q/fr3at29vdXlwEwQWXJRzjYlmz56tkJAQxkQ4hQ4LimLnzp2677771KxZM61cuVLlypXT+PHjlZGRoQceeEC+vr5Wlwg3QmDBJWFMhH9DhwX/5siRIxo/fryCg4P10UcfSZLuu+8+ZWRk6Nlnn5W/v7/FFcIdEVhwWRgT4VzYOA7nkpeXp/fee09BQUGaMGGCjh8/rjZt2mjdunX64IMPVKtWLatLhBsjsOCyMSbCPzESwj8tXbpUjRs3Vv/+/bVnzx7dcMMNmjNnjn744Qc1adLE6vLgAQgsMA1jIhRgJIQC6enpioqKUseOHbV582YFBARo6tSp2rZtm7p168bGbygyAgtMx5gIdFiwf/9+Pfroo6pfv74WLFggX19fPfLII8rMzNSIESNUpkwZq0uEhyGwwCVOHxMNGTLkjDHRyy+/zJjIy9FhKblOnjyp2NhYBQYGavr06crNzdUdd9yhrVu3atq0abryyiutLhEeisACl6pSpYpef/31M8ZETzzxBGMiL0eHpeRxOp364osvVK9ePY0YMUIHDx5UWFiYvvvuO3355ZcKCQmxukR4OAILigVjopKFDkvJsmHDBrVr107dunVTZmamqlevrpkzZ2rjxo26+eabrS4PXoLAgmLDmKjkoMNSMuzatUvR0dFq2rSpVqxYobJly2rs2LFyOBzq378/G7/BVAQWFDvGRN6PDot3O3r0qJ555hkFBQUpISFBTqdTffv2VUZGhiZMmKCKFStaXSK8EIEFlmFM5L3YOM475efn6/3331dQUJCeffZZHT9+XK1atVJSUpI++ugj1a5d2+oS4cUILLAUYyLvVPBzYyTkPZYvX64mTZrogQce0O7du3X99dfrs88+048//qhmzZpZXR5KAAIL3ELBmGj9+vVq2bIlYyIPR4fFezgcDnXt2lXt27dXcnKyKlWqpJdeekmpqanq0aMHG7+h2BBY4FbCw8O1cuVKxkQejkW3nu/AgQMaPny4QkNDNW/ePPn6+mrw4MHKzMzUyJEj2fgNxY7AArfDmMjzsejWc508eVKvvfaaAgMD9eqrryo3N1edO3fWli1bFBcXp2rVqlldIkooAgvcFmMiz0WHxfM4nU7Nnz9f9evX17Bhw/T333+rfv36Wrx4sb7++muFhoZaXSJKOAIL3B5jIs9Dh8WzJCcnq2PHjrrrrrvkcDh01VVX6Z133lFycrJuvfVWq8sDJBFY4CEYE3kWOiye4c8//9SDDz6oxo0ba9myZSpTpozGjBkjh8OhgQMHEjjhVggs8CiMiTwDHRb3dvToUT333HMKCgpSfHy8nE6nevfurfT0dD3//POqVKmS1SUCZyGwwCMxJnJvdFjcU35+vj744AMFBwfr6aef1rFjx9SyZUutWbNGH3/8sa677jqrSwTOi8ACj8WYyH3RYXE/K1asULNmzXT//fdr165dqlOnjj755BOtWrVKLVq0sLo84IIILPB4jInci9PpZOM4N5KZmanu3bvrpptu0oYNG1SxYkVNmjRJqampuueee9j4DR6DwAKvcfqYqFq1aoyJLJKfn3/qc0ZC1vn777/1+OOPKzQ0VHPnzpWPj48eeughZWZmKiYmRmXLlrW6ROCiEFjgVQrGROnp6YyJLHL695gOS/HLycnR9OnTFRgYqFdeeUU5OTmKjIzUli1b9Oabb+qqq66yukTgkhBY4JXONyZq2LChli5danV5Xq1gHCTRYSlOTqdTX331lRo0aKBHH31UBw4cUGhoqL755ht98803qlevntUlApeFwAKv9s8xUWpqqjp27MiYyIXosBS/zZs365ZbbtEdd9yh9PR0VatW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UM2ZM8e0gATA/RFYAC936NAhjR49WiEhIfrss8/k4+OjgQMHKjMzU08++aTKli1rdYkXFBERoRUrVigxMVG1atXSjh071KNHD3Xs2FEpKSlWlwegGBBYAC+Vm5urt99+W4GBgZo8ebJOnjypjh07Kjk5We+8846qV69u+nO6suNhs9nUq1cvpaWlady4cSpbtqyWLVumRo0aaejQodq/f7/LnhuA9QgsgBf67rvvFB4eroceekj79u2T3W7Xl19+qe+++05hYWHFUoPZI6YCFSpU0HPPPafU1FR1795d+fn5iouLk91uV1xcnHJzc13yvACsRWABvEhaWpq6dOmiW2+9VVu3blWVKlX02muvaevWrbrjjjtcFiIKFOeakjp16ujzzz/X0qVLVb9+fR04cEBDhw5VRESEli1bVmx1ACgeBBbAC+zfv1+PPPKI6tevr4ULF8rPz0+PPfaYMjMz9eijj5461bg4uTocFWjfvr2Sk5MVFxenqlWrKiUlRR06dFCPHj20Y8eOYqkBgOsRWAAPdvLkScXGxiowMFCvv/668vLydMcdd2jr1q169dVXVbVq1WKtx6qzdvz8/DR48GA5HA4NGTJEPj4+mjNnjkJCQjRu3DgdPXrUkroAmIfAAnggp9Op+fPnq379+hoxYoQOHjyosLAwff/99/ryyy8VHBxsdYnF1mE5XdWqVfX6669r06ZNat++vbKzszVx4kSFhIQoMTGR06ABD0ZgATzMpk2b1LFjR911111yOByqXr26ZsyYoY0bN6pjx45Wl+cWGjRooCVLlmjOnDmqU6eO/vjjD/Xp00dt27bVxo0brS4PwCUgsAAeYvfu3erfv/+pRaVlypTRk08+KYfDoQEDBrjFuym7UwfDZrOpW7du2r59uyZMmKDy5ctr5cqVatKkiQYOHKi9e/daXSKAi0BgAdzc8ePH9fzzzysoKEjvvfeenE6nevbsqbS0NL3wwguqWLGi1SWekxUjoXMpV66cxo4dq/T0dPXu3VtOp1MzZ86U3W5XbGyscnJyrC4RQBEQWAA35XQ69fHHHys4OFhjx47V0aNH1bx5c61evVqzZ89WnTp1rC7xLO7UYfmnWrVq6eOPP9aPP/546t2kR4wYobCwMC1evNjq8gBcAIEFcENr1qxRy5Yt1bdvX+3cuVO1a9fWrFmztHr1arVs2dLq8orEXTos/9S6dWutXbtWM2bMULVq1ZSWlqbIyEhFRUUpMzPT6vIAnAeBBXAjv/32m3r37q0bb7xRSUlJqlChgiZMmKC0tDT16dNHPj7u/b+sO3dYTufr66sBAwYoIyNDw4cPl5+fnxYsWKDQ0FDFxMTo8OHDVpcI4B/c+7cfUEIcPnxYY8aMUXBwsGbPni2bzaYHH3xQDodDY8eOVfny5a0u8aK5a4fldJUrV9Yrr7yiLVu26LbbblNOTo6mTJkiu92uhIQE5efnW10igP9HYAEslJeXp5kzZyooKEgvvviisrOz1a5dO23YsEHvvvuuatasaXWJJULdunX1zTffaMGCBQoMDNSePXsUHR2tli1bKikpyeryAIjAAlhm6dKlaty4sQYOHKj//e9/CgwM1BdffKGlS5cqPDzc6vIuiaeMhM7FZrPp9ttv19atWzV58mT5+/tr7dq1atGihaKjo7V7926rSwRKNAILUMwyMjJ05513qmPHjtq8efOpscS2bdt01113ecQopSg89esoU6aMRo0apYyMDEVHR0uSEhISZLfbNXnyZGVnZ1tbIFBCEViAYnLgwAENGzZM9erV05dffilfX18NHTpUDodDw4cPV+nSpa0u8bJ5cofln2rWrKn4+HglJSWpefPmOnLkiEaPHq369etrwYIFXvW1Ap6AwAK4WE5OjqZNm6agoCC99tprys3NVefOnZWSkqLp06fryiuvtLpEl/DUDss/NWvWTKtXr1ZCQoJq1KihzMxMRUVFqVOnTkpLS7O6PKDEILAALuJ0OvXVV1+pQYMGeuyxx3TgwAHVq1dPixcv1tdff626detaXaLpvLXr4OPjo379+ikjI0MxMTEqXbq0Fi9erAYNGpx680kArkVgAVxgy5YtuvXWW3XHHXcoPT1d1apV01tvvaVNmzbp1ltvtbq8YuEtHZbTVaxYUZMmTdK2bdsUFRWl3NxcxcbGym63a8aMGcrLy7O6RMBrEVgAE/3vf//ToEGDFB4eru+//16lS5fWqFGj5HA49N///ld+fn5WlwgTBAYGav78+Vq0aJFCQkK0b98+DRo0SE2bNtXKlSutLg/wSgQWwAQnTpzQpEmTFBQUpBkzZig/P189evRQamqqJk+erICAAKtLLBbeOhI6n9tuu01btmxRbGysAgIClJycrDZt2qhPnz7auXOn1eUBXoXAAlwGp9OpTz75RCEhIXryySd1+PBhNWnSRD/++KM+++wz/ec//7G6RMt440joXEqVKqVhw4bJ4XBo4MCBstlsSkxMVEhIiCZMmKDjx49bXSLgFQgswCVau3atWrdurV69eum3337TNddcow8++EBJSUlq3bq11eVZoqR1WE5XrVo1vfPOO1q/fr1at26tY8eOafz48QoNDdWcOXNK9PcGMAOBBbhIO3fu1L333qvmzZtr9erVKl++vJ555hmlp6frvvvuc/s3KCwuJaXD8k8RERFasWKFEhMTVatWLe3YsUM9evRQx44dlZKSYnV5gMfiNytQREeOHNH48eMVHBysWbNmSZLuv/9+ZWRk6Omnn1aFChUsrtB6dBEMNptNvXr1UlpamsaNG6eyZctq2bJlatSokYYMGaL9+/dbXSLgcQgswAXk5+crPj5edrv91JqENm3aaP369Xr//fd1zTXXWF2iWyqpHZbTVahQQc8995xSU1PVvXt35efn64033pDdbldcXJxyc3OtLhHwGAQW4F/88MMPatKkiR588EHt3r1b//nPf/T555/rhx9+UOPGja0uz+3QYTm3OnXq6PPPP9fSpUvVoEEDHThwQEOHDlVERISWLVtmdXmARyCwAOeQmZmpbt26qV27dkpOTlalSpU0ZcoUbd++Xd27d6d7UAR8j87Wvn17bdy4UXFxcapatapSUlLUoUMHde/eXTt27LC6PMCtEViA0xw8eFAjR45UaGiovvjiC/n4+Ojhhx9WZmamnnjiCZUpU8bqEuHh/Pz8NHjwYDkcDg0ZMkQ+Pj6aO3euQkJCNG7cOB09etTqEgG3RGABJOXm5iouLk6BgYGaOnWqcnJyTm0K9sYbb6hatWpWl+gRGAkVXdWqVfX6669r06ZN6tChg7KzszVx4kSFhIQoMTGR7yXwDwQWlHjffPONwsLCNHToUO3fv19169bVwoULtWjRItWrV8/q8jwWI6GiadCggb7//nvNmTNHderU0R9//KE+ffqoTZs22rhxo9XlAW6DwIISa9u2bYqMjFTnzp2VmpqqK664QnFxcdqyZYs6depkdXkeia7ApbHZbOrWrZu2b9+uCRMmqHz58lq1apWaNGmigQMHau/evVaXCFiOwIISZ9++fXr44YcVFhamxYsXq1SpUnr88ceVmZmpwYMH8waFJqHDcvHKlSun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8OE6ePCg1SXCjRBYSqC8vDzFx8fLbrdr4sSJOnHihNq2bav169crPj5e11xzjdUlwkPRYcGlqFixoiZNmqRt27YpKipKubm5evXVV2W32zVjxgzl5eVZXSLcAIGlhFm+fLmaNGmiBx98ULt379Z//vMfzZkzR8uXL1dERITV5cFL0GHBpQgMDNT8+fO1aNEi1a1bV/v27dOgQYNOLfxHyUZgKSEyMzPVtWtXtW/fXps2bVKlSpX00ksvafv27erWrRt/YGAKOiwww2233abNmzcrNjZWAQEBSk5OVps2bdS7d2/t3LnT6vJgEQKLlzt48KAef/xxhYaGat68efL19dXgwYOVmZmpkSNHqkyZMlaXCC9EAMblKlWqlIYNGyaHw6GBAwfKZrNp9uzZCgkJ0YQJE3T8+HGrS0QxI7B4qZycHL3++usKDAzUK6+8opycHEVGRmrLli2Ki4tTtWrVrC4RAC6oWrVqeuedd7Rhwwa1bt1ax44d0/jx4xUaGqo5c+bQ1StBCCxexul0auHChQoLC9Mjjzyi/fv3KzQ0VN98842++eYbhYaGWl0ivBh/POAq4eHhWrFihRITE1WrVi3t2LFDPXr0UMeOHZWSkmJ1eSgGBBYvsnXrVkVGRqpLly5KS0vTlVdeqTfeeEObN29WZGSk1eWhBGEkBFew2Wzq1auX0tLSNG7cOJUtW1bLli1To0aNNGTIEO3fv9/qEuFCBBYvsHfvXj300ENq2LChvv32W5UqVUojR46Uw+HQww8/zBsUotjQYUFxqFChgp577jmlpqaqR48eys/P1xtvvCG73a64uDjl5uZaXSJcgMDiwbKzszVlyhQFBQXp7bffVn5+vrp166bU1FS99NJLqly5stUlooSiw4LiUKdOHX322WdaunSpGjRooAMHDmjo0KEKDw/X0qVLrS4PJiOweCCn06nPP/9cdevWVUxMjA4dOqSIiAj98MMPmjNnjm644QarS0QJRYcFVmjfvr02btyouLg4Va1aVVu3blXHjh3VvXt37dixw+ryYBICi4dZv3692rZtq7vvvlu//vqrrr76ar3//vtat26d2rZta3V5gCQ6LCh+fn5+Gjx4sBwOh4YOHSpfX1/NnTtXISEhGjdunI4ePWp1ibhMBBYP8ccff6hfv36ndnwsV66cxo8fr4yMDN1///28QSEASKpataqmT5+uTZs2qUOHDsrOztbEiRMVEhKixMREuoAejL9ybu7o0aN65plnZLfb9eGHH0qS7r33XmVkZOjZZ59VhQoVLK4QKMQfA7iL+vXr6/vvv9ecOXNUp04d/fHHH+rTp4/atGmjjRs3Wl0eLgGBxU3l5+frgw8+kN1u17PPPqvjx4+rVatWWrt2rT788EPVqlXL6hKB82IkBHdgs9nUrVs3bd++XRMnTlT58uW1atUqNWnSRAMHDtTevXutLhEXgcDihn788Uc1a9ZM999/v/7880/VqVNHn376qX788Uc1bdrU6vKA86LDAndUrlw5PfXUU0pPT1efPn3kdDo1c+ZM2e12xcbGKicnx+oSUQQEFjfyyy+/qEePHmrbtq02bNhw6i3XU1NTdffdd/OqFR6Df6twR7Vq1dKsWbO0cuVKRUREKCsrSyNGjFBYWJgWL15sdXm4AAKLG8jKytKoUaNUt25dzZkzRz4+Pvrvf/+rzMxMxcTEqGzZslaXCBQJHRZ4goLx+owZM1StWjWlpaUpMjJSUVFRyszMtLo8nAeBxUK5ubl68803FRgYqJdeekknT57ULbfcok2bNumtt97SVVddZXWJwCWhwwJ35+vrqwEDBsjhcGjEiBHy8/PTggULFBoaqpiYGB0+fNjqEvEPBBaLLF68WI0aNdLgwYP1119/KTg4WF999ZUWL16sBg0aWF0eAJQIAQEBmjp1qlJSUhQZGamcnBxNmTJFdrtdCQkJys/Pt7pE/D8CSzFLTU1V586dFRkZqW3btp3aMyAlJUVdunThlSk8GiMheKqQkBAtXLhQCxYsUGBgoPbs2aPo6Gi1bNlSSUlJVpcHEViKzV9//aWhQ4eqQYMG+uabb+Tn56fhw4crMzNTQ4cOValSpawuETANwRueyGaz6fbbb9fWrVs1efJk+fv7a+3atWrRooWio6O1e/duq0ss0QgsLnby5ElNnTpVgYGBiouLU15enu68805t375dr7zyiqpUqWJ1iYBp6LDAG5QpU0ajRo2Sw+FQdHS0JCkhIUF2u12TJ09Wdna2tQWWUAQWF3E6nfriiy8UGhqqkSNHKisrSw0bNtTSpUs1b948BQUFWV0i4DJ0WOANatSoofj4eCUlJal58+Y6cuSIRo8erfr162vBggUE9GJGYHGB5ORktW/fXt26ddPPP/+sGjVq6N1339WGDRvUvn17q8sDXIZf4PBGzZo10+rVq5WQkKAaNWooMzNTUVFR6tSpk1JTU60ur8QgsJjozz//1AMPPKDGjRvrhx9+UNmyZfXUU08pIyNDDz74oHx9fa0uESgWdFjgbXx8fNSvXz9lZGQoJiZGpUuX1uLFixUWFqbhw4fr4MGDVpfo9QgsJjh27JgmTJggu92u999/X06nU3369FF6eromTpyoihUrWl0iUCzosMDbFexAvm3bNkVFRSk3N1evvvqq7Ha7ZsyYoby8PKtL9FoElsuQn5+vWbNmKTg4WOPHj9fRo0fVokULrVmzRrNmzdK1115rdYmAJeiwwNsFBgZq/vz5WrRokerWrat9+/Zp0KBBatq0qVauXGl1eV6JwHKJVq9erZYtW+ree+/VH3/8oWuvvVaJiYlavXq1WrRoYXV5AIBicNttt2nz5s2KjY1VQECAkpOT1aZNG/Xu3Vs7d+60ujyvQmC5SDt27FDPnj1PvReFv7+/nn/+eaWlpalXr168skSJxkgIJVGpUqU0bNgwORwODRw4UDabTbNnz1ZISIgmTJig48ePW12iVyCwFNGhQ4f05JNPKiQkRJ9++qlsNtup96EYM2aMypUrZ3WJgNsguKMkqlatmt555x1t2LBBrVu31rFjxzR+/HiFhoZqzpw5BPrLRGC5gLy8PM2YMUNBQUGaNGmSsrOz1aFDByUnJ2vGjBmqUaOG1SUCboNfyIAUHh6uFStWKDExUbVq1dKOHTvUo0cPdezYUSkpKVaX57EILP/i+++/V3h4uAYNGqS9e/cqKChI8+fP1/fff6+GDRtaXR7gtuiwoKSz2Wzq1auX0tLSNG7cOJUtW1bLli1To0aNNGTIEO3fv9/qEj0OgeUc0tPTdccdd+iWW25RSkqKKleurNjYWG3dulVRUVH8MgbOgw4LcKYKFSroueeeU2pqqnr06KH8/Hy98cYbstvtiouLU25urtUlegwCy2kOHDigxx57TPXr19dXX30lPz8/Pfroo8rMzNSwYcNUunRpq0sEPAKhHjhTnTp19Nlnn2np0qVq0KCBDhw4oKFDhyo8PFxLly61ujyPQGCR8QaFr776qgIDAzVt2jTl5uaeesfO1157TVdccYXVJQIAvED79u21ceNGxcXFqWrVqtq6das6duyo7t27a8eOHVaX59ZKdGBxOp368ssvVb9+fQ0fPlx///23GjRooO+++04LFixQcHCw1SUCHoWREHBhfn5+Gjx4sBwOh4YOHSpfX1/NnTtXISEhGjdunI4ePWp1iW6pxAaWjIwMPfzww3rmmWfk7++vjh07as6cOUpOTtbNN99sdXmAR2MkBFxY1apVNX36dG3atEkdOnRQdna2Jk6cqJCQECUmJvIC4B9sziJ8Rw4dOqSAgABlZWWpUqVKxVEXAA+0fv16NW3aVLVr19bvv/9udTmAx3A6nfriiy/0+OOPnxoNtWrVStOmTVNERIS1xblYUTNGie2wAHAdOizAxbHZbOrWrZu2b9+uiRMnqnz58lq1apWaNGmigQMHau/evVaXaDkCCwDT0MIGLk+5cuX01FNPKT09XX369JHT6dTMmTNlt9sVGxurnJwcq0s0nY9P0aIIgQWA6eiwAJenVq1amjVrllauXKmIiAhlZWVpxIgRCgsL0+LFi60uz1T+/v5Fuh+BBQAAN1XwRrszZsxQtWrVlJaWpsjISEVFRcnhcFhdXrEisAAwDSMhwHy+vr6n3mx3xIgR8vPz04IFC1SvXj3FxMTo8OHDVpdYLDwusNSpI736qtVVSO+/L1WubHUVgHtiJASYLyAgQFOnTlVKSooiIyOVk5OjKVOmyG63KyEhQfn5+VaX6FIeF1gAuC86LIDrhYSEaOHChVqwYIECAwO1Z88eRUdHq2XLlkpKSrK6PJchsAAwHR0WwLVsNtupt5CZPHmy/P39tXbtWrVo0UL333+/du/ebXWJpnO7wNKunTR0qPFRubJ0xRXS2LHS6S/cjh2THnxQqlhRuvZa6Z13zjzGrl1Sz55SlSrG4++8Uzr9LRqio6W77pJeflmqWdO4z5Ah0ulni/39t9Svn3GM8uWlTp2kEra+CbhodFiA4lWmTBmNGjVKDodD0dHRkqQPPvhAdrtdkydPVnZ2trUFmsjtAoskJSRIfn5SUpI0bZoUGyvNnFl4+9SpUpMmUnKyNHiw9PDDUlqacduxY1L79pK/v7RihbRypfF5ZKR08mThMZYtk37+2fhvQoKxJuX99wtvj46W1q+XvvxSWrPGCEydO58ZagCcGx0WoHjVqFFD8fHxSkpKUvPmzXXkyBGNHj1a9evX14IFC1zyYqLgxX9xccvAUru2EVKCg6W+faVHHjEuF+jc2QgqgYFSTIx05ZXS8uXGbbNnSz4+RsBp0ECqW1eKj5d+/73wPpLROXn9dSkkRLr9dqlLF2nJEuM2h8MIKjNnSm3aSA0bSrNmGZ2befOK6ZsAAMBFatasmVavXq2EhATVqFFDmZmZioqKUmRkpFJTU60u75xObyb8G7cMLC1aSKe/QGvZ0ggReXnG5bCwwttsNqlGDalg1+ING6TMTGNc5O9vfFStKp04YXRUCtSrJ/n6Fl6uWbPwGKmpRoenefPC26+4wghQbvrzBtwCIyHAej4+PurXr58yMjIUExOj0qVL69tvv1VYWJiGDx+ugwcPXtTxPv/caACUK2f8Lbz5ZumJJ4zpxPz5xt9hm81oCnToYCzpON3+/VKZMtLSpcblOnWkiRONDk1AgDRwYBG/rouq2k2UKnXmZZtNKjibKz9fatxY2rTpzI+MDKlPn6Id43y/c53OM4MUgHNjJARYr2LFipo0aZK2bdumqKgo5ebm6tVXX5XdbteMGTOUV9AF+Be7d0u9exvrRlNTjVDSrZv09NPSPfcYyy127zY+brxRGjBA+vhj6fSlM7NmSVdfbSzXKPDSS1L9+kaTYdy4on09bhlYfvrp7MtBQWd2RM4nIsLoxlx1lTEyOv0jIKBozx8aKuXmGmtoCuzfb4SeunWL/nUAJQ0dFsD9BAYGav78+Vq8eLHq1q2rffv2adCgQWratKmSk5P/9bG7dxt/D7t1MzojDRoYSzL8/Y2OS5kyxpSjRg2pdGmpe3fjhf38+YXHiI83uimnv47p0EEaObLw73NRuGVg2blTGjFCSk+XEhOl6dOlxx4r2mP79jXWtNx5p/Tjj9Kvv0o//GA8/o8/inaMoCDj8QMHGot2N2+W7r1XuuYa43oA/44OC+B+br31Vm3evFmxsbEKCAhQcnKy+vfv/6+PadhQ6tjRCCp33y3NmGGcRXs+ZcoYfy/fe8+4vGmT8Tf0/09gOqVJk4uv3y0DS79+0vHjUrNmxunGjzwiDRpUtMeWL2+cHXTttUYirFvXaGUdPy5VqlT0GuLjjdHS7bcba2icTmnhwrNHSQAK0WEB3FupUqU0bNgwORwODRo06IIvLnx9pe++k775xpg+TJ9urOf89dfzP2bAAOMxf/xhBJeOHaXrrjvzPhUqXHztNmcRfsMcOnRIAQEBysrKUqWL+at/Cdq1kxo1co/t9wFcnFWrVql169YKCgpSRkaG1eUAuIC0tDSFhIQU+f55eUb4GDHC2E5k925pwYKz79e8ubG+JS7OCDm9exfeVqeONGyY8VHAZrNdMGP4FblKAADgVS4UVpKSjC0/br3VWBualCTt22dML06ckBYvNpZvXHGFsU60YAoxYIBxtlD58lLXrubU6pYjIQCeiZEQ4F0qVTKWWXTuLNntxs7zU6cau78PHGiMh5o0kapVk1atKnxc797G9iB9+khly5pTi9t1WE7f3A2AZ2LRLeAd6taVFi06923Vqknffnvu2/7+2+jAnGtN7+lvlXMx3C6wAPBcdFiAki0nx1jXMnq0sQlsRIR5x2YkBMB0dFiAkmnVKmNR7oYN0ltvmXtsOiwATEOHBSjZ2rU7/27xl4sOCwDT0WEBYDYCCwDT0GEB4CoEFgCmo8MCwGwEFgAA4PYILABMw0gIgKsQWACYjpEQgKI6cuRIke5HYAFgGjosAC5Wfn5+ke5HYAFgOjosAMxGYAFgGjosAFyFwALAdHRYAJiNwAIAANwegQWAaRgJAXAVAgsA0zESAmA2AgsA09BhAeAqBBYApqPDAsBsBBYApqHDAsBVCCwATEeHBYDZCCwAAMDtEVgAmIaREABXIbAAMB0jIQBmI7AAMA0dFgCuQmABYDo6LADMRmABYBo6LABchcACwHR0WACYjcACAADcHoEFgGkYCQFwFQILANMxEgJgNgILANPQYQHgKgQWAKajwwLAbAQWAKahwwLAVQgsAExHhwWA2QgsAExDhwWAqxBYAACA2yOwADAdIyEAZiOwADANIyEArkJgAWA6OiwAzEZgAWAaOiwAXIXAAsB0dFgAmI3AAsA0dFgAuAqBBYDp6LAAMBuBBQAAuD0CCwDTMBIC4CoEFgCmYyQEwGwEFgCmocMCwFUILABMR4cFgNkILABMQ4cFgKsQWACYjg4LALMRWAAAgNsjsAAwDSMhAK5CYAFgOkZCAMxGYAFgGjosAFyFwALAdHRYAJiNwALANHRYALgKgQWA6eiwADAbgQUAALg9AgsA0zASAuAqBBYApmMkBMBsBBYApqHDAsBVCCwATEeHBYDZCCwATEOHBYCrEFgAmI4OCwCzEVgAAIDbI7AAMA0jIQCuQmABYDpGQgDMRmABYBo6LABchcACwHR0WACYjcACwDR0WAC4CoEFgOnosAAwG4EFgGnosABwFQILANPRYQFgNgILAABwewQWAKZhJATAVQgsAEzHSAiA2QgsAExDhwWAqxBYAJiODgsAsxFYAJiGDgsAVyGwADAdHRYAZiOwAAAAt0dgAWAaRkIAXIXAAsB0jIQAmI3AAsA0dFgAuAqBBYDp6LAAMBuBBYBp6LAAcBUCCwDT0WEBYDYCCwAAcHsEFgCmYSQEwFUILABMx0gIgNkILABMQ4cFgKsQWACYjg4LALMRWACYhg4LAFchsAAwHR0WAGYjsAAAALdHYAFgGkZCAFyFwALAdIyEAJiNwALANHRYALgKgQWA6eiwADAbgQWAaeiwAHAVAgsA09FhAWA2AgsAAHB7BBYApmEkBMBVCCwATMdICIDZCCwATEOHBYCrEFgAmI4OCwCzEVgAmIYOCwBXIbAAMB0dFgBmI7AAMA0dFgCuQmABYDo6LADMRmABAABuj8ACwDSMhAC4CoEFgOkYCQEwG4EFgGnosABwFQILANPRYQFgNgILANPQYQHgKgQWAKajwwLAbAQWAADg9ggsAEzDSAiAqxBYAJiOkRAAsxFYAJimWrVqCg8PV506dawuBYCXsTmL0MM9dOiQAgIClJWVpUqVKhVHXQAAoAQoasagwwIAANwegQUAALg9AgsAAHB7BBYAAOD2CCwAAMDtEVgAuES7dtKwYVZX8e+io6W77vr3+1zs1/H++1LlypdaUfEfF/AUBBYAAOD2CCwAAMDtEVgAuExurjR0qDHKuOIKaexYqWCrypMnpVGjpGuukSpUkJo3l5YvL3xswQhk8WKpbl3J31+KjJR27y68j8129kfBJrt5eVL//tL110vlyknBwdJrr/17vUePSv36Gc9Vs6Y0derZ97lQ3QXOV/eKFVKpUtKePWfe//HHpbZtz/z6r71WKl9e6tpV2r//7OdYsEBq3FgqW1b6z3+kZ581vueANyKwAHCZhATJz09KSpKmTZNiY6WZM43bHnhAWrVKmj1b2rJFuvtu4w+7w1H4+GPHpJdflj780PhD//vv0siRhbfv3l34kZkpBQYW/tHPz5dq1ZI+/VTavl0aP14aM8a4fD5PPCEtWyZ98YX07bdGENmw4cz7XG7dbdsa4eLDDwvvn5srffSRcWzJ+H49+KA0eLC0aZPUvr00ceKZdSxeLN17r/Too8bX9/bbRsh5/vkL/FAAT+UsgqysLKckZ1ZWVlHuDgDOm25yOuvWdTrz8wuvi4kxrsvMdDptNqdz164zH9Oxo9P55JPG5/HxTqdk3LdAXJzTWb362c+Vn+90du3qdDZu7HQeO3b+mgYPdjq7dy+8fP/9TueddxqfHz7sdJYu7XTOnl14+/79Tme5ck7nY48Zl82qe/Jk4/tQYN48p9Pf3+k8csS43Lu30xkZeeZz9OzpdAYEFF5u08bpfOGFM+/z4YdOZ82a5/3yAbdU1IzhZ3VgAuC9WrQwxjQFWrY0xizr1xujIbv9zPtnZxujowLly0s33FB4uWZNae/es59nzBhpzRpp3Tpj/FPgrbeMjs5vv0nHjxvjnEaNzl3rzz8bt7dsWXhd1arGKKnAxo3m1B0dbYzHfvrJ+B699550zz3GiEmSUlONMdDpWraUFi0qvLxhg/H1nt5RycuTTpwwOjzly5/76wQ8FYEFgCV8fY0/ur6+Z17v71/4ealSZ95msxWugSnw0UfGqGn5cmMEVODTT6Xhw42A1LKlVLGi9NJLxrjlXC78NrDGmMmMuq+6SrrjDik+3hgPLVx45jqYotby7LNSt25n31a27IUfD3gaAgsAl/npp7MvBwVJ4eFGN2DvXqlNm0s//po10oABxvqNFi3OvO3HH6UbbzTWgRT4+efzHysw0AgaP/1kLHaVpL//ljIypJtuMi6bVbdk1N2rlxGybrhBatWq8LbQ0HN/704XESGlpxt1AyUBgQWAy+zcKY0YIf33v8Y4Zfp0o+Nht0t9+xpn5EydagSBv/6Sli6VGjSQOne+8LH37DHGJr16SbfdVnjWja+vVK2a8Yf8gw+MxanXX28scl23zvj8XPz9jbOKnnjCGO9Ury499ZTkc9qpCWbUXeC226SAAGMx7XPPnXnbo48aYWvKFGNju2+/PXMcJBmLiG+/Xapd21j46+NjLAJOSTl7gS7gDThLCIDL9OtnrB1p1kwaMkR65BFp0CDjtvh44/bHHzfWiURFGeOa2rWLduy0NOl//zPORKpZs/CjaVPj9oceMsYlPXsapx7v339mt+VcXnrJOIsnKkq6+WapdWvjtOHTXW7dBXx8jLUseXnG8U7XooWx9mb6dGPNzbffGmteTnfbbdJXX0nffWd8zS1aSK+8Il133cXVAXgKm9N54WnpoUOHFBAQoKysLFWqVKk46gIArzdwoBG6vvzS6koA6xQ1YzASAoBilpVljKdmzZLmz7e6GsAzEFgAoJjdeae0dq2xtueWW6yuBvAMBBYAKGbn2sofwL9j0S0AAHB7BBYAAOD2CCwAAMDtEVgAAIDbI7AAAAC3R2ABAABuj8ACAADcHoEFAAC4PQILAABwewQWAADg9ggsAADA7RFYAACA2yOwAAAAt0dgAQAAbo/AAgAA3B6BBQAAuD0CCwAAcHsEFgAA4PYILAAAwO0RWAAAgNsjsAAAALdHYAEAAG6PwAIAANyeX1Hu5HQ6JUmHDh1yaTEAAKBkKcgWBVnjfIoUWA4fPixJql279mWWBQAAcLbDhw8rICDgvLfbnBeKNJLy8/P1559/qmLFirLZbKYWCAAASi6n06nDhw/r6quvlo/P+VeqFCmwAAAAWIlFtwAAwO0RWAAAgNsjsAAAALdHYAEAAG6PwAIAANwegQUAALg9AgsAAHB7/wd+4mgTf2Bg7wAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from openfe.utils.atommapping_network_plotting import plot_atommapping_network\n", + "plot_atommapping_network(ligand_network)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "94b00e7b", + "metadata": {}, + "outputs": [], + "source": [ + "## Similarly we can visualize the invidual mappings\n", + "\n", + "from openfe.utils.visualization_3D import view_mapping_3d\n", + "from ipywidgets import interact, widgets\n", + "\n", + "def display_edge(index):\n", + " view = view_mapping_3d(edges[index], spheres=True, show_atomIDs=True)\n", + " view.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "754578ba", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "81ebe199a10f4283bbe6b7384408d411", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(IntSlider(value=0, description='index', max=5), Output()), _dom_classes=('widget-interac…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# traverse through all views\n", + "\n", + "edges = list(ligand_network.edges)\n", + "\n", + "interact(display_edge, index=widgets.IntSlider(min=0, max=len(edges)-1, step=1));" + ] + }, + { + "cell_type": "markdown", + "id": "1586d07f", + "metadata": {}, + "source": [ + "## Creating an AlchemicalNetwork\n", + "\n", + "From one of these defined `ligand_network` objects, we can go ahead and create an AlchemicalNetwork which we can then execute using the OpenFE CLI." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "bbb9e471", + "metadata": {}, + "outputs": [], + "source": [ + "## First let us define our simulation protocol\n", + "\n", + "from openfe.protocols.openmm_rfe import RelativeHybridTopologyProtocol\n", + "\n", + "# We can tweak the settings as necessary, for now we will stick to the defaults\n", + "settings = RelativeHybridTopologyProtocol.default_settings()\n", + "protocol = RelativeHybridTopologyProtocol(settings)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "979654b8", + "metadata": {}, + "outputs": [], + "source": [ + "transformations = []\n", + "\n", + "for mapping in ligand_network.edges:\n", + " for leg in ['solvent', 'complex']:\n", + " # use the solvent and protein created above\n", + " sysA_dict = {'ligand': mapping.componentA,\n", + " 'solvent': openfe.SolventComponent()}\n", + " sysB_dict = {'ligand': mapping.componentB,\n", + " 'solvent': openfe.SolventComponent()}\n", + " \n", + " if leg == 'complex':\n", + " sysA_dict['protein'] = protein\n", + " sysB_dict['protein'] = protein\n", + " \n", + " # we don't have to name objects, but it can make things (like filenames) more convenient\n", + " sysA = openfe.ChemicalSystem(sysA_dict, name=f\"{mapping.componentA.name}_{leg}\")\n", + " sysB = openfe.ChemicalSystem(sysB_dict, name=f\"{mapping.componentB.name}_{leg}\")\n", + " \n", + " prefix = \"rbfe_\" # prefix is only to exactly reproduce CLI\n", + " \n", + " transformation = openfe.Transformation(\n", + " stateA=sysA,\n", + " stateB=sysB,\n", + " mapping={'ligand': mapping},\n", + " protocol=protocol, # use protocol created above\n", + " name=f\"{prefix}{sysA.name}_{sysB.name}\"\n", + " )\n", + " transformations.append(transformation)\n", + "\n", + "network = openfe.AlchemicalNetwork(transformations)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "af716407", + "metadata": {}, + "outputs": [], + "source": [ + "# Finally we write out the AlchemicalNetwork to disk\n", + "\n", + "import pathlib\n", + "# first we create the directory\n", + "transformation_dir = pathlib.Path(\"transformations\")\n", + "transformation_dir.mkdir(exist_ok=True)\n", + "\n", + "# then we write out each transformation\n", + "for transformation in network.edges:\n", + " transformation.dump(transformation_dir / f\"{transformation.name}.json\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "328c2303", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rbfe_benzene_complex_anisole_complex.json\r\n", + "rbfe_benzene_complex_benzaldehyde_complex.json\r\n", + "rbfe_benzene_complex_benzonitrile_complex.json\r\n", + "rbfe_benzene_complex_phenol_complex.json\r\n", + "rbfe_benzene_complex_styrene_complex.json\r\n", + "rbfe_benzene_complex_toluene_complex.json\r\n", + "rbfe_benzene_solvent_anisole_solvent.json\r\n", + "rbfe_benzene_solvent_benzaldehyde_solvent.json\r\n", + "rbfe_benzene_solvent_benzonitrile_solvent.json\r\n", + "rbfe_benzene_solvent_phenol_solvent.json\r\n", + "rbfe_benzene_solvent_styrene_solvent.json\r\n", + "rbfe_benzene_solvent_toluene_solvent.json\r\n" + ] + } + ], + "source": [ + "!ls transformations/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "da9ccdc9", + "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.10.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/networks/data/benzene_modifications.sdf b/networks/data/benzene_modifications.sdf new file mode 100644 index 0000000..548ad29 --- /dev/null +++ b/networks/data/benzene_modifications.sdf @@ -0,0 +1,240 @@ +benzene + PyMOL2.5 3D 0 + + 12 12 0 0 0 0 0 0 0 0999 V2000 + 25.9780 5.3270 4.7790 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.3950 5.0740 3.4990 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.3400 5.8600 2.9020 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.8370 6.9210 3.5690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.4200 7.1960 4.8560 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.4980 6.3790 5.4690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 25.2298 4.6859 5.2451 H 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9676 4.2351 2.9497 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.6890 5.6311 1.8951 H 0 0 0 0 0 0 0 0 0 0 0 0 + 28.5730 7.5660 3.0889 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.8209 8.0598 5.3863 H 0 0 0 0 0 0 0 0 0 0 0 0 + 26.1874 6.5720 6.4958 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 4 0 0 0 0 + 1 6 4 0 0 0 0 + 1 7 1 0 0 0 0 + 2 3 4 0 0 0 0 + 2 8 1 0 0 0 0 + 3 4 4 0 0 0 0 + 3 9 1 0 0 0 0 + 4 5 4 0 0 0 0 + 4 10 1 0 0 0 0 + 5 6 4 0 0 0 0 + 5 11 1 0 0 0 0 + 6 12 1 0 0 0 0 +M END +$$$$ +toluene + PyMOL2.5 3D 0 + + 15 15 0 0 0 0 0 0 0 0999 V2000 + 28.9072 8.7434 5.1220 H 0 0 0 0 0 0 0 0 0 0 0 0 + 28.1966 8.1433 6.6393 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.9864 8.4164 5.6052 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.2579 9.2269 5.5838 H 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9780 5.3270 4.7790 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.3950 5.0740 3.4990 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.3400 5.8600 2.9020 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.8370 6.9210 3.5690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.4200 7.1960 4.8560 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.4980 6.3790 5.4690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 25.2298 4.6859 5.2451 H 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9676 4.2351 2.9497 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.6890 5.6311 1.8951 H 0 0 0 0 0 0 0 0 0 0 0 0 + 28.5730 7.5660 3.0889 H 0 0 0 0 0 0 0 0 0 0 0 0 + 26.1874 6.5720 6.4958 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 3 1 0 0 0 0 + 2 3 1 0 0 0 0 + 3 4 1 0 0 0 0 + 5 6 4 0 0 0 0 + 5 10 4 0 0 0 0 + 5 11 1 0 0 0 0 + 6 7 4 0 0 0 0 + 6 12 1 0 0 0 0 + 7 8 4 0 0 0 0 + 7 13 1 0 0 0 0 + 8 9 4 0 0 0 0 + 8 14 1 0 0 0 0 + 3 9 1 0 0 0 0 + 9 10 4 0 0 0 0 + 10 15 1 0 0 0 0 +M END +$$$$ +phenol + PyMOL2.5 3D 0 + + 13 13 0 0 0 0 0 0 0 0999 V2000 + 25.9780 5.3270 4.7790 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.3950 5.0740 3.4990 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.3400 5.8600 2.9020 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.8370 6.9210 3.5690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.4200 7.1960 4.8560 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.4980 6.3790 5.4690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 25.2298 4.6859 5.2451 H 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9676 4.2351 2.9497 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.6890 5.6311 1.8951 H 0 0 0 0 0 0 0 0 0 0 0 0 + 28.5730 7.5660 3.0889 H 0 0 0 0 0 0 0 0 0 0 0 0 + 28.1311 8.0887 6.4624 H 0 0 0 0 0 0 0 0 0 0 0 0 + 26.1874 6.5720 6.4958 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.9460 8.3293 5.5517 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 4 0 0 0 0 + 1 6 4 0 0 0 0 + 1 7 1 0 0 0 0 + 2 3 4 0 0 0 0 + 2 8 1 0 0 0 0 + 3 4 4 0 0 0 0 + 3 9 1 0 0 0 0 + 4 5 4 0 0 0 0 + 4 10 1 0 0 0 0 + 5 6 4 0 0 0 0 + 5 13 1 0 0 0 0 + 6 12 1 0 0 0 0 + 11 13 1 0 0 0 0 +M END +$$$$ +benzonitrile + PyMOL2.5 3D 0 + + 13 13 0 0 0 0 0 0 0 0999 V2000 + 28.5559 9.5700 6.2831 N 0 0 0 0 0 0 0 0 0 0 0 0 + 27.9981 8.4043 5.5824 C 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9780 5.3270 4.7790 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.3950 5.0740 3.4990 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.3400 5.8600 2.9020 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.8370 6.9210 3.5690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.4200 7.1960 4.8560 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.4980 6.3790 5.4690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 25.2298 4.6859 5.2451 H 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9676 4.2351 2.9497 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.6890 5.6311 1.8951 H 0 0 0 0 0 0 0 0 0 0 0 0 + 28.5730 7.5660 3.0889 H 0 0 0 0 0 0 0 0 0 0 0 0 + 26.1874 6.5720 6.4958 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 3 0 0 0 0 + 3 4 4 0 0 0 0 + 3 8 4 0 0 0 0 + 3 9 1 0 0 0 0 + 4 5 4 0 0 0 0 + 4 10 1 0 0 0 0 + 5 6 4 0 0 0 0 + 5 11 1 0 0 0 0 + 6 7 4 0 0 0 0 + 6 12 1 0 0 0 0 + 2 7 1 0 0 0 0 + 7 8 4 0 0 0 0 + 8 13 1 0 0 0 0 +M END +$$$$ +anisole + PyMOL2.5 3D 0 + + 16 16 0 0 0 0 0 0 0 0999 V2000 + 29.2873 8.8784 4.9226 C 0 0 0 0 0 0 0 0 0 0 0 0 + 29.5502 9.7990 5.4437 H 0 0 0 0 0 0 0 0 0 0 0 0 + 28.0548 8.3459 5.4720 O 0 0 0 0 0 0 0 0 0 0 0 0 + 30.0866 8.1484 5.0502 H 0 0 0 0 0 0 0 0 0 0 0 0 + 29.1525 9.0868 3.8612 H 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9780 5.3270 4.7790 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.3950 5.0740 3.4990 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.3400 5.8600 2.9020 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.8370 6.9210 3.5690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.4200 7.1960 4.8560 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.4980 6.3790 5.4690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 25.2298 4.6859 5.2451 H 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9676 4.2351 2.9497 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.6890 5.6311 1.8951 H 0 0 0 0 0 0 0 0 0 0 0 0 + 28.5730 7.5660 3.0889 H 0 0 0 0 0 0 0 0 0 0 0 0 + 26.1874 6.5720 6.4958 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 0 0 0 + 1 4 1 0 0 0 0 + 1 5 1 0 0 0 0 + 1 3 1 0 0 0 0 + 6 7 4 0 0 0 0 + 6 11 4 0 0 0 0 + 6 12 1 0 0 0 0 + 7 8 4 0 0 0 0 + 7 13 1 0 0 0 0 + 8 9 4 0 0 0 0 + 8 14 1 0 0 0 0 + 9 10 4 0 0 0 0 + 9 15 1 0 0 0 0 + 3 10 1 0 0 0 0 + 10 11 4 0 0 0 0 + 11 16 1 0 0 0 0 +M END +$$$$ +benzaldehyde + PyMOL2.5 3D 0 + + 14 14 0 0 0 0 0 0 0 0999 V2000 + 29.2079 8.8492 4.9632 O 0 0 0 0 0 0 0 0 0 0 0 0 + 27.5482 8.8691 6.4597 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.9981 8.4043 5.5824 C 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9780 5.3270 4.7790 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.3950 5.0740 3.4990 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.3400 5.8600 2.9020 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.8370 6.9210 3.5690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.4200 7.1960 4.8560 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.4980 6.3790 5.4690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 25.2298 4.6859 5.2451 H 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9676 4.2351 2.9497 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.6890 5.6311 1.8951 H 0 0 0 0 0 0 0 0 0 0 0 0 + 28.5730 7.5660 3.0889 H 0 0 0 0 0 0 0 0 0 0 0 0 + 26.1874 6.5720 6.4958 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 3 2 0 0 0 0 + 2 3 1 0 0 0 0 + 4 5 4 0 0 0 0 + 4 9 4 0 0 0 0 + 4 10 1 0 0 0 0 + 5 6 4 0 0 0 0 + 5 11 1 0 0 0 0 + 6 7 4 0 0 0 0 + 6 12 1 0 0 0 0 + 7 8 4 0 0 0 0 + 7 13 1 0 0 0 0 + 3 8 1 0 0 0 0 + 8 9 4 0 0 0 0 + 9 14 1 0 0 0 0 +M END +$$$$ +styrene + PyMOL2.5 3D 0 + + 16 16 0 0 0 0 0 0 0 0999 V2000 + 29.2873 8.8784 4.9226 C 0 0 0 0 0 0 0 0 0 0 0 0 + 29.6609 8.3486 4.0463 H 0 0 0 0 0 0 0 0 0 0 0 0 + 29.8344 9.7353 5.3157 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.5365 8.8812 6.4825 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.9864 8.4164 5.6052 C 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9780 5.3270 4.7790 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.3950 5.0740 3.4990 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.3400 5.8600 2.9020 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.8370 6.9210 3.5690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 27.4200 7.1960 4.8560 C 0 0 0 0 0 0 0 0 0 0 0 0 + 26.4980 6.3790 5.4690 C 0 0 0 0 0 0 0 0 0 0 0 0 + 25.2298 4.6859 5.2451 H 0 0 0 0 0 0 0 0 0 0 0 0 + 25.9676 4.2351 2.9497 H 0 0 0 0 0 0 0 0 0 0 0 0 + 27.6890 5.6311 1.8951 H 0 0 0 0 0 0 0 0 0 0 0 0 + 28.5730 7.5660 3.0889 H 0 0 0 0 0 0 0 0 0 0 0 0 + 26.1874 6.5720 6.4958 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 0 0 0 + 1 3 1 0 0 0 0 + 1 5 2 0 0 0 0 + 4 5 1 0 0 0 0 + 6 7 4 0 0 0 0 + 6 11 4 0 0 0 0 + 6 12 1 0 0 0 0 + 7 8 4 0 0 0 0 + 7 13 1 0 0 0 0 + 8 9 4 0 0 0 0 + 8 14 1 0 0 0 0 + 9 10 4 0 0 0 0 + 9 15 1 0 0 0 0 + 5 10 1 0 0 0 0 + 10 11 4 0 0 0 0 + 11 16 1 0 0 0 0 +M END +$$$$ diff --git a/networks/data/benzenes.dat b/networks/data/benzenes.dat new file mode 100644 index 0000000..c5ce74a --- /dev/null +++ b/networks/data/benzenes.dat @@ -0,0 +1,8 @@ +# Total number of edges: 6 +# ------------------------ +benzene >> toluene +benzene >> phenol +benzene >> benzonitrile +benzene >> anisole +benzene >> styrene +benzene >> benzaldehyde diff --git a/networks/data/benzenes.edge b/networks/data/benzenes.edge new file mode 100644 index 0000000..d1b2686 --- /dev/null +++ b/networks/data/benzenes.edge @@ -0,0 +1,6 @@ +1c91235:9c91235 # benzene -> toluene +1c91235:7876633 # benzene -> phenol +1c91235:2a51f95 # benzene -> benzonitrile +1c91235:efja0bc # benzene -> anisole +1c91235:7877722 # benzene -> styrene +1c91235:99930cd # benzene -> benzaldehyde