From 3454c3e0d109bc06ae897861f02d0bd1b44ea981 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Fri, 6 Nov 2026 15:56:01 +0100 Subject: [PATCH 1/9] Rename cinnabar title to match howto style --- .../PlottingFreeEnergiesUsingCinnabar.ipynb | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb b/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb index 955cc0d8..10697399 100644 --- a/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb +++ b/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb @@ -5,9 +5,14 @@ "id": "ddae61fd-fa15-4be9-9160-ba3e195c67dc", "metadata": {}, "source": [ - "# Plotting OpenFE results against experiment using Cinnabar v0.6.0\n", + "# Plot results against experiment with cinnabar\n", "\n", - "This notebook shows how one would go about creating a ``cinnabar`` style plot of OpenFE results against known experimental values. For more information on the ``cinnabar`` API and the available plot styles, see the [tutorials](https://cinnabar.openfree.energy/en/latest/tutorials/index.html)." + "This guide shows how to plot OpenFE relative free energy results against experimental values with\n", + "[cinnabar](https://github.com/OpenFreeEnergy/cinnabar), and how to derive absolute free energies from them.\n", + "\n", + "It uses the table written by `openfe gather --report ddg` and a table of experimental values.\n", + "For more on the `cinnabar` API and the available plot styles, see the\n", + "[cinnabar tutorials](https://cinnabar.openfree.energy/en/latest/tutorials/index.html)." ] }, { @@ -7309,7 +7314,7 @@ ], "metadata": { "kernelspec": { - "display_name": "openfe_dev", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -7323,7 +7328,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.9" + "version": "3.13.14" } }, "nbformat": 4, From b4f4a3e4533a2400f2893adab1840fc823ed13eb Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Mon, 9 Nov 2026 11:21:32 +0100 Subject: [PATCH 2/9] Merge cinnabar notebooks --- cookbook/assets/calc_dg.tsv | 11 - cookbook/assets/experimental.tsv | 13 - cookbook/cinnabar_absolute.ipynb | 88 +- .../PlottingFreeEnergiesUsingCinnabar.ipynb | 3164 ++++++++++++++--- plotting_rbfes_with_cinnabar/calc_dg.tsv | 11 + 5 files changed, 2819 insertions(+), 468 deletions(-) delete mode 100644 cookbook/assets/calc_dg.tsv delete mode 100644 cookbook/assets/experimental.tsv create mode 100644 plotting_rbfes_with_cinnabar/calc_dg.tsv diff --git a/cookbook/assets/calc_dg.tsv b/cookbook/assets/calc_dg.tsv deleted file mode 100644 index 669d449e..00000000 --- a/cookbook/assets/calc_dg.tsv +++ /dev/null @@ -1,11 +0,0 @@ -ligand DG(MLE) (kcal/mol) uncertainty (kcal/mol) -lig_ejm_31 -0.09 0.05 -lig_ejm_42 0.7 0.1 -lig_ejm_46 -0.98 0.05 -lig_ejm_47 -0.1 0.1 -lig_ejm_48 0.53 0.09 -lig_ejm_50 0.91 0.06 -lig_ejm_43 2.0 0.2 -lig_jmc_23 -0.68 0.09 -lig_jmc_27 -1.1 0.1 -lig_jmc_28 -1.25 0.08 diff --git a/cookbook/assets/experimental.tsv b/cookbook/assets/experimental.tsv deleted file mode 100644 index 2f2e07f8..00000000 --- a/cookbook/assets/experimental.tsv +++ /dev/null @@ -1,13 +0,0 @@ -ligand estimate (kcal/mol) uncertainty (kcal/mol) -lig_ejm_42 -9.81 0.18 -lig_ejm_43 -8.29 0.18 -lig_ejm_45 -9.59 0.18 -lig_ejm_46 -11.35 0.17 -lig_ejm_47 -9.73 0.18 -lig_ejm_48 -9.03 0.18 -lig_ejm_50 -9.01 0.18 -lig_ejm_54 -10.57 0.18 -lig_ejm_55 -9.24 0.18 -lig_jmc_23 -11.74 0.18 -lig_jmc_27 -11.31 0.17 -lig_jmc_28 -11.01 0.18 diff --git a/cookbook/cinnabar_absolute.ipynb b/cookbook/cinnabar_absolute.ipynb index f3cdbe24..f782636c 100644 --- a/cookbook/cinnabar_absolute.ipynb +++ b/cookbook/cinnabar_absolute.ipynb @@ -11,10 +11,11 @@ ] }, { - "metadata": {}, "cell_type": "code", - "outputs": [], "execution_count": null, + "id": "da7a708265bac6d9", + "metadata": {}, + "outputs": [], "source": [ "# First, we import the required libraries\n", "%matplotlib inline\n", @@ -22,12 +23,12 @@ "import pandas as pd\n", "from cinnabar import FEMap, plotting\n", "from openff.units import unit" - ], - "id": "da7a708265bac6d9" + ] }, { - "metadata": {}, "cell_type": "markdown", + "id": "d3b74ffc20c6622", + "metadata": {}, "source": [ "## Loading experimental data\n", "\n", @@ -38,23 +39,23 @@ "```\n", "ligand estimate (kcal/mol) uncertainty (kcal/mol)\n", "```" - ], - "id": "d3b74ffc20c6622" + ] }, { - "metadata": {}, "cell_type": "code", - "outputs": [], "execution_count": null, + "id": "5b402aa460d39cfb", + "metadata": {}, + "outputs": [], "source": [ "experimental_data = pd.read_csv('assets/experimental.tsv', sep=\"\\t\")\n", "experimental_data" - ], - "id": "5b402aa460d39cfb" + ] }, { - "metadata": {}, "cell_type": "markdown", + "id": "a9d25f4c1758b866", + "metadata": {}, "source": [ "## Loading free energy results\n", "\n", @@ -65,23 +66,23 @@ "
\n", "Note: If there is no experimental binding free energy for a ligand, that ligand's calcuated data will be excluded from the plot.\n", "
" - ], - "id": "a9d25f4c1758b866" + ] }, { - "metadata": {}, "cell_type": "code", - "outputs": [], "execution_count": null, + "id": "1d6fb223da1efe00", + "metadata": {}, + "outputs": [], "source": [ "calculated_data = pd.read_csv('assets/calc_dg.tsv', sep=\"\\t\")\n", "calculated_data" - ], - "id": "1d6fb223da1efe00" + ] }, { - "metadata": {}, "cell_type": "markdown", + "id": "8781f5c4ff6493c1", + "metadata": {}, "source": [ "
\n", "Note: When using results from relative binding afinity calculations, the derived absolute binding afinites will be centered around zero rather than the experimental mean. Thus an offset should be applied to the calculated results before comparing them.\n", @@ -90,14 +91,14 @@ "You can read more about absolute estimators in the [cinnabar guide](https://cinnabar.openfree.energy/en/latest/concepts/estimators.html#centering-of-results)\n", "\n", "Next, we will use the ``cinnabar`` API to gather the experimental and calculated results into a single object:" - ], - "id": "8781f5c4ff6493c1" + ] }, { - "metadata": {}, "cell_type": "code", - "outputs": [], "execution_count": null, + "id": "c3a96a00cabbd790", + "metadata": {}, + "outputs": [], "source": [ "# Create FEMap\n", "fe_map = FEMap()\n", @@ -119,34 +120,40 @@ " uncertainty=row[\"uncertainty (kcal/mol)\"] * unit.kilocalories_per_mole,\n", " source=\"openfe\"\n", " )" - ], - "id": "c3a96a00cabbd790" + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "We can then check that the absolute measurements were added correctly:", - "id": "883ce05e186f631d" + "id": "883ce05e186f631d", + "metadata": {}, + "source": [ + "We can then check that the absolute measurements were added correctly:" + ] }, { - "metadata": {}, "cell_type": "code", - "outputs": [], "execution_count": null, - "source": "fe_map.get_absolute_dataframe()", - "id": "9f5f9ff2b2628be8" + "id": "9f5f9ff2b2628be8", + "metadata": {}, + "outputs": [], + "source": [ + "fe_map.get_absolute_dataframe()" + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "Finally, we can use ``cinnabar`` to plot the calculated vs. experimental results with some accuracy and ranking metrics:", - "id": "bf9d8fcff63cc1e7" + "id": "bf9d8fcff63cc1e7", + "metadata": {}, + "source": [ + "Finally, we can use ``cinnabar`` to plot the calculated vs. experimental results with some accuracy and ranking metrics:" + ] }, { - "metadata": {}, "cell_type": "code", - "outputs": [], "execution_count": null, + "id": "641c870dbd8a0021", + "metadata": {}, + "outputs": [], "source": [ "plotting.plot_DGs(\n", " fe_map, \n", @@ -155,8 +162,7 @@ " shift=experimental_data[\"estimate (kcal/mol)\"].mean(), # shift the computed values by the mean of the experimental values to put them on a similar scale\n", " xy_lim=[-15, -5]\n", " )" - ], - "id": "641c870dbd8a0021" + ] }, { "cell_type": "code", @@ -169,7 +175,7 @@ ], "metadata": { "kernelspec": { - "display_name": "openfe_dev", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -183,7 +189,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.9" + "version": "3.13.14" } }, "nbformat": 4, diff --git a/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb b/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb index 10697399..59227ce5 100644 --- a/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb +++ b/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb @@ -7,12 +7,14 @@ "source": [ "# Plot results against experiment with cinnabar\n", "\n", - "This guide shows how to plot OpenFE relative free energy results against experimental values with\n", - "[cinnabar](https://github.com/OpenFreeEnergy/cinnabar), and how to derive absolute free energies from them.\n", + "Here, we show how to plot OpenFE free energy results against experimental values with [cinnabar](https://github.com/OpenFreeEnergy/cinnabar). It covers:\n", "\n", - "It uses the table written by `openfe gather --report ddg` and a table of experimental values.\n", - "For more on the `cinnabar` API and the available plot styles, see the\n", - "[cinnabar tutorials](https://cinnabar.openfree.energy/en/latest/tutorials/index.html)." + "1. relative free energies, from the table written by `openfe gather --report ddg`, and the absolute free energies derived from them, and\n", + "2. absolute free energies, from the table written by `openfe gather --report dg`, `openfe gather-abfe --report dg` or `openfe gather-septop --report dg`.\n", + "\n", + "This notebook requires `cinnabar` 0.6 or later, which is installed with openfe. With older versions, the plotting functions fail with errors such as `'FEMap' object has no attribute 'edges'`.\n", + "\n", + "For more on the `cinnabar` API and the available plot styles, see the [cinnabar tutorials](https://cinnabar.openfree.energy/en/latest/tutorials/index.html)." ] }, { @@ -41,7 +43,7 @@ " \n", " !pip install -q condacolab\n", " import condacolab\n", - " condacolab.install_from_url(\"https://github.com/OpenFreeEnergy/openfe/releases/download/v1.7.0/OpenFEforge-1.7.0-Linux-x86_64.sh\")" + " condacolab.install_from_url(\"https://github.com/OpenFreeEnergy/openfe/releases/download/v1.13.0/OpenFEforge-1.13.0-Linux-x86_64.sh\")" ] }, { @@ -95,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "6abcaae7-f5fd-483c-972f-5bb5b6d4908a", "metadata": {}, "outputs": [], @@ -110,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "id": "8b80f592-f1a3-4c7f-8757-58a88c2e8ee7", "metadata": {}, "outputs": [ @@ -240,7 +242,7 @@ "12 lig_jmc_28 -11.01 0.18" ] }, - "execution_count": 4, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -256,7 +258,9 @@ "id": "aca5ede7-3741-4cc1-97ba-9115d90abd96", "metadata": {}, "source": [ - "## Loading free energy results\n", + "## Plotting relative free energy results\n", + "\n", + "### Loading the results\n", "\n", "Next we load in results from the TSV file created by running `openfe gather --report ddg` on a network of results from [relative binding free energy calculations](https://docs.openfree.energy/en/latest/guide/protocols/relativehybridtopology.html#overview).\n", "\n", @@ -265,7 +269,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "id": "63a920b3-6ef3-4214-b3cc-433319053721", "metadata": {}, "outputs": [ @@ -377,7 +381,7 @@ "8 lig_ejm_46 lig_jmc_28 -0.12 0.04" ] }, - "execution_count": 5, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -393,7 +397,7 @@ "id": "a1daf9cf-5107-4564-a200-b9fe670837cb", "metadata": {}, "source": [ - "## Creating a Cinnabar ``FEMap``\n", + "### Creating a Cinnabar ``FEMap``\n", "\n", "Next we will use the ``cinnabar`` API to gather the experimental and calculated results into a single object which we can use to plot and analyse the network of results.\n", "\n", @@ -402,7 +406,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "id": "16d98240-62b3-469c-a12a-c2b8337caba9", "metadata": {}, "outputs": [], @@ -443,14 +447,14 @@ "id": "7dea03c7-6b6a-4e59-96e7-a94cdc9047e9", "metadata": {}, "source": [ - "## Plotting the results using Cinnabar\n", + "### Plotting the results using Cinnabar\n", "\n", "Once we've created the ``FEMap`` we can inspect the alchemical network:" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "id": "86c004bc-bc58-4a55-92e2-151beb994d65", "metadata": {}, "outputs": [ @@ -465,11 +469,11 @@ " \n", " \n", " \n", - " 2026-06-11T16:46:07.194312\n", + " 2026-11-09T11:10:30.069144\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.10.6, https://matplotlib.org/\n", + " Matplotlib v3.10.9, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -491,96 +495,96 @@ " \n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pe98b7d9fe8)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -806,7 +810,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -868,7 +872,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -917,7 +921,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -946,7 +950,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1004,7 +1008,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1069,7 +1073,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1086,7 +1090,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1126,7 +1130,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1143,7 +1147,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1429,7 +1433,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1459,7 +1463,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "id": "2edeabb9-9c07-49be-a83f-9622ef742046", "metadata": {}, "outputs": [ @@ -1474,11 +1478,11 @@ " \n", " \n", " \n", - " 2026-06-11T16:46:07.934913\n", + " 2026-11-09T11:10:31.704002\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.10.6, https://matplotlib.org/\n", + " Matplotlib v3.10.9, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -1507,7 +1511,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1661,7 +1665,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1691,7 +1695,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1727,7 +1731,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1740,7 +1744,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2131,12 +2135,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2161,7 +2165,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2204,7 +2208,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2220,7 +2224,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2236,7 +2240,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2251,7 +2255,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2266,7 +2270,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2281,7 +2285,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2296,7 +2300,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2414,21 +2418,21 @@ " \n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke: #808080; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p2b4c4d7bff)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2489,7 +2493,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2523,7 +2527,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2636,7 +2640,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3102,7 +3120,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3137,7 +3155,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "f39ef3c0-4d74-4c53-83bc-94d820428d47", "metadata": {}, "outputs": [ @@ -3152,11 +3170,11 @@ " \n", " \n", " \n", - " 2026-06-11T16:46:09.054363\n", + " 2026-11-09T11:10:39.985310\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.10.6, https://matplotlib.org/\n", + " Matplotlib v3.10.9, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -3185,7 +3203,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3346,7 +3364,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3376,7 +3394,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3412,7 +3430,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3425,7 +3443,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3815,12 +3833,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3845,7 +3863,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3888,7 +3906,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3904,7 +3922,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3920,7 +3938,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3935,7 +3953,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3950,7 +3968,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3965,7 +3983,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3980,7 +3998,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4097,11 +4115,11 @@ " \n", " \n", + "\" clip-path=\"url(#pa696ef3a74)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -4165,7 +4183,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4199,7 +4217,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4328,7 +4346,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4697,7 +4715,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -4828,7 +4848,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4926,7 +4946,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4960,7 +4980,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "id": "7fed7b2c-076f-4f98-818d-abdbdaf3121b", "metadata": {}, "outputs": [ @@ -4975,11 +4995,11 @@ " \n", " \n", " \n", - " 2026-06-11T16:46:10.193190\n", + " 2026-11-09T11:10:42.660815\n", " image/svg+xml\n", " \n", " \n", - " Matplotlib v3.10.6, https://matplotlib.org/\n", + " Matplotlib v3.10.9, https://matplotlib.org/\n", " \n", " \n", " \n", @@ -5008,7 +5028,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5184,7 +5204,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5199,7 +5219,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5237,7 +5257,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5283,7 +5303,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5715,12 +5735,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5746,7 +5766,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5790,7 +5810,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5807,7 +5827,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5824,7 +5844,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5841,7 +5861,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5857,7 +5877,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5873,7 +5893,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5889,7 +5909,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6007,11 +6027,11 @@ " \n", " \n", + "\" clip-path=\"url(#p46f696b631)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -6075,7 +6095,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6109,7 +6129,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6238,7 +6258,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6607,7 +6627,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -6730,17 +6748,17 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6838,7 +6856,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6868,14 +6886,14 @@ "id": "0c1b5935-d11b-4c1b-b092-038b007323ce", "metadata": {}, "source": [ - "## Writing out the MLE derived absolute free energies\n", + "### Writing out the MLE derived absolute free energies\n", "\n", "Finally, we can also extract the MLE derived absolute free energies along with the experimental results into a pandas ``DataFrame``." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "id": "26b09073-f05f-401c-a10f-95c6c957f4da", "metadata": {}, "outputs": [ @@ -7148,7 +7166,7 @@ "22 True " ] }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -7170,7 +7188,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "id": "8069c254", "metadata": {}, "outputs": [ @@ -7301,7 +7319,7 @@ "9 lig_jmc_28 -0.809 0.079335 MLE True" ] }, - "execution_count": 12, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -7310,6 +7328,2346 @@ "mle_df = abs_df[abs_df[\"source\"] == \"MLE\"].reset_index(drop=True)\n", "mle_df" ] + }, + { + "cell_type": "markdown", + "id": "cfca38eb-4928-4f13-9a22-9676c21b28f6", + "metadata": {}, + "source": [ + "## Plotting absolute free energy results\n", + "\n", + "Absolute free energies can also be plotted directly from a table of free energies per ligand. This table can be written by:\n", + "\n", + "* `openfe gather --report dg`, which derives the absolute free energies from a network of relative free energy calculations using the MLE estimator, or\n", + "* `openfe gather-abfe --report dg` or `openfe gather-septop --report dg`, for results from the [Absolute Binding](https://docs.openfree.energy/en/latest/guide/protocols/absolutebinding.html) or [Separated Topologies](https://docs.openfree.energy/en/latest/guide/protocols/septop.html) Protocols.\n", + "\n", + "Here we load the results of `openfe gather --report dg` for a network of relative binding free energy calculations. The free energy column is called `DG(MLE) (kcal/mol)` in this report, and `DG (kcal/mol)` in the `gather-abfe` and `gather-septop` reports.\n", + "\n", + "
\n", + "Note: If there is no experimental binding free energy for a ligand, that ligand's calculated data will be excluded from the plot.\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "4638d997-5252-465c-bd40-aa368c68acd3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ligandDG(MLE) (kcal/mol)uncertainty (kcal/mol)
0lig_ejm_31-0.090.05
1lig_ejm_420.700.10
2lig_ejm_46-0.980.05
3lig_ejm_47-0.100.10
4lig_ejm_480.530.09
5lig_ejm_500.910.06
6lig_ejm_432.000.20
7lig_jmc_23-0.680.09
8lig_jmc_27-1.100.10
9lig_jmc_28-1.250.08
\n", + "
" + ], + "text/plain": [ + " ligand DG(MLE) (kcal/mol) uncertainty (kcal/mol)\n", + "0 lig_ejm_31 -0.09 0.05\n", + "1 lig_ejm_42 0.70 0.10\n", + "2 lig_ejm_46 -0.98 0.05\n", + "3 lig_ejm_47 -0.10 0.10\n", + "4 lig_ejm_48 0.53 0.09\n", + "5 lig_ejm_50 0.91 0.06\n", + "6 lig_ejm_43 2.00 0.20\n", + "7 lig_jmc_23 -0.68 0.09\n", + "8 lig_jmc_27 -1.10 0.10\n", + "9 lig_jmc_28 -1.25 0.08" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "calculated_dg_data = pd.read_csv('calc_dg.tsv', sep=\"\\t\")\n", + "calculated_dg_data" + ] + }, + { + "cell_type": "markdown", + "id": "c2774fc9-2874-4483-9d72-f402f65eb66b", + "metadata": {}, + "source": [ + "Next, we gather the experimental and calculated results into a new ``FEMap``:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "6cdb7f24-8f9b-424a-ab29-3c4634c63e19", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
labelDG (kcal/mol)uncertainty (kcal/mol)sourcecomputational
0lig_ejm_31-9.570.18ExperimentalFalse
1lig_ejm_42-9.810.18ExperimentalFalse
2lig_ejm_43-8.290.18ExperimentalFalse
3lig_ejm_45-9.590.18ExperimentalFalse
4lig_ejm_46-11.350.17ExperimentalFalse
5lig_ejm_47-9.730.18ExperimentalFalse
6lig_ejm_48-9.030.18ExperimentalFalse
7lig_ejm_50-9.010.18ExperimentalFalse
8lig_ejm_54-10.570.18ExperimentalFalse
9lig_ejm_55-9.240.18ExperimentalFalse
10lig_jmc_23-11.740.18ExperimentalFalse
11lig_jmc_27-11.310.17ExperimentalFalse
12lig_jmc_28-11.010.18ExperimentalFalse
13lig_ejm_31-0.090.05openfeTrue
14lig_ejm_420.700.10openfeTrue
15lig_ejm_432.000.20openfeTrue
16lig_ejm_46-0.980.05openfeTrue
17lig_ejm_47-0.100.10openfeTrue
18lig_ejm_480.530.09openfeTrue
19lig_ejm_500.910.06openfeTrue
20lig_jmc_23-0.680.09openfeTrue
21lig_jmc_27-1.100.10openfeTrue
22lig_jmc_28-1.250.08openfeTrue
\n", + "
" + ], + "text/plain": [ + " label DG (kcal/mol) uncertainty (kcal/mol) source \\\n", + "0 lig_ejm_31 -9.57 0.18 Experimental \n", + "1 lig_ejm_42 -9.81 0.18 Experimental \n", + "2 lig_ejm_43 -8.29 0.18 Experimental \n", + "3 lig_ejm_45 -9.59 0.18 Experimental \n", + "4 lig_ejm_46 -11.35 0.17 Experimental \n", + "5 lig_ejm_47 -9.73 0.18 Experimental \n", + "6 lig_ejm_48 -9.03 0.18 Experimental \n", + "7 lig_ejm_50 -9.01 0.18 Experimental \n", + "8 lig_ejm_54 -10.57 0.18 Experimental \n", + "9 lig_ejm_55 -9.24 0.18 Experimental \n", + "10 lig_jmc_23 -11.74 0.18 Experimental \n", + "11 lig_jmc_27 -11.31 0.17 Experimental \n", + "12 lig_jmc_28 -11.01 0.18 Experimental \n", + "13 lig_ejm_31 -0.09 0.05 openfe \n", + "14 lig_ejm_42 0.70 0.10 openfe \n", + "15 lig_ejm_43 2.00 0.20 openfe \n", + "16 lig_ejm_46 -0.98 0.05 openfe \n", + "17 lig_ejm_47 -0.10 0.10 openfe \n", + "18 lig_ejm_48 0.53 0.09 openfe \n", + "19 lig_ejm_50 0.91 0.06 openfe \n", + "20 lig_jmc_23 -0.68 0.09 openfe \n", + "21 lig_jmc_27 -1.10 0.10 openfe \n", + "22 lig_jmc_28 -1.25 0.08 openfe \n", + "\n", + " computational \n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "5 False \n", + "6 False \n", + "7 False \n", + "8 False \n", + "9 False \n", + "10 False \n", + "11 False \n", + "12 False \n", + "13 True \n", + "14 True \n", + "15 True \n", + "16 True \n", + "17 True \n", + "18 True \n", + "19 True \n", + "20 True \n", + "21 True \n", + "22 True " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dg_fe_map = FEMap()\n", + "\n", + "# add the experimental data\n", + "for _, row in experimental_data.iterrows():\n", + " dg_fe_map.add_experimental_measurement(\n", + " label=row['ligand'],\n", + " value=row['estimate (kcal/mol)'] * unit.kilocalories_per_mole,\n", + " uncertainty=row['uncertainty (kcal/mol)'] * unit.kilocalories_per_mole,\n", + " source=\"Experimental\",\n", + " )\n", + "\n", + "# add the calculated data\n", + "for _, row in calculated_dg_data.iterrows():\n", + " dg_fe_map.add_absolute_calculation(\n", + " label=row['ligand'],\n", + " # use row[\"DG (kcal/mol)\"] for gather-abfe and gather-septop reports\n", + " value=row[\"DG(MLE) (kcal/mol)\"] * unit.kilocalories_per_mole,\n", + " uncertainty=row[\"uncertainty (kcal/mol)\"] * unit.kilocalories_per_mole,\n", + " source=\"openfe\",\n", + " )\n", + "\n", + "dg_fe_map.get_absolute_dataframe()" + ] + }, + { + "cell_type": "markdown", + "id": "a9c61065-a716-47be-9da2-3c2d25e44401", + "metadata": {}, + "source": [ + "
\n", + "Note: Absolute free energies derived from relative binding free energy calculations are centred around zero rather than the experimental mean, so we shift them by the mean of the experimental values before comparing them. Results from absolute binding free energy calculations do not need this shift.\n", + "
\n", + "\n", + "You can read more about this in the [cinnabar guide](https://cinnabar.openfree.energy/en/latest/concepts/estimators.html#centering-of-results).\n", + "\n", + "Finally, we plot the calculated against the experimental results, with some accuracy and ranking metrics:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "95eaa8f8-deb0-4671-86fd-b094598cb8ae", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2026-11-09T11:12:19.333995\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.10.9, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plotting.plot_DGs(\n", + " dg_fe_map,\n", + " source=\"openfe\", # the name of the computational source to plot\n", + " figsize=5,\n", + " shift=experimental_data[\"estimate (kcal/mol)\"].mean(), # leave out for ABFE results\n", + " xy_lim=[-15, -5],\n", + ")" + ] } ], "metadata": { diff --git a/plotting_rbfes_with_cinnabar/calc_dg.tsv b/plotting_rbfes_with_cinnabar/calc_dg.tsv new file mode 100644 index 00000000..ba1e75f9 --- /dev/null +++ b/plotting_rbfes_with_cinnabar/calc_dg.tsv @@ -0,0 +1,11 @@ +ligand DG(MLE) (kcal/mol) uncertainty (kcal/mol) +lig_ejm_31 -0.09 0.05 +lig_ejm_42 0.7 0.1 +lig_ejm_46 -0.98 0.05 +lig_ejm_47 -0.1 0.1 +lig_ejm_48 0.53 0.09 +lig_ejm_50 0.91 0.06 +lig_ejm_43 2.0 0.2 +lig_jmc_23 -0.68 0.09 +lig_jmc_27 -1.1 0.1 +lig_jmc_28 -1.25 0.08 From 6503f2d025cfdc04965156958f7c7f5d169fe033 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Mon, 9 Nov 2026 11:22:22 +0100 Subject: [PATCH 3/9] Remove absolute notebook --- cookbook/cinnabar_absolute.ipynb | 197 ------------------------------- 1 file changed, 197 deletions(-) delete mode 100644 cookbook/cinnabar_absolute.ipynb diff --git a/cookbook/cinnabar_absolute.ipynb b/cookbook/cinnabar_absolute.ipynb deleted file mode 100644 index f782636c..00000000 --- a/cookbook/cinnabar_absolute.ipynb +++ /dev/null @@ -1,197 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "ddae61fd-fa15-4be9-9160-ba3e195c67dc", - "metadata": {}, - "source": [ - "# Plotting OpenFE DG results against experiment using Cinnabar v0.6.0\n", - "\n", - "This notebook shows how one would go about creating a ``cinnabar`` style plot of OpenFE results against known experimental values. For more information on using the ``cinnabar`` API please see the [tutorials](https://cinnabar.openfree.energy/en/latest/tutorials/index.html)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "da7a708265bac6d9", - "metadata": {}, - "outputs": [], - "source": [ - "# First, we import the required libraries\n", - "%matplotlib inline\n", - "%config InlineBackend.figure_formats = ['svg']\n", - "import pandas as pd\n", - "from cinnabar import FEMap, plotting\n", - "from openff.units import unit" - ] - }, - { - "cell_type": "markdown", - "id": "d3b74ffc20c6622", - "metadata": {}, - "source": [ - "## Loading experimental data\n", - "\n", - "First, we load the experimental data from a tab-separated values (TSV) file\n", - "\n", - "The format of the TSV file is as follows:\n", - "\n", - "```\n", - "ligand estimate (kcal/mol) uncertainty (kcal/mol)\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5b402aa460d39cfb", - "metadata": {}, - "outputs": [], - "source": [ - "experimental_data = pd.read_csv('assets/experimental.tsv', sep=\"\\t\")\n", - "experimental_data" - ] - }, - { - "cell_type": "markdown", - "id": "a9d25f4c1758b866", - "metadata": {}, - "source": [ - "## Loading free energy results\n", - "\n", - "Next we load in results from the TSV file created by running `openfe gather --report dg` on a network of results from [relative binding free energy calculations](https://docs.openfree.energy/en/latest/guide/protocols/relativehybridtopology.html#overview). [Absolute binding free energy estimates](https://docs.openfree.energy/en/latest/guide/protocols/absolutebinding.html) can also be used here, a report in the same format can be generated by running `openfe gather-abfe --report dg`.\n", - "\n", - "Please see the following tutorial for more information on how to run the gather command: https://github.com/OpenFreeEnergy/ExampleNotebooks/blob/main/rbfe_tutorial/cli_tutorial.md\n", - "\n", - "
\n", - "Note: If there is no experimental binding free energy for a ligand, that ligand's calcuated data will be excluded from the plot.\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1d6fb223da1efe00", - "metadata": {}, - "outputs": [], - "source": [ - "calculated_data = pd.read_csv('assets/calc_dg.tsv', sep=\"\\t\")\n", - "calculated_data" - ] - }, - { - "cell_type": "markdown", - "id": "8781f5c4ff6493c1", - "metadata": {}, - "source": [ - "
\n", - "Note: When using results from relative binding afinity calculations, the derived absolute binding afinites will be centered around zero rather than the experimental mean. Thus an offset should be applied to the calculated results before comparing them.\n", - "
\n", - "\n", - "You can read more about absolute estimators in the [cinnabar guide](https://cinnabar.openfree.energy/en/latest/concepts/estimators.html#centering-of-results)\n", - "\n", - "Next, we will use the ``cinnabar`` API to gather the experimental and calculated results into a single object:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c3a96a00cabbd790", - "metadata": {}, - "outputs": [], - "source": [ - "# Create FEMap\n", - "fe_map = FEMap()\n", - "\n", - "# add the experimental data\n", - "for index, row in experimental_data.iterrows():\n", - " fe_map.add_experimental_measurement(\n", - " label=row['ligand'],\n", - " value=row['estimate (kcal/mol)'] * unit.kilocalories_per_mole,\n", - " uncertainty=row['uncertainty (kcal/mol)'] * unit.kilocalories_per_mole,\n", - " source=\"Experimental\"\n", - " )\n", - "\n", - "# add the computed data\n", - "for index, row in calculated_data.iterrows():\n", - " fe_map.add_absolute_calculation(\n", - " label=row['ligand'],\n", - " value=row[\"DG(MLE) (kcal/mol)\"] * unit.kilocalories_per_mole,\n", - " uncertainty=row[\"uncertainty (kcal/mol)\"] * unit.kilocalories_per_mole,\n", - " source=\"openfe\"\n", - " )" - ] - }, - { - "cell_type": "markdown", - "id": "883ce05e186f631d", - "metadata": {}, - "source": [ - "We can then check that the absolute measurements were added correctly:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9f5f9ff2b2628be8", - "metadata": {}, - "outputs": [], - "source": [ - "fe_map.get_absolute_dataframe()" - ] - }, - { - "cell_type": "markdown", - "id": "bf9d8fcff63cc1e7", - "metadata": {}, - "source": [ - "Finally, we can use ``cinnabar`` to plot the calculated vs. experimental results with some accuracy and ranking metrics:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "641c870dbd8a0021", - "metadata": {}, - "outputs": [], - "source": [ - "plotting.plot_DGs(\n", - " fe_map, \n", - " source=\"openfe\", # the name of the computational source to plot\n", - " figsize=5, \n", - " shift=experimental_data[\"estimate (kcal/mol)\"].mean(), # shift the computed values by the mean of the experimental values to put them on a similar scale\n", - " xy_lim=[-15, -5]\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b7a7fa721a373142", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.14" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From 378080ee6a66d4cc5d5f9217e0e87fd37ef16dcd Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Mon, 9 Nov 2026 11:44:17 +0100 Subject: [PATCH 4/9] Update results file --- .../PlottingFreeEnergiesUsingCinnabar.ipynb | 884 +++++++++--------- plotting_rbfes_with_cinnabar/calc_dg.tsv | 22 +- 2 files changed, 446 insertions(+), 460 deletions(-) diff --git a/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb b/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb index 59227ce5..3c5fb51d 100644 --- a/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb +++ b/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb @@ -469,7 +469,7 @@ " \n", " \n", " \n", - " 2026-11-09T11:10:30.069144\n", + " 2026-11-09T11:42:01.429293\n", " image/svg+xml\n", " \n", " \n", @@ -495,96 +495,96 @@ " \n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#pd05abd198b)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -810,7 +810,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -872,7 +872,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -921,7 +921,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -950,7 +950,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1008,7 +1008,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1073,7 +1073,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1090,7 +1090,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1130,7 +1130,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1147,7 +1147,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1433,7 +1433,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1478,7 +1478,7 @@ " \n", " \n", " \n", - " 2026-11-09T11:10:31.704002\n", + " 2026-11-09T11:42:03.019967\n", " image/svg+xml\n", " \n", " \n", @@ -1511,7 +1511,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1665,7 +1665,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1695,7 +1695,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1731,7 +1731,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1744,7 +1744,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2135,12 +2135,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2165,7 +2165,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2208,7 +2208,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2224,7 +2224,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2240,7 +2240,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2255,7 +2255,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2270,7 +2270,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2285,7 +2285,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2300,7 +2300,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2418,21 +2418,21 @@ " \n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke: #808080; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9b8f96b460)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2493,7 +2493,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2527,7 +2527,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2640,7 +2640,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", + " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3120,7 +3106,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3155,7 +3141,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "f39ef3c0-4d74-4c53-83bc-94d820428d47", "metadata": {}, "outputs": [ @@ -3170,7 +3156,7 @@ " \n", " \n", " \n", - " 2026-11-09T11:10:39.985310\n", + " 2026-11-09T11:42:04.363090\n", " image/svg+xml\n", " \n", " \n", @@ -3203,7 +3189,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3364,7 +3350,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3394,7 +3380,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3430,7 +3416,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3443,7 +3429,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3833,12 +3819,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3863,7 +3849,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3906,7 +3892,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3922,7 +3908,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3938,7 +3924,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3953,7 +3939,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3968,7 +3954,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3983,7 +3969,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3998,7 +3984,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4115,11 +4101,11 @@ " \n", " \n", + "\" clip-path=\"url(#p01399889a7)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -4183,7 +4169,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4217,7 +4203,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4715,7 +4701,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -4946,7 +4930,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4980,7 +4964,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "7fed7b2c-076f-4f98-818d-abdbdaf3121b", "metadata": {}, "outputs": [ @@ -4995,7 +4979,7 @@ " \n", " \n", " \n", - " 2026-11-09T11:10:42.660815\n", + " 2026-11-09T11:42:05.928634\n", " image/svg+xml\n", " \n", " \n", @@ -5028,7 +5012,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5204,7 +5188,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5219,7 +5203,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5257,7 +5241,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5303,7 +5287,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5735,12 +5719,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5766,7 +5750,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5810,7 +5794,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5827,7 +5811,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5844,7 +5828,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5861,7 +5845,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5877,7 +5861,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5893,7 +5877,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5909,7 +5893,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6027,11 +6011,11 @@ " \n", " \n", + "\" clip-path=\"url(#pcb7f0aaaf7)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -6095,7 +6079,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6129,7 +6113,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6258,7 +6242,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", + " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6627,7 +6611,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -6748,7 +6734,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6856,7 +6842,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6893,7 +6879,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "id": "26b09073-f05f-401c-a10f-95c6c957f4da", "metadata": {}, "outputs": [ @@ -7166,7 +7152,7 @@ "22 True " ] }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -7188,7 +7174,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "id": "8069c254", "metadata": {}, "outputs": [ @@ -7319,7 +7305,7 @@ "9 lig_jmc_28 -0.809 0.079335 MLE True" ] }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -7813,7 +7799,7 @@ " \n", " \n", " \n", - " 2026-11-09T11:12:19.333995\n", + " 2026-11-09T11:43:48.965120\n", " image/svg+xml\n", " \n", " \n", @@ -7846,7 +7832,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8017,7 +8003,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8058,7 +8044,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8096,7 +8082,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8151,7 +8137,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8574,12 +8560,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8594,7 +8580,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8609,7 +8595,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8624,7 +8610,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8638,7 +8624,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8754,11 +8740,11 @@ " \n", " \n", + "\" clip-path=\"url(#p8ca79f96d6)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -8822,7 +8808,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8888,7 +8874,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9392,7 +9378,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9537,13 +9523,13 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9645,7 +9631,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", diff --git a/plotting_rbfes_with_cinnabar/calc_dg.tsv b/plotting_rbfes_with_cinnabar/calc_dg.tsv index ba1e75f9..669d449e 100644 --- a/plotting_rbfes_with_cinnabar/calc_dg.tsv +++ b/plotting_rbfes_with_cinnabar/calc_dg.tsv @@ -1,11 +1,11 @@ -ligand DG(MLE) (kcal/mol) uncertainty (kcal/mol) -lig_ejm_31 -0.09 0.05 -lig_ejm_42 0.7 0.1 -lig_ejm_46 -0.98 0.05 -lig_ejm_47 -0.1 0.1 -lig_ejm_48 0.53 0.09 -lig_ejm_50 0.91 0.06 -lig_ejm_43 2.0 0.2 -lig_jmc_23 -0.68 0.09 -lig_jmc_27 -1.1 0.1 -lig_jmc_28 -1.25 0.08 +ligand DG(MLE) (kcal/mol) uncertainty (kcal/mol) +lig_ejm_31 -0.09 0.05 +lig_ejm_42 0.7 0.1 +lig_ejm_46 -0.98 0.05 +lig_ejm_47 -0.1 0.1 +lig_ejm_48 0.53 0.09 +lig_ejm_50 0.91 0.06 +lig_ejm_43 2.0 0.2 +lig_jmc_23 -0.68 0.09 +lig_jmc_27 -1.1 0.1 +lig_jmc_28 -1.25 0.08 From 834c0b20712d6ca88ba8e05f33c5ea1005561237 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Mon, 9 Nov 2026 14:44:33 +0100 Subject: [PATCH 5/9] Move cinnabar tutorial to cookbooks --- .../assets}/calc_dg.tsv | 0 .../assets}/experimental.tsv | 0 .../plot_results_with_cinnabar.ipynb | 772 +++++++++--------- .../final_results.tsv | 10 - 4 files changed, 408 insertions(+), 374 deletions(-) rename {plotting_rbfes_with_cinnabar => cookbook/assets}/calc_dg.tsv (100%) rename {plotting_rbfes_with_cinnabar => cookbook/assets}/experimental.tsv (100%) rename plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb => cookbook/plot_results_with_cinnabar.ipynb (94%) delete mode 100644 plotting_rbfes_with_cinnabar/final_results.tsv diff --git a/plotting_rbfes_with_cinnabar/calc_dg.tsv b/cookbook/assets/calc_dg.tsv similarity index 100% rename from plotting_rbfes_with_cinnabar/calc_dg.tsv rename to cookbook/assets/calc_dg.tsv diff --git a/plotting_rbfes_with_cinnabar/experimental.tsv b/cookbook/assets/experimental.tsv similarity index 100% rename from plotting_rbfes_with_cinnabar/experimental.tsv rename to cookbook/assets/experimental.tsv diff --git a/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb b/cookbook/plot_results_with_cinnabar.ipynb similarity index 94% rename from plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb rename to cookbook/plot_results_with_cinnabar.ipynb index 3c5fb51d..14d8ccf1 100644 --- a/plotting_rbfes_with_cinnabar/PlottingFreeEnergiesUsingCinnabar.ipynb +++ b/cookbook/plot_results_with_cinnabar.ipynb @@ -249,7 +249,7 @@ ], "source": [ "# read in the experimental data\n", - "experimental_data = pd.read_csv('experimental.tsv', sep=\"\\t\")\n", + "experimental_data = pd.read_csv('assets/experimental.tsv', sep=\"\\t\")\n", "experimental_data" ] }, @@ -388,7 +388,7 @@ ], "source": [ "# Read in calculated relative free energy results\n", - "calculated_data = pd.read_csv('final_results.tsv', sep=\"\\t\")\n", + "calculated_data = pd.read_csv('assets/final_results.tsv', sep=\"\\t\")\n", "calculated_data" ] }, @@ -469,7 +469,7 @@ " \n", " \n", " \n", - " 2026-11-09T11:42:01.429293\n", + " 2026-11-09T14:42:54.729942\n", " image/svg+xml\n", " \n", " \n", @@ -495,96 +495,96 @@ " \n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p9a7f1fa945)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -810,7 +810,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -872,7 +872,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -921,7 +921,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -950,7 +950,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1008,7 +1008,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1073,7 +1073,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1090,7 +1090,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1130,7 +1130,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1147,7 +1147,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1433,7 +1433,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1478,7 +1478,7 @@ " \n", " \n", " \n", - " 2026-11-09T11:42:03.019967\n", + " 2026-11-09T14:42:56.135355\n", " image/svg+xml\n", " \n", " \n", @@ -1511,7 +1511,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1665,7 +1665,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1695,7 +1695,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1731,7 +1731,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1744,7 +1744,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2135,12 +2135,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2165,7 +2165,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2208,7 +2208,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2224,7 +2224,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2240,7 +2240,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2255,7 +2255,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2270,7 +2270,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2285,7 +2285,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2300,7 +2300,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2418,21 +2418,21 @@ " \n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke: #808080; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p183e7e790d)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2493,7 +2493,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2527,7 +2527,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2640,7 +2640,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3106,7 +3120,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3156,7 +3170,7 @@ " \n", " \n", " \n", - " 2026-11-09T11:42:04.363090\n", + " 2026-11-09T14:42:57.698700\n", " image/svg+xml\n", " \n", " \n", @@ -3189,7 +3203,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3350,7 +3364,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3380,7 +3394,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3416,7 +3430,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3429,7 +3443,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3819,12 +3833,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3849,7 +3863,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3892,7 +3906,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3908,7 +3922,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3924,7 +3938,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3939,7 +3953,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3954,7 +3968,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3969,7 +3983,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3984,7 +3998,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4101,11 +4115,11 @@ " \n", " \n", + "\" clip-path=\"url(#p12a3316bc5)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -4169,7 +4183,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4203,7 +4217,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4701,7 +4715,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4822,7 +4836,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4832,7 +4846,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4930,7 +4944,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4979,7 +4993,7 @@ " \n", " \n", " \n", - " 2026-11-09T11:42:05.928634\n", + " 2026-11-09T14:42:59.638378\n", " image/svg+xml\n", " \n", " \n", @@ -5012,7 +5026,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5188,7 +5202,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5203,7 +5217,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5241,7 +5255,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5287,7 +5301,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5719,12 +5733,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5750,7 +5764,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5794,7 +5808,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5811,7 +5825,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5828,7 +5842,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5845,7 +5859,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5861,7 +5875,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5877,7 +5891,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5893,7 +5907,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6011,11 +6025,11 @@ " \n", " \n", + "\" clip-path=\"url(#p5a48d5f6df)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -6079,7 +6093,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6113,7 +6127,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6242,7 +6256,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6744,7 +6788,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6842,7 +6886,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7336,7 +7380,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 11, "id": "4638d997-5252-465c-bd40-aa368c68acd3", "metadata": {}, "outputs": [ @@ -7445,13 +7489,13 @@ "9 lig_jmc_28 -1.25 0.08" ] }, - "execution_count": 13, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "calculated_dg_data = pd.read_csv('calc_dg.tsv', sep=\"\\t\")\n", + "calculated_dg_data = pd.read_csv('assets/calc_dg.tsv', sep=\"\\t\")\n", "calculated_dg_data" ] }, @@ -7465,7 +7509,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "id": "6cdb7f24-8f9b-424a-ab29-3c4634c63e19", "metadata": {}, "outputs": [ @@ -7738,7 +7782,7 @@ "22 True " ] }, - "execution_count": 14, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -7784,7 +7828,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "id": "95eaa8f8-deb0-4671-86fd-b094598cb8ae", "metadata": {}, "outputs": [ @@ -7799,7 +7843,7 @@ " \n", " \n", " \n", - " 2026-11-09T11:43:48.965120\n", + " 2026-11-09T14:43:10.836368\n", " image/svg+xml\n", " \n", " \n", @@ -7832,7 +7876,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8003,7 +8047,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8044,7 +8088,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8082,7 +8126,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8137,7 +8181,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8560,12 +8604,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8580,7 +8624,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8595,7 +8639,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8610,7 +8654,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8624,7 +8668,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8740,11 +8784,11 @@ " \n", " \n", + "\" clip-path=\"url(#p4a940e9f10)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -8808,7 +8852,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8874,7 +8918,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9003,7 +9047,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9378,7 +9422,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9501,7 +9545,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9523,7 +9567,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9631,7 +9675,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", diff --git a/plotting_rbfes_with_cinnabar/final_results.tsv b/plotting_rbfes_with_cinnabar/final_results.tsv deleted file mode 100644 index 284aaef2..00000000 --- a/plotting_rbfes_with_cinnabar/final_results.tsv +++ /dev/null @@ -1,10 +0,0 @@ -ligand_i ligand_j DDG(i->j) (kcal/mol) uncertainty (kcal/mol) -lig_ejm_31 lig_ejm_42 0.49 0.09 -lig_ejm_31 lig_ejm_46 -0.73 0.10 -lig_ejm_31 lig_ejm_47 0.0 0.2 -lig_ejm_31 lig_ejm_48 0.5 0.2 -lig_ejm_31 lig_ejm_50 0.94 0.07 -lig_ejm_42 lig_ejm_43 1.2 0.1 -lig_ejm_46 lig_jmc_23 -0.39 0.05 -lig_ejm_46 lig_jmc_27 -0.6 0.1 -lig_ejm_46 lig_jmc_28 -0.12 0.04 From dc757e218a8bdad0fa03e9b79e81dcecc30e8281 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Mon, 9 Nov 2026 15:05:55 +0100 Subject: [PATCH 6/9] Add missing file --- cookbook/assets/final_results.tsv | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 cookbook/assets/final_results.tsv diff --git a/cookbook/assets/final_results.tsv b/cookbook/assets/final_results.tsv new file mode 100644 index 00000000..284aaef2 --- /dev/null +++ b/cookbook/assets/final_results.tsv @@ -0,0 +1,10 @@ +ligand_i ligand_j DDG(i->j) (kcal/mol) uncertainty (kcal/mol) +lig_ejm_31 lig_ejm_42 0.49 0.09 +lig_ejm_31 lig_ejm_46 -0.73 0.10 +lig_ejm_31 lig_ejm_47 0.0 0.2 +lig_ejm_31 lig_ejm_48 0.5 0.2 +lig_ejm_31 lig_ejm_50 0.94 0.07 +lig_ejm_42 lig_ejm_43 1.2 0.1 +lig_ejm_46 lig_jmc_23 -0.39 0.05 +lig_ejm_46 lig_jmc_27 -0.6 0.1 +lig_ejm_46 lig_jmc_28 -0.12 0.04 From 021da7ed351b950bf4b521269bd8a5e3c368f9c2 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Mon, 9 Nov 2026 16:41:28 +0100 Subject: [PATCH 7/9] Addres review comments --- cookbook/assets/calc_dg.tsv | 20 ++++++------ cookbook/plot_results_with_cinnabar.ipynb | 38 ++++++++++++----------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/cookbook/assets/calc_dg.tsv b/cookbook/assets/calc_dg.tsv index 669d449e..6c4f9192 100644 --- a/cookbook/assets/calc_dg.tsv +++ b/cookbook/assets/calc_dg.tsv @@ -1,11 +1,11 @@ ligand DG(MLE) (kcal/mol) uncertainty (kcal/mol) -lig_ejm_31 -0.09 0.05 -lig_ejm_42 0.7 0.1 -lig_ejm_46 -0.98 0.05 -lig_ejm_47 -0.1 0.1 -lig_ejm_48 0.53 0.09 -lig_ejm_50 0.91 0.06 -lig_ejm_43 2.0 0.2 -lig_jmc_23 -0.68 0.09 -lig_jmc_27 -1.1 0.1 -lig_jmc_28 -1.25 0.08 +lig_ejm_31 0.04 0.05 +lig_ejm_42 0.53 0.09 +lig_ejm_43 1.7 0.1 +lig_ejm_46 -0.69 0.07 +lig_ejm_47 0.0 0.2 +lig_ejm_48 0.5 0.2 +lig_ejm_50 0.98 0.08 +lig_jmc_23 -1.08 0.08 +lig_jmc_27 -1.3 0.1 +lig_jmc_28 -0.81 0.08 diff --git a/cookbook/plot_results_with_cinnabar.ipynb b/cookbook/plot_results_with_cinnabar.ipynb index 14d8ccf1..6a71862c 100644 --- a/cookbook/plot_results_with_cinnabar.ipynb +++ b/cookbook/plot_results_with_cinnabar.ipynb @@ -9,12 +9,16 @@ "\n", "Here, we show how to plot OpenFE free energy results against experimental values with [cinnabar](https://github.com/OpenFreeEnergy/cinnabar). It covers:\n", "\n", - "1. relative free energies, from the table written by `openfe gather --report ddg`, and the absolute free energies derived from them, and\n", - "2. absolute free energies, from the table written by `openfe gather --report dg`, `openfe gather-abfe --report dg` or `openfe gather-septop --report dg`.\n", + "1. **relative free energies**, from the table written by `openfe gather --report ddg`, and the absolute free energies derived from them, and\n", + "2. **absolute free energies**, from the table written by `openfe gather --report dg`, `openfe gather-abfe --report dg` or `openfe gather-septop --report dg`.\n", "\n", - "This notebook requires `cinnabar` 0.6 or later, which is installed with openfe. With older versions, the plotting functions fail with errors such as `'FEMap' object has no attribute 'edges'`.\n", + "For more on the `cinnabar` API and the available plot styles, see the [cinnabar tutorials](https://cinnabar.openfree.energy/en/latest/tutorials/index.html).\n", "\n", - "For more on the `cinnabar` API and the available plot styles, see the [cinnabar tutorials](https://cinnabar.openfree.energy/en/latest/tutorials/index.html)." + "
\n", + "\n", + "**Note:** This notebook requires `cinnabar` 0.6 or later, which is installed with openfe. With older versions, the plotting functions fail with errors such as `'FEMap' object has no attribute 'edges'`.\n", + "\n", + "
" ] }, { @@ -88,11 +92,7 @@ "\n", "```\n", "ligand estimate (kcal/mol) uncertainty (kcal/mol)\n", - "```\n", - "\n", - "**Important note:**\n", - "Please note that for now you must have an experimental entry for every ligand involved in your free energy network.\n", - "In future versions of cinnabar this will no longer be needed." + "```" ] }, { @@ -264,7 +264,11 @@ "\n", "Next we load in results from the TSV file created by running `openfe gather --report ddg` on a network of results from [relative binding free energy calculations](https://docs.openfree.energy/en/latest/guide/protocols/relativehybridtopology.html#overview).\n", "\n", - "Please see the full [RBFE gather command tutorial](https://github.com/OpenFreeEnergy/ExampleNotebooks/blob/main/rbfe_tutorial/cli_tutorial.md) for more information." + "Please see the full [RBFE gather command tutorial](https://github.com/OpenFreeEnergy/ExampleNotebooks/blob/main/rbfe_tutorial/cli_tutorial.md) for more information.\n", + "\n", + "
\n", + "Note: Each openfe gather command only reads the results of one protocol. For networks that combine protocols, for example hybrid topology and Separated Topologies edges, load the results in Python and add them to a single FEMap, as shown in the Mixed Protocol Networks tutorial.\n", + "
" ] }, { @@ -4973,7 +4977,7 @@ "id": "a905416e-11bd-47cb-8002-5ac923b0e95b", "metadata": {}, "source": [ - "We can also shift our free energies by the average experimental value to have DGs on the same scale as experiment." + "The MLE estimates are centred around zero, because relative calculations only determine free energy differences between ligands, not their absolute offset. To compare them with experiment, we shift them by the mean of the experimental values. You can read more about this in the [cinnabar guide](https://cinnabar.openfree.energy/en/latest/concepts/estimators.html#centering-of-results)." ] }, { @@ -7361,17 +7365,17 @@ }, { "cell_type": "markdown", - "id": "cfca38eb-4928-4f13-9a22-9676c21b28f6", + "id": "7df44b07-43d1-40eb-bf45-8f1d5a860d7a", "metadata": {}, "source": [ "## Plotting absolute free energy results\n", "\n", "Absolute free energies can also be plotted directly from a table of free energies per ligand. This table can be written by:\n", "\n", - "* `openfe gather --report dg`, which derives the absolute free energies from a network of relative free energy calculations using the MLE estimator, or\n", - "* `openfe gather-abfe --report dg` or `openfe gather-septop --report dg`, for results from the [Absolute Binding](https://docs.openfree.energy/en/latest/guide/protocols/absolutebinding.html) or [Separated Topologies](https://docs.openfree.energy/en/latest/guide/protocols/septop.html) Protocols.\n", + "* `openfe gather --report dg` or `openfe gather-septop --report dg`, which derive the absolute free energies from a network of relative free energy calculations using the MLE estimator, or\n", + "* `openfe gather-abfe --report dg`, for results from the [Absolute Binding](https://docs.openfree.energy/en/latest/guide/protocols/absolutebinding.html) Protocol.\n", "\n", - "Here we load the results of `openfe gather --report dg` for a network of relative binding free energy calculations. The free energy column is called `DG(MLE) (kcal/mol)` in this report, and `DG (kcal/mol)` in the `gather-abfe` and `gather-septop` reports.\n", + "Here we load the results of `openfe gather --report dg` for a network of relative binding free energy calculations. The free energy column is called `DG(MLE) (kcal/mol)` in this report, and `DG (kcal/mol)` in the `gather-septop` and `gather-abfe` reports.\n", "\n", "
\n", "Note: If there is no experimental binding free energy for a ligand, that ligand's calculated data will be excluded from the plot.\n", @@ -7818,11 +7822,9 @@ "metadata": {}, "source": [ "
\n", - "Note: Absolute free energies derived from relative binding free energy calculations are centred around zero rather than the experimental mean, so we shift them by the mean of the experimental values before comparing them. Results from absolute binding free energy calculations do not need this shift.\n", + "Note: As above, absolute free energies derived from relative calculations (gather --report dg and gather-septop --report dg) are centred around zero, so we shift them by the mean of the experimental values. Results from absolute binding free energy calculations (gather-abfe) do not need this shift.\n", "
\n", "\n", - "You can read more about this in the [cinnabar guide](https://cinnabar.openfree.energy/en/latest/concepts/estimators.html#centering-of-results).\n", - "\n", "Finally, we plot the calculated against the experimental results, with some accuracy and ranking metrics:" ] }, From 9b74a01739a0f1b8f5436c7b0c8562a0154a9943 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Mon, 9 Nov 2026 17:08:05 +0100 Subject: [PATCH 8/9] Small fix --- cookbook/plot_results_with_cinnabar.ipynb | 1336 ++++++++++----------- 1 file changed, 648 insertions(+), 688 deletions(-) diff --git a/cookbook/plot_results_with_cinnabar.ipynb b/cookbook/plot_results_with_cinnabar.ipynb index 6a71862c..00899eae 100644 --- a/cookbook/plot_results_with_cinnabar.ipynb +++ b/cookbook/plot_results_with_cinnabar.ipynb @@ -473,7 +473,7 @@ " \n", " \n", " \n", - " 2026-11-09T14:42:54.729942\n", + " 2026-11-09T17:07:21.963340\n", " image/svg+xml\n", " \n", " \n", @@ -499,96 +499,96 @@ " \n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: none; stroke: #808080; stroke-linecap: round\"/>\n", " \n", + "\" clip-path=\"url(#p6521fe8fd4)\" style=\"fill: #808080; stroke: #808080; stroke-linecap: round\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -814,7 +814,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -876,7 +876,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -925,7 +925,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -954,7 +954,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1012,7 +1012,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1077,7 +1077,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1094,7 +1094,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1134,7 +1134,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1151,7 +1151,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1437,7 +1437,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1482,7 +1482,7 @@ " \n", " \n", " \n", - " 2026-11-09T14:42:56.135355\n", + " 2026-11-09T17:07:22.924216\n", " image/svg+xml\n", " \n", " \n", @@ -1515,7 +1515,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1669,7 +1669,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1699,7 +1699,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1735,7 +1735,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1748,7 +1748,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2139,12 +2139,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2169,7 +2169,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2212,7 +2212,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2228,7 +2228,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2244,7 +2244,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2259,7 +2259,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2274,7 +2274,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2289,7 +2289,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2304,7 +2304,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2422,21 +2422,21 @@ " \n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke: #808080; stroke-width: 1.5; stroke-linecap: square\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p698636436a)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2497,7 +2497,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2531,7 +2531,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2644,7 +2644,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3124,7 +3110,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3174,7 +3160,7 @@ " \n", " \n", " \n", - " 2026-11-09T14:42:57.698700\n", + " 2026-11-09T17:07:24.275508\n", " image/svg+xml\n", " \n", " \n", @@ -3207,7 +3193,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3368,7 +3354,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3398,7 +3384,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3434,7 +3420,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3447,7 +3433,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3837,12 +3823,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3867,7 +3853,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3910,7 +3896,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3926,7 +3912,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3942,7 +3928,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3957,7 +3943,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3972,7 +3958,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3987,7 +3973,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4002,7 +3988,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4119,11 +4105,11 @@ " \n", " \n", + "\" clip-path=\"url(#p6cf072339e)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -4187,7 +4173,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4221,7 +4207,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4719,7 +4705,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -4840,7 +4828,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4850,7 +4838,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4948,7 +4936,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4997,7 +4985,7 @@ " \n", " \n", " \n", - " 2026-11-09T14:42:59.638378\n", + " 2026-11-09T17:07:25.598327\n", " image/svg+xml\n", " \n", " \n", @@ -5030,7 +5018,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke: #808080; stroke-width: 2\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5206,7 +5194,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5221,7 +5209,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5259,7 +5247,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5305,7 +5293,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5737,12 +5725,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5768,7 +5756,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5812,7 +5800,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5829,7 +5817,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5846,7 +5834,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5863,7 +5851,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5879,7 +5867,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5895,7 +5883,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5911,7 +5899,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6029,11 +6017,11 @@ " \n", " \n", + "\" clip-path=\"url(#pce58a87977)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -6097,7 +6085,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6131,7 +6119,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6260,7 +6248,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6890,7 +6848,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -7418,61 +7376,61 @@ " \n", " 0\n", " lig_ejm_31\n", - " -0.09\n", + " 0.04\n", " 0.05\n", " \n", " \n", " 1\n", " lig_ejm_42\n", - " 0.70\n", - " 0.10\n", + " 0.53\n", + " 0.09\n", " \n", " \n", " 2\n", - " lig_ejm_46\n", - " -0.98\n", - " 0.05\n", + " lig_ejm_43\n", + " 1.70\n", + " 0.10\n", " \n", " \n", " 3\n", - " lig_ejm_47\n", - " -0.10\n", - " 0.10\n", + " lig_ejm_46\n", + " -0.69\n", + " 0.07\n", " \n", " \n", " 4\n", - " lig_ejm_48\n", - " 0.53\n", - " 0.09\n", + " lig_ejm_47\n", + " 0.00\n", + " 0.20\n", " \n", " \n", " 5\n", - " lig_ejm_50\n", - " 0.91\n", - " 0.06\n", + " lig_ejm_48\n", + " 0.50\n", + " 0.20\n", " \n", " \n", " 6\n", - " lig_ejm_43\n", - " 2.00\n", - " 0.20\n", + " lig_ejm_50\n", + " 0.98\n", + " 0.08\n", " \n", " \n", " 7\n", " lig_jmc_23\n", - " -0.68\n", - " 0.09\n", + " -1.08\n", + " 0.08\n", " \n", " \n", " 8\n", " lig_jmc_27\n", - " -1.10\n", + " -1.30\n", " 0.10\n", " \n", " \n", " 9\n", " lig_jmc_28\n", - " -1.25\n", + " -0.81\n", " 0.08\n", " \n", " \n", @@ -7481,16 +7439,16 @@ ], "text/plain": [ " ligand DG(MLE) (kcal/mol) uncertainty (kcal/mol)\n", - "0 lig_ejm_31 -0.09 0.05\n", - "1 lig_ejm_42 0.70 0.10\n", - "2 lig_ejm_46 -0.98 0.05\n", - "3 lig_ejm_47 -0.10 0.10\n", - "4 lig_ejm_48 0.53 0.09\n", - "5 lig_ejm_50 0.91 0.06\n", - "6 lig_ejm_43 2.00 0.20\n", - "7 lig_jmc_23 -0.68 0.09\n", - "8 lig_jmc_27 -1.10 0.10\n", - "9 lig_jmc_28 -1.25 0.08" + "0 lig_ejm_31 0.04 0.05\n", + "1 lig_ejm_42 0.53 0.09\n", + "2 lig_ejm_43 1.70 0.10\n", + "3 lig_ejm_46 -0.69 0.07\n", + "4 lig_ejm_47 0.00 0.20\n", + "5 lig_ejm_48 0.50 0.20\n", + "6 lig_ejm_50 0.98 0.08\n", + "7 lig_jmc_23 -1.08 0.08\n", + "8 lig_jmc_27 -1.30 0.10\n", + "9 lig_jmc_28 -0.81 0.08" ] }, "execution_count": 11, @@ -7653,7 +7611,7 @@ " \n", " 13\n", " lig_ejm_31\n", - " -0.09\n", + " 0.04\n", " 0.05\n", " openfe\n", " True\n", @@ -7661,63 +7619,63 @@ " \n", " 14\n", " lig_ejm_42\n", - " 0.70\n", - " 0.10\n", + " 0.53\n", + " 0.09\n", " openfe\n", " True\n", " \n", " \n", " 15\n", " lig_ejm_43\n", - " 2.00\n", - " 0.20\n", + " 1.70\n", + " 0.10\n", " openfe\n", " True\n", " \n", " \n", " 16\n", " lig_ejm_46\n", - " -0.98\n", - " 0.05\n", + " -0.69\n", + " 0.07\n", " openfe\n", " True\n", " \n", " \n", " 17\n", " lig_ejm_47\n", - " -0.10\n", - " 0.10\n", + " 0.00\n", + " 0.20\n", " openfe\n", " True\n", " \n", " \n", " 18\n", " lig_ejm_48\n", - " 0.53\n", - " 0.09\n", + " 0.50\n", + " 0.20\n", " openfe\n", " True\n", " \n", " \n", " 19\n", " lig_ejm_50\n", - " 0.91\n", - " 0.06\n", + " 0.98\n", + " 0.08\n", " openfe\n", " True\n", " \n", " \n", " 20\n", " lig_jmc_23\n", - " -0.68\n", - " 0.09\n", + " -1.08\n", + " 0.08\n", " openfe\n", " True\n", " \n", " \n", " 21\n", " lig_jmc_27\n", - " -1.10\n", + " -1.30\n", " 0.10\n", " openfe\n", " True\n", @@ -7725,7 +7683,7 @@ " \n", " 22\n", " lig_jmc_28\n", - " -1.25\n", + " -0.81\n", " 0.08\n", " openfe\n", " True\n", @@ -7749,16 +7707,16 @@ "10 lig_jmc_23 -11.74 0.18 Experimental \n", "11 lig_jmc_27 -11.31 0.17 Experimental \n", "12 lig_jmc_28 -11.01 0.18 Experimental \n", - "13 lig_ejm_31 -0.09 0.05 openfe \n", - "14 lig_ejm_42 0.70 0.10 openfe \n", - "15 lig_ejm_43 2.00 0.20 openfe \n", - "16 lig_ejm_46 -0.98 0.05 openfe \n", - "17 lig_ejm_47 -0.10 0.10 openfe \n", - "18 lig_ejm_48 0.53 0.09 openfe \n", - "19 lig_ejm_50 0.91 0.06 openfe \n", - "20 lig_jmc_23 -0.68 0.09 openfe \n", - "21 lig_jmc_27 -1.10 0.10 openfe \n", - "22 lig_jmc_28 -1.25 0.08 openfe \n", + "13 lig_ejm_31 0.04 0.05 openfe \n", + "14 lig_ejm_42 0.53 0.09 openfe \n", + "15 lig_ejm_43 1.70 0.10 openfe \n", + "16 lig_ejm_46 -0.69 0.07 openfe \n", + "17 lig_ejm_47 0.00 0.20 openfe \n", + "18 lig_ejm_48 0.50 0.20 openfe \n", + "19 lig_ejm_50 0.98 0.08 openfe \n", + "20 lig_jmc_23 -1.08 0.08 openfe \n", + "21 lig_jmc_27 -1.30 0.10 openfe \n", + "22 lig_jmc_28 -0.81 0.08 openfe \n", "\n", " computational \n", "0 False \n", @@ -7845,7 +7803,7 @@ " \n", " \n", " \n", - " 2026-11-09T14:43:10.836368\n", + " 2026-11-09T17:07:46.131985\n", " image/svg+xml\n", " \n", " \n", @@ -7878,7 +7836,7 @@ " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8049,7 +8007,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8090,7 +8048,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8128,7 +8086,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8183,7 +8141,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8606,12 +8564,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8626,7 +8584,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8641,7 +8599,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8656,7 +8614,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8670,7 +8628,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8786,11 +8744,11 @@ " \n", " \n", + "\" clip-path=\"url(#p9f6daaf19b)\" style=\"fill: none; stroke-dasharray: 1.5,2.475; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -8854,7 +8812,7 @@ "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8920,7 +8878,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9049,7 +9007,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", " \n", - " \n", - " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -9413,18 +9424,18 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -9525,7 +9473,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9536,19 +9484,31 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -9557,8 +9517,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -9568,18 +9528,18 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9660,14 +9620,14 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9677,7 +9637,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", From 836c013bffca3cb6fa2bbe3fbd067899e57e32d0 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Tue, 10 Nov 2026 08:50:44 +0100 Subject: [PATCH 9/9] Address review comments --- cookbook/plot_results_with_cinnabar.ipynb | 60 +---------------------- 1 file changed, 1 insertion(+), 59 deletions(-) diff --git a/cookbook/plot_results_with_cinnabar.ipynb b/cookbook/plot_results_with_cinnabar.ipynb index 00899eae..952b94bb 100644 --- a/cookbook/plot_results_with_cinnabar.ipynb +++ b/cookbook/plot_results_with_cinnabar.ipynb @@ -21,64 +21,6 @@ "
" ] }, - { - "cell_type": "markdown", - "id": "6f3d03c2", - "metadata": {}, - "source": [ - "## Setup for Google Colab\n", - "\n", - "If you are running this example in Google Colab, run the following cells to setup the environment. If you are running this notebook locally, skip down to `Loading experimental data`" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "04aa17bf", - "metadata": {}, - "outputs": [], - "source": [ - "# NBVAL_SKIP\n", - "# Only run this cell if on Google Colab\n", - "import os\n", - "if \"COLAB_RELEASE_TAG\" in os.environ:\n", - " # fix for colab's torchvision causing issues\n", - " !rm -r /usr/local/lib/python3.12/dist-packages/torchvision\n", - " \n", - " !pip install -q condacolab\n", - " import condacolab\n", - " condacolab.install_from_url(\"https://github.com/OpenFreeEnergy/openfe/releases/download/v1.13.0/OpenFEforge-1.13.0-Linux-x86_64.sh\")" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "6d297968", - "metadata": {}, - "outputs": [], - "source": [ - "# NBVAL_SKIP\n", - "# Only run this cell if on google colab\n", - "import os\n", - "if \"COLAB_RELEASE_TAG\" in os.environ:\n", - " import condacolab\n", - " import locale\n", - " locale.getpreferredencoding = lambda: \"UTF-8\"\n", - " !mkdir inputs && cd inputs && openfe fetch rbfe-tutorial\n", - " # quick fix for https://github.com/conda-incubator/condacolab/issues/75\n", - " # if deprecation warnings persist, rerun this cell\n", - " import warnings\n", - " warnings.filterwarnings(action=\"ignore\", message=r\"datetime.datetime.utcnow\") \n", - " for _ in range(3):\n", - " # Sometimes we have to re-run the check\n", - " try:\n", - " condacolab.check()\n", - " except:\n", - " pass\n", - " else:\n", - " break" - ] - }, { "cell_type": "markdown", "id": "22124f1f-5349-4174-830d-65c5bf9f560e", @@ -267,7 +209,7 @@ "Please see the full [RBFE gather command tutorial](https://github.com/OpenFreeEnergy/ExampleNotebooks/blob/main/rbfe_tutorial/cli_tutorial.md) for more information.\n", "\n", "
\n", - "Note: Each openfe gather command only reads the results of one protocol. For networks that combine protocols, for example hybrid topology and Separated Topologies edges, load the results in Python and add them to a single FEMap, as shown in the Mixed Protocol Networks tutorial.\n", + "Note: Each openfe gather command only reads the results of one protocol. For networks that combine protocols, for example hybrid topology and Separated Topologies edges, load the results in Python and add them to a single FEMap, as shown in the Mixed Protocol Networks tutorial.\n", "
" ] },