{ "cells": [ { "cell_type": "raw", "metadata": {}, "source": [ "Author: Preeti Dubey\n", "Title: The parameter estiamtion (kon and koff) of Variants V281M and E339K in myometrial cells " ] }, { "cell_type": "raw", "metadata": {}, "source": [ "Here we fit the data from modeling for complex to determine the oxt concentration \n", "required for variants to achieve the wild type level " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy.integrate import odeint\n", "from lmfit import minimize, Parameters, Parameter, report_fit\n", "from scipy.integrate import odeint\n", "from scipy.integrate import solve_ivp\n", "import math \n", "import lmfit\n", "#import seaborn as sns\n", "#sns.set(color_codes = True)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# OXT and OXTR binding code for wild type\n", "\n", "\n", "import numpy as np\n", "from scipy.integrate import odeint\n", "import matplotlib.pyplot as plt\n", "import csv\n", "\n", "\n", "def oxtmodel(x, t):\n", " \n", " #kon = 1.2e+4 # per molar per sec\n", " #koff = 1.92e-5 # per sec\n", " kon = 6.8e+5 # per molar per min (from Phaneuf paper)\n", " koff = 0.0011 # per min (from Phaneuf paper)\n", " #kon = 5.28e+8 # per molar per hr (from gulliver thesis)\n", " #koff = 0.3 # per hr (from gulliver thesis)\n", " #kon = 4.3e+7 # per molar per hour\n", " #koff = 0.0693 # /hour\n", " #kon = 4.3e+7 # per molar per hour\n", " #koff = 0.0693 # /hour\n", " Av = 6e+23\n", " V = 1.4e-11 # litre It is given as 14047 cubic micro meter \n", " Div = V*Av # dividend of the oxtr copies \n", " oxt = x[0]\n", " oxtr = x[1]\n", " oxr = x[2]\n", " \n", " \n", " doxtdt = -kon*oxt*(oxtr) + koff*oxr\n", " doxtrdt = -kon*oxt*(oxtr) + koff*oxr\n", " doxrdt = kon*oxt*(oxtr) -koff*oxr\n", "\n", " return(doxtdt, doxtrdt, doxrdt)\n", "\n", "\n", "initial_t = 0\n", "end_t = 2\n", "num = 100\n", "\n", "# oxtr conc is 2000 copies/cell\n", "# we need to get the molar concetration of oxtr in mol/litre\n", "# conc. = N/V = 2000/1.4e-11\n", "# conc = 1428e+11\n", "# molar concentration c = conc/NA = 1428e+11/6e+23 mol/L = 2.38e-10 mol/L\n", "\n", "\n", "\n", "# initial condition for wild type \n", "x0_wt = [1e-8, 1.678e-9, 0]\n", "\n", "# initial condition for mutants V281M\n", "x0_v281m = [1e-8, 7.4877e-10, 0]\n", "# initial condition for mutants P108A\n", "x0_p108a = [1e-8, 2.658e-9, 0]\n", "# initial condition for mutants L206V\n", "x0_l206v = [1e-8, 3.044e-9, 0]\n", "# initial condition for mutants V45L\n", "x0_v45l = [1e-8, 1.96e-9, 0]\n", "# initial condition for mutants E339K\n", "x0_e339k = [1e-8, 1.19e-9, 0]\n", "\n", "# time span\n", "t = np.linspace(initial_t, end_t, num)\n", "\n", "# ode integration for all types \n", "x_wt = odeint(oxtmodel,x0_wt,t) \n", "x_v281m = odeint(oxtmodel,x0_v281m,t) \n", "x_p108a = odeint(oxtmodel,x0_p108a,t) \n", "x_l206v = odeint(oxtmodel,x0_l206v,t) \n", "x_v45l = odeint(oxtmodel,x0_v45l,t) \n", "x_e339k = odeint(oxtmodel,x0_e339k,t) \n", "\n", "# Volume and avagadro's number \n", "Av = 6e+23\n", "V = 1.4e-11 # litre It is given as 14047 cubic micro meter \n", "Div = V*Av\n", "\n", "# solution extraction for wild type\n", "oxt_wt = x_wt[:, 0]\n", "oxtr_wt = x_wt[:, 1]\n", "oxr_wt = x_wt[:, 2]\n", "\n", "oxt_wt_c = oxt_wt*Div\n", "oxtr_wt_c = oxtr_wt*Div\n", "oxr_wt_c = oxr_wt*Div\n", "\n", "# solution extraction for mutant V281M\n", "\n", "oxt_v281m = x_v281m[:, 0]\n", "oxtr_v281m = x_v281m[:, 1]\n", "oxr_v281m = x_v281m[:, 2]\n", "\n", "oxt_v281m_c = oxt_v281m*Div\n", "oxtr_v281m_c = oxtr_v281m*Div\n", "oxr_v281m_c = oxr_v281m*Div\n", "\n", "# solution extraction for mutant P108A\n", "\n", "oxt_p108a = x_p108a[:, 0]\n", "oxtr_p108a = x_p108a[:, 1]\n", "oxr_p108a = x_p108a[:, 2]\n", "\n", "oxt_p108a_c = oxt_p108a*Div\n", "oxtr_p108a_c = oxtr_p108a*Div\n", "oxr_p108a_c = oxr_p108a*Div\n", "\n", "\n", "# solution extraction for mutant L206V\n", "\n", "oxt_l206v = x_l206v[:, 0]\n", "oxtr_l206v = x_l206v[:, 1]\n", "oxr_l206v = x_l206v[:, 2]\n", "\n", "oxt_l206v_c = oxt_l206v*Div\n", "oxtr_l206v_c = oxtr_l206v*Div\n", "oxr_l206v_c = oxr_l206v*Div\n", "\n", "# solution extraction for mutant V45L\n", "\n", "oxt_v45l = x_v45l[:, 0]\n", "oxtr_v45l = x_v45l[:, 1]\n", "oxr_v45l = x_v45l[:, 2]\n", "\n", "oxt_v45l_c = oxt_v45l*Div\n", "oxtr_v45l_c = oxtr_v45l*Div\n", "oxr_v45l_c = oxr_v45l*Div\n", "# solution extraction for mutant E339K\n", "\n", "oxt_e339k = x_e339k[:, 0]\n", "oxtr_e339k = x_e339k[:, 1]\n", "oxr_e339k = x_e339k[:, 2]\n", "\n", "oxt_e339k_c = oxt_e339k*Div\n", "oxtr_e339k_c = oxtr_e339k*Div\n", "oxr_e339k_c = oxr_e339k*Div\n", "\n", "# Combine the arrays into a list of rows\n", "rows = list(zip(t, oxr_wt, oxr_v281m, oxr_e339k, oxr_v45l, oxr_p108a, oxr_l206v))\n", "\n", "# # Open a new CSV file for writing\n", "# with open('bind_com_myo.csv', 'w', newline='') as file:\n", "# writer = csv.writer(file)\n", "\n", "# # Write the header row\n", "# writer.writerow(['Time', 'WT', 'V281M', 'E339K', 'V45L', 'P108A', 'L206V'])\n", "\n", "# # Write the data rows\n", "# writer.writerows(rows)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# OXT model fitting to wt OXTR data for V281M" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[Fit Statistics]]\n", " # fitting method = leastsq\n", " # function evals = 9\n", " # data points = 100\n", " # variables = 1\n", " chi-square = 5.8978e-17\n", " reduced chi-square = 5.9574e-19\n", " Akaike info crit = -4195.45314\n", " Bayesian info crit = -4192.84797\n", "[[Variables]]\n", " x10: 7.4877e-10 (fixed)\n", " x20: 0 (fixed)\n", " kon: 680000 (fixed)\n", " koff: 0.0011 (fixed)\n", " oxt: 4.5000e-06 +/- 3.0286e-16 (0.00%) (init = 1e-06)\n" ] }, { "data": { "text/plain": [ "<Figure size 864x576 with 0 Axes>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x360 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "np.random.seed(10)\n", "np.seterr(divide = 'ignore') \n", "\n", "def f(y, t, params):\n", " \n", "\n", " x1 = y[0]\n", " x2 = y[1]\n", " \n", " try: \n", " x0 = params['x10'].value\n", " kon = params['kon'].value\n", " koff = params['koff'].value\n", " oxt = params['oxt'].value\n", " \n", " except KeyError:\n", " \n", " kon, koff, oxt = params\n", " \n", " oxtr = -kon*oxt*(x1) + koff*x2\n", " oxr = kon*oxt*(x1) -koff*x2\n", "\n", " return[oxtr, oxr]\n", "\n", "\n", "\n", "def odesol(t, x0, params):\n", " \"\"\"\n", " Solution to the ODE x'(t) = f(t,x,k) with initial condition x(0) = x0\n", " \"\"\"\n", " x0 = params['x10'].value, params['x20'].value\n", " x = odeint(f, x0, t, args=(params,))\n", " #Logx = np.log10(x)\n", " return x\n", "\n", "def residual(params, t, data):\n", "\n", " \"\"\"\n", " compute the residual between actual data and fitted data\n", " \"\"\"\n", "\n", " x0 = params['x10'].value, params['x20'].value \n", " model = odesol(t, x0, params)\n", " \n", " # you only have data for one of your variables\n", " #x1_simul = simul[:, 0] \n", " x2_model = model[:, 1]\n", " \n", " resid1 = x2_model - data\n", " \n", " \n", " return resid1.ravel()\n", " \n", "# measured data \n", "#t = np.linspace(0, 14, 8)\n", "t1 = np.linspace(0, 1, 100)\n", "#t1 = [0, 2, 4, 4.1, 6, 8, 10, 12, 14]\n", "\n", "\n", "df1 = pd.read_excel('variants_com_myo.xls', names=None, index_col=None)\n", "wt_t = df1.iloc[:,0].to_numpy()\n", "wt_oxr = df1.iloc[:,1].to_numpy()\n", "\n", "\n", "\n", "\n", "\n", "# initial conditions\n", "x10 = 7.4877e-10\n", "x20 = 0.0\n", "y0 = [x10, x20]\n", "\n", "fig = plt.figure()\n", "fig.set_figheight(8)\n", "fig.set_figwidth(12)\n", "\n", "\n", "# set parameters including bounds; you can also fix parameters (use vary=False)\n", "params = Parameters()\n", "#params.add('x10', value=2.73e+08, min=10**nondata[3], max = 10**nondata[1])\n", "params.add('x10', value=x10, vary=False)\n", "params.add('x20', value=0.0, vary=False)\n", "params.add('kon', value=6.8e+5, vary=False)\n", "params.add('koff', value=0.0011, vary=False)\n", "#params.add('oxt', value=2e-6, vary=False)\n", "params.add('oxt', value=1e-6, min=1e-6, max=4.5e-6)\n", "\n", "\n", "# fit model method='differential_evolution'\n", "result = minimize(residual, params, args=(wt_t, wt_oxr), nan_policy='omit', calc_covar=True)\n", "\n", "# check results of the fit\n", "nondata_fitted = odesol(t1, y0, result.params)\n", "\n", "\n", "\n", "fig = plt.figure()\n", "fig.set_figheight(5)\n", "fig.set_figwidth(6)\n", "\n", "\n", "\n", "plt.plot(wt_t, wt_oxr/1e-6, '-', linewidth=4, color='black', label='WT')\n", "plt.plot(t1, nondata_fitted[:, 1]/1e-6, '-', linewidth=4, color='red', label='V281M')\n", "#plt.scatter(nont, hbv_data, marker='^', facecolors='none', edgecolors='black', label='HBV data', s=50)\n", "#plt.plot(t1, nondata_fitted[:, 1], '--', linewidth=2, color='black', label='Bound Virus model curve')\n", "plt.legend(fontsize=16)\n", "#plt.xlim([-1, 30])\n", "#plt.ylim([2, 10])\n", "plt.xlabel(\"Time (min)\", fontsize=16, fontweight ='bold')\n", "plt.ylabel(\"[OXT-OXTR Complex] ($\\mu$M)\", fontsize=16, fontweight ='bold')\n", "plt.xticks(fontsize = 14, fontweight='bold')\n", "plt.yticks(fontsize = 14, fontweight='bold')\n", "# plt.title(\"BL6 (Non-tg)\", fontsize=14)\n", "plt.savefig(\"oxrcomp_equil\", dpi=400, bbox_inches='tight', format=\"jpg\")\n", "#plt.legend(['Group A', 'Group B', 'Group C'], fontsize=14)\n", "\n", "# display fitted statistics\n", "report_fit(result, min_correl = 0.001)\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[Fit Statistics]]\n", " # fitting method = leastsq\n", " # function evals = 364\n", " # data points = 11\n", " # variables = 2\n", " chi-square = 6.3741e-20\n", " reduced chi-square = 7.0823e-21\n", " Akaike info crit = -508.570975\n", " Bayesian info crit = -507.775184\n", "[[Variables]]\n", " x10: 7.4877e-10 (fixed)\n", " x20: 0 (fixed)\n", " kon: 2279402.22 +/- 4.83450411 (0.00%) (init = 680000)\n", " koff: 1.0002e-04 +/- 1.15344172 (1153232.86%) (init = 0.0011)\n", " oxt: 1e-06 (fixed)\n", "[[Correlations]] (unreported correlations are < 0.001)\n", " C(kon, koff) = +0.4666\n" ] }, { "data": { "text/plain": [ "<Figure size 432x288 with 0 Axes>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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vZelS5cyfvx4ateuTadOnRg9ejRjx4716wxTEXXr1uWf//wn69ev59lnnw2b9+ijj+azzz7j119LniLk5+fz5ptv+uXbvt3dyElOTi5O+/nnn/n0009LnRtgx44dZR7/xx9/8HpgT2MTe8Ginvq3Ym6lZOaSXNwwgeuA6733qykZD3dLWeXZliAtuIIC1XPPLd1yu+yyMmcpiadYteAqa6aV8mrRooWKiPbq1csvfe/evZqamqoioieccELYMoiyBaeqeumll6qI6KWXXqpvv/22fvjhh3rPPfdoWlqa9ujRo3h821dffaW1a9cu1bLds2ePdu/eXQ866CDduXNnqfLLMw5OVbV3797aokULv9lUAv3+++/auHFjPeSQQ3Tq1Kn62muv6THHHKMHHHCAX8tqyZIlWrt2bT355JN15syZOmHCBG3btq22b9/erwW3YcMGrV27tp555pk6d+5cXbBggW7dulXXr1+vDRs21J49e+pbb72lWVlZesQRR2jHjh2tBRehyhzo/bkXvKYByUH2JwNZXpD7vKzybEuQAHfXXaWD24ABqrt3x7tmYSVaL8oi55xzjgJ64403lto3YMAABXT06NFhyyhPgFNVffnll7Vv376alpam9erV0y5duuh9992n+fn5quqCbM+ePbVz585Bp9BatGiR1qpVS2+//fZS+8ob4GbOnKmAPvbYY2HrvmjRIs3IyNC6devq/vvvr/fee6/eddddpQJPVlaWHnzwwVq3bl097LDD9JVXXtGLL77YL8CputvF7du311q1aimgH330kaqqfvDBB/qnP/1J69Wrpx06dNAxY8aUe0D5vqi8AU7cvtBEZDNubsV2GqJHoDfr/ypgq6o2jqTlaErr1auXLly4MN7VKNvUqXD++f5phx0G8+ZBo0bxqVOEfvjhBw6tYMcXX9u2bSMrK4ulS5fSqVMnMjMzq01HGGMSRVm/tyKySFVL3X+PZFqJet7rujB5ilajqxcmj0kEX3wBl1zin9asGbz1VrUPbpWhqJenMab6iWQcXFHw+nOYPEX7yrfsqqkZcnPhzDP9V+ROTobXXoP27eNWLWOMCSaSAPcprqfkBBG5WkTSinaISJqIXA28gHvA/mmIMkxNt3Mn/OUvsGaNf/rYsW6eSWOMqWYiCXBPe68NcbN0bBaRDSLyO24OyqeAxl6e0v2FTc2n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AB588EFOOumkUmXWqVOnHFdSOY466igOPvhgJk2axBlnnMHMmTO58cYbqRVk4vCtW7dyyimnsHHjRubMmUN6enqpPN9++y3dunUjOTnZL71Pnz5MmTKF9evX06pVq3LXtyhQjhs3jieffDKqY5s1a+bXISaYevXqBX0et3HjxuLvq69gnWVEhIsuuognnniCf//730yaNInU1FS/1l7Tpk2pV68ec+bMCVqP/fffv6zLKRcLcPuijRvhggvc0IAizZvDlClQO/yPRGpqKiNGjKjkClYh1XjXIKYGDBjAkCFDaNy4cciBzQcffDAtW7Zk6tSpft/LefPmsWrVKv7mrR5x5JFHkpSUxLRp07j11luL802dOrVUee3ateO7777zy1fZirqo79ixI6rjhg0bxh133MEDDzzA3r17g9722759O6eddhorVqzg448/plOnTkHLatWqFV999RW7d+/2C+Sff/459erVK/5norwaN27Mbbfdxpdfflnq1nBZTj75ZO6//36+/vprunXrFjRP27ZtWbduHRs2bKBZs2aAG/T+008/ccwxx0R8rqFDh3L//fczY8YMXn75Zc4++2waNGhQvP/UU0/l4YcfZsuWLUFvm1cWC3D7GlW3SGlgV++JE6GS/osyVadWrVohW26+ee69916uuOIKLrroIi666CJWr17NP/7xDzp37swll7gRPkU9Ju+66y4KCwvp3bs37733HtkBw0lEhGeeeYYzzjiD3bt3M2TIEJo1a8a6deuYN28ebdq0YdSoUTG/1pYtW9K0aVOmTp1K165dSUlJoX379kFbHr6GDh3KnXfeyZgxY+jRoweHH354qTxnn302n376KWPGjCE/P5/PPvuseF/Hjh2LhxFce+21nHvuuQwePJirr76a+vXr88Ybb/DKK69w4403+gW9d955h/z8fL799lvA9crcsGEDKSkp/PnPfw5Z37vuuiuqr0uRG2+8kSlTpnDSSSdxxx13cMQRR7BhwwZef/11nnvuOdLS0jj33HOLB7CPGjWKDRs28OCDDxYHu0gddNBBHHnkkdx6662sXr3a7/YkuGEH559/Pueccw6jRo2iT58+JCUlsXLlSrKzs3n44Yf9eqfGTLCeJ7YlcC/KMWNK99y7+ebKP281UVZvrJrGtxdlKIG9KItMmjRJu3btqnXq1NEmTZroRRddVNzr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\n", "text/plain": [ "<Figure size 432x324 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "\n", "np.random.seed(10)\n", "np.seterr(divide = 'ignore') \n", "\n", "def f(y, t, params):\n", " \n", "\n", " x1 = y[0]\n", " x2 = y[1]\n", " \n", " try: \n", " x0 = params['x10'].value\n", " kon = params['kon'].value\n", " koff = params['koff'].value\n", " oxt = params['oxt'].value\n", " \n", " except KeyError:\n", " \n", " kon, koff, oxt = params\n", " \n", " oxtr = -kon*oxt*(x1) + koff*x2\n", " oxr = kon*oxt*(x1) -koff*x2\n", "\n", " return[oxtr, oxr]\n", "\n", "\n", "\n", "def odesol(t, x0, params):\n", " \"\"\"\n", " Solution to the ODE x'(t) = f(t,x,k) with initial condition x(0) = x0\n", " \"\"\"\n", " x0 = params['x10'].value, params['x20'].value\n", " x = odeint(f, x0, t, args=(params,))\n", " #Logx = np.log10(x)\n", " return x\n", "\n", "def residual(params, t, data):\n", "\n", " \"\"\"\n", " compute the residual between actual data and fitted data\n", " \"\"\"\n", "\n", " x0 = params['x10'].value, params['x20'].value \n", " model = odesol(t, x0, params)\n", " \n", " # you only have data for one of your variables\n", " #x1_simul = simul[:, 0] \n", " x2_model = model[:, 1]\n", " \n", " resid1 = x2_model - data\n", " \n", " \n", " return resid1.ravel()\n", " \n", "# measured data \n", "#t = np.linspace(0, 14, 8)\n", "t1 = np.linspace(0, 1.1, 100)\n", "#t1 = [0, 2, 4, 4.1, 6, 8, 10, 12, 14]\n", "df1 = pd.read_excel('variants_com_myo.xls', names=None, index_col=None)\n", "wt_t = df1.iloc[:11,0].to_numpy()\n", "wt_oxr = df1.iloc[:11,1].to_numpy()\n", "\n", "# wt_t = df1.iloc[:,0].to_numpy()\n", "# wt_oxr = df1.iloc[:,1].to_numpy()\n", "\n", "# initial conditions\n", "x10 = 7.4877e-10\n", "x20 = 0.0\n", "y0 = [x10, x20]\n", "\n", "plt.figure()\n", "#plt.scatter(time_h, hdv_data, marker='o', facecolors='none', edgecolors='black', label='HDV data', s=50)\n", "#plt.scatter(time_b, hbv_data, marker='^', facecolors='none', edgecolors='black', label='HBV data', s=50)\n", "\n", "# set parameters including bounds; you can also fix parameters (use vary=False)\n", "params = Parameters()\n", "#params.add('x10', value=2.73e+08, min=10**nondata[3], max = 10**nondata[1])\n", "params.add('x10', value=x10, vary=False)\n", "params.add('x20', value=0.0, vary=False)\n", "params.add('kon', value=6.8e+5, min=6e+3, max=5e+6)\n", "params.add('koff', value=0.0011, min=0.0001, max=0.01)\n", "params.add('oxt', value=1e-6, vary=False)\n", "\n", "\n", "\n", "# fit model method='differential_evolution'\n", "result = minimize(residual, params, args=(wt_t, wt_oxr), nan_policy='omit', calc_covar=True)\n", "\n", "# check results of the fit\n", "nondata_fitted = odesol(t1, y0, result.params)\n", "\n", "\n", "\n", "fig = plt.figure()\n", "fig.set_figheight(4.5)\n", "fig.set_figwidth(6)\n", "# plt.scatter(wt_t[0:11], wt_oxr[0:11]/1e-9, marker='o', facecolors='none', edgecolors='black', label='HDV RNA data', s=50)\n", "# plt.plot(t1[0:11], nondata_fitted[0:11, 1]/1e-9, '-', linewidth=2, color='red', label='HDV RNA model curve')\n", "# #plt.scatter(nont, hbv_data, marker='^', facecolors='none', edgecolors='black', label='HBV data', s=50)\n", "# #plt.plot(t1, nondata_fitted[:, 1], '--', linewidth=2, color='black', label='Bound Virus model curve')\n", "# plt.legend()\n", "# #plt.xlim([-1, 30])\n", "# #plt.ylim([2, 10])\n", "# plt.xlabel(\"Time post inoculation (hours)\", fontsize=14)\n", "# plt.ylabel(\"HDV RNA ($\\log_{10}$cp/ml)\", fontsize=14)\n", "# plt.title(\"BL6 (Non-tg)\", fontsize=14)\n", "\n", "\n", "plt.scatter(wt_t, wt_oxr/1e-6, marker='o', facecolors='black', edgecolors='black', label='WT OXTR data', s=50)\n", "plt.plot(t1, nondata_fitted[:, 1]/1e-6, '-', linewidth=4, color='red', label='Model fit V281M curve')\n", "plt.legend(fontsize=16, loc =\"lower right\")\n", "plt.xlabel(\"Time (min)\", fontsize=16, fontweight ='bold')\n", "plt.ylabel(\"[OXTR Complex] ($\\mu$M)\", fontsize=16, fontweight ='bold')\n", "plt.xticks(fontsize = 16, fontweight='bold')\n", "plt.yticks(fontsize = 16, fontweight='bold')\n", "plt.ylim(0, 0.0010)\n", "plt.savefig(\"V281Moxr_kd_estimate_1min\", dpi=400, bbox_inches='tight', format=\"jpg\")\n", "# display fitted statistics\n", "report_fit(result, min_correl = 0.001)\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# OXT model fitting to wt OXTR data for E339K" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[Fit Statistics]]\n", " # fitting method = leastsq\n", " # function evals = 40\n", " # data points = 100\n", " # variables = 1\n", " chi-square = 1.4219e-17\n", " reduced chi-square = 1.4363e-19\n", " Akaike info crit = -4337.71048\n", " Bayesian info crit = -4335.10531\n", "[[Variables]]\n", " x10: 1.19e-09 (fixed)\n", " x20: 0 (fixed)\n", " kon: 680000 (fixed)\n", " koff: 0.0011 (fixed)\n", " oxt: 2.2477e-06 +/- 5.7426e-07 (25.55%) (init = 3e-06)\n" ] }, { "data": { "text/plain": [ "<Figure size 432x288 with 0 Axes>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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PSdP/m/klMxmKx5k96q59CazRZSFqdEBkpOT2bx5M6tXr6Znz57s2LGDOXPm0KRJEw4ePIiHhwevvfYa+/btw8XFhc6dO7Ny5UqaNWvGO++8w759+3ByciI0NJSGDRsCxinXX3zxRR577DHOnTtHly5dOHHixHXv7f3338fJyYkjR44UlulmTp8+zcaNG7G0tMRgMPDzzz8zevRo/v77bwICAvD09GTo0KG3VA5zSNAogdaa1J07cYLCkVNCiKtdmRr9ivnz53OjKXuKT43+yiuvFE7RPmLEiOvmCw0NJSEhAQ8Pj6uap+DqqdHti0woWnRqdF9fX8aMGUNycjIuLi7XnL9nz54opahbty6enp7UNc1mXbt2baKiojh79izt2rUrnDdr2LBhbNu2DeCq/YMGDeL06dMAbNy4sbAPB4zTEhWd6LC4jRs3XtVkV1I5ixswYACWlpaF137vvfcYPXo0y5YtY9CgQTcsx51Mg2RW85RSqqtS6pRSKkwp9XoJx5VSapbp+GGlVKOb5VVKuSqlfldKnTF9uhQ59oYp/SmlVJci+xsrpY6Yjs1S96BHevXq1dSvX595psnc5u/Zw+7du+/2ZYS4e7S+N8td9qBOjW5regbLwsKicP3Kdn5+Pjean+96X0EGg4G//vqr8F0jMTExN/yi1lqXeK6i+4pPue7g4FC43qJFC8LCwkhMTGTlypX069fvtsphjpsGDaWUJfAl0A0IBoYopYKLJesGVDMtY4H/mJH3dWCT1roasMm0jen4YKA20BX4ynQeTOcdW+RaXW/9lq9v9erVPPPMM/zrX//iBdN7wQMef5zHH3+8sNoohLh1D+rU6OZo1qwZW7du5eLFixQUFLB06VLatm1Ls2bN+OOPP0hKSiIvL48ffvihME/nzp354osvCreL1shKUjz9leYpT0/Pwg79n3/++br5lVL07duXl156iVq1ahUO2rnVcpjDnJpGUyBMax2htc4FlgG9i6XpDSzURrsAZ6WU903y9gYWmNYXAH2K7F+mtc7RWkcCYUBT0/kqaK3/0sbQv7BInjumtWbq1KnMmzePLl26oExVunbPPssbb7zBRx99dLcuJcQj4WGYGt3c63700UeEhoZSv359GjVqRO/evfH29ubdd9+lRYsWdOzYkUaNChtYmDVrFnv37qVevXoEBwfz9ddf3/Aab731FsnJydSpU4f69euzZcsWAKZNm0aPHj1o37493t7eNzzHoEGDWLRoUWHT1O2Uwyxa6xsuwBPAnCLbw4EviqX5FXisyPYmIORGeYGUYudINn1+ATxZZP9c03lCgI1F9rcGfr1Z+Rs3bqzNER8fr11cXHRBQYHWGRlaK6W1lZXWOTk6NjZWu7q6mnUeIe6H48ePl3YRRBlS0u8TsFeX8J1qTkd4SY12xRv5rpfGnLzmXs/scymlxmJsxsLf3/8mlzOytrYmPz+f/Px8bOLiICgIypUDGxuysrLkfeBCCIF5zVPRgF+RbV8g1sw0N8qbYGpywvR5wYxz+d6kHABorb/RWodorUOKVodvxNXVlcaNGxvbPatUgbAw2L8fgNmzZ9O/f3+zziOEEGWZOTWNPUA1pVQgEIOxk3posTSrgYlKqWVAM+Cy1jpOKZV4g7yrgZHANNPnqiL7lyilPgUqYezw3q21LlBKpSmlmgN/AyOAz2/npq/n448/pnv37ly8eJEhQ4aQlZXF7NmzWbZsGTt37ryblxJCiIfSTWsaWut8YCKwHjgBLNdaH1NKjVdKjTclWwNEYOy0/i/w7I3ymvJMAzoppc4AnUzbmI4vB44D64AJWusrL694Bphjuk44sPb2b/1aTZo0YfPmzezbt4969erx2GOPkZmZyc6dO/H19b35CYS4j3QZf1WzuD9u9fdI3hEuxEMoMjISR0dH3NzcZAJNcdu01iQlJZGWlkZgYOBVx673jnB5IlyIh5Cvry/R0dEkJiaWdlHEQ87Ozu6WWlIkaAjxELK2tr7mL0Mh7geZ5VYIIYTZJGgIIYQwmwQNIYQQZivzo6dMz4qcvWnCkrkDJb8WrOySe340PGr3/KjdL9z5PVfWWl/zdHSZDxp3Qim1t6QhZ2WZ3POj4VG750ftfuHe3bM0TwkhhDCbBA0hhBBmk6BxY9+UdgFKgdzzo+FRu+dH7X7hHt2z9GkIIYQwm9Q0hBBCmE2CRgmUUl2VUqeUUmFKqddLuzz3mlLKTym1RSl1Qil1TCk1qbTLdL8opSyVUgeUUr+WdlnuB6WUs1LqR6XUSdO/d4vSLtO9ppR60fR7fVQptVQpdeMXkj+ElFLzlFIXlFJHi+xzVUr9rpQ6Y/p0uRvXkqBRjFLKEvgS6AYEA0OUUsGlW6p7Lh94WWtdC2gOTHgE7vmKSRin7X9UfAas01rXBOpTxu9dKeUDPA+EaK3rAJYY3+tT1swHuhbb9zqwSWtdDeMruO/KH8ASNK7VFAjTWkdorXOBZUDvUi7TPaW1jtNa7zetp2H8IvEp3VLde0opX+BxjO9oKfOUUhWANsBcAK11rtY6pVQLdX9YAfZKKSugHNd54+fDTGu9DbhUbHdvYIFpfQHQ525cS4LGtXyA80W2o3kEvkCvUEoFAA0xvh2xrPs38CpgKOVy3C9BQCLwralJbo5SyqG0C3Uvaa1jgBnAOSAO41tFN5Ruqe4bT611HBj/MAQ87sZJJWhcq6Q32jwSQ8yUUuWBFcALWuvU0i7PvaSU6gFc0FrvK+2y3EdWQCPgP1rrhkAGd6nJ4kFlasfvDQRifH20g1LqydIt1cNNgsa1ogG/Itu+lMHqbHFKKWuMAWOx1vqn0i7PfdAK6KWUisLYBNleKbWodIt0z0UD0VrrK7XIHzEGkbKsIxCptU7UWucBPwEtS7lM90uCUsobwPR54W6cVILGtfYA1ZRSgUopG4ydZqtLuUz3lDK+L3QucEJr/Wlpl+d+0Fq/obX21VoHYPw33qy1LtN/gWqt44HzSqkapl0dgOOlWKT74RzQXClVzvR73oEy3vlfxGpgpGl9JLDqbpxU3txXjNY6Xyk1EViPcaTFPK31sVIu1r3WChgOHFFKHTTte1Nrvab0iiTukeeAxaY/iCKA0aVcnntKa/23UupHYD/GUYIHKINPhyullgLtAHelVDTwDjANWK6Uegpj8BxwV64lT4QLIYQwlzRPCSGEMJsEDSGEEGaToCGEEMJsEjSEEEKYTYKGEEIIs0nQEEIIYTYJGkIIIcwmQUMIIYTZ/h/T7VoFQWhWpgAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "np.random.seed(10)\n", "np.seterr(divide = 'ignore') \n", "\n", "def f(y, t, params):\n", " \n", "\n", " x1 = y[0]\n", " x2 = y[1]\n", " \n", " try: \n", " x0 = params['x10'].value\n", " kon = params['kon'].value\n", " koff = params['koff'].value\n", " oxt = params['oxt'].value\n", " \n", " except KeyError:\n", " \n", " kon, koff, oxt = params\n", " \n", " oxtr = -kon*oxt*(x1) + koff*x2\n", " oxr = kon*oxt*(x1) -koff*x2\n", "\n", " return[oxtr, oxr]\n", "\n", "\n", "\n", "def odesol(t, x0, params):\n", " \"\"\"\n", " Solution to the ODE x'(t) = f(t,x,k) with initial condition x(0) = x0\n", " \"\"\"\n", " x0 = params['x10'].value, params['x20'].value\n", " x = odeint(f, x0, t, args=(params,))\n", " #Logx = np.log10(x)\n", " return x\n", "\n", "def residual(params, t, data):\n", "\n", " \"\"\"\n", " compute the residual between actual data and fitted data\n", " \"\"\"\n", "\n", " x0 = params['x10'].value, params['x20'].value \n", " model = odesol(t, x0, params)\n", " \n", " # you only have data for one of your variables\n", " #x1_simul = simul[:, 0] \n", " x2_model = model[:, 1]\n", " \n", " resid1 = x2_model - data\n", " \n", " \n", " return resid1.ravel()\n", " \n", "# measured data \n", "#t = np.linspace(0, 14, 8)\n", "t1 = np.linspace(0, 10, 100)\n", "#t1 = [0, 2, 4, 4.1, 6, 8, 10, 12, 14]\n", "df1 = pd.read_excel('variants_com_myo.xls', names=None, index_col=None)\n", "wt_t = df1.iloc[:,0].to_numpy()\n", "wt_oxr = df1.iloc[:,1].to_numpy()\n", "\n", "\n", "# initial conditions\n", "x10 = 1.19e-9\n", "x20 = 0.0\n", "y0 = [x10, x20]\n", "\n", "plt.figure()\n", "#plt.scatter(time_h, hdv_data, marker='o', facecolors='none', edgecolors='black', label='HDV data', s=50)\n", "#plt.scatter(time_b, hbv_data, marker='^', facecolors='none', edgecolors='black', label='HBV data', s=50)\n", "\n", "# set parameters including bounds; you can also fix parameters (use vary=False)\n", "params = Parameters()\n", "#params.add('x10', value=2.73e+08, min=10**nondata[3], max = 10**nondata[1])\n", "params.add('x10', value=x10, vary=False)\n", "params.add('x20', value=0.0, vary=False)\n", "params.add('kon', value=6.8e+5, vary=False)\n", "params.add('koff', value=0.0011, vary=False)\n", "params.add('oxt', value=3.0e-6, min=1e-6, max=6e-6)\n", "\n", "\n", "\n", "# fit model method='differential_evolution'\n", "result = minimize(residual, params, args=(wt_t, wt_oxr), nan_policy='omit', calc_covar=True)\n", "\n", "# check results of the fit\n", "nondata_fitted = odesol(t1, y0, result.params)\n", "\n", "\n", "\n", "fig = plt.figure()\n", "\n", "\n", "\n", "plt.scatter(wt_t, wt_oxr/1e-6, marker='o', facecolors='none', edgecolors='black', label='HDV RNA data', s=50)\n", "plt.plot(t1, nondata_fitted[:, 1]/1e-6, '-', linewidth=2, color='red', label='HDV RNA model curve')\n", "#plt.scatter(nont, hbv_data, marker='^', facecolors='none', edgecolors='black', label='HBV data', s=50)\n", "#plt.plot(t1, nondata_fitted[:, 1], '--', linewidth=2, color='black', label='Bound Virus model curve')\n", "plt.legend()\n", "#plt.xlim([-1, 30])\n", "#plt.ylim([2, 10])\n", "# plt.xlabel(\"Time post inoculation (hours)\", fontsize=14)\n", "# plt.ylabel(\"HDV RNA ($\\log_{10}$cp/ml)\", fontsize=14)\n", "# plt.title(\"BL6 (Non-tg)\", fontsize=14)\n", "# fig.savefig(\"bl6nontg_modelfitalldataset\", dpi=400, format=\"png\")\n", "#plt.legend(['Group A', 'Group B', 'Group C'], fontsize=14)\n", "\n", "# display fitted statistics\n", "report_fit(result, min_correl = 0.001)\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[Fit Statistics]]\n", " # fitting method = leastsq\n", " # function evals = 282\n", " # data points = 16\n", " # variables = 2\n", " chi-square = 3.0582e-20\n", " reduced chi-square = 2.1844e-21\n", " Akaike info crit = -759.303308\n", " Bayesian info crit = -757.758130\n", "[[Variables]]\n", " x10: 1.19e-09 (fixed)\n", " x20: 0 (fixed)\n", " kon: 1197381.04 +/- 84563.5167 (7.06%) (init = 680000)\n", " koff: 1.0000e-04 +/- 0.01959649 (19596.48%) (init = 0.001)\n", " oxt: 1e-06 (fixed)\n", "[[Correlations]] (unreported correlations are < 0.001)\n", " C(kon, koff) = -0.8817\n" ] }, { "data": { "text/plain": [ "<Figure size 432x288 with 0 Axes>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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tWstj2ItIRwOM23aNO64446o9qeeeopwOBxVebwmMGHCBL799luee+45WrZsSe/evRkwYADHHXdckcwvv/zCbbfdRufOnTnwwAOTnnvu3Lklqpr7Sx9t2rSJ/v37c8kll9C2bVu+++47Jk+ezCGHHMJXX31F165di16/V69ejB07lo4dO7JhwwbuvfdehgwZwty5cznooIMA+Pnnn8nKyiIcDvPII4/QtGlT/vrXv3LEEUewYMGChDkX8/LyGDVqFAsWLOC1115j2LBhSb/PukgyBu7JCtfCqHieB56Oafsj4CvobHkUaw+nnHIKTz/9NLfffnvRKmf79u288MILnHrqqWVabVUl33zzDYcffniUQWvVqlVUwdGycvDBB1O/fvyvwjPOOIMzzjgjqu2ggw6iT58+PP/881x99dUAHHXUURx11FFRcscddxx77LEH06ZNKzJw//jHP1i/fj0ffvhhVGHWHj16cOutt/Lcc88F6rF161aOP/54/vOf//DGG2+krRp7WdmxY0dRzbvqSjKB3ueV9aiMN2AkwTpc3XU/+wJ3BMgatYKzzz6b1atXRwXqv/TSS+zevZtTTz01cMzTTz/NfvvtR+PGjdljjz04++yzWbduXZTMtm3buOSSS2jTpg3NmjXjhBNO4Icffgic78MPP+Soo44q2vo+9thj+frroFDa+ES2VFetWsW0adOKthCBqC3KVatW0b17dwB+//vfF8lVlCFv06YNEF20NIhQKESjRo2i5D7++GMyMzOjnLdCoRCDBw9m5syZgZW9N2/ezNFHH83ixYt5++23kzZuX375JSeffDJt2rShSZMm9O7dm0mTJhX1d+vWjbFjx5YYJyJMnDix6Hnks/7666859thjadasGaNHj+aSSy6hffv2JXTesWMHrVq14sorryxq27hxIxdffDGdOnWiUaNG9OnTh0cffTSp91FWkr4HZ9RQFPg9sMnX1hC3mqveP76MctC1a1cOP/xwpk2bVtT21FNPcfLJJwduOz/66KOcffbZ9O3blxdffJHJkyfz1ltvMWTIkKhA//HjxzNlyhQmTJjAiy++SO/evTnzzDNLzPf6669z1FFH0axZM55++mmmT59Obm4ugwcPjqqYXRoHHngg8+fPp23btkX3s4LuaXXs2JEXX3SOUn/605+K5EaMGFHqa+zevZtdu3ZFHYWFhYFyO3fuZNmyZYwfP54OHTpw+umnl5ArLCykoKCA7777jssuuwyACy64oKi/Xr16NGzYsMS4Ro0asX37dlasWBHVvnHjRo488khWrFjBu+++G1WhPRELFixg0KBBrFixgnvvvZfXX3+dCRMmxP1BkgwnnngiQ4YM4dVXX+Wqq67inHPOYcOGDbz9dnTGiJkzZ/LLL79w9tkuoe3WrVs57LDDeP3115k4cSKvv/46o0aN4uKLLw6sAJ82gorE2VGLCp4+HvBKd6X/ZWoqJQopVvlVEHOkiL/o5+OPP64tW7bU7du369q1a7VevXr69ttv6/vvv6+AvvPOO6rqCpC2a9dOhw4dGjXXnDlzFND7779fVVWXLFmiGRkZOmnSpCi5iy66SAH95z//WdTWs2fPEhXDt2zZom3atNE//OEPRW1DhgzRIUOGlPq+OnXqpOeee25UW2yB0JUrVyqgjz32WKnz+ccHHZdeemkJ+f79+xf19+rVK24RzlNPPbVIrl27diUK3l5zzTXapEkT3bhxY1Hb7t27tVevXgrovHnzitr9Or377rtJva8IgwcP1s6dOxcVmg2ia9euJT7XyOveeuutRc8jn9V9991XQjYzM1NPP/30qLYTTzxR+/btW/T89ttv10aNGunSpUuj5C644AJt06aNFhQUJHwvZS14aiu42sxq4MqYtsOAqytfFaPy+d3vfseOHTt47bXXeOaZZ+jQoUOJe0QA//vf/9iwYQNjxoyJas/KyqJr1658+OGHAHzyyScUFhYyevToKLnYVcyyZctYsWIFY8aMiVoVNW3alEGDBjF7dvXK//Dxxx+zcOHCqOPaa68tITdt2jQ+/vhjpk+fTvPmzRk2bBirVq0qIfeXv/yFBQsW8MILL/Db3/6WkSNHRnlIXnTRRRQWFnLOOeewYsUK1q1bxxVXXMHKlSsBF5rj54gjjqBJkyb88Y9/ZPPmzUm9p23btvHRRx8xZswYmjZtmsKnkZiTTz65RNtZZ53FK6+8UuS4tGnTJt544w3OOeecIpk333yTgw8+mO7du0ddE8ceeyw///xzCY/UdGEGrrZSCIwD/M5yTYGpQL2gAUZtIxwOc9JJJzFt2jSeeuopxowZU+LLE9wXErhtvlg6dOhQ1B+5H9e+ffsomdjnGza4spDnn38+DRo0iDpmzpzJzz//XP43l0b69+/PgAEDoo4uXbqUkOvbty8HH3wwZ5xxBu+++y55eXlMnjy5hFyPHj0YOHAgp5xyCm+88Qbt2rWLcvXv0aMHzzzzDJ9++im9evVizz33ZP78+Vx11VVAyb/DoYceyiuvvMJ///tfjjvuOLZu3Vrqe9q8eTOFhYVpccLxE3SNnH322fz66688//zzAMyYMYOCgoKoH0wbNmxg9uzZJa6H3/3udwAVdk1YppHaykPAezFtdwOWlKROcc455zBixAgKCwt59tlnA2Vat24NwI8/lszA9+OPPzJgwACg+Mtt/fr19OjRo0hm/fr1UWMiDhiTJk3i6KOPLjFn0P2nmkbLli3p1atXqWnsGjZsSL9+/fjiiy+i2k899VROOukkli5dSsOGDenZsycXX3wxe+21V6BxHTZsGC+88AInn3wyw4cP56233ooKZYilVatWZGRksGbNmoT6NW7cmJ07d0a1RX7QBOGPO4zQvXt3DjvsMJ5++mnOO+88nn76aYYOHcpee+1VJNOmTRvatWvH/fffHzhv7969E+pZVmwFVxtZBlwX03Y0cFEV6FLTiHtXpoqOcjJs2DBGjx7NRRddxD777BMo07t3b9q3b8+MGTOi2ufNm8fq1asZMmQI4NzpMzIySrixx47r3bs33bp1Y/HixSVWRgMGDKBfv37lf2MBRFzWt2/fXiHz+1m/fj1LliyhZ8+eCeW2bdvGokWLAuXq1atH37596dmzZ1EM6sUXXxx3rhEjRjBjxgw++eQTRo0alfB9Nm3alKysLJ5++umEcl27di3h2Tpz5syE7ymIs88+mw8++IAPPviA+fPnR21PgguXWLJkCV26dAm8JsLhcJyZy4et4Gobu3HZSrb52sLA49jPmTpIvXr14q7c/DK3334748eP56yzzuKss85izZo13HjjjWRmZnLeeS7iJ+Ixecstt1BYWMjAgQN55513mDVrVtR8IsKDDz7IiSeeyM6dOxk9ejR77LEH69evZ968eXTp0oUJEyak/b22b9+eNm3aMGPGDPr160coFKJ79+5FK8p4fPLJJyUCvevVq8fAgQMBd9/pwAMPpF+/fjRv3pylS5dy7733Ur9+/aIYOHAepq1bt2bAgAHssccerF69mr///e+sW7cuypu1oKCAa6+9liFDhtC8eXMWL17MpEmT2GeffaLmC+KUU05h2rRpnHXWWZx8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\n", "text/plain": [ "<Figure size 432x324 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "np.random.seed(10)\n", "np.seterr(divide = 'ignore') \n", "\n", "def f(y, t, params):\n", " \n", "\n", " x1 = y[0]\n", " x2 = y[1]\n", " \n", " try: \n", " x0 = params['x10'].value\n", " kon = params['kon'].value\n", " koff = params['koff'].value\n", " oxt = params['oxt'].value\n", " \n", " except KeyError:\n", " \n", " kon, koff, oxt = params\n", " \n", " oxtr = -kon*oxt*(x1) + koff*x2\n", " oxr = kon*oxt*(x1) -koff*x2\n", "\n", " return[oxtr, oxr]\n", "\n", "\n", "\n", "def odesol(t, x0, params):\n", " \"\"\"\n", " Solution to the ODE x'(t) = f(t,x,k) with initial condition x(0) = x0\n", " \"\"\"\n", " x0 = params['x10'].value, params['x20'].value\n", " x = odeint(f, x0, t, args=(params,))\n", " #Logx = np.log10(x)\n", " return x\n", "\n", "def residual(params, t, data):\n", "\n", " \"\"\"\n", " compute the residual between actual data and fitted data\n", " \"\"\"\n", "\n", " x0 = params['x10'].value, params['x20'].value \n", " model = odesol(t, x0, params)\n", " \n", " # you only have data for one of your variables\n", " #x1_simul = simul[:, 0] \n", " x2_model = model[:, 1]\n", " \n", " resid1 = x2_model - data\n", " \n", " \n", " return resid1.ravel()\n", " \n", "# measured data \n", "#t = np.linspace(0, 14, 8)\n", "t1 = np.linspace(0, 1.6, 100)\n", "#t1 = [0, 2, 4, 4.1, 6, 8, 10, 12, 14]\n", "df1 = pd.read_excel('variants_com_myo.xls', names=None, index_col=None)\n", "wt_t = df1.iloc[:16,0].to_numpy()\n", "wt_oxr = df1.iloc[:16,1].to_numpy()\n", "\n", "\n", "# initial conditions\n", "x10 = 1.19e-9\n", "x20 = 0.0\n", "y0 = [x10, x20]\n", "\n", "plt.figure()\n", "#plt.scatter(time_h, hdv_data, marker='o', facecolors='none', edgecolors='black', label='HDV data', s=50)\n", "#plt.scatter(time_b, hbv_data, marker='^', facecolors='none', edgecolors='black', label='HBV data', s=50)\n", "\n", "# set parameters including bounds; you can also fix parameters (use vary=False)\n", "params = Parameters()\n", "#params.add('x10', value=2.73e+08, min=10**nondata[3], max = 10**nondata[1])\n", "params.add('x10', value=x10, vary=False)\n", "params.add('x20', value=0.0, vary=False)\n", "params.add('kon', value=6.8e+5, min=6e+3, max=5e+6)\n", "params.add('koff', value=0.001, min=0.0001, max=0.01)\n", "params.add('oxt', value=1e-6, vary=False)\n", "\n", "\n", "\n", "# fit model method='differential_evolution'\n", "result = minimize(residual, params, args=(wt_t, wt_oxr), nan_policy='omit', calc_covar=True)\n", "\n", "# check results of the fit\n", "nondata_fitted = odesol(t1, y0, result.params)\n", "\n", "\n", "\n", "fig = plt.figure()\n", "fig.set_figheight(4.5)\n", "fig.set_figwidth(6)\n", "\n", "\n", "plt.scatter(wt_t, wt_oxr/1e-6, marker='o', facecolors='black', edgecolors='black', label='WT OXTR data', s=50)\n", "plt.plot(t1, nondata_fitted[:, 1]/1e-6, '-', linewidth=4, color='magenta', label='Model fit E339K curve')\n", "#plt.scatter(nont, hbv_data, marker='^', facecolors='none', edgecolors='black', label='HBV data', s=50)\n", "#plt.plot(t1, nondata_fitted[:, 1], '--', linewidth=2, color='black', label='Bound Virus model curve')\n", "plt.legend(fontsize=16)\n", "plt.xlabel(\"Time (min)\", fontsize=16, fontweight ='bold')\n", "plt.ylabel(\"[OXTR Complex] ($\\mu$M)\", fontsize=16, fontweight ='bold')\n", "plt.xticks(fontsize = 16, fontweight='bold')\n", "plt.yticks(fontsize = 16, fontweight='bold')\n", "plt.savefig(\"E339Koxr_kd_estimate_1.5min\", dpi=400, bbox_inches='tight', format=\"jpg\")\n", "\n", "# display fitted statistics\n", "report_fit(result, min_correl = 0.001)\n", "plt.show()\n" ] } ], "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.9.12" } }, "nbformat": 4, "nbformat_minor": 4 }