{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f87a0a68-7580-48e3-9cfa-a64789d24e7f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# preliminaries\n",
    "%matplotlib widget\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "import scipy as sp\n",
    "import scipy.optimize\n",
    "import scipy.stats\n",
    "import pandas as pd\n",
    "import os\n",
    "from lmfit import Model\n",
    "from numdifftools import Derivative\n",
    "backupdir = os.getcwd()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e1181fa8-9740-44c5-9496-aa7f9f23b363",
   "metadata": {},
   "outputs": [],
   "source": [
    "A05 = pd.read_csv('A0.5B24.csv', names= ['Time','NADPH'])\n",
    "A1 = pd.read_csv('A1B24.csv', names= ['Time','NADPH'])\n",
    "A2 = pd.read_csv('A2B24.csv', names= ['Time','NADPH'])\n",
    "A4 = pd.read_csv('A4B24.csv', names= ['Time','NADPH'])\n",
    "A8 = pd.read_csv('A8B24.csv', names= ['Time','NADPH'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "9fd75d97-0c00-41c1-94c7-6cfed331df9a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x27ef4f67ed0>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9adc5e6818fe461f828d3583db67e063",
       "version_major": 2,
       "version_minor": 0
      },
      "image/png": "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8xyePQAAQPviiACotOv1ueeekxdffFF27NhhJmzoLN8pU6aY45mZmaaLtsm0adNk/fr1smDBAtm5c6c8/vjjsmXLFnnwwQfN8ePHj8uMGTPk448/lr1795qweOONN8qAAQPMZBEAAIBg5ZgxgLqsS2VlpeTm5pqJHLqciwa8poke+/fvNzODm6SmpsrKlSslJydHZs+eLQkJCWa5l8GDB5vj2qW8fft2Eyh1KZhevXrJ2LFj5Ve/+pXp6gUAAAhWjlkHsD1iHSEAAJynhnUAndMFDAAAgHODAAgAAGAZAiAAAIBlCIAAAACWIQACAABYhgAIAABgmY7+ml59OriVGgAAQJAEwG7duklISEizx3XpQT3e0NDgj5cHAABAWwfAjRs3eoW9f/zHf5T/+q//kt69e/vj5QAAABDoAJiWlua1r7ddGzlypFx88cX+eDkAAAC0ApNAAAAALEMABAAAsEybBcCWJoUAAADA4WMAb775Zq/97777Tu677z6JiIjwKn/llVf88fIAAABo6wAYFRXltX/nnXf642UAAADQXgLg888/74+nBQAAQHsNgGrv3r2yYcMGqa+vlzFjxshll13mr5cCAABAe1gI+oYbbpBvv/327y/SsaOsWLGCrmAAAIBgnQU8Z84cue666+TgwYNy5MgRueeee+TRRx/1x0sBAACglUJceq82P9wLePPmzXLppZea/bq6OomMjJTy8nKJjo6WYFFTU2MmvFRXV5v3BwAA2r8afn/7pwVQL2xMTIx7v0uXLnLeeeeZoAQAAIAgnQTy1ltveS0H09jYKAUFBVJaWuoumzBhgr9eHgAAAG3ZBdyhQ4fTujNIQ0ODOBlNyAAAOE8NXcD+aQHU1j4AAABYfi9gAAAABPkYQPXuu++a+/3qotDa5du/f3+59dZbZfTo0f58WQAAAASiBfC+++6T9PR0ycvLM2sBVlZWyv/8z//INddcI9nZ2f56WQAAAAQiAL766qvmfsB694+qqiopLCyUjz/+2ITA5557TpYtWyavv/66P14aAAAAgZgFrMu76L1/582b5/P4Y489Jjt37pTXXntNnIxZRAAAOE8Ns4D90wJYXFwsN910U7PHb775Ztm6das/XhoAAACBCIDa7XvRRRc1e1yP6bhAAAAABEkArK+vl06dOjV7vGPHjqZOay1ZskTi4+MlPDxcRowY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3Dh3/T179khZWZlXHe3K0abv5p4z2PnjOvtSXV1tuiK6desmNvLXdW5sbJS77rpLZsyYIZdddpkf34Hd11qv85tvvikDBw405T169DA/N9asWSO28tdnOjU1VV5//XU5ePCgGbKzceNG+eKLL2Ts2LFiozO5zoF4TpsQAP2sqqpKGhoaJDY21qtc9zXE+aLlLdVv+tqa5wx2/rjOJ/vuu+/MmMCMjAy/3Jjc5us8f/586dixo0ydOtVPZ+48/rjWFRUVZmzak08+Kddff728/fbbctNNN8nNN98s77//vtjIX5/pRYsWmXF/OgYwLCzMXG8dqzZ69Gix0Zlc50A8p006BvoEACfQCSG33Xab+Uv+2WefDfTpBBX9C/6ZZ56R4uJi07oK/9EWQHXjjTfKL37xC/PvoUOHyubNm80EhbS0NC7/OaIB8OOPPzatgP369ZMPPvhAHnjgATOZ7OTWQyAQaAH0s5iYGAkNDZXy8nKvct2Pi4vz+Rgtb6l+09fWPGew88d1Pjn87du3TzZs2GBt65+/rvOHH35oWqb69u1rWgF102v98MMPm5l9tvLHtdbn1OurLVOeLrnkEmtnAfvjOn/77bcye/Zs+e1vfys//elP5fLLLzczgidNmiRPP/202OhMrnMgntMmBEA/06b/5ORkKSgo8PorXPdHjRrl8zFa7llfafBoqt+/f3/z4fasU1NTI5988kmzzxns/HGdPcOfLrHzzjvvSHR0tNjMH9dZx/5t375dtm3b5t60lUTHA7711ltiK39ca31OXfJl165dXnV0bJq2UtnIH9dZf27opuPRPGlYaWqFtc2ZXOdAPKdVAj0LxQY6TV1n6L7wwgtmyYB7773XTFMvKyszx++66y7XzJkzvZYY6Nixo+vpp5927dixwzV37lyfy8Doc+iSAtu3b3fdeOONLANzjq9zfX29WV7noosucm3bts11+PBh93bixAmXrfzxeT4Zs4D9d611qR0tW7ZsmWv37t2uRYsWmeVJPvzwQ5et/HGd09LSzExgXQbmq6++cj3//POu8PBw13/8x3+4bNXa66w/Z0tKSszWs2dPsySM/ls/t6f7nGgeAbCN6A/Zvn37mvWKdNr6xx9/7PWDYvLkyV71//jHP7oGDhxo6usPkTfffNPruC4FM2fOHFdsbKz58F977bWuXbt2uWx3Lq+zrt2lfyP52vSHus3O9ef5ZARA/17r5cuXuwYMGGACia67qOuJ2u5cX2f9Q/Huu+82S5LodR40aJBrwYIF5me3zVpznZv7Gaz1Tvc50bwQ/U+gWyEBAADQdhgDCAAAYBkCIAAAgGUIgAAAAJYhAAIAAFiGAAgAAGAZAiAAAIBlCIAAAACWIQACsNbdd98tEydODPRpAECb69j2LwkA/hcSEtLi8blz58ozzzyjd0Pi2wHAOgRAAEHp8OHD7n/n5+dLbm6u7Nq1y13WtWtXswGAjegCBhCU4uLi3FtUVJRpEfQs0/B3chfwmDFjJDs7Wx566CG54IILJDY2Vp577jmpra2VKVOmyPnnny8DBgyQP/3pT16vVVpaKj/5yU/Mc+pj7rrrLqmqqgrAuwaA00MABAAPL774osTExEhRUZEJg/fff7/87Gc/k9TUVCkuLpaxY8eagFdXV2fqHzt2TH784x/LFVdcIVu2bJH169dLeXm53HbbbVxXAO0WARAAPAwZMkRycnIkISFBZs2aJeHh4SYQ3nPPPaZMu5KPHDki27dvN/UXL15swt+///u/S2Jiovn3ihUrZOPGjfLFF19wbQG0S4wBBAAPl19+ufvfoaGhEh0dLUlJSe4y7eJVFRUV5utnn31mwp6v8YR//etfZeDAgVxfAO0OARAAPHTq1MnreujYQc+yptnFjY2N5uvx48flpz/9qcyfP/+U69izZ0+uLYB2iQAIAGfhyiuvlJdfflni4+OlY0d+pAJwBsYAAsBZeOCBB+To0aOSkZEhn376qen2feutt8ys4YaGBq4tgHaJAAgAZ6FXr16yadMmE/Z0hrCOF9RlZLp16yYdOvAjFkD7FOJiGXwAAACr8OcpAACAZQiAAAAAliEAAgAAWIYACAAAYBkCIAAAgGUIgAAAAJYhAAIAAFiGAAgAAGAZAiAAAIBlCIAAAACWIQACAABYhgAIAAAgdvl/D28hrblhC8MAAAAASUVORK5CYII=",
      "text/html": [
       "\n",
       "            <div style=\"display: inline-block;\">\n",
       "                <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
       "                    Figure\n",
       "                </div>\n",
       "                <img src='data:image/png;base64,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8xyePQAAQPviiACotOv1ueeekxdffFF27NhhJmzoLN8pU6aY45mZmaaLtsm0adNk/fr1smDBAtm5c6c8/vjjsmXLFnnwwQfN8ePHj8uMGTPk448/lr1795qweOONN8qAAQPMZBEAAIBg5ZgxgLqsS2VlpeTm5pqJHLqciwa8poke+/fvNzODm6SmpsrKlSslJydHZs+eLQkJCWa5l8GDB5vj2qW8fft2Eyh1KZhevXrJ2LFj5Ve/+pXp6gUAAAhWjlkHsD1iHSEAAJynhnUAndMFDAAAgHODAAgAAGAZAiAAAIBlCIAAAACWIQACAABYhgAIAABgmY7+ml59OriVGgAAQJAEwG7duklISEizx3XpQT3e0NDgj5cHAABAWwfAjRs3eoW9f/zHf5T/+q//kt69e/vj5QAAABDoAJiWlua1r7ddGzlypFx88cX+eDkAAAC0ApNAAAAALEMABAAAsEybBcCWJoUAAADA4WMAb775Zq/97777Tu677z6JiIjwKn/llVf88fIAAABo6wAYFRXltX/nnXf642UAAADQXgLg888/74+nBQAAQHsNgGrv3r2yYcMGqa+vlzFjxshll13mr5cCAABAe1gI+oYbbpBvv/327y/SsaOsWLGCrmAAAIBgnQU8Z84cue666+TgwYNy5MgRueeee+TRRx/1x0sBAACglUJceq82P9wLePPmzXLppZea/bq6OomMjJTy8nKJjo6WYFFTU2MmvFRXV5v3BwAA2r8afn/7pwVQL2xMTIx7v0uXLnLeeeeZoAQAAIAgnQTy1ltveS0H09jYKAUFBVJaWuoumzBhgr9eHgAAAG3ZBdyhQ4fTujNIQ0ODOBlNyAAAOE8NXcD+aQHU1j4AAABYfi9gAAAABPkYQPXuu++a+/3qotDa5du/f3+59dZbZfTo0f58WQAAAASiBfC+++6T9PR0ycvLM2sBVlZWyv/8z//INddcI9nZ2f56WQAAAAQiAL766qvmfsB694+qqiopLCyUjz/+2ITA5557TpYtWyavv/66P14aAAAAgZgFrMu76L1/582b5/P4Y489Jjt37pTXXntNnIxZRAAAOE8Ns4D90wJYXFwsN910U7PHb775Ztm6das/XhoAAACBCIDa7XvRRRc1e1yP6bhAAAAABEkArK+vl06dOjV7vGPHjqZOay1ZskTi4+MlPDxcRowY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3Dh3/T179khZWZlXHe3K0abv5p4z2PnjOvtSXV1tuiK6desmNvLXdW5sbJS77rpLZsyYIZdddpkf34Hd11qv85tvvikDBw405T169DA/N9asWSO28tdnOjU1VV5//XU5ePCgGbKzceNG+eKLL2Ts2LFiozO5zoF4TpsQAP2sqqpKGhoaJDY21qtc9zXE+aLlLdVv+tqa5wx2/rjOJ/vuu+/MmMCMjAy/3Jjc5us8f/586dixo0ydOtVPZ+48/rjWFRUVZmzak08+Kddff728/fbbctNNN8nNN98s77//vtjIX5/pRYsWmXF/OgYwLCzMXG8dqzZ69Gix0Zlc50A8p006BvoEACfQCSG33Xab+Uv+2WefDfTpBBX9C/6ZZ56R4uJi07oK/9EWQHXjjTfKL37xC/PvoUOHyubNm80EhbS0NC7/OaIB8OOPPzatgP369ZMPPvhAHnjgATOZ7OTWQyAQaAH0s5iYGAkNDZXy8nKvct2Pi4vz+Rgtb6l+09fWPGew88d1Pjn87du3TzZs2GBt65+/rvOHH35oWqb69u1rWgF102v98MMPm5l9tvLHtdbn1OurLVOeLrnkEmtnAfvjOn/77bcye/Zs+e1vfys//elP5fLLLzczgidNmiRPP/202OhMrnMgntMmBEA/06b/5ORkKSgo8PorXPdHjRrl8zFa7llfafBoqt+/f3/z4fasU1NTI5988kmzzxns/HGdPcOfLrHzzjvvSHR0tNjMH9dZx/5t375dtm3b5t60lUTHA7711ltiK39ca31OXfJl165dXnV0bJq2UtnIH9dZf27opuPRPGlYaWqFtc2ZXOdAPKdVAj0LxQY6TV1n6L7wwgtmyYB7773XTFMvKyszx++66y7XzJkzvZYY6Nixo+vpp5927dixwzV37lyfy8Doc+iSAtu3b3fdeOONLANzjq9zfX29WV7noosucm3bts11+PBh93bixAmXrfzxeT4Zs4D9d611qR0tW7ZsmWv37t2uRYsWmeVJPvzwQ5et/HGd09LSzExgXQbmq6++cj3//POu8PBw13/8x3+4bNXa66w/Z0tKSszWs2dPsySM/ls/t6f7nGgeAbCN6A/Zvn37mvWKdNr6xx9/7PWDYvLkyV71//jHP7oGDhxo6usPkTfffNPruC4FM2fOHFdsbKz58F977bWuXbt2uWx3Lq+zrt2lfyP52vSHus3O9ef5ZARA/17r5cuXuwYMGGACia67qOuJ2u5cX2f9Q/Huu+82S5LodR40aJBrwYIF5me3zVpznZv7Gaz1Tvc50bwQ/U+gWyEBAADQdhgDCAAAYBkCIAAAgGUIgAAAAJYhAAIAAFiGAAgAAGAZAiAAAIBlCIAAAACWIQACsNbdd98tEydODPRpAECb69j2LwkA/hcSEtLi8blz58ozzzyjd0Pi2wHAOgRAAEHp8OHD7n/n5+dLbm6u7Nq1y13WtWtXswGAjegCBhCU4uLi3FtUVJRpEfQs0/B3chfwmDFjJDs7Wx566CG54IILJDY2Vp577jmpra2VKVOmyPnnny8DBgyQP/3pT16vVVpaKj/5yU/Mc+pj7rrrLqmqqgrAuwaA00MABAAPL774osTExEhRUZEJg/fff7/87Gc/k9TUVCkuLpaxY8eagFdXV2fqHzt2TH784x/LFVdcIVu2bJH169dLeXm53HbbbVxXAO0WARAAPAwZMkRycnIkISFBZs2aJeHh4SYQ3nPPPaZMu5KPHDki27dvN/UXL15swt+///u/S2Jiovn3ihUrZOPGjfLFF19wbQG0S4wBBAAPl19+ufvfoaGhEh0dLUlJSe4y7eJVFRUV5utnn31mwp6v8YR//etfZeDAgVxfAO0OARAAPHTq1MnreujYQc+yptnFjY2N5uvx48flpz/9qcyfP/+U69izZ0+uLYB2iQAIAGfhyiuvlJdfflni4+OlY0d+pAJwBsYAAsBZeOCBB+To0aOSkZEhn376qen2feutt8ys4YaGBq4tgHaJAAgAZ6FXr16yadMmE/Z0hrCOF9RlZLp16yYdOvAjFkD7FOJiGXwAAACr8OcpAACAZQiAAAAAliEAAgAAWIYACAAAYBkCIAAAgGUIgAAAAJYhAAIAAFiGAAgAAGAZAiAAAIBlCIAAAACWIQACAABYhgAIAAAgdvl/D28hrblhC8MAAAAASUVORK5CYII=' width=640.0/>\n",
       "            </div>\n",
       "        "
      ],
      "text/plain": [
       "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "A05.plot(x='Time', y='NADPH', kind='scatter',label='A05')\n",
    "A1.plot(x='Time', y='NADPH', kind='scatter', label= 'A1')\n",
    "A2.plot(x='Time', y='NADPH', kind='scatter', label= 'A2')\n",
    "A4.plot(x='Time', y='NADPH', kind='scatter', label = 'A4')\n",
    "A8.plot(x='Time', y='NADPH', kind='scatter', label = 'A8')\n",
    "\n",
    "ax.set_xlabel('Time (s)')\n",
    "ax.set_ylabel('[NADH](mM')\n",
    "\n",
    "ax.legend(loc='best')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "41a4daae-ea19-4ebe-9d25-99935518f787",
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.close('all')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "724c1456-f5e5-4c53-9fd1-ef1c6665158a",
   "metadata": {},
   "outputs": [],
   "source": [
    "B1_5 = pd.read_csv('A8B1.5.csv', names= ['Time','NADPH'])\n",
    "B3 = pd.read_csv('A8B3.csv', names= ['Time','NADPH'])\n",
    "B6 = pd.read_csv('A8B6.csv', names= ['Time','NADPH'])\n",
    "B12 = pd.read_csv('A8B12.csv', names= ['Time','NADPH'])\n",
    "B24 = pd.read_csv('A8B24.csv', names= ['Time','NADPH'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "c7d5d9dd-3254-4542-b10e-7ea9bb1968c7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x27ef5a19a90>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B1_5.plot(x='Time', y='NADPH', kind='scatter')\n",
    "B3.plot(x='Time', y='NADPH', kind='scatter')\n",
    "B6.plot(x='Time', y='NADPH', kind='scatter')\n",
    "B12.plot(x='Time', y='NADPH', kind='scatter')\n",
    "B24.plot(x='Time', y='NADPH', kind='scatter')\n",
    "\n",
    "ax.set_xlabel('Time (s)')\n",
    "ax.set_ylabel('[NADH](mM')\n",
    "\n",
    "ax.legend(loc='best')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "2a08b64f-333f-49d4-a63c-e191e775c12a",
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.close('all')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0321cfe-4c1c-4578-b6f3-985dd61f589d",
   "metadata": {},
   "source": [
    "### Question 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "77580320-e940-448e-849b-2ac09fa877f0",
   "metadata": {},
   "outputs": [],
   "source": [
    "regA05 = sp.stats.linregress(A05.Time, A05.NADPH)\n",
    "regA1 = sp.stats.linregress(A1.Time, A1.NADPH)\n",
    "regA2 = sp.stats.linregress(A2.Time, A2.NADPH)\n",
    "regA4 = sp.stats.linregress(A4.Time, A4.NADPH)\n",
    "regA8 = sp.stats.linregress(A8.Time, A8.NADPH)\n",
    "\n",
    "regB1_5 = sp.stats.linregress(B1_5.Time, B1_5.NADPH)\n",
    "regB3 = sp.stats.linregress(B3.Time, B3.NADPH)\n",
    "regB6 = sp.stats.linregress(B6.Time, B6.NADPH)\n",
    "regB12 = sp.stats.linregress(B12.Time, B12.NADPH)\n",
    "regB24 = sp.stats.linregress(B24.Time, B24.NADPH)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "1af065d7-2d8b-4e87-9dca-0c4b7ee1bb9b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinregressResult(slope=np.float64(0.24118661159479945), intercept=np.float64(-2.558178693360877e-05), rvalue=np.float64(0.9582574280003074), pvalue=np.float64(3.4186889386105497e-06), stderr=np.float64(0.023986906420409505), intercept_stderr=np.float64(0.0014190845213288706))"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "regA05"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "0701d3a2-a85a-469d-95cb-b23bb360331a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.24118661159479945\n",
      "0.3526304449083254\n",
      "0.5746500696105541\n",
      "0.7322856639928835\n",
      "0.8250788434733143\n",
      "0.25422083243133853\n",
      "0.3679535702854621\n",
      "0.556408829374724\n",
      "0.7012039804663761\n",
      "0.8250788434733143\n"
     ]
    }
   ],
   "source": [
    "regressions = [regA05, regA1, regA2, regA4, regA8, regB1_5, regB3, regB6, regB12, regB24]\n",
    "rates = []\n",
    "\n",
    "for reg in regressions:\n",
    "    print (reg.slope)\n",
    "    rates.append(reg.slope)\n",
    "rates = np.array(rates)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "ca3ce610-4849-4c6f-b651-052a9ec6ae03",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.24118661, 0.35263044, 0.57465007, 0.73228566, 0.82507884,\n",
       "       0.25422083, 0.36795357, 0.55640883, 0.70120398, 0.82507884])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "0a4cfece-82e2-4333-b07f-d6882512210f",
   "metadata": {},
   "outputs": [],
   "source": [
    "concs_A = np.array([0, 0.5, 1, 2, 4, 8, 8, 8, 8 ,8])\n",
    "concs_B = np.array([0, 1.5, 3, 6, 12, 24, 24, 24, 24, 24])\n",
    "\n",
    "A_B_Rate = pd.DataFrame({'a': concs_A , 'b': concs_B, 'rate':rates})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "996a1201-7dc5-4b85-b1b6-f28a58bfc779",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>a</th>\n",
       "      <th>b</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.241187</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.5</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.352630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.574650</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.732286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>0.825079</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>8.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>0.254221</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>8.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>0.367954</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>0.556409</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>0.701204</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>8.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>0.825079</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     a     b      rate\n",
       "0  0.0   0.0  0.241187\n",
       "1  0.5   1.5  0.352630\n",
       "2  1.0   3.0  0.574650\n",
       "3  2.0   6.0  0.732286\n",
       "4  4.0  12.0  0.825079\n",
       "5  8.0  24.0  0.254221\n",
       "6  8.0  24.0  0.367954\n",
       "7  8.0  24.0  0.556409\n",
       "8  8.0  24.0  0.701204\n",
       "9  8.0  24.0  0.825079"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A_B_Rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "2ed88537-8287-442d-8896-c71c96d3b26c",
   "metadata": {},
   "outputs": [],
   "source": [
    "def v(a, b, Vf, Ka, Kb): \n",
    "    num = Vf*a*b\n",
    "    denom = (Ka+a) * (Kb+b)\n",
    "    return num/denom"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "912fde44-fc71-4195-bd31-30d3afbb1ce8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<h2>Fit Result</h2> <p>Model: Model(v)</p> <table class=\"jp-toc-ignore\"><caption class=\"jp-toc-ignore\">Fit Statistics</caption><tr><td style='text-align:left'>fitting method</td><td style='text-align:right'>leastsq</td></tr><tr><td style='text-align:left'># function evals</td><td style='text-align:right'>44</td></tr><tr><td style='text-align:left'># data points</td><td style='text-align:right'>10</td></tr><tr><td style='text-align:left'># variables</td><td style='text-align:right'>3</td></tr><tr><td style='text-align:left'>chi-square</td><td style='text-align:right'> 0.39045051</td></tr><tr><td style='text-align:left'>reduced chi-square</td><td style='text-align:right'> 0.05577864</td></tr><tr><td style='text-align:left'>Akaike info crit.</td><td style='text-align:right'>-26.4303916</td></tr><tr><td style='text-align:left'>Bayesian info crit.</td><td style='text-align:right'>-25.5226363</td></tr><tr><td style='text-align:left'>R-squared</td><td style='text-align:right'> 0.15586032</td></tr></table><table class=\"jp-toc-ignore\"><caption>Parameters</caption><tr><th style='text-align:left'>name</th><th style='text-align:left'>value</th><th style='text-align:left'>standard error</th><th style='text-align:left'>relative error</th><th style='text-align:left'>initial value</th><th style='text-align:left'>min</th><th style='text-align:left'>max</th><th style='text-align:right'>vary</th></tr><tr><td style='text-align:left'>Vf</td><td style='text-align:left'> 0.62323807</td><td style='text-align:left'> 0.16066131</td><td style='text-align:left'>(25.78%)</td><td style='text-align:left'>1.0</td><td style='text-align:left'>       -inf</td><td style='text-align:left'>        inf</td><td style='text-align:right'>True</td></tr><tr><td style='text-align:left'>Ka</td><td style='text-align:left'> 0.08821800</td><td style='text-align:left'> 5345.33533</td><td style='text-align:left'>(6059234.25%)</td><td style='text-align:left'>1.0</td><td style='text-align:left'>       -inf</td><td style='text-align:left'>        inf</td><td style='text-align:right'>True</td></tr><tr><td style='text-align:left'>Kb</td><td style='text-align:left'> 0.26465006</td><td style='text-align:left'> 16032.5486</td><td style='text-align:left'>(6058018.02%)</td><td style='text-align:left'>1.0</td><td style='text-align:left'>       -inf</td><td style='text-align:left'>        inf</td><td style='text-align:right'>True</td></tr></table><table class=\"jp-toc-ignore\"><caption>Correlations (unreported values are < 0.100)</caption><tr><th style='text-align:left'>Parameter1</th><th style='text-align:left'>Parameter 2</th><th style='text-align:right'>Correlation</th></tr><tr><td style='text-align:left'>Ka</td><td style='text-align:left'>Kb</td><td style='text-align:right'>-1.0000</td></tr><tr><td style='text-align:left'>Vf</td><td style='text-align:left'>Ka</td><td style='text-align:right'>+0.7311</td></tr><tr><td style='text-align:left'>Vf</td><td style='text-align:left'>Kb</td><td style='text-align:right'>-0.7311</td></tr></table>"
      ],
      "text/plain": [
       "<lmfit.model.ModelResult at 0x27ef131ca50>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from lmfit import model\n",
    "mymod = Model(v, independent_vars = ['a','b'])\n",
    "mypar = mymod.make_params(Vf=1, Ka=1, Kb=1)\n",
    "myfit = mymod.fit(rates, mypar, a= concs_A, b=concs_B)\n",
    "myfit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "95998850-3b3e-47ba-9439-14e672f6b9b1",
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "operands could not be broadcast together with shapes (101,) (10,) ",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mValueError\u001b[39m                                Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[28]\u001b[39m\u001b[32m, line 9\u001b[39m\n\u001b[32m      4\u001b[39m fig, ax = plt.subplots()\n\u001b[32m      6\u001b[39m ax.plot(A_B_Rate.a, A_B_Rate.rate, \u001b[33m'\u001b[39m\u001b[33mo\u001b[39m\u001b[33m'\u001b[39m, label=\u001b[33m'\u001b[39m\u001b[33mdata\u001b[39m\u001b[33m'\u001b[39m) \u001b[38;5;66;03m# experimental data\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m9\u001b[39m ax.plot(a_vals, \u001b[43mmyfit\u001b[49m\u001b[43m.\u001b[49m\u001b[43meval\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m=\u001b[49m\u001b[43ma_vals\u001b[49m\u001b[43m)\u001b[49m, label=\u001b[33m'\u001b[39m\u001b[33mfit\u001b[39m\u001b[33m'\u001b[39m) \u001b[38;5;66;03m# fitted model\u001b[39;00m\n\u001b[32m     11\u001b[39m ax.set_xlabel(\u001b[33m'\u001b[39m\u001b[33ma\u001b[39m\u001b[33m'\u001b[39m)\n\u001b[32m     12\u001b[39m ax.set_ylabel(\u001b[33m'\u001b[39m\u001b[33mRate\u001b[39m\u001b[33m'\u001b[39m)\n",
      "\u001b[36mFile \u001b[39m\u001b[32m~\\Desktop\\Biochemistry honours\\MC2 Systems Biology\\minicourse\\Lib\\site-packages\\lmfit\\model.py:1616\u001b[39m, in \u001b[36mModelResult.eval\u001b[39m\u001b[34m(self, params, **kwargs)\u001b[39m\n\u001b[32m   1614\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m params \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m   1615\u001b[39m     params = \u001b[38;5;28mself\u001b[39m.params\n\u001b[32m-> \u001b[39m\u001b[32m1616\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m.\u001b[49m\u001b[43meval\u001b[49m\u001b[43m(\u001b[49m\u001b[43mparams\u001b[49m\u001b[43m=\u001b[49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43muserkws\u001b[49m\u001b[43m)\u001b[49m\n",
      "\u001b[36mFile \u001b[39m\u001b[32m~\\Desktop\\Biochemistry honours\\MC2 Systems Biology\\minicourse\\Lib\\site-packages\\lmfit\\model.py:1004\u001b[39m, in \u001b[36mModel.eval\u001b[39m\u001b[34m(self, params, **kwargs)\u001b[39m\n\u001b[32m    971\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34meval\u001b[39m(\u001b[38;5;28mself\u001b[39m, params=\u001b[38;5;28;01mNone\u001b[39;00m, **kwargs):\n\u001b[32m    972\u001b[39m \u001b[38;5;250m    \u001b[39m\u001b[33;03m\"\"\"Evaluate the model with supplied parameters and keyword arguments.\u001b[39;00m\n\u001b[32m    973\u001b[39m \n\u001b[32m    974\u001b[39m \u001b[33;03m    Parameters\u001b[39;00m\n\u001b[32m   (...)\u001b[39m\u001b[32m   1002\u001b[39m \n\u001b[32m   1003\u001b[39m \u001b[33;03m    \"\"\"\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m1004\u001b[39m     \u001b[38;5;28;01mreturn\u001b[39;00m coerce_arraylike(\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mmake_funcargs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m)\n",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[26]\u001b[39m\u001b[32m, line 2\u001b[39m, in \u001b[36mv\u001b[39m\u001b[34m(a, b, Vf, Ka, Kb)\u001b[39m\n\u001b[32m      1\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mv\u001b[39m(a, b, Vf, Ka, Kb): \n\u001b[32m----> \u001b[39m\u001b[32m2\u001b[39m     num = \u001b[43mVf\u001b[49m\u001b[43m*\u001b[49m\u001b[43ma\u001b[49m\u001b[43m*\u001b[49m\u001b[43mb\u001b[49m\n\u001b[32m      3\u001b[39m     denom = (Ka+a) * (Kb+b)\n\u001b[32m      4\u001b[39m     \u001b[38;5;28;01mreturn\u001b[39;00m num/denom\n",
      "\u001b[31mValueError\u001b[39m: operands could not be broadcast together with shapes (101,) (10,) "
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "fae03ca19f2d46238133af900234b92b",
       "version_major": 2,
       "version_minor": 0
      },
      "image/png": "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",
      "text/html": [
       "\n",
       "            <div style=\"display: inline-block;\">\n",
       "                <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
       "                    Figure\n",
       "                </div>\n",
       "                <img src='data:image/png;base64,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' width=640.0/>\n",
       "            </div>\n",
       "        "
      ],
      "text/plain": [
       "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "a_vals = np.linspace(0.5,8,101)\n",
    "b= 24\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "ax.plot(A_B_Rate.a, A_B_Rate.rate, 'o', label='data') # experimental data\n",
    "\n",
    "\n",
    "ax.plot(a_vals, myfit.eval(a=a_vals), label='fit') # fitted model\n",
    "\n",
    "ax.set_xlabel('a')\n",
    "ax.set_ylabel('Rate')\n",
    "ax.legend(loc='best')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "02a0f4fc-5762-417c-8311-076e0b628676",
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "operands could not be broadcast together with shapes (10,) (101,) ",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mValueError\u001b[39m                                Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[29]\u001b[39m\u001b[32m, line 9\u001b[39m\n\u001b[32m      4\u001b[39m fig, ax = plt.subplots()\n\u001b[32m      6\u001b[39m ax.plot(A_B_Rate.b, A_B_Rate.rate, \u001b[33m'\u001b[39m\u001b[33mo\u001b[39m\u001b[33m'\u001b[39m, label=\u001b[33m'\u001b[39m\u001b[33mdata\u001b[39m\u001b[33m'\u001b[39m) \u001b[38;5;66;03m# experimental data\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m9\u001b[39m ax.plot(b_vals, \u001b[43mmyfit\u001b[49m\u001b[43m.\u001b[49m\u001b[43meval\u001b[49m\u001b[43m(\u001b[49m\u001b[43mb\u001b[49m\u001b[43m=\u001b[49m\u001b[43mb_vals\u001b[49m\u001b[43m)\u001b[49m, label=\u001b[33m'\u001b[39m\u001b[33mfit\u001b[39m\u001b[33m'\u001b[39m) \u001b[38;5;66;03m# fitted model\u001b[39;00m\n\u001b[32m     11\u001b[39m ax.set_xlabel(\u001b[33m'\u001b[39m\u001b[33mb\u001b[39m\u001b[33m'\u001b[39m)\n\u001b[32m     12\u001b[39m ax.set_ylabel(\u001b[33m'\u001b[39m\u001b[33mRate\u001b[39m\u001b[33m'\u001b[39m)\n",
      "\u001b[36mFile \u001b[39m\u001b[32m~\\Desktop\\Biochemistry honours\\MC2 Systems Biology\\minicourse\\Lib\\site-packages\\lmfit\\model.py:1616\u001b[39m, in \u001b[36mModelResult.eval\u001b[39m\u001b[34m(self, params, **kwargs)\u001b[39m\n\u001b[32m   1614\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m params \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m   1615\u001b[39m     params = \u001b[38;5;28mself\u001b[39m.params\n\u001b[32m-> \u001b[39m\u001b[32m1616\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m.\u001b[49m\u001b[43meval\u001b[49m\u001b[43m(\u001b[49m\u001b[43mparams\u001b[49m\u001b[43m=\u001b[49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43muserkws\u001b[49m\u001b[43m)\u001b[49m\n",
      "\u001b[36mFile \u001b[39m\u001b[32m~\\Desktop\\Biochemistry honours\\MC2 Systems Biology\\minicourse\\Lib\\site-packages\\lmfit\\model.py:1004\u001b[39m, in \u001b[36mModel.eval\u001b[39m\u001b[34m(self, params, **kwargs)\u001b[39m\n\u001b[32m    971\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34meval\u001b[39m(\u001b[38;5;28mself\u001b[39m, params=\u001b[38;5;28;01mNone\u001b[39;00m, **kwargs):\n\u001b[32m    972\u001b[39m \u001b[38;5;250m    \u001b[39m\u001b[33;03m\"\"\"Evaluate the model with supplied parameters and keyword arguments.\u001b[39;00m\n\u001b[32m    973\u001b[39m \n\u001b[32m    974\u001b[39m \u001b[33;03m    Parameters\u001b[39;00m\n\u001b[32m   (...)\u001b[39m\u001b[32m   1002\u001b[39m \n\u001b[32m   1003\u001b[39m \u001b[33;03m    \"\"\"\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m1004\u001b[39m     \u001b[38;5;28;01mreturn\u001b[39;00m coerce_arraylike(\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mmake_funcargs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m)\n",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[26]\u001b[39m\u001b[32m, line 2\u001b[39m, in \u001b[36mv\u001b[39m\u001b[34m(a, b, Vf, Ka, Kb)\u001b[39m\n\u001b[32m      1\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mv\u001b[39m(a, b, Vf, Ka, Kb): \n\u001b[32m----> \u001b[39m\u001b[32m2\u001b[39m     num = \u001b[43mVf\u001b[49m\u001b[43m*\u001b[49m\u001b[43ma\u001b[49m\u001b[43m*\u001b[49m\u001b[43mb\u001b[49m\n\u001b[32m      3\u001b[39m     denom = (Ka+a) * (Kb+b)\n\u001b[32m      4\u001b[39m     \u001b[38;5;28;01mreturn\u001b[39;00m num/denom\n",
      "\u001b[31mValueError\u001b[39m: operands could not be broadcast together with shapes (10,) (101,) "
     ]
    }
   ],
   "source": [
    "b_vals = np.linspace(1.5,25,101)\n",
    "a= 8\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "ax.plot(A_B_Rate.b, A_B_Rate.rate, 'o', label='data') # experimental data\n",
    "\n",
    "\n",
    "ax.plot(b_vals, myfit.eval(b=b_vals), label='fit') # fitted model\n",
    "\n",
    "ax.set_xlabel('b')\n",
    "ax.set_ylabel('Rate')\n",
    "ax.legend(loc='best')"
   ]
  }
 ],
 "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.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
