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+Tj46OhQ4daHQdIMwogAAAOiD/698orr6hAgQIWJwLSjgIIAIADtmzZov3798vb21uvvvqq1XGAe0IBBAAgBfFH//r27atChQpZnAi4NxRAAABSsH37du3bt085c+bUsGHDrI4D3DMKIAAAyYg/+tenTx8VKVLE4kTAvaMAAgCQjJ07d2rPnj3KkSOHhg8fbnUcIF1QAAEASEbs6F/v3r1VtGhRi9MA6YMCCABAEr755hvt3r1bXl5eeu2116yOA6QbCiAAAEmIHf3r2bOn7rvvPovTAOmHAggAQCK+/fZb7dy5U56enhoxYoTVcYB0RQEEACARY8eOlST16NFDJUqUsDgNkL4ogAAA3OG7777T9u3b5eHhoddff93qOEC6owACAHCH2NG/F198USVLlrQ2DJABKIAAAMTz/fffa8uWLXJ3d9cbb7xhdRwgQ1AAAQCIZ9y4cZKkLl266MEHH7Q4DZAxKIAAAPzPgQMH9NVXX8nNzU2jRo2yOg6QYSiAAAD8T+zoX6dOnVS6dGmL0wAZhwIIAICkH3/8UZ9//jmjf3AJFEAAABQ3+tehQweVK1fO4jRAxqIAAgBc3uHDh7VhwwbZbDaNHj3a6jhAhqMAAgBcXuzoX7t27VShQgWL0wAZjwIIAHBpv/zyi9auXStJGjNmjMVpgMxBAQQAuLTx48dLktq0aaNKlSpZnAbIHBRAAIDLOnr0qNasWSOJ0T+4FgogAMBlTZgwQXa7XS1bttTDDz9sdRwg01AAAQAu6fjx41q1apUk6c0337Q4DZC5KIAAAJc0YcIExcTEqHnz5qpatarVcYBMRQEEALicEydOaMWKFZIY/YNrogACAFzOxIkTFRMTo2bNmqlGjRpWxwEyHQUQAOBS/vjjDy1btkwSo39wXRRAAIBLmThxoqKjo9WkSRPVrFnT6jiAJSiAAACXcerUKS1ZskQSo39wbRRAAIDLmDRpkqKiotSoUSPVrl3b6jiAZSiAAACXcPr0aS1atEgSo38ABRAA4BLeffdd3bp1S/Xr11edOnWsjgNYigIIAMj2zp49q4ULF0pi9A+QKIAAABcwefJkRUZG6qmnntJTTz1ldRzAchRAAEC2dv78eX300UeSGP0DYlEAAQDZ2pQpU3Tz5k3VqVNHTz/9tNVxAKdAAQQAZFsXL17Uhx9+KMmM/tlsNosTAc6BAggAyLamTp2qGzduqHbt2mrYsKHVcQCnQQEEAGRLISEhmjdvniRG/4A7UQABANnSe++9p4iICNWsWVONGze2Og7gVCiAAIBs59KlS5o7d64kRv+AxFAAAQDZzvTp0xUeHq4aNWqoadOmVscBnA4FEACQrVy+fFlz5syRxOgfkBQKIAAgW3n//fd17do1Va1aVc8//7zVcQCnRAEEAGQbV65c0axZsyQx+gckhwIIAMg2Zs6cqbCwMFWuXFktWrSwOg7gtCiAAIBs4d9//9X7778vyYz+ubnxKw5ICv93AACyhdmzZys0NFSVKlVSq1atrI4DODUKIAAgywsLC9OMGTMkSWPGjGH0D0gB/4cAALK8OXPm6MqVKypfvrzatGljdRzA6VEAAQBZ2tWrVzVt2jRJZvTP3d3d4kSA8/OwOgAAAPdi3bp1uv/++1W3bl21b9/e6jhAlmCz2+32lJ4UFhYmf39/hYaGys/PLzNyAQAAIBVS09c4BAwAAOBiKIAAAAAuhgIIAADgYiiAAAAALoYCCAAA4GIogACALKNePWnwYKtTAFkfBRAAAMDFUAABAABcDAUQAJClREVJ/ftLefJI+fNLo0dLsZc0iIyUXntNKlZM8vGRHntM2rUr7rWLF5vXbdkiVagg+fpKTZpIFy7EPcdmu/tWsmTc9qNHpaZNzWsLF5a6dJH+/jtue7160sCBJke+fFKRItLbbyf8HkJDpd69pUKFJD8/qX596eef0/GHBKSAAggAyFKWLJE8PKTvv5dmzZJmzJA+/ths695d2rNHWrVKOnxYatvWFLwTJ+JeHx4uvfeetGyZtHu3dPq0NGxY3PYLF+Juv/0mlS4t1a0bt+2pp6SqVaUDB6TNm6W//pLatbs7o4+PyThlijR2rLRtm9lmt0vNmkkXL0qbNkkHD0rVq0sNGkj//JNhPzYgAS4FhyynZEkzCdzqieCLF5sM//5rbQ7AldSrJ4WESP/3f2ZkTpJef136/HPpiy+kMmWks2elokXjXtOwoVSzpjRxovn/tnt3U+xKlTLbP/jAFLSLFxO+l90utW5tCuK330q5cklvvmlK3ZYtcc87e1YqXlw6flwqW9ZkjI42r4lVs6YZ5Xv3XWnHDqllS/N95MgR95zSpc2oYe/e6fgDg0tJTV/zyKRMAJCh6tUzozLvv29xEGS4WrXiyp8k1a4tTZtmRuTsdlPC4rt50xwqjuXtHVf+JCkgwJSxO73xhrR3r7R/vyl/khmt27nTHP690++/x733ww8n3Bb/PQ4elK5dS5hJkiIizD6AzEABBOB0KHNIK3d3U7Dc3RM+Hr+weXom3Gazxc0hjLV8uTm0vGuXdN99cY/HxEjPPy9Nnnz3ewcEJP8eMTFx+wgISDg3MVaePIl8U0AGYA4gnE69emaCd1KTvCUzh6dHDyl3bqlECWnBgoT7OHdOat9eypvXvL5FC+nUqbjt3bpJgYFmHlBAgHnOK69It27FPefKFalrV7MPb2/p2WcTziMCYI19++6+X6aMVK2aOfQaEmIOp8a/FSni+P737pV69pQ+/NCMNsZXvbo5/Fyy5N3v4ePj2P6rVzeHmz087t5HgQKO5wTuBQUQTim5Sd6SOdzzyCPSjz9K/fpJfftKx46ZbeHh0tNPm0/8u3dL//lP3Eq/yMi4fezcaQ637Nxp3m/xYnOL1a2bOaT0+efmF4Ldblb+xS+JSH/duknffCPNnBm3AvPUKfNYzZpmzlRAgJn3FRWV9H5sNikoKOFjefIk/DtOjw8KKa06hWG32xUeHq5Lly7p5MmT+uWXX7Rv3z4FBwdr48aNWrlypRYsWKAVK1akuK8zZ6ShQ82cu08/lWbPlgYNModfO3UyH9zWr5dOnjSHbydPNostHHHxopmf16GD1LixuX/xonTpktn+yitmoUbHjtIPP0h//CFt3Wo+kEZHO/YeDRuaw9aBgWYu4alT0nffmQ+6Bw44tg/gXnEIGE6peHFT+mw2qVw56cgRc79XL7O9aVNT/CRpxIi4QzXly5vVf25upjDGzhNatMj88t+1S3rmGfNY3rzSnDnmUFH58mZVXnCweY8TJ0zx27NHevxx8/wVK0yuoCCzshAZY+ZM6b//lR56yEzMl8wv1qZNTSFbutSU/V69pJw57z69hqNiPyg8+aT5oODhIY0fbz4oHD4seXmZ5+3cacrfzp1m4UD79ubwdOx/i927m1/gq1aZhQcbNph9HDliRqWymujoaF2/fl3Xrl3T9evXE3yd0p8pbXNgzaGqVaumTp06Jfucrl3NfLmaNc3/vwMGxC2cWLTI/D2++qop+Pnzm7LVtKlj3/+xY2ZV75Il5hbr/vvN33PRoubfhREjTEG8edNsa9LE/LvjCJvNFNJRo0xxvHTJjFDWrWtOKwNkBgognFJSk7xjP2HHn2Bts5l/PONPsP7tN3N4OL4bNxJOsK5UKeE8oYAA80tbkn791RSCxx6L254/vymjv/56798fkubvb8qXt3fcYbtRo0z5njPH/H2XLy+dP29+Cb/5puO/eONLjw8Kv/9uRqDirzodNsycGmTRIrPqNCPY7XZFRkZmSFG7ceNGxoSOJ1euXPL19ZWPj89df1aqVCnZ18YfXZ037+7tnp7SO++YW2K6dTO3+AID46aY1Kt393zAO5UpY0YYHckY687R6Ny5zdGNWbOSfy8go1AAkSWlNMG6Rg0zYnenggUd20dSvwDs9oTFFJnj11/Nh4D4P/snnjArKc+eNfNAUys9PigcOuTYqtPE7Nq1S+fOnUtzUYtK7vh3OnBzc0u0oMX+mdy25J7r7e0t9ztXaADIdBRAOKWkJnk78nujenVp9eq4M+ynRcWKZn7Z99/HHQK+fNkcmqxQIW37RNolVrxjS3pShTyxlZ3x5+6lxweFmBjHVp0mZujQofrxxx+Tf5IDvLy8Ul3CHHluzpw5ZePTDpBtUQCRoex2u0JDQ3XhwoXbt+joaHXt2jXZ18VO8n75ZTPKMnu2OQTsiE6dpKlTzYT+sWPNKRxOnzaHbIYPT3hKh6SUKWNe36uXWQmYO7dZdFCsmHk8tRYuXKhLly7J3d1d7u7ucnNzu/31nbektmXma6z+xe/llXBCfcWK0rp1CYvgd9+Zv5dixRLfR8GCCS/vdeKEmfcXKz0+KMRfdfrkk6l7beXKlZUvX757LmqedzZUAHAABRBpEhMTo8uXLycodnfezp8/r4sXLyoiIiLBa6tVq5ZiAUxukndKvL3NpP4RI6RWraSrV01JaNAgdb/oFy0yKwufe86s9Kxb10zcTsvv27lz56bLaE9msdlsGVo0y5Urp7lz5yb5/iVLmtHXU6fMSFq/fuacgAMGmNMDHT8uvfWW+ZCQ1Py/+vXN3L1atcxI3YgRCf/u0uODQvxVp9OmmUL499/mSg+VKye/8GBJ/BUGAJDJKIBIICoqSiEhIbcLXFLl7uLFi6mag+Tv76+AgAAFBASodu3aKT7f09P8wk9sknf803TE+umnhPeLFEm4gu9O8U8FEuvOkw7nzWtWnCYlscnkSWnZsqWqVq2q6OhoRUdHKyYm5vbX8W9JPZ7er0mJ3W5XVFRUhs0z+yeFC54OGya9+KIZ+YuIMKfz2LTJFLMqVaR8+aSXXjKnzUjKtGlmhW7dumaBxsyZ5lBtrPT8oHAvq04BwArZ/lrA6X29Vme5Dm1q3bx5M9nRuthbSEiIQ6dqiFWgQIHbxe7OW9GiRRUQEKAiRYrI29vb4X1yFYiMZ7fbM6VoJvW4v7+/mjVrZvWPAQCyFa4FHE/79tn7k/i1a9eSPQQb+/WVK1cc3qebm5sKFy58u8AldStcuLC8Yk+WhizFZrPJw8NDHh7Z/p8AAEAisv2//rlyxV3EO6uw2+26cuWKQyN2165dc3i/Xl5eyRa62FvBggUtPU0DV1EAACBjOX0B3LzZzK/55RezGKB2bTOXp1QpMxfsgQfM6sDZs82k8TJlpPnzzfOkuw8B//yzuX/ggFlNWKaMWeX5yCNm+7p15sSyv/1mzvc1YICZ25OU0FAzLykoyJw/7JFHzFUpqlRJ/vvas2ePjh8/nmSxu3nzpsM/Ix8fn2QPwcbe8ubNa/nqTgBIT7du3VLfvn116NAh3X///Vq6dKly33lyRwB3cfoCeP26WelXubL5+s03zXUa40/6HzXKXKuzTBnzdceOpsAldnSrUyezUm/ePFMof/opbmXgwYNSu3bm0lLt25vTTPTrZyZ1JzbZ3243VwXIl89MUPf3N2WyQQNzvrh8+ZL+vgYMGJDiqtC8efM6NGLHP3YAXJWnp6cmTpyoRx55RD/++KM6dOigzz//nJNNAylw+gLYunXC+wsXmvN2HT0ad6LVYcNMEZPM5X8qVTIFsHz5u/d3+rQZsYvdFv9andOnm/I2Zoy5X7aseZ+pUxMvgDt3misChISYC9RLpogGBUlr1yZ/2pKyZcuqcOHCSY7cFSlSRDlz5kzpxwMALq9QoULasGGD6tSpo02bNumtt97S+PHjrY4FODWnL4C//24K2b595vxasWfgP33anCJCSnhd2IAA82dISOIFcOhQqWdPadkyqWFDqW1bczhZMpebuvMkv088YVajRkfffab/gwfNpajuvORTRETCS0klZtWqVck/AQDgsBo1aujjjz9W586dNWHCBFWtWlVt2rSxOhbgtNJwCfXM9fzz5hJcH31k5vh9/715PDIy7jnxT+4aO8Uttije6e23pf/7PzNiuGOHKZEbNphtyV1uKjExMaZw/vRTwtvx42aUEQCQeTp16qRX/zdp+8UXX9Thw4ctTgQ4L6cugJcvm1G50aPNodkKFaRUnM0kSWXLSkOGSFu3mhPALlpkHq9YUfrPfxI+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..b40a4a7 --- /dev/null +++ b/cookbook/generate_lomap_network.ipynb @@ -0,0 +1,323 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "035c0099-6892-4ed2-b0d6-80b1c247c1e7", + "metadata": {}, + "source": [ + "# Planning a Ligand Network" + ] + }, + { + "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 [LOMAP] network. \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": "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": 4, + "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": 5, + "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": 6, + "id": "92e0b934-8494-41f4-a0ad-0d0b01b3a8f9", + "metadata": {}, + "outputs": [ + { + "data": { + "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": [ + "
" + ] + }, + "execution_count": 6, + "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": "code", + "execution_count": null, + "id": "7e7cb163-6bc6-4172-9170-dc9c778cc9d6", + "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.8" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}