From 85b5d786f25b098aba05092646b3adeff7d969b0 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Thu, 13 Feb 2025 10:09:40 +0100 Subject: [PATCH 1/2] Cookbook missing exp data --- cookbook/assets/calc_dg.tsv | 11 ++ cookbook/assets/experimental.tsv | 13 ++ cookbook/cinnabar_absolute.ipynb | 251 +++++++++++++++++++++++++++++++ 3 files changed, 275 insertions(+) create mode 100644 cookbook/assets/calc_dg.tsv create mode 100644 cookbook/assets/experimental.tsv create mode 100644 cookbook/cinnabar_absolute.ipynb diff --git a/cookbook/assets/calc_dg.tsv b/cookbook/assets/calc_dg.tsv new file mode 100644 index 0000000..669d449 --- /dev/null +++ b/cookbook/assets/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 diff --git a/cookbook/assets/experimental.tsv b/cookbook/assets/experimental.tsv new file mode 100644 index 0000000..2f2e07f --- /dev/null +++ b/cookbook/assets/experimental.tsv @@ -0,0 +1,13 @@ +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 new file mode 100644 index 0000000..7ec3b6d --- /dev/null +++ b/cookbook/cinnabar_absolute.ipynb @@ -0,0 +1,251 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ddae61fd-fa15-4be9-9160-ba3e195c67dc", + "metadata": {}, + "source": [ + "# Plotting OpenFE DG results against experiment using Cinnabar v0.4\n", + "\n", + "This notebook shows how one would go about creating a cinnabar plot of OpenFE results against known experimental values." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6abcaae7-f5fd-483c-972f-5bb5b6d4908a", + "metadata": {}, + "outputs": [], + "source": [ + "# First we do a set of imports\n", + "import csv\n", + "from pprint import pprint\n", + "import cinnabar\n", + "from cinnabar import plotting as cinnabar_plotting\n", + "from cinnabar import femap, stats\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "515561da-b06e-4741-9178-6d5eb75cd140", + "metadata": {}, + "outputs": [], + "source": [ + "def plot_dg(\n", + " exp_data: dict[str, dict[str, float]],\n", + " calc_data: dict[str, dict[str, float]],\n", + " dg_filename: str,\n", + " statistics: list = [\"RMSE\", \"MUE\", \"R2\", \"rho\"],\n", + "):\n", + " shift = sum([i['dG'] for i in exp_data.values()]) / len(exp_data)\n", + " x_data = np.asarray([i['dG'] for i in exp_data.values()])\n", + " y_data = np.asarray([i['dG'] for i in calc_data.values()])\n", + " xerr = np.asarray([i['ddG'] for i in exp_data.values()])\n", + " yerr = np.asarray([i['ddG'] for i in calc_data.values()])\n", + " \n", + " # centralising\n", + " # this should be replaced by providing one experimental result\n", + " x_data = x_data - np.mean(x_data) + shift\n", + " y_data = y_data - np.mean(y_data) + shift\n", + " \n", + " cinnabar_plotting._master_plot(\n", + " x_data,\n", + " y_data,\n", + " xerr=xerr,\n", + " yerr=yerr,\n", + " origins=False,\n", + " statistics=statistics,\n", + " quantity=rf\"$\\Delta$ G\",\n", + " title='Experiment vs OpenFE',\n", + " method_name=\"\",\n", + " target_name=\"\",\n", + " filename=dg_filename,\n", + " bootstrap_x_uncertainty=False,\n", + " bootstrap_y_uncertainty=False,\n", + " statistic_type=\"mle\",\n", + " xy_lim=[-15, -5],\n", + " figsize=5,\n", + " xlabel='experimental',\n", + " ylabel='openfe',\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "22124f1f-5349-4174-830d-65c5bf9f560e", + "metadata": {}, + "source": [ + "## Loading experimental data\n", + "\n", + "First we load our known 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": 3, + "id": "8b80f592-f1a3-4c7f-8757-58a88c2e8ee7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'lig_ejm_42': {'dG': -9.81, 'ddG': 0.18},\n", + " 'lig_ejm_43': {'dG': -8.29, 'ddG': 0.18},\n", + " 'lig_ejm_45': {'dG': -9.59, 'ddG': 0.18},\n", + " 'lig_ejm_46': {'dG': -11.35, 'ddG': 0.17},\n", + " 'lig_ejm_47': {'dG': -9.73, 'ddG': 0.18},\n", + " 'lig_ejm_48': {'dG': -9.03, 'ddG': 0.18},\n", + " 'lig_ejm_50': {'dG': -9.01, 'ddG': 0.18},\n", + " 'lig_ejm_54': {'dG': -10.57, 'ddG': 0.18},\n", + " 'lig_ejm_55': {'dG': -9.24, 'ddG': 0.18},\n", + " 'lig_jmc_23': {'dG': -11.74, 'ddG': 0.18},\n", + " 'lig_jmc_27': {'dG': -11.31, 'ddG': 0.17},\n", + " 'lig_jmc_28': {'dG': -11.01, 'ddG': 0.18}}\n" + ] + } + ], + "source": [ + "# read in the experimental data\n", + "\n", + "experimental_data = {}\n", + "experimental_filename = 'assets/experimental.tsv'\n", + "\n", + "with open(experimental_filename, 'r') as fd:\n", + " rd = csv.reader(fd, delimiter=\"\\t\", quotechar='\"')\n", + " headers = next(rd)\n", + " for row in rd:\n", + " experimental_data[row[0]] = {}\n", + " experimental_data[row[0]]['dG'] = float(row[1])\n", + " experimental_data[row[0]]['ddG'] = float(row[2])\n", + "\n", + "pprint(experimental_data)" + ] + }, + { + "cell_type": "markdown", + "id": "aca5ede7-3741-4cc1-97ba-9115d90abd96", + "metadata": {}, + "source": [ + "## Loading free energy results\n", + "\n", + "Next we load in results from the TSV file created by `openfe gather --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", + "**Important note:**\n", + "If there is no experimental binding free energy for a ligand, that ligand will be removed from the calculated data." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "63a920b3-6ef3-4214-b3cc-433319053721", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'lig_ejm_42': {'dG': 0.7, 'ddG': 0.1},\n", + " 'lig_ejm_43': {'dG': 2.0, 'ddG': 0.2},\n", + " 'lig_ejm_46': {'dG': -0.98, 'ddG': 0.05},\n", + " 'lig_ejm_47': {'dG': -0.1, 'ddG': 0.1},\n", + " 'lig_ejm_48': {'dG': 0.53, 'ddG': 0.09},\n", + " 'lig_ejm_50': {'dG': 0.91, 'ddG': 0.06},\n", + " 'lig_jmc_23': {'dG': -0.68, 'ddG': 0.09},\n", + " 'lig_jmc_27': {'dG': -1.1, 'ddG': 0.1},\n", + " 'lig_jmc_28': {'dG': -1.25, 'ddG': 0.08}}\n" + ] + } + ], + "source": [ + "# Read in calculated results\n", + "\n", + "calc_data = {}\n", + "calculated_filename = 'assets/calc_dg.tsv'\n", + "\n", + "with open(calculated_filename, 'r') as fd:\n", + " rd = csv.reader(fd, delimiter=\"\\t\", quotechar='\"')\n", + " headers = next(rd)\n", + " for row in rd:\n", + " # Only add ligand to dict if it has an exp. value\n", + " if row[0] in experimental_data:\n", + " calc_data[row[0]] = {}\n", + " calc_data[row[0]]['dG'] = float(row[1])\n", + " calc_data[row[0]]['ddG'] = float(row[2])\n", + "\n", + "pprint(calc_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "d67089d8-1984-479f-b750-b51ab2ab174d", + "metadata": {}, + "outputs": [], + "source": [ + "# Bring exp data in same order as calc data\n", + "sorted_exp_data = {k: experimental_data[k] for k in calc_data}" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f5468e6f-ee73-45e7-8665-dd3e4da9342e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_dg(sorted_exp_data, calc_data, 'dg.png')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db474531-7c3b-4fac-a224-2e71b22a6586", + "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.12.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From ef575842ea797cf69ca74073369a7bbffeb7c8cf Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Fri, 14 Feb 2025 11:54:23 +0100 Subject: [PATCH 2/2] Address reviews --- cookbook/cinnabar_absolute.ipynb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cookbook/cinnabar_absolute.ipynb b/cookbook/cinnabar_absolute.ipynb index 7ec3b6d..a35c3be 100644 --- a/cookbook/cinnabar_absolute.ipynb +++ b/cookbook/cinnabar_absolute.ipynb @@ -20,9 +20,7 @@ "# First we do a set of imports\n", "import csv\n", "from pprint import pprint\n", - "import cinnabar\n", "from cinnabar import plotting as cinnabar_plotting\n", - "from cinnabar import femap, stats\n", "import numpy as np" ] }, @@ -142,7 +140,7 @@ "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", "**Important note:**\n", - "If there is no experimental binding free energy for a ligand, that ligand will be removed from the calculated data." + "If there is no experimental binding free energy for a ligand, that ligand's calcuated data will be excluded from the plot." ] }, {