{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Estimating Fluxes at Steady State" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To estimate metabolic fluxes at steady state, we use nonlinear optimization to minimize the difference between the simulated and measured labeling patterns when the system reaches a stable status, both metabolically and isotopically. The problem can be formulated as follows:\n", "\n", "![Optimization problem ><](images/ss_eqn.gif)\n", "\n", "Here, ${\\bf{x}}_{sim}$ and ${\\bf{v}}_{sim}$ are simulated MDVs and fluxes, respectively, both the functions of free flux $\\bf{u}$. ${\\bf{x}}_{exp}$ and ${\\bf{v}}_{exp}$ are the measured labeling patterns and fluxes, and ${\\bf{\\Sigma }}_{{{\\bf{x}}_{exp}}}^{ - 1}$ and ${\\bf{\\Sigma }}_{{{\\bf{v}}_{exp}}}^{ - 1}$ are the inverses of the covariance matrix of measurements. $\\bf{N}$ is the null space of the stoichiometric matrix of the network reactions, and $\\bf{T}$ is the matrix that transforms total fluxes to net fluxes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solving the Fluxes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will demonstrate the process using a toy model. First, we build the model by reading from the [file](https://github.com/Chaowu88/freeflux/tree/main/models/toy):" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from freeflux import Model\n", "\n", "MODEL_FILE = 'path/to/reactions.tsv'\n", "\n", "model = Model('demo')\n", "model.read_from_file(MODEL_FILE)\n", "\n", "fit = model.fitter('ss')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we specify the labeling strategy:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "fit.set_labeling_strategy(\n", " 'AcCoA', \n", " labeling_pattern = ['01', '11'], \n", " percentage = [0.25, 0.25], \n", " purity = [1, 1]\n", ") # call this method for each labeled substrate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can set the measurements using `set_measured_MDV` for MDV and `set_measured_flux` for flux (if any). To input a set of measurements, we can load from [files](https://github.com/Chaowu88/freeflux/tree/main/models/toy) using `set_measured_MDVs_from_file` and `set_measured_fluxes_from_file` methods. We assume here that the measured fluxes are net ones since total fluxes are not typically measurable:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "MEASURED_MDV_FILE = 'path/to/measured_MDVs.tsv'\n", "MEASURED_FLUX_FILE = 'path/to/measured_fluxes.tsv'\n", "\n", "fit.set_measured_MDVs_from_file(MEASURED_MDV_FILE)\n", "fit.set_measured_fluxes_from_file(MEASURED_FLUX_FILE)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can then set the lower and upper bounds of net fluxes:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "fit.set_flux_bounds(\n", " 'all', # \"all\" denotes all fluxes. use reaction ID for specific flux \n", " bounds = [-100, 100]\n", ") " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Note:

The upper bound should be great than the lower bound. Use `set_measured_flux` or `set_measured_fluxes_from_file` for equality assignment.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we can solve for the fluxes:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "fitting [elapsed: 0:00:01]\n", "True\n" ] } ], "source": [ "fit.prepare(n_jobs = 3)\n", "res = fit.solve(\n", " solver = 'slsqp', \n", " ini_fluxes = None, \n", " fit_measured_fluxes = True\n", ")\n", "print(res.optimization_successful)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Currently, FreeFlux offers two methods to solve the fitting problem: sequential least squares programming (solver = \"slsqp\") and the r-algorithm with adaptive space dilation (solver = \"ralg\"). To use the r-algorithm solver, OpenOpt is required, and you can find more details on how to install it [here](https://freeflux.readthedocs.io/en/latest/installation.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The argument \"ini_fluxes\" is used to input an initial guess for the fluxes, which can be obtained from the last successful optimization. This argument takes a Pandas [Series](https://pandas.pydata.org/docs/reference/api/pandas.Series.html) object or a .tsv/.xlsx file. A good initial guess can help with convergence. If you do not provide an initial guess, the solver will generate a random initial guess sampled from the feasible region of fluxes estimated by flux variability analysis [(FVA)](https://freeflux.readthedocs.io/en/latest/fba.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The argument \"fit_measured_fluxes\" determines whether the second flux item is included in the objective function of the above-formulated problem. Set this argument to *True* if you have measured exchange fluxes, such as substrate uptake rate, product secretion rate, or specific cell growth, and provided them with `set_measured_flux` or `set_measured_fluxes_from_file`. In this case, the estimated fluxes will have the same unit as the measured ones, which are typically mmol gCDW$^{-1}$ h$^{-1}$ or $\\mu$mol gCDW$^{-1}$ s$^{-1}$. If you do not provide any measured flux, you can still provide a substrate uptake rate and fix its value at 100. In this case, the estimated fluxes will have relative values normalized to the substrate uptake rate." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Other arguments such as \"tol\" and \"max_iters\" control when the optimization stops, and \"show_progress\" controls whether to display the time elapsed during the optimization." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After optimization, the results are stored in the FitResults object, and the optimal objective can be accessed using the `opt_objective` attribute:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.002\n" ] } ], "source": [ "print(res.opt_objective)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can access the optimal net and total fluxes using the `opt_net_fluxes` and `opt_total_fluxes` attributes:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "v1: 10.0\n", "v2: 10.0\n", "v3: 4.993\n", "v4: 5.007\n", "v5: 5.007\n", "v6: 5.007\n", "v7: 4.993\n" ] } ], "source": [ "print(res.opt_net_fluxes)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "v1: 10.0\n", "v2: 10.0\n", "v3: 4.993\n", "v4: 5.007\n", "v5: 5.007\n", "v6_f: 69.119\n", "v6_b: 64.112\n", "v7: 4.993\n" ] } ], "source": [ "print(res.opt_total_fluxes)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can check the goodness of fit using the normal probability plot of weighted residuals. You can generate this plot using the following command:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "res.plot_normal_probability(show_fig = True, output_dir = None)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A good fit is indicated by the residuals closely following the red line, which represents a normal distribution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also compare the simulated and experimental measurements by plotting them together using the command:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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6el4enpy4cIFbQUrIiJSQej3t0jhyuUaCRERERERKd/K7aNNcus6derUNc/g8Pb2LvC4mYiIiIiUL0ok5Ib79NNPGTt2bJH1Y8aMISoq6sYFJCIiIiIOUyIhN1z//v3p1q0b2dnZhISEABAbG4urqyuAZiNEREREKgAlEnLDWR9duvp8kHvuuQc3N7ebGJWIiIiIOEKLrUVERERExGFKJERERERExGFKJERERERExGFKJERERERExGFKJERERERExGFKJERERERExGFKJERERERExGE6R+IW0XDE6ps29jFzT2MX5ln++/P73uBscryPqAvGxhYRERGREtGMhIiIiIiIOEyJhIiIiIiIOEyJhIiIiIiIOEyJhIiIiIiIOEyJhIiIiIiIOEyJhIiIiIiIOEyJhIiIiIiIOEznSMgNdyrjCqcyLWRf+u85EvtO5+Na5c9zJLzdTXh7KMcVERERKc+USMgN9+mePMbG5NmVhczLsv08pqMzUWHmGx2WiIiIiDhAiYTccP1bO9OtaZUi673dDZxwLSIiIiI3lBIJueG8PZzw9rjZUYiIiIhISehBdBERERERcZgSCRERERERcZgSCRERERERcZgSCRERERERcZgSCRERERERcZgSCRERERERcZgSCRERERERcZgSCRERERERcVi5TiRycnIYM2YMTZo0wWw24+PjQ2RkJCdOnCh2H5cvXyYqKorHH3+cRo0a4eHhgdlspnHjxgwcOJDjx48Xee2VK1eYNm0aLVu2xNXVFS8vL55++mkOHDhQGrcnIiIiIlJhmSwWi+VmB1GYnJwcwsPDiYuLw9vbm9DQUI4dO8auXbvw8vIiPj4ef3//6/aTmZmJh4cH7u7uBAYG4uPjQ15eHvv27eP48eN4enqyadMmWrVqZXedxWLhmWeeYcmSJVSvXp3w8HDOnj3L1q1bMZvNbN68mfvvv9+he0pPT8fT05MLFy5QrVo1h669noYjVpdqf444Zu5508Ym6sLNG1tERG4LZfn7W6QiK7czEhMmTCAuLo62bdvyyy+/sHDhQnbu3MnkyZM5c+YMkZGRxerHbDYTGxvLuXPn2L59O4sXL2bFihUcOXKEkSNHcuHCBV577bUC182bN48lS5bQuHFjfv75Z5YsWcKWLVtYvHgx2dnZ9OrVi8uXL5f2bYuIiIiIVAjlckbi0qVL3HnnnZw/f57ExESCg4Pt6oOCgkhOTmb37t20bt3a8DiXL1/Gw8ODnJwcMjMzcXNzs9U1b96cAwcOsGzZMiIiIuyu6969OytXrmTJkiX06NGj2ONpRqIMaEZCRETKmGYkRApXLmckYmNjOX/+PP7+/gWSCICnnnoKgOjo6BKNYzKZcHJywsnJicqVK9vKjx49yoEDB3B1deXxxx8vs/FFRERERCqqcplIJCUlARRYt2BlLbe2M8JisTBp0iSysrJ46KGHcHFxKTB+ixYtqFKlSpmMLyIiIiJSkVW+fpMbz7qTkq+vb6H11vJr7bhUmOHDh/Prr7+Snp5OcnIyKSkpBAQE8Nlnn5XJ+Lm5ueTm5trep6enOxSviIiIiEh5VS4TiczMTACqVq1aaL11LYO1XXEtXbqUlJQU2/sWLVrw1Vdf4efnVybjT5w4kbFjxzoUo4iIiIhIRVAuH22yrv82mUzXrHfU4cOHsVgsnDlzhu+//x4XFxdat27NggULHBq/uKy7QllfaWlpJepPRERERKS8KJeJhIeHBwAXL14stD4rKwsAd3d3Q/3XqlWLzp07s3HjRnx8fBgwYIDdl/zrjW8tv974Li4uVKtWze4lIiIiInIrKJeJRP369QGKPMHaWm5tZ5SnpyddunQhOzub9evX3/DxRUREREQqqnKZSAQFBQGQmJhYaL21PDAwsMRj1apVC4AzZ84UGP+HH37g0qVLZTq+iIiIiEhFVC4Tifbt2+Pp6UlKSgp79+4tUL9kyRIAunTpUuKxYmJiAPD397eV+fn50axZM7Kzs1m9uuBBb6U5voiIiIhIRVQuEwlnZ2cGDRoEwKBBg+zWKkyZMoXk5GRCQkJo06aNrXzWrFkEBAQwcuRIu75WrlzJ2rVrCyzQzsrKYtSoUcTExFCnTh0effRRu/qhQ4cC8Pbbb/Pbb7/Zyr/77jtWrlyJn59fgROvRURERERuF+Vy+1eA0aNHs2HDBuLi4mjcuDGhoaGkpqayc+dOatasybx58+zanz17loMHD3Lq1Cm78sTERMaOHYuPjw/BwcF4enpy+vRp9u3bxx9//IGnpyeLFi0qsHA6MjKSNWvWsGzZMgICAggPD+fs2bPExMRgNpv58ssvCz2sTkRERETkdlAuZyQAzGYzmzdv5t1336Vq1aosX76cY8eO0adPH/bu3ctdd91VrH6efPJJhg4dSt26dUlISGDRokUkJCTQoEEDRo4cyU8//URoaGiB65ycnFi8eDGTJ0/Gx8eHVatWsX//fp544gl2795Nu3btSvuWRUREREQqDJPF6KEM4rD09HQ8PT25cOFCqW8F23BEwbUcN8oxc8+bNjZRF27e2CIiclsoy9/fIhVZuZ2REBERERGR8kuJhIiIiIiIOEyJhIiIiIiIOKzc7tokIvZOnTpVYFeyq3l7e+Pt7X0DIxIREZHbmRIJkQri008/ZezYsUXWjxkzhqioqBsXkIiIiNzWlEiIVBD9+/enW7duZGdnExISAkBsbCyurq4Amo0ohGZxREREyo4SCZEKwvql9+qT3u+55x7c3NxuYlTlm2ZxREREyo4SCRG5ZWkWR0REpOwokRCRW5ZmcURERMqOtn8VERERERGHKZEQERERERGHKZEQERERERGHKZEQERERERGHabG1yM0S5WnsujzLf39+3xucTQbGvmBsbBEREZH/T4mE3NYajlh908Y+Zr5pQ4uIiIiUmBIJEalYjMzklMYsDmgmR0RE5CpKJETEYZrJERERES22FhERERERhymREBERERERhymREBERERERhymREBERERERhymREBERERERhxnetenAgQN8+OGHbN26lVOnTpGXl1doO5PJxOXLlw0HKCJ/OpVxhVOZFrIv/Xcr032n83Gt8udWpt7uJrw99LcBERERuTEMJRLx8fF06tSJ7OxsAGrWrIm7u3upBiYi9j7dk8fYGPuEPWRelu3nMR2diQrT3qgiIiJyYxhKJEaOHEl2djZvvvkmo0eP5o477ijtuETkf/Rv7Uy3plWKrPd2N3jI2i1MszgiIiJlx1AisXv3bu655x6mTJlS2vGISBG8PZzw9rjZUVQsmsUREREpO4YSCWdnZ+66667SjkVEpFRpFkdERKTsGEokQkJC2L9/f2nHIiJSqjSLIyIiUnYMPRw8YcIE0tLSmDx5cmnHIyIiIiIiFYChGYnExET69evH22+/TXR0NA8//DC+vr6YTIU/JtC7d+8SBSkiIiIiIuWLoUSib9++mEwmLBYLW7duZdu2bYW2s1gsmEwmJRIiIiIiIrcYQ4nE3/72tyJnH0RERERE5NZnKJGIiooq5TAKl5OTw8SJE/nmm284fvw4d9xxB48++ijjxo3D19e3WH2cP3+eNWvWsGrVKvbt20dqaipOTk7cfffd9OzZk9dee40qVQru6tK3b18WLFhQZL9z5szh1VdfNXxvIiIiIiIVmaFE4kbIyckhPDycuLg4vL296d69O8eOHWPevHmsWrWK+Ph4/P39r9vPxx9/zPvvv4+TkxPBwcF07dqVM2fOsH37dnbt2sWSJUv497//TdWqVQu9vnPnztSpU6dAedOmTUt8jyIiIiIiFVWJE4lTp04RFxfHyZMnMZlMeHt7065dO7y9vUvU74QJE4iLi6Nt27asW7cOd3d3AKZMmcKwYcOIjIwkJibmuv24u7vzzjvv8Nprr1G3bl1b+aFDh+jUqROxsbG89957TJgwodDrR4wYQVhYWInuRURERETkVmM4kThz5gyvv/46S5cu5cqVK3Z1Tk5O9OjRg5kzZ+Ll5eVw35cuXWLmzJkAfPLJJ7YkAmDo0KEsWLCArVu3smfPHlq3bn3NvkaMGFFoeePGjZk0aRI9e/bkm2++KTKREBERERGRggwlEhcuXKBDhw4cPHgQV1dXHnnkERo2bAhAamoq69atY9GiRSQlJbFjxw48PT0d6j82Npbz58/j7+9PcHBwgfqnnnqK5ORkoqOjr5tIXEtQUBAAJ0+eNNyHiIiIiMjtyFAiMWnSJA4ePMjTTz/NrFmzCsw6nD17lkGDBrFo0SI++OADh//an5SUBECrVq0KrbeWW9sZdeTIEYBC10BYfffddyxdupT8/Hz8/Pzo2rUrAQEBJRpXRERERKSiM5RILFu2jHr16vHll18WuuNRrVq1+Ne//kV8fDxLly51OJE4fvw4QJE7M1nLre2Mmj59OgDdu3cvso31ESur4cOHM2DAAKZPn07lytf++HJzc8nNzbW9T09PL0G0IiIiIiLlh5ORi1JTU2nfvn2hSYRVlSpVaN++vaEv+5mZmQBF7qTk5uZm186IuXPnsmHDBqpXr17oOorg4GDmzp3LL7/8QlZWFkeOHOGTTz6hevXqzJ49m7/+9a/XHWPixIl4enraXvXq1TMcr4iIiIhIeWIokXB1deXs2bPXbXf27FlcXV0d7t9isQAUeeidtd6omJgYBg8ejMlk4osvvsDHx6dAm8GDB9O/f38aN26Mq6srfn5+vPbaa2zduhVnZ2dmzpxJWlraNccZOXIkFy5csL2u115EREREpKIwlEi0bt2amJgY9uzZU2SbPXv2sGXLFu69916H+/fw8ADg4sWLhdZnZWUB2O3mVFzJyclERESQl5fH9OnTeeKJJxy6vkWLFnTr1o38/Hw2bNhwzbYuLi5Uq1bN7iUiIiIiciswlEgMGTKES5cuER4eztixYzl06BB5eXnk5eVx6NAhoqKi6NSpE/n5+QwZMsTh/uvXrw/AiRMnCq23llvbFVdKSgqdO3fm/PnzREVF8frrrzscG/y5dSz8eYaGiIiIiMjtyFAi8dhjj/H++++TmZnJuHHjCAgIoGrVqlStWpWAgADGjx9PRkYG7733Hn/5y18c7t+6LWtiYmKh9dbywMDAYvd58uRJHn74YU6fPs3gwYMZM2aMw3FZnTt3DjA2IyIiIiIiciswlEjAn8//79ixgxdeeIGGDRtSpUoVqlSpQsOGDXnxxReJj49n5MiRhvpu3749np6epKSksHfv3gL1S5YsAaBLly7F6u/cuXN07tyZo0eP0q9fP6ZOnWooLvhzJ6bVq1cDlOgMCxERERGRisxwIgFw7733smDBAlJSUsjOziY7O5uUlBTmz59PmzZtDPfr7OzMoEGDABg0aJDdWokpU6aQnJxMSEiI3RizZs0iICCgQPKSlZXFY489xg8//MAzzzzD559/XuQibquDBw+yYsUK8vPz7crPnDnDc889R1paGkFBQbRr187wPYqIiIiIVGSGzpG4EUaPHs2GDRuIi4ujcePGhIaGkpqays6dO6lZsybz5s2za3/27FkOHjxYYN3CqFGj2LFjB5UqVaJy5cq89NJLhY43f/5828+nTp0iIiKCmjVrEhAQQN26dfntt9/Ys2cPGRkZ+Pr6smjRousmJCIiIiIit6pym0iYzWY2b97MxIkT+frrr1m+fDk1atSgT58+jB8/vthnMljXM+Tn5/P1118X2e7qRKJJkya8+eab7Nixg5SUFHbt2oWLiwtNmjSha9euDB48mBo1apTo/kREREREKjKTpRiHMjRq1AiTycSGDRvw8/OjUaNGxR/AZCIlJaVEQd4q0tPT8fT05MKFC6W+FWzDEatLtT9HHDP3vGljE3WhRJfrczNGn5uI3E7K8ve3SEVWrBmJY8eOAXDp0iW79yIiIiIicnsqViJx5cqVa74XEREREZHbS4l2bRIRERERkduToURi3LhxrFy58rrtoqOjGTdunJEhRERERESkHDOUSERFRbF8+fLr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/vzLfL9+/RgwYAB//PEHmzZtIjQ0FICTJ08SHBzM119/zfjx42nUqBEA/fr148CBA7z99tu89957ti/eR44c4ZFHHmH06NE89thjBAYG2saeO3cuDz/8MG5ubrayjIwMevbsyapVq/jqq6/o3bu3rW7SpElUq1aNpKQku9kEi8VS5MyDEd9++y2DBg1i2rRpdonM0aNH6d27N66urqxfv54OHTrY6v75z3/Sp08f+vXrx65du2zlU6ZMIS4ujvvuu49169bh6fnnov7ExMQyfYrG0KNNd9xxB97e3qUdi411PUOrVq0KrbeWG1334IjvvvuO119/nddee42PPvqIn3/+uczHFBEREbmVVKpUic8//9yWRAD07t0bLy8vDh8+zKBBg2xJBICPjw+9evUCYOvWrQDs27ePtWvX0q5dOyZNmmRLIgAaNWrE5MmTyc/P5+9//7vd2BEREXZJBICHhwdTp04FYMWKFXZ1v/32G35+fgUeSTKZTKX6pdzLy4sPPvigwLEJ06dPJysriw8//NAuiYA/P7OIiAgSEhLsHtefM2cOAFOnTrUlEfDnd+aBAweWWsz/y9CMRJcuXVizZg15eXk4OzuXdkwcP34cAF9f30LrreXWdmXJ+oiV1fDhwxkwYADTp0+ncuVS2T1XRERE5JbWsGFD7rrrLrsyJycnGjRowJkzZ3j44YcLXGPdVOfUqVMArF+/HoDu3btjMpkKtA8JCQEgISGhQN2hQ4dYs2YNhw8f5uLFi7bDlK11V2vdujWxsbGMGDGCl19+udib+ziqU6dOVK1atUD51fdZmJCQEJYvX05CQgKtWrXi+PHjpKWlUbduXdq1a1eg/fPPP8/EiRNLN/j/z9A34ffee48NGzbQr18/5syZU+prJDIzMwEK/XABW1ZpbVcWgoODadu2LQ899BC+vr6cPn2atWvXMnr0aGbPno2zs7Mtky1Kbm6u3SKe9PT0MotXREREpLyqW7duoeXW73SF1VvrrN+lrOtchw8fzvDhw4sc6+zZs7afLRYLb731FlOnTi1y0XFGRobd+08++YSIiAg++OADPvjgA3x8fAgNDeWpp57iySefxMmpdE5PqF+/fqHl1vssbNfQq1nv8+TJk9fsr6jy0mAokfDy8mLXrl107NiRhg0bcu+991K3bt1Cs0OTycQ//vEPh/q3/ocurL+r68vS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JbF3716WLVvGsmXLSExMJCkpidDQUOLj45k2bVppxywiIiIiIjeZoUTim2++wcvLizVr1tCiRYsC9S1atGDVqlXUqlWLr776qsRBioiIiIhI+WIokTh8+DBhYWG4u7sX2cbd3Z2wsDBSUlIMByciIiIiIuWToUSicuXKZGVlXbddVlaWdm8SEREREbkFGUokWrZsyaZNmzh69GiRbY4ePcqmTZsIDAw0HJyIiIiIiJRPhhKJ/v37k52dTVhYGAsWLCAvL89Wl5uby/z58wkLCyMnJ4dXX3211IIVEREREZHywdBzRy+++CKxsbF8/vnnREZG8tJLL1G7dm1MJhOnT5/GYrFgsVjo378/vXr1Ku2YRURERETkJjM0IwHw6aefsnjxYkJCQqhcuTKnTp3i5MmTVK5cmdDQUBYvXsycOXNKM1YRERERESknSrQSukePHvTo0YPLly/z+++/A1CzZk0tsBYRERERucWVyjf+ypUrU7t27dLoSkREREREKoASJxI7d+4kNjaWkydPAuDj40P79u154IEHShyciIiIiIiUT4YTif379xMZGUliYiIAFosFAJPJBMA999zDvHnztP2riIiIiMgtyFAicfDgQTp27Mj58+epV68ePXr0oGHDhlgsFo4fP87SpUvZu3cvHTt2JD4+noCAgNKOW0REREREbiJDicQ777zD+fPnGTFiBOPGjSuwuPrDDz/kb3/7GxMnTmTUqFEsXbq0VIIVEREREZHywdD2r5s3b6Z58+ZMmDCh0B2aKlWqxPvvv0/z5s3ZvHlziYMUEREREZHyxVAicenSpWKtfQgMDOTSpUtGhhARERERkXLMUCIRFBRESkrKddulpKQQFBRkZAgRERERESnHDCUSo0aNIiEhgS+++KLINvPmzSMhIYF33nnHcHAiIiIiIlI+GVps7ebmxoABA3j55ZeZP38+zz77LA0aNAAgNTWVhQsXsn37dgYMGIC7uztbt261u75Dhw4lj1xERERERG4aQ4lEWFgYJpMJi8VCbGws27dvt6u3nikxZ84c5syZU+D6/Px8I8OKiIiIiEg5YSiR6N27t+3gORERERERuf0YSiTmz59fymGIiIiIiEhFYmixtYiIiIiI3N4MzUhc7fLlyyQlJXHy5ElMJhPe3t4EBQUVelCdiIiIiIjcGgx/28/NzWXMmDHMnTuXjIwMuzoPDw9effVVoqKiMJvNJQ5SRERERETKF0OJRG5uLuHh4cTHxwN/nmDdsGFD4M/tX5OSkvjoo4+IjY1l48aNuLi4lFrAIiIiIiJy8xlaIzF16lTi4uJo3749SUlJ7N27l2XLlrFs2TISExNJSkoiNDSU+Ph4pk2bZji4nJwcxowZQ5MmTTCbzfj4+BAZGcmJEycc6icmJoaxY8fy+OOP4+XlhclkIiAg4LrXXblyhWnTptGyZUtcXV3x8vLi6aef5sCBA0ZvSURERETklmBoRuKbb77By8uLNWvW4O7uXqC+RYsWrFq1Cn9/f7766iuGDx/u8Bg5OTmEh4cTFxeHt7c33bt359ixY8ybN49Vq1YRHx+Pv79/sfoaPHgwSUlJDo1vsVh49v+1d/fxPdf7H8ef32FXzDjm8F3YNGNdEUPJdFZyHbmqjnQSXawcctEvhdPZ5uQiieK5RQAAIABJREFURaF0nBQqChNF/OiCsbBkLrJqpBlrWzbZsLErn98ffvuevm1j3+++3+1rHvfb7Xu72fvy9Xk3zWuf9+f9efBBxcTEqEGDBurXr5+ysrK0Zs0affbZZ9q6datuu+02m68LAAAAqAnsuiPx008/KTw8vMwkokS9evUUHh6uo0eP2hXYjBkztHPnTnXp0kWHDx/WypUrFR8frzlz5igzM1OjRo2q8Fg9e/bU9OnTtWXLFiUkJFSoz5IlSxQTE6Pg4GD9+OOPiomJ0bZt27R69WqdP39ew4cPV1FRkV3XBgAAAFzt7Eokateurby8vCu2y8vLs+v0psLCQi1YsECS9Oabb1olLBMnTlTbtm21fft27d27t0LjzZ49W1OmTFGPHj3UsGHDCvWZM2eOpW+TJk0s5UOGDNGAAQN09OhRffLJJxW9JAAAAKBGsSuRuOWWW/TVV18pOTm53DbJycn66quv1LZtW5vHj4uLU3Z2toKCgtS+fftS9UOHDpUkrV+/3uaxKyI5OVnff/+9vLy81K9fvyqfHwAAAHB1diUSEREROn/+vMLDw7Vs2TIVFBRY6vLz87V06VKFh4frwoULeuqpp2wev+R5hg4dOpRZX1Ju63MPts5/8803q06dOlU+PwAAAODq7HrY+m9/+5vi4uL09ttva9SoUXrsscfUpEkTmUwmZWRkyDAMGYahiIgIDR8+3Obxjx8/Lklq1qxZmfUl5SXtHM1R8+fn5ys/P9/y9ZkzZxwUIQAAAFC97LojIUmLFi3S6tWrFRYWptq1ays9PV1paWmqXbu2unXrptWrV+utt96ya+xz585Jkry9vcusr1u3rlU7R3PU/DNnzpSvr6/l07x5c8cGCgAAAFQTu99sLV168HjIkCEqKirSqVOnJEmNGjWy6wHr3zMMQ5JkMpkuW+8sV5q/oiZPnqyJEydavj5z5gzJBACXl56ervT09HLrzWazzGZzFUYEAHBFdv2Lf/v27WratKlat259aZData1ONipx5MgRpaen684777RpfB8fH0lSbm5umfUlJ0Zd7vjZyrjS/CXlV5rfw8ODt3oDuOosWrRI0dHR5dZHRkYqKiqq6gICALgkuxKJ8PBwjRw5Uu+8885l282ePVvvvvuuiouLbRq/RYsWklTuG6xLykvaOVp1zw8A1SkiIkIDBgzQ+fPnFRYWJunSaXpeXl6SxN0IAICkSmxtqsj2Inu3ILVr106Syn15XEm5PUfL2jL/oUOHVFhYWOrkJmfPDwDVqWTr0u/vyt56662W58MAAJAq8bB1RaSlpdm1/ahr167y9fXV0aNHtW/fvlL1MTExkqR777230jGWpWXLlrrhhht0/vx5ffbZZ1U+PwAAAODqKnxH4r333rP6+qeffipVVqKoqEhJSUn64osvdPvtt9sclLu7u8aMGaPp06drzJgx2rJli+U3YXPnztXBgwcVFhamTp06Wfq88cYbeuONNzRo0CDNnDnT5jn/aOLEiXriiSc0adIk3XHHHfrzn/8sSfr444/16aefqmXLlho4cGCl5wEAAACuRhVOJB599FHLKUYmk0lff/21vv7663LbG4YhT09P/fOf/7QrsH/84x/64osvtHPnTgUHB6tbt25KSUlRfHy8GjVqpCVLlli1z8rKUlJSUpknjSxevFiLFy+WJMt7HVJSUqySnIULF1q9AG/UqFHauHGj1q5dq5CQEHXv3l1ZWVmKjY2Vp6enPvjggzJfVgcAAABcCyqcSPzzn/+UyWSSYRiaNm2abr31Vt13331ltnV3d5e/v7969uxp90N5np6e2rp1q2bOnKkVK1Zo3bp1atiwoUaMGKF//etfNh2jmpqaqvj4eKuyCxcuWJX98WVxbm5uWr16tebNm6d3331XGzZsUN26dTVo0CBNmzZNN910k13XBQAAANQEJsOOJ6IDAwP1wAMPaPbs2c6IqcY6c+aMfH19lZOTo/r16zt07MAXSj/LUVWOeT5UbXMrKqdS3Vk3+7Bu14bc3FzLc27nzp3jYWtcs5z58xu4mtl1atOxY8ccHAYAAACAq0nlXkGtS29A3blzp9LS0mQymWQ2m3XHHXdwzjgAAABQg9mdSGRmZmrs2LFas2aNLl68aFXn5uamIUOGaMGCBWrcuHGlgwSAq111bgeT7NwSVvC7na/TzZK7yb7Jr7EtYQBwrbArkcjJydGdd96ppKQkeXl5qWfPngoMDJR06TSkLVu2aNWqVTpw4IB2794tX19fR8YMAAAAoJrZlUjMmjVLSUlJuv/++/XGG2+UuuuQlZWlMWPGaNWqVXr55Zc1Y8YMhwQLAAAAwDXY9WbrtWvXqnnz5vrggw/K3Lrk5+en999/X82bN9eaNWsqHSQAAAAA12JXIpGSkqKuXbte9oVsderUUdeuXXX8+HG7gwMAAADgmuxKJLy8vJSVlXXFdllZWfLy8rJnCgAAAAAuzK5EIjQ0VLGxsdq7d2+5bfbu3att27apY8eOdgcHAAAAwDXZlUhMmDBBhYWF6t69u6Kjo3XkyBEVFBSooKBAR44cUVRUlO655x4VFxdrwoQJjo4ZAAAAQDWzK5Ho27evpk+frnPnzmnatGkKCQmRt7e3vL29FRISon/96186e/asXnrpJfXp08fRMQMAAACoZna/kG7y5Mnq0aOHFixYoLi4OKWlpUmS/P391a1bN/39739Xp06dHBYoAKBqpJ+9qPRzhs4X/veFdPsziuVV59IL6cz1TDL72PV7KABADWJ3IiFJHTt21LJlyxwVCwDABSzaW6Do2AKrsrAleZY/R/7FXVHhnlUdFgDAxVQqkQAA1DwRoe4a0Kb8473N9UxVGA0AwFXZlUj8+uuvSkpKUps2bdSkSRNLeXJysqZMmaLvvvtOAQEBioyMVOfOnR0WLADA+cw+bjL7VHcUAABXZ9cm11mzZumuu+5Sdna2pezcuXMKCwvTqlWr9P3332vTpk3q3r27fv75Z4cFCwAAAMA12JVIbNu2TTfccIPatGljKVu6dKnS09M1bNgwJSUl6bXXXlNubq5effVVhwULAAAAwDXYlUj88ssvuv76663KNmzYoNq1a2vevHkKDg7WuHHjdOutt2rr1q0OCRQAAACA67ArkTh79qx8fP67gdYwDMXHxys0NFSNGjWylLdp00apqamVjxIAAACAS7ErkbjuuuuUnJxs+frbb79VTk6OwsPDrdoVFRXJ3d29UgECAAAAcD12JRJdunTRN998o08++URnzpzRSy+9JJPJpP79+1u1++GHH3Tdddc5JFAAAAAArsOuRGLq1Kny8PDQ4MGD1bBhQ61fv17h4eG64447LG2OHTum77//XrfddpvDggUAAADgGux6j0RISIji4uI0b948ZWZmKjQ0VM8995xVm82bN6tdu3YaOHCgQwIFAAAA4DrsfrN1+/bttXTp0nLrIyIiFBERYe/wAAAAAFyYXVubAAAAAFzbSCQAAAAA2KxCW5tq1apl9wQmk0lFRUV29wcAAADgeiqUSBiGYfcElekLAAAAwDVVKJG4ePGis+MAAAAAcBXhGQkAAAAANiORAAAAAGAzEgkAAAAANnPpROLChQuKjIxU69at5enpKX9/f40aNUqpqak2j5Wdna3x48crICBAHh4eCggI0Lhx45SdnV1m+0cffVQmk6ncz7///e/KXh4AAABw1bL7zdbOduHCBXXv3l07d+6U2WzWfffdp2PHjmnJkiXasGGDdu3apaCgoAqNderUKXXp0kVHjhzR9ddfr4EDByoxMVHz58/Xxo0btXv3bjVq1KjMvr169VLTpk1Llbdp06ZS1wcAAABczVw2kZgxY4Z27typLl26aMuWLapXr54kae7cuXr22Wc1atQoxcbGVmisCRMm6MiRIxo8eLBWrlyp2rUvXfYzzzyjBQsWaOLEiVq2bFmZfV944QWFh4c75JoAAACAmsIltzYVFhZqwYIFkqQ333zTkkRI0sSJE9W2bVtt375de/fuveJYGRkZWr58uerUqaOFCxdakghJeuWVV9S4cWMtX75cv/76q+MvBAAAAKihXDKRiIuLU3Z2toKCgtS+fftS9UOHDpUkrV+//opjbdq0SRcvXtSdd96pJk2aWNV5eHiof//+Ki4u1qZNmxwTPAAAAHANcMmtTQcOHJAkdejQocz6kvKSdpUd69133y13rI8//lhr1qxRcXGxWrZsqf79+yskJOSK8wIAAAA1mUsmEsePH5ckNWvWrMz6kvKSds4cq2SLVYnnn39eTz/9tObNm2e1Taos+fn5ys/Pt3x95syZK8YLAAAAXA1ccmvTuXPnJEne3t5l1tetW9eqnTPGat++vf7973/r8OHDysvL088//6w333xTDRo00MKFC/Xcc89dce6ZM2fK19fX8mnevPkV+wAAAABXA5dMJAzDkCSZTKbL1jtzrHHjxikiIkLBwcHy8vJSy5YtNXr0aG3fvl3u7u5asGCBTpw4cdm5J0+erJycHMvnSu0BAACAq4VLJhI+Pj6SpNzc3DLr8/LyJMnqNKeqGEuSbr75Zg0YMEDFxcX64osvLtvWw8ND9evXt/oAAAAANYFLJhItWrSQpHLfYF1SXtKuqsYqERwcLElKT0+vcB8AAACgJnHJRKJdu3aSpISEhDLrS8rbtm1bpWOVOH36tKSK38UAAAAAahqXTCS6du0qX19fHT16VPv27StVHxMTI0m69957rzhW79695ebmph07dujkyZNWdfn5+Vq/fr3c3NzUp0+fCsWWn5+vzz77TJIUGhpaoT4AAABATeOSiYS7u7vGjBkjSRozZozV8w1z587VwYMHFRYWpk6dOlnK33jjDYWEhGjy5MlWY5nNZg0bNkwFBQUaPXq0ioqKLHWTJk1SZmamHnroITVt2tRSnpSUpE8++UTFxcVWY2VmZuqvf/2rTpw4oXbt2umOO+5w6HUDAAAAVwuXfI+EJP3jH//QF198oZ07dyo4OFjdunVTSkqK4uPj1ahRIy1ZssSqfVZWlpKSksp8buH111/X7t27tWbNGoWEhKhjx45KTEzUoUOHFBQUpNdee82qfXp6ugYOHKhGjRopJCRE1113nU6ePKm9e/fq7NmzatasmVatWlXuSVAAAABATeeSdyQkydPTU1u3btWLL74ob29vrVu3TseOHdOIESO0b98+tWrVqsJj+fn5ac+ePRo7dqwKCgq0du1a5eTkaMyYMfrmm2/k5+dn1b5169YaP368goODdfToUa1du1bffvutgoODFRkZqYMHD6p169aOvmQAAADgqmEybHkpAyrlzJkz8vX1VU5OjsOPgg184TOHjmeLY54PVdvcisqpVHfWzT6sm+2qc82kq3fdribp6emXPc3PbDbLbDZXYURwFGf+/AauZi67tQkAgKvJokWLFB0dXW59ZGSkoqKiqi4gAHAyEgkAABwgIiJCAwYM0Pnz5xUWFiZJiouLk5eXlyRxNwJAjUMiAQCAA5RsXfr9SYO33nqr6tatW41RAYDzuOzD1gAA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aKg8PT2tyt966y2NHj1ajz/+uI4fP14qASmRmZmp//mf/1HPnj2VlJSklJSUy8YZFhampUuXXrYNAABlYWsTgCplGIYefvhhXbhwQTNmzNDMmTNLJRGSFBgYqPnz52vbtm1VH+QfBAUFafHixXryySfVvn171a595d/BzJs3T5MmTbJKIiSpU6dOeuGFFyRJH374Yal+Xbt2LZVESNLTTz+tVq1aKS0tTUlJSeXOO378eOXm5mrhwoVXjBEAgMogkQBQpTZu3KjExEQFBARo0qRJV2wfGhp6xTZLly6VyWRSVFRUmfXh4eEymUw6duyYjdE6R7t27SRJaWlpNvUruQvh7u5eZv3mzZu1YsUKTZ06la1JAACnY2sTgCq1adMmSdLQoUPl5nZt/i7j559/liQ1bdq0wn3ee+89JSUlqXXr1rr++utL1efl5empp55SSEhIhRK0EkeOHNHkyZN16tQp+fn5KSwsTL17975m/9sAACqORAJAlSp5cLp9+/bVHEn1KCwstGw7uu+++8pt98orrygxMVG5ubn64YcflJiYKH9/f61YsaLMf+S/+OKLOnbsmLZu3VruHYuy7Ny5Uzt37rQqu+WWW7RmzRoFBwdXeBwAwLWHRAJAlcrKypIk+fn5lVn/6KOPlip7+umnddtttzkzrCrz4osv6ocfflDLli311FNPldtu8+bN+vLLLy1fN2/eXO+//36ZW70SEhI0b948jRgxQuHh4RWKw9fXV88995yGDBliSRj279+vqVOnavfu3erRo4cOHDggX19f2y4QAHDNIJEAUKVKjiM1mUxl1i9btqxUWe/evWtEIvHhhx9q9uzZ8vT01IoVK+Tt7V1u2y+++EKSlJ2dre+++07Tpk1TeHi4XnrpJU2dOtXSrri4WE888YQaNGigV199tcKxtG/fvtRdobvvvltxcXG66667tGPHDr355puaMmWKjVcJALhWsAkWQJUquRNRcmfijwzDsHxGjBhRlaE51eeff65HH31Ubm5u+vDDDyv8wrcGDRqoW7du2rhxo0JDQ/Xiiy9qz549lvrXX39dCQkJmj17drl3eWxRq1YtPf/885Iu3RUBAKA8JBIAqlTJiUUJCQlVNucf345d1eLj4zVo0CAVFhbq7bff1sCBA20eo06dOnrwwQdlGIbWr19vKV+/fr1MJpOWLVum8PBwq0/JG60HDx6s8PBwxcXFVWiukq1O6enpNscJALh2sLUJQJXq06ePFi5cqJiYGM2ePdshpwOVPFx87ty5MutPnDhR6TnslZiYqL59+yo3N1dz587VyJEj7R6r5I5DZmamVblhGNq+fXu5/Xbt2iWp/LtAf3T69GlJUr169ewJEwBwjeCOBIAq1bdvX91www1KSUnRyy+/7JAxzWazJOnw4cOl6pKSknT8+HGHzGOrY8eOqWfPnvrtt98UFRWlCRMmVGq82NhYSbJ6R8S2bdustoP9/hMQECDp0p0FwzAqfCdkzZo1kir2Dg8AwLWLRAJAlXJzc9P7778vDw8PTZ06VZMnT9bZs2dLtUtJSSkzMShLp06d5O3trU2bNmnv3r2W8szMTD322GPVsrXp5MmT6tGjh9LS0vTss88qMjLyin127NihlStXqqioyKq8sLBQCxYs0Pvvvy8vLy89+OCDlY5v0aJFOnXqlFWZYRhatGiRXnvtNZlMpsueKgUAgMkoOUIFAKpQXFychg4dql9//VWenp7q3Lmz/P39df78eaWmpmrfvn26ePGibrrpJsXExCgkJETSpdOeAgICSr2lOjIyUtOmTZOnp6flCNTdu3frxhtvlGEY2rVrl5KTkxUYGGhXvIMGDbI8M5CamqpffvlFzZs3l7+/v6RLd0XWrl1r1X7dunXy9vbW/fffX+aYfn5+VictLV26VCNHjpSfn59CQ0PVqFEjZWVl6bvvvlN6ero8PT21bNkyPfDAAxWKOTAwUCkpKUpPTy/18rvAwEClpaXpxhtvtNy5+O6775ScnCw3Nze9/vrrGjt2bMUXCABwzSGRAFBtcnNz9fbbb2v9+vU6dOiQTp8+LQ8PDzVr1kydOnXS/fffr759+6pWrVqWPuUlEoZhaM6cOVq0aJFSUlLUpEkTPfjgg5o2bZr69u2r2NjYSiUSJf8oL88fYwoPD7dsRapon+TkZC1evFixsbH6+eeflZWVJXd3dwUGBuruu+/WM888o1atWtkcc1mJxIIFC7RlyxYlJibq5MmTKiwslNlsVrdu3fTMM8+oU6dOFZ4HAHBtIpEAAAAAYDOekQAAAABgMxIJAAAAADbjPRIArik//vijZs2aVaG2YWFhevzxx50cEQAAVycSCQDXlIyMDC1btqzC7UkkAAAoGw9bAwAAALAZz0gAAAAAsBmJBAAAAACbkUgAAAAAsBmJBAAAAACbkUgAAAAAsBmJBAAAAACbkUgAAAAAsBmJBAAAAACb/R9ErS5TCDZ1MgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "res.plot_simulated_vs_measured_MDVs(show_fig = True, output_dir = None)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "res.plot_simulated_vs_measured_fluxes(show_fig = True, output_dir = None)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To obtain symmetric confidence intervals of net or total fluxes at convergence, you can use the `estimate_confidence_intervals` method:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "v1: [8.758, 11.242]\n", "v2: [8.758, 11.242]\n", "v3: [4.309, 5.677]\n", "v4: [4.321, 5.693]\n", "v5: [4.321, 5.693]\n", "v6: [4.321, 5.693]\n", "v7: [4.309, 5.677]\n" ] } ], "source": [ "print(res.estimate_confidence_intervals(\n", " which = 'net', # which = \"total\" for total fluxes\n", " confidence_level = 0.95\n", ")) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can evaluate the contribution of measurement variances to the uncertainty of estimated fluxes by calculating the contribution matrix using the `get_contribution_matrix` method:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Glu_12345_m0 Glu_12345_m1 Glu_12345_m2 Glu_12345_m3 Glu_12345_m4 \\\n", "v1 2.193959e-29 4.692641e-29 6.652732e-29 1.992930e-29 3.961689e-30 \n", "v2 2.136664e-29 4.693636e-29 6.660495e-29 2.158797e-29 4.004388e-30 \n", "v3 1.252988e-01 2.058794e-04 2.293547e-03 4.182729e-02 8.895606e-03 \n", "v4 1.247228e-01 2.049330e-04 2.283004e-03 4.163501e-02 8.854712e-03 \n", "v5 1.247228e-01 2.049330e-04 2.283004e-03 4.163501e-02 8.854712e-03 \n", "v6 1.247228e-01 2.049330e-04 2.283004e-03 4.163501e-02 8.854712e-03 \n", "v7 1.252988e-01 2.058794e-04 2.293547e-03 4.182729e-02 8.895606e-03 \n", "\n", " Glu_12345_m5 v1 \n", "v1 1.194661e-31 1.000000 \n", "v2 1.224363e-31 1.000000 \n", "v3 4.665391e-04 0.821012 \n", "v4 4.643944e-04 0.821835 \n", "v5 4.643944e-04 0.821835 \n", "v6 4.643944e-04 0.821835 \n", "v7 4.665391e-04 0.821012 \n" ] } ], "source": [ "print(res.estimate_contribution_matrix(which = 'net')) # which = \"total\" for total fluxes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we can also calculate the sensitivities of estimated fluxes to measurement perturbations using the following command:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Glu_12345_m0 Glu_12345_m1 Glu_12345_m2 Glu_12345_m3 Glu_12345_m4 \\\n", "v1 -4.683972e-13 -6.850286e-13 -8.156428e-13 -4.464224e-13 -1.990399e-13 \n", "v2 -4.622406e-13 -6.851011e-13 -8.161186e-13 -4.646285e-13 -2.001097e-13 \n", "v3 1.950560e+01 7.906644e-01 -2.639001e+00 -1.126978e+01 -5.197248e+00 \n", "v4 -1.950560e+01 -7.906644e-01 2.639001e+00 1.126978e+01 5.197248e+00 \n", "v5 -1.950560e+01 -7.906644e-01 2.639001e+00 1.126978e+01 5.197248e+00 \n", "v6 -1.950560e+01 -7.906644e-01 2.639001e+00 1.126978e+01 5.197248e+00 \n", "v7 1.950560e+01 7.906644e-01 -2.639001e+00 -1.126978e+01 -5.197248e+00 \n", "\n", " Glu_12345_m5 v1 \n", "v1 -3.456387e-14 1.000000 \n", "v2 -3.499090e-14 1.000000 \n", "v3 -1.190227e+00 0.499299 \n", "v4 1.190227e+00 0.500701 \n", "v5 1.190227e+00 0.500701 \n", "v6 1.190227e+00 0.500701 \n", "v7 -1.190227e+00 0.499299 \n" ] } ], "source": [ "print(res.estimate_sensitivity(which = 'net')) # which = \"total\" for total fluxes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `with` statement can also be used to perform flux estimation:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "fitting [elapsed: 0:00:01]\n", "True\n" ] } ], "source": [ "with model.fitter('ss') as fit:\n", " fit.set_labeling_strategy(\n", " 'AcCoA', \n", " labeling_pattern = ['01', '11'], \n", " percentage = [0.25, 0.25], \n", " purity = [1, 1]\n", " )\n", " fit.set_measured_MDVs_from_file(MEASURED_MDV_FILE)\n", " fit.set_measured_fluxes_from_file(MEASURED_FLUX_FILE)\n", " fit.prepare(n_jobs = 3)\n", " res = fit.solve(\n", " solver = 'slsqp', \n", " ini_fluxes = None, \n", " fit_measured_fluxes = True\n", " )\n", "print(res.optimization_successful)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A more complex example of steady state fitting using an *E. coli* model is provided in the script \"[tutorial_ecoli_steady_state_estimation.py](https://github.com/Chaowu88/freeflux/tree/main/tutorials)\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dilution Parameter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In some cases, the fractional labeling (13C enrichment) of certain metabolites, such as amino acids, can be significantly lower than that of other metabolites. This could be due to the presence of unlabeled fractions introduced from the inoculum, inactive pool or media. To better fit the data, dilution parameters need to be added to the network." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For instance, we can add the following three reactions to account for the dilution effect of a metabolite A with three C atoms:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "v1: 0A(abc) $\\rightarrow$ As(abc)\\\n", "v2: 0Au(abc) $\\rightarrow$ As(abc)\\\n", "v3: As(abc) $\\rightarrow$ sink" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, A represents the metabolite involved in metabolic reactions, Au represents the metabolically inactive (unlabeled) fraction, and As represents the pseudo-metabolite denoting the metabolite measured in samples. The zero coefficient in v1 and v2 ensures that the additional metabolites will have no effect on the mass balance of network reactions. The flux values of the reactions can be arbitrary, but the ratio v2/(v1+v2) is determined by the labeling patterns of A, Au, and As, and is estimated as the dilution parameter. These additional reactions are useful in accounting for the dilution effect of measured metabolites, such as amino acids. For unmeasured metabolites, such as CO$_2$, only one reaction is needed:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "v1: 0Au(abc) $\\rightarrow$ 0A(abc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The zero coefficient on both sides excludes the reaction from mass balance, leaving it only to EMU decomposition." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To inform the decomposer about the unlabeled dilution source(s), i.e., \"Au\" in the above example, we can set the argument \"dilution_from = 'Au'\" in the `prepare` method." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solving the Fluxes with Confidence Intervals" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In some cases, it is important to assess the uncertainty in estimated fluxes by calculating confidence intervals (CIs). FreeFlux utilizes the Monte Carlo method to estimate CIs. The commands for estimating fluxes with CIs are similar to those for flux estimation, except the method `solve_with_confidence_intervals` is used instead." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "fitting with CIs [elapsed: 0:00:21]\n", "\n", "v1: [8.487, 11.602]\n", "v2: [8.487, 11.602]\n", "v3: [4.195, 6.155]\n", "v4: [4.002, 5.806]\n", "v5: [4.002, 5.806]\n", "v6: [4.002, 5.806]\n", "v7: [4.195, 6.155]\n" ] } ], "source": [ "with model.fitter('ss') as fit:\n", " fit.set_labeling_strategy(\n", " 'AcCoA', \n", " labeling_pattern = ['01', '11'], \n", " percentage = [0.25, 0.25], \n", " purity = [1, 1]\n", " )\n", " fit.set_flux_bounds(\n", " 'all', \n", " bounds = [-100, 100]\n", " ) \n", " fit.set_measured_MDVs_from_file(MEASURED_MDV_FILE)\n", " fit.set_measured_fluxes_from_file(MEASURED_FLUX_FILE)\n", " fit.prepare(n_jobs = 3)\n", " res = fit.solve_with_confidence_intervals(\n", " n_runs = 90, \n", " n_jobs = 3\n", " )\n", "print(res.estimate_confidence_intervals(\n", " which = 'net', \n", " confidence_level = 0.95\n", "))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Note:

For the estimation of CIs for large-sized models, we strongly recommend running with parallel jobs. One can achieve this by setting the 'n_jobs' argument of the `solve_with_confidence_intervals` method to a value greater than 1.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A more complex example of estimating flux CIs of an *E. coli* model is provided in the script \"[tutorial_ecoli_steady_state_estimation.py](https://github.com/Chaowu88/freeflux/tree/main/tutorials)\"" ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:freeflux-py37]", "language": "python", "name": "conda-env-freeflux-py37-py" }, "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.7.0" } }, "nbformat": 4, "nbformat_minor": 4 }