{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Analyzing Features\n", "## Rates" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\Naveen\\Anaconda3\\lib\\site-packages\\IPython\\html.py:14: ShimWarning: The `IPython.html` package has been deprecated. You should import from `notebook` instead. `IPython.html.widgets` has moved to `ipywidgets`.\n", " \"`IPython.html.widgets` has moved to `ipywidgets`.\", ShimWarning)\n", "C:\\Users\\Naveen\\Anaconda3\\lib\\site-packages\\sqlalchemy\\orm\\mapper.py:1703: SAWarning: Implicitly combining column experiment.id with column stage.id under attribute 'id'. Please configure one or more attributes for these same-named columns explicitly.\n", " util.warn(msg)\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import impact as impt\n", "# import cobra\n", "# import cobra.test\n", "# import cobra.io\n", "import numpy as np\n", "\n", "# import matplotlib.pyplot as plt\n", "% matplotlib inline\n", "\n", "from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot\n", "from plotly.graph_objs import Bar, Layout, Figure, Scatter\n", "init_notebook_mode()\n", "\n", "# We include this to ensure the js is loaded when viewed online\n", "from IPython.display import HTML\n", "HTML('')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IN FLUXES OUT FLUXES OBJECTIVES \n", "glc__D_e -10.00 h_e 27.87 Ec_biomass_iJO1366_core_53p95M 0.242\n", "nh4_e -2.61 for_e 17.28 \n", "h2o_e -1.71 ac_e 8.21 \n", "pi_e -0.23 etoh_e 8.08 \n", "co2_e -0.09 succ_e 0.08 \n", "so4_e -0.06 5drib_c 0.00 \n", "k_e -0.05 glyclt_e 0.00 \n", "mg2_e -0.00 mththf_c 0.00 \n", "fe2_e -0.00 4crsol_c 0.00 \n", "fe3_e -0.00 meoh_e 0.00 \n", "ca2_e -0.00 amob_c 0.00 \n", "cl_e -0.00 \n", "cu2_e -0.00 \n", "mn2_e -0.00 \n", "zn2_e -0.00 \n", "ni2_e -0.00 \n", "mobd_e -0.00 \n", "cobalt2_e -0.00 \n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAFwCAYAAABKGObNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcVXX+x/HXFxQRBbmA4oaAC5pFZpZaWkFWNpVlaba4\njI6lZWaLbTpp5DRtOhOa05S5lJma1jQu+SstwxY1a3LJNHNJVDQ3VNxA4H5/f1y8gYACggfk/Xw8\n7oN7v+d7vudzLtwHH758zvcYay0iIiIiIvIHH6cDEBEREREpb5Qki4iIiIicQkmyiIiIiMgplCSL\niIiIiJxCSbKIiIiIyCmUJIuIiIiInOKMSbIxZpIxZrcxZk2utlbGmGXGmJXGmBXGmMtybRtmjNlo\njFlvjLmhrAIXERERESkrRZlJngJ0PqXtVeA5a21r4DlgNIAxpiXQA7gA+BPwhjHGlF64IiIiIiJl\n74xJsrX2G+DAKc1uoFbO82AgJef5rcBMa22WtXYrsBFoWzqhioiIiIicG1VKuN9jwGfGmH8ABrgy\np70BsCxXv5ScNhERERGRCqOkF+49CDxirW2EJ2GeXHohiYiIiIg4q6QzyX+21j4CYK390BgzMac9\nBYjI1a8hf5Ri5GGMsSU8toiIiIhIsVhri3WdXFFnkk3O46QUY8w1AMaYTnhqjwHmAncbY/yMMdFA\nU2DFaYLVo5Qezz33nOMxnE8PvZ96L8vrQ++n3s/y/ND7qfeyvD5K4owzycaY6UAcEGqM2YZnNYv7\ngXHGGF8gHRiQk/SuM8bMAtYBmcAgW9LIREREREQccsYk2Vp7byGbLiuo0Vr7EvDS2QQlIiIiIuIk\n3XHvPBEXF+d0COcVvZ+lR+9l6dL7Wbr0fpYuvZ+lR++l84xT1RDGGFViiIiIiEiZM8Zgi3nhXklX\ntygzUVFRJCcnOx2GiJwjkZGRbN261ekwRERE8ih3M8k5mb4DEYmIE/SZFxGRslaSmWTVJIuIiIiI\nnEJJsoiIiIjIKZQki4iIiIicQkmyg6Kjo1m8eHGB27755hsuuOCCcxxR6XrwwQf5+9//7nQYIiIi\nIsWmJLmYoqKiCAgIICgoiMDAQIKCghgyZEipH6djx46sX7++1Mc9l/7973/z17/+FYDk5GR8fHxw\nu93e7UuXLqVTp04EBQXhcrm47bbb8pxzZmYmd955J9HR0fj4+PDVV1/lGT8xMZEmTZpQq1YtGjZs\nyNChQ/OMDzB27FgaN25MzZo1ufDCC9m0aZN32759++jZsyfBwcGEhobSu3fvsngbStXzzz+Pn59f\nnp+/3CtDXHvttdSpU4fg4GBat27N3Llzizz2zp076dq1K6GhoTRq1Ii33norz3YfHx8CAwO9xx0w\nYIB3W0JCAj4+Prz++ut59hk7diw+Pj6MGjWqZCcsIiLiECXJxWSM4ZNPPiEtLY3Dhw+TlpbGuHHj\nnA6rQjDmj4tKly1bRufOnbn99tvZtWsXv/32GxdffDEdOnTIk/RdddVVvP/++9SrVy/feLfddhs/\n/PADhw4dYu3ataxatSrP92LixIlMmTKF//u//+PIkSPMnz+fsLAw7/Y77riD+vXrs2PHDvbs2cMT\nTzxRNid+iuzs7LPa/+67787z8xcVFeXdNnbsWFJSUjh48CBvvfUWvXr1Yvfu3UUat1evXjRp0oS9\ne/cyf/58hg8fzpIlS7zbjTGsWbPGe9wJEybk2da8eXOmTp2aZ8ypU6fSvHnzszpfERERJyhJLoHC\nlqt6++23admyJUFBQVx00UWsWrXqjGOtWLGCCy+8kNDQUPr378+JEycAWLJkCREREd5+v/zyC/Hx\n8bhcLmJjY5k3b553W79+/XjooYe46aabCAwM5KqrrmL37t089thjhISE0LJlS1avXu3t/8orr9C0\naVNvnP/973+92zZv3kxcXBzBwcHUqVOHe+65x7vtscceIzw8nFq1atGqVSvWrVt32nPr168fI0eO\nLHDb008/Td++fRk8eDA1atQgODiYv/3tb7Rv356EhAQAqlatypAhQ7jyyivx8cn/oxodHY3L5QI8\niaePj493pthay6hRo3jttde8SVp0dDTBwcEALFq0iB07dvDqq69Ss2ZNfH19adWq1WnPB+DAgQP8\n5S9/oUGDBoSGhnLHHXd4t7399ts0a9aMsLAwunbtyq5du7zbfHx8eOONN4iJiSEmJgbwfE9vuOEG\nQkNDueCCC5g9e/YZj38msbGxVK1a1fs6KyuL7du3A/Duu+/SsWNHHn74YYKDg2nZsqW33Ofo0aMk\nJSUxfPhwfHx8uPjii+nevTuTJ0/2jmWtzTdTn9tll13GsWPHvP8NWLduHenp6Vx++eVnfV4iIiLn\nmpLkUjJ79mxGjRrFtGnTSEtLY+7cuYSGhp5xv+nTp7No0SI2b97Mhg0beOGFF7zbTs68ZmVl0aVL\nF2688Ub27t3LuHHj6NmzJxs3bsxz/BdffJH9+/fj5+fHFVdcwWWXXcb+/fvp1q0bjz32mLdv06ZN\n+fbbb0lLS+O5557LM9s4YsQIOnfuzMGDB9mxYwcPP/wwAAsXLuSbb75h06ZNHDp0iFmzZhXp/Apy\n/Phxli5dSvfu3fNt69GjB4sWLSryWDNmzKBWrVrUrl2bNWvWMHDgQAB27NjBjh07+Omnn2jUqBFN\nmjTxJt8Ay5cvJyYmhj59+hAWFka7du3ylXMUpFevXhw/fpz169ezZ88e7/u6ePFihg8fzocffsiu\nXbto1KgRd999d55958yZw4oVK1i3bh3Hjh3jhhtuoFevXuzbt4+ZM2fy0EMP8csvv5wxhnnz5hEW\nFkZsbCxvvvlmvu1dunShevXqtG/fnri4OC677DLvtu+++45mzZqxf/9+EhISuOOOOzh48CDW2nzr\nFVtrWbt2bZ6xr7nmGurXr0/37t3z3fTHGEPv3r159913AU9S3qdPH62BLCIiFZO11pGH59D5FdZe\nXkRFRdnAwEDrcrlscHCwdblcduLEibZz58523LhxxR5rwoQJ3tcLFiywTZs2tdZam5SUZCMiIqy1\n1n711Ve2Xr16efa955577PPPP2+ttbZv3752wIAB3m2vv/66bdmypff1Tz/9ZF0uV6FxXHLJJXbu\n3LnWWmv79OljBw4caHfs2JGnz+LFi23z5s3t8uXLrdvtLtL59e3b144YMcJaa+3WrVutj4+Pzc7O\ntjt27LDGGLthw4Z8+3z66afWz88vX3vDhg3tkiVLCj3Wpk2b7MiRI+3u3buttdYuXbrUGmPsLbfc\nYtPS0uzWrVttTEyMnThxorXW2gEDBlgfHx87ZcoUm5WVZWfOnGmDg4Pt/v37Cz3Grl27rK+vrz10\n6FC+bf3797dPP/209/WRI0ds1apVbXJysrXWWmOMTUpK8m7/4IMP7NVXX51njIEDB9pRo0YVenxr\nrV2/fr3dtWuXdbvddunSpbZevXp25syZ+fplZWXZTz/91L722mvetnfeecc2aNAgT7+2bdvaadOm\nWWutveqqq+yQIUNsenq6/d///mdDQkJsixYtvH2//vprm5mZaQ8dOmQHDx5sL7roIpudnW2ttTYh\nIcH27t3bbtu2zUZGRtrMzEzbqFEju2PHDturVy/vz2pByvtnXkREKr6c3zXFylUr5EyyMaXzKKk5\nc+aQmprKgQMHSE1NpX///mzfvp0mTZoUe6yGDRt6n0dGRrJz5858fXbt2pWn9OJk35SUFO/r8PBw\n7/Pq1avne33kyBHv66lTp9K6dWtcLhcul4uff/6Zffv2ATB69Gjcbjdt27YlNjaWKVOmABAfH8/g\nwYN56KGHCA8P54EHHsgzZnG4XC58fHzylCPkPtfcdcNF1aRJE1q2bMmDDz4IeM4ZPGUdgYGBREZG\nMnDgQBYsWODdHhUVRd++ffH19eWuu+4iIiKCb7/9ttBjbN++nZCQEIKCgvJt27lzJ5GRkd7XNWrU\nIDQ0NM/3KPf3Ojk5meXLlxMSEkJISAgul4vp06fz+++/n/Y8W7RoQd26dTHGcMUVV/DII4/w4Ycf\n5uvn6+tL586d+eyzz5g/f763vUGDBnn65f6ZmzZtGlu2bKFRo0Y89NBD9O7dO0/MHTt2pEqVKgQF\nBTF27Fi2bt2a7+LSiIgImjRpwvDhw4mJicl3PBERkYqiQibJ1pbOo+THz79zREQEmzdvLvZYJ+tF\nwZM41a9fP1+f+vXr5+kHsG3bthIlINu2bWPAgAG88cYbHDhwgAMHDnDhhRd6z6lOnTpMmDCBlJQU\n3nzzTQYNGsSWLVsAGDx4MD/88APr1q1jw4YNjB49utjHBwgICOCKK64osAZ31qxZdOrUqUTjZmZm\nemNt3rw5fn5+ebbnvnDw4osvzvP61O0FiYiIIDU1lbS0tHzb6tevn6f84OjRo+zfvz9Pkpl7/IiI\nCOLi4khNTfX+wZWWlsa//vWvIpxp3pgL+nk8KSsrK8/PZe6kHTw/Dyd/5ho1asS8efPYvXs3y5Yt\nY+/evbRt27bAcU8es6Bj9+nTh3/+85/8+c9/Lta5iIiIlCcVMkkuj+677z7GjBnDjz/+CHgugNu2\nbdsZ9/vXv/5FSkoKqampvPjii/nqWAHatWtHQEAAr776KllZWSQlJTF//vw8F9Wdyclk5ujRo/j4\n+BAWFobb7WbKlCl56k4//PBDbyIVHByMj48PPj4+/PDDD6xYsYKsrCyqV6+Ov79/gRfTFdXLL7/M\nu+++y/jx4zly5AgHDhzg2WefZfny5Tz33HPefidOnCA9PR2AjIwMMjIyvNsmTZrE3r17Ac9FYi+/\n/DLXXXcd4Jkpvvvuu3n11Vc5cuQIO3bsYMKECXTp0gWA22+/nQMHDvDee+/hdru9592hQ4dCY65b\nty5/+tOfGDRoEAcPHiQrK4uvv/4agHvuuYcpU6awZs0aMjIyGD58OO3bt8/3H4CTbrnlFn799Vem\nTZtGVlYWmZmZ/PDDD2esSZ47dy4HDx4EPBd9jh07lq5duwKwYcMGPv30U9LT08nKymLatGl8/fXX\nxMXFefffs2cPr7/+OllZWcyePZtffvmFm266CfBcSHjkyBEyMzOZNm0aixYt4vHHH/e+v6tXr8bt\ndnPkyBEef/xxGjZsWOBa3nfddRcLFy7kzjvvPO25iIiIlGdKkkugS5cuBAUFeR/dunWje/fu/PWv\nf+Xee+8lKCjIm4SdjjGGe++9lxtuuIGmTZvSrFkz77rCuVWtWpV58+axYMECwsLCGDx4MO+99x7N\nmjXzjnMmJ/tccMEFDB06lPbt21O3bl1+/vlnOnbs6O33/fff065dO4KCgujatSvjxo0jKiqKtLQ0\n7r//fkJCQoiOjiYsLIwnn3yyOG9bnjg6dOjAZ599xkcffUS9evWIjo5m9erVfPvtt3nKVpo3b06N\nGjXYuXMnN954IwEBAd4/Pr799ltiY2MJDAzklltu4ZZbbslz85LXX3+dGjVqUL9+fTp06ECvXr3o\n27cv4Cn5mDt3LqNHjyY4OJhXX32VuXPnEhISctr433vvPapUqUKLFi0IDw9n7NixAHTq1Im//e1v\n3HHHHTRo0IDffvuNmTNn5jvvk2rWrMnChQuZOXMm9evXp379+jzzzDPe1U0KM3PmTO/KJH379mX4\n8OH06tUL8PwhlJCQQHh4OHXq1OH1119n1qxZeVbtaNeuHRs3biQsLIwRI0bw0UcfeVcI+eyzz2jc\nuDEhISFMmDCBzz77zHtx5u7du7nrrruoVasWTZs2Zfv27cyfPx9fX998Mfr7+3PttddSrVq1As9d\nRESkIjCn+1dtmR7YGFvQsc/072OpmH766SeuueYaUlNTnQ6l0nr33XeZNGlSkVbxOJf0mRcRkbKW\n87umWLM2mkmWMmet5YMPPsizFJmIiIhIeaYkuQxt377dewvfk4+Tr3fs2OF0eKXioosuKvD8ZsyY\n4e3TqFEjFi5cyGuvveZgpEVX2PfsdCtflKaivKciIiJSRCVYWAFUbiEiDtNnXkREyszx49C2LWbt\nWpVbiIiIiIgA8MwzUMBKTEWhmWQRcZQ+8yIiUib+7/9g4EBYvRoTElLsmeQqZRWXiIiIiIgj9uyB\n/v1h+nTIWeq0uDSTLCKO0mdeRERKlbVw661w0UXw0ktAyZaA00yyiIiIiJw/3nwTdu2Cjz46q2F0\n4V459/zzz9O7d2+nwxAREREp/9avh5Ej4f33wc/vrIZSklxMUVFRBAQE5Fm/dsiQIYwfP57Y2Fiy\nsrK8fRMTE2nTpg1ut/usjqnb+oqIiIicQUYG3HsvvPgiNG9+1sOdMUk2xkwyxuw2xqw5pf1hY8x6\nY8xPxpiXc7UPM8ZszNl2w1lHWM4YY/jkk09IS0vj8OHDpKWlMW7cOB566CFcLhcvvPACAFu2bCEh\nIYHJkyfj46O/RURERETK1LPPQlQU3HdfqQxXlOxtCtA5d4MxJg7oAsRaa2OBMTntFwA9gAuAPwFv\nmPNwGrSwCw4nTpxIYmIia9euZcCAAQwePJhWrVqdcbypU6cSFRVF7dq1eeGFF4iOjmbx4sUF9v3m\nm2/o0KEDLpeLyMhIpk6detqxT5w4wRNPPEFkZCT16tVj0KBBZGRkFO1ERURERCqCzz+HGTPg7beh\nlFLPMybJ1tpvgAOnND8IvGytzcrpsy+n/TZgprU2y1q7FdgItC2VSCuAmJgYhg0bRnx8PCkpKYwc\nOfKM+6xbt46HHnqIGTNmsGvXLg4dOsTOnTsL7JucnMxNN93EI488wr59+1i1ahWXXHLJacd/+umn\n2bRpE2vWrGHTpk2kpKQwatSoEp2fiIiISLmzfz/07QtTpkBYWKkNW9I6gBjgamPMcmPMl8aYNjnt\nDYDtufql5LSdV7p27UpISAgul4uQkBAmTZrk3daxY0dSU1Pp3r07fkUoGP/oo4+49dZbueKKK6hS\npcppE9gZM2Zw/fXX06NHD3x9fXG5XFx88cWnHf/tt9/mtddeo1atWtSoUYNnnnmGGTNmFP1kRURE\nRMora+H+++Guu+D660t16JIuAVcFcFlr2xtjLgdmA41LL6zTM8+XzjS6fa5ka7POmTOH+Pj4fO2Z\nmZkMHDiQhx9+mPHjx9O/f3+ioqJOO9bOnTuJiIjwvq5evTqhoaEF9t2+fTtNmjQpcpx79+7l2LFj\ntGnTxtvmdru1Jq2IiIicHyZPhs2bPaUWpaykSfJ24D8A1trvjTHZxphQPDPHjXL1a5jTVqCEhATv\n87i4OOLi4op08JImt6WlsCRz1KhRhIeHk5iYiL+/PwMGDGDhwoWnHatevXr8+uuv3tfHjx9n//79\nBfaNiIhgxYoVRY4zLCyMgIAAfv75Z+rVq1fk/URERETKvV9/hWeegaQkqFYtz6akpCSSkpLObnxr\n7RkfQBTwU67XA4Dnc57HAMk5z1sCKwE/IBrYRM5d/QoY0xaksPbyIioqyn7xxRf52letWmWDg4Pt\nli1brLXWHj9+3MbExNgpU6acdryff/7ZBgUF2WXLltkTJ07Yp556yvr5+XmPkZCQYHv37m2ttXbb\ntm02KCjIzp4922ZlZdn9+/fbVatWnXb8Rx991Pbo0cPu2bPHWmvtjh077GeffVbc0xYpM+X9My8i\nIuXQiRPWXnaZtePHF6l7zu+aIuW9Jx9FWQJuOrAUiDHGbDPG9AMmA42NMT8B04E+OVnvOmAWsA5Y\nAAzKCey80qVLlzzrJHfr1o3777+fZ599lujoaAD8/f2ZMGECTz31FHv37i10rJYtW/L6669z1113\nUb9+fYKCgqhTpw7VTvmLCDwzyQsWLGDMmDGEhITQunVr1qxZU8Cof3jllVdo2rQp7du3Jzg4mBtu\nuCHPzLWIiIhIhZOQAHXqwKBBZXYI41QOa4wpMH/Oube2AxGVD0ePHiU4OJhNmzYRGRnpdDgiZa6y\nf+ZFRKSYvvoK7r4bVq6E8PAi7ZLzu6ZYF7XpLhflwPz58zl+/DhHjx5l6NChXHzxxUqQRURERE51\n8CD07g0TJxY5QS4pJcnnwPTp072lGScfgYGBxMbGAp7VMurXr0/Dhg3ZvHkzM2fOLNb4F110Ub6x\ng4KCtNSbiIiInD+shQcegFtvhZtuKvPDqdxCRBylz7yIiBTJe+/Byy/DDz9A9erF2rUk5RZKkkXE\nUfrMi4jIGW3ZAu3aeW4/3apVsXdXTbKIiIiInF+ysqBXLxg+vEQJckkpSRYRERGR8uvvf4eaNeGR\nR87pYUt6xz0RERERkbK1dCn8+9/w44/gc27ndjWTLCIiIiLlT1qap8zizTehfv1zfnhduCcijtJn\nXkRECvTnP4O/P7z11lkPpQv3KqiPP/6YRo0aERQUxOrVq50OR0RERMRZM2fC8uXwz386FoKS5GKK\niooiICAgz007hgwZwvjx44mNjSUrK8vbNzExkTZt2uB2u0875pNPPskbb7xBWloarc7hVZsiIiIi\n5c62bTBkCEyfDjVqOBaGyi2KKTo6msmTJxMfH5+n3VrLNddcw7XXXktCQgJbtmzh0ksvZcmSJWdM\nfKtWrcqGDRto3LhxseNxu934nONCdpHSVN4/8yIicg5lZ8O113ruqPf006U2rMotzpHCkvuJEyeS\nmJjI2rVrGTBgAIMHDz5tgnzixAkCAwNxu91cfPHFNGvWDID169cTHx+Py+UiNjaWefPmeffp168f\ngwYN4uabbyYwMJCkpKTTjv/EE08QGRlJvXr1GDRoEBkZGSU/cREREZGy9OqrnlUsnnjC6UiUJJem\nmJgYhg0bRnx8PCkpKYwcOfK0/f38/Dh8+DDWWn766Sc2btxIVlYWt956KzfeeCN79+5l3Lhx9OzZ\nk40bN3r3mzFjBiNGjODw4cN07Nix0PGffvppNm3axJo1a9i0aRMpKSmMGjWq1M5XREREpNR8/z28\n9hpMnQq+vk5HU0GTZGNK51FCXbt2JSQkBJfLRUhICJMmTfJu69ixI6mpqXTv3h0/P78ij3lydnr5\n8uUcPXqUp59+mipVqhAfH88tt9zCjBkzvH1vu+022rdvD3DaY7z99tu89tpr1KpVixo1avDMM8/k\nGUdERESkXDhyBHr2hH/9CyIinI4GqKg3E3G4fnHOnDn5apIBMjMzGThwIA8//DDjx4+nf//+REVF\nFWvsnTt3EnHKD0dkZCQpKSne16duL8jevXs5duwYbdq08ba53W7VfoqIiEj589hj0KED3Hmn05F4\nVcwk2WGFJZqjRo0iPDycxMRE/P39GTBgAAsXLizW2PXr12f79u152rZt20bz5s29r00RZsHDwsII\nCAjg559/pl69esWKQUREROSc+c9/4MsvYeVKpyPJo2KWW5RDq1evZvz48UycOBGAhIQEkpOTeeed\nd4o1Trt27QgICODVV18lKyuLpKQk5s+fzz333FOscYwx3H///Tz66KPs3bsXgJSUlGIn7SIiIiJl\nJiUFHnwQpk2DwECno8lDSXIJdOnSJc86yd26deP+++/n2WefJTo6GgB/f38mTJjAU0895U1SC5N7\nZrhq1arMmzePBQsWEBYWxuDBg3nvvfe8K18UZRb5pFdeeYWmTZvSvn17goODueGGG/j1119LcMYi\nIiIipczt9txVb/BgyLnWqjzROski4ih95kVEKql//AM+/hiSkqBK2VYAl2SdZCXJIuIofeZFRCqh\nVavghhtgxQoo5iIHJaGbiZRT06dP95ZmnHwEBgYSGxt71mNfdNFF+cYNCgrSUm8iIiJSPh07Bvfe\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Let's grab the iJO1366 E. coli model, cobra's test module has a copy\n", "model = cobra.test.create_test_model(\"ecoli\")\n", "\n", "# Simulate anaerobic conditions by prevent oxygen uptake\n", "model.reactions.get_by_id('EX_o2_e').knock_out() \n", "\n", "# Optimize the model\n", "cobra.flux_analysis.optimize_minimal_flux(model)\n", "model.summary()\n", "\n", "# Let's consider one substrate and five products\n", "biomass_keys = ['Ec_biomass_iJO1366_core_53p95M']\n", "substrate_keys = ['EX_glc_e']\n", "product_keys = ['EX_for_e','EX_ac_e','EX_etoh_e','EX_succ_e']\n", "analyte_keys = biomass_keys+substrate_keys+product_keys\n", "# We'll use numpy to generate an arbitrary time vector\n", "\n", "# The initial conditions (mM) [biomass, substrate, \n", "# product1, product2, ..., product_n]\n", "y0 = [0.05, 100, 0, 0, 0, 0]\n", "t = np.linspace(0,16,8)\n", "\n", "# Returns a dictionary of the profiles\n", "from impact.helpers.synthetic_data import generate_data\n", "dFBA_profiles = generate_data(y0, t, model, \n", " biomass_keys, substrate_keys, \n", " product_keys, plot = True)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Now that we have a simulated 'two-stage' fermentation data, let's try to analyze it. First let's try to curve fit and pull parameters from the overall data" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# These time courses together form a single trial\n", "single_trial = impact.SingleTrial()\n", "for analyte in analyte_keys:\n", " # Instantiate the timecourse\n", " timecourse = impact.TimeCourse()\n", " \n", " # Define the trial identifier for the experiment\n", "# timecourse.trial_identifier.analyte_name = analyte\n", " timecourse.trial_identifier = impt.TrialIdentifier(strain=impt.Strain(nickname='teststrain'), analyte_name = analyte)\n", " \n", " if analyte in biomass_keys:\n", " timecourse.trial_identifier.analyte_type = 'biomass'\n", " elif analyte in substrate_keys:\n", " timecourse.trial_identifier.analyte_type = 'substrate'\n", " elif analyte in product_keys:\n", " timecourse.trial_identifier.analyte_type = 'product'\n", " else:\n", " raise Exception('unid analyte')\n", " \n", " timecourse.time_vector = t\n", " timecourse.data_vector = dFBA_profiles[analyte]\n", " single_trial.add_analyte_data(timecourse)\n", "single_trial.calculate()\n", "# # Add this to a replicate trial (even though there's one replicate)\n", "# replicate_trial = impact.ReplicateTrial()\n", "# replicate_trial.add_replicate(single_trial)\n", "\n", "# # Add this to the experiment\n", "# experiment = impact.Experiment(info = {'experiment_title' : 'test experiment'})\n", "# experiment.add_replicate_trial(replicate_trial)\n", "\n", "# import plotly.offline\n", "# plotly.offline.init_notebook_mode()\n", "# fileName = impact.printGenericTimeCourse_plotly(replicateTrialList=[replicate_trial], \n", "# titersToPlot=biomass_keys, output_type='image',)\n", "\n", "# from IPython.display import Image\n", "# Image(fileName)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# We can query the rates instead.\n", "for keys in [biomass_keys,substrate_keys,product_keys]:\n", "# plt.figure()\n", " data = []\n", " for analyte in keys:\n", " trace = Scatter(x=t,\n", " y=single_trial.analyte_dict[analyte].gradient,\n", " name = analyte)\n", " data.append(trace)\n", " fig = Figure(data=data,\n", " layout=Layout(title=\"Calculated rates\", \n", " yaxis = {'title':'Production rate [mmol / h]'})\n", " )\n", " iplot(fig)\n", "# plt.plot(t,single_trial.analyte_dict[analyte].gradient)\n", "# plt.legend(keys)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Specific Productivity\n", "The specific productivity is the rate, normalized to biomass concentration. This is the value used by dFBA to calculate the initial growth curves.\n", "\n", "$$ \\frac{dX}{dt} = \\mu X $$\n", "\n", "$$ \\frac{dP}{dt} = \\dot{P} X $$\n", "\n", "Here we find the median specific productivity and compare it to the FBA solutions" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "exchange_keys = biomass_keys + substrate_keys + product_keys\n", "\n", "median_specific_productivity = {}\n", "model_specific_productivity = {}\n", "for analyte in exchange_keys:\n", " model_specific_productivity[analyte] = model.solution.x_dict[analyte]\n", " median_specific_productivity[analyte] = np.median(single_trial.analyte_dict[analyte].specific_productivity.data)\n", "\n", "trace = Bar(x=[analyte for analyte in median_specific_productivity],\n", " y=[median_specific_productivity[analyte] for analyte in median_specific_productivity],\n", " name = 'Calculated')\n", "trace2 = Bar(x=[analyte for analyte in model_specific_productivity],\n", " y=[model_specific_productivity[analyte] for analyte in model_specific_productivity],\n", " name = 'Model')\n", "data = [trace, trace2]\n", "fig = Figure(data=data,\n", " layout=Layout(title=\"Calculated vs Model Specific Productivity\", \n", " yaxis = {'title':'Specific Productivity [mmol / (gdw h)]'})\n", " )\n", "iplot(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we can see that the specific productivities match those calculated in the COBRA model (which is expected since that's where the generated data came from). For cells in steady-state, this should be a constant." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Metabolic Model Integration\n", "With specific productivities, metabolic model integration becomes straightforward. We can constrain the export fluxes based on the data, and solve the missing fluxes. Since this is model-generated data, this will close the mass balance entirely.\n", "\n", "For experimental data, this offers a prediction to help close the balance." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ec_biomass_iJO1366_core_53p95M 0.253954350914\n", "EX_glc_e -10.5156403117\n", "EX_for_e 18.1745176554\n", "EX_ac_e 8.63085041752\n", "EX_etoh_e 8.49418640731\n", "EX_succ_e 0.0841767249714\n", "\n", "\n", "\n", "\n", "IN FLUXES OUT FLUXES OBJECTIVES \n", "glc__D_e -10.52 h_e 29.31 Ec_biomass_iJO1366_core_53p95M 0.254\n", "nh4_e -2.74 for_e 18.17 \n", "h2o_e -1.80 ac_e 8.63 \n", "pi_e -0.24 etoh_e 8.49 \n", "co2_e -0.09 succ_e 0.08 \n", "so4_e -0.06 5drib_c 0.00 \n", "k_e -0.05 glyclt_e 0.00 \n", "mg2_e -0.00 mththf_c 0.00 \n", "fe2_e -0.00 4crsol_c 0.00 \n", "fe3_e -0.00 meoh_e 0.00 \n", "ca2_e -0.00 amob_c 0.00 \n", "cl_e -0.00 \n", "cu2_e -0.00 \n", "mn2_e -0.00 \n", "zn2_e -0.00 \n", "ni2_e -0.00 \n", "mobd_e -0.00 \n", "cobalt2_e -0.00 \n" ] } ], "source": [ "# Let's take the model and add bounds for the known reactions\n", "for analyte in analyte_keys:\n", " with_noise = np.median(single_trial.analyte_dict[analyte].specific_productivity.data)\n", " print(analyte,' ',with_noise)\n", " model.reactions.get_by_id(analyte).lower_bound = with_noise\n", " model.reactions.get_by_id(analyte).upper_bound = with_noise\n", "print('\\n\\n\\n')\n", "solution = model.optimize()\n", "model.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## dFBA Batch Integration\n", "We can integrate the experimental data across the course of the batch, and solve an FBA for each point to account for any misisng metabolites and get a dynamic flux map for the batch." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# dFBA based batch simulation\n", "# import copy\n", "# model2 = copy.deepcopy(model)\n", "# impact.helpers.synthetic_data.dynamic_model_integration(t, y0, model2, single_trial, biomass_keys, substrate_keys, product_keys, extra_points_multiplier = 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Carbon Balance\n", "From here, the carbon balance is straight forward. The export fluxes match experimental data, the remaining fluxes are estimated, and we can complete the carbon balance. Units are import here, and should all be converted a standard mass unit (g/L) to complete the balance." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'EX_ac_e': 509.60010466932226, 'EX_for_e': 818.1702580800724, 'EX_etoh_e': 391.31391685379504, 'Ec_biomass_iJO1366_core_53p95M': 253.95435091418017, 'EX_glc_e': -1894.4544341121223, 'EX_succ_e': 9.770574289158397}\n", "88.35477069440606\n", "\n", "The mass balance is 104.663864% closed\n", "{'EX_ac_e': 509.60010466932226, 'EX_for_e': 818.1702580800724, 'EX_etoh_e': 391.31391685379504, 'Ec_biomass_iJO1366_core_53p95M': 253.95435091418017, 'EX_glc_e': -1894.4544341121223, 'EX_succ_e': 9.770574289158397}\n", "-0.04663863595949483\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Convert mmol/gdw - hr to g / gdw - hr\n", "\n", "# Create a dictionary for the mapping of flux reactions to metabolite names to get the molar mass\n", "metabolite_export_reaction_dict = {\n", " 'EX_for_e':'for_e',\n", " 'EX_ac_e':'ac_e',\n", " 'EX_etoh_e':'etoh_e',\n", " 'EX_glc_e':'glc__D_e',\n", " 'EX_succ_e':'succ_e'\n", "}\n", "\n", "mass_flux = {}\n", "for analyte in product_keys+substrate_keys:\n", " mass_flux[analyte] = model.solution.x_dict[analyte] \\\n", " * model.metabolites.get_by_id(metabolite_export_reaction_dict[analyte]).formula_weight\n", "mass_flux[biomass_keys[0]] = model.solution.x_dict[biomass_keys[0]]*1000\n", "print(mass_flux)\n", "\n", "# The balance is the sum of all metabolites, the uptake is already negative.\n", "balance = sum(mass_flux[metabolite] for metabolite in mass_flux)\n", "print(balance)\n", "# The closure is the total substrate accounted for\n", "percent_closure = balance/mass_flux['EX_glc_e']\n", "\n", "print('\\nThe mass balance is %f%% closed' % ((1-percent_closure)*100))\n", "print(mass_flux)\n", "\n", "# Two situations\n", "# 1: balance is > 100% (must be some unaccounted substrate)\n", "labels = [analyte.split('_')[1] for analyte in mass_flux]\n", "print(percent_closure)\n", "if percent_closure < 0:\n", " fig = {\n", " 'data': [{'labels': labels + ['Unaccounted substrate'],\n", " 'values': [mass_flux[metabolite] for metabolite in mass_flux]+[balance],\n", " 'type': 'pie'}],\n", " 'layout': {'title': 'Mass balance'}\n", " }\n", "# 2: balance is < 100% (must be some unaccounted product)\n", "else:\n", " fig = {\n", " 'data': [{'labels': labels + ['Missing product'],\n", " 'values': [mass_flux[metabolite] for metabolite in mass_flux]+[abs(balance)],\n", " 'type': 'pie'}],\n", " 'layout': {'title': 'Mass balance'}\n", " }\n", "iplot(fig)\n", "\n", "analyte_keys = substrate_keys + biomass_keys + product_keys\n", "\n", "# Calculate the waterfall for the products and biomass\n", "substrate_consuming_keys = biomass_keys+product_keys\n", "running_total = balance\n", "base = []\n", "for i, key in enumerate(analyte_keys):\n", " if i == 0:\n", " running_total += -mass_flux[key]\n", " base.append(0)\n", " else:\n", " base.append(running_total)\n", " running_total += -mass_flux[key]\n", " \n", "\n", "base_trace = Bar(x=analyte_keys,\n", " y=base,\n", " marker=dict(color='rgba(1,1,1, 0.0)',))\n", "\n", "substrate_trace = Bar(x=[substrate_keys[0]],\n", " y=[-mass_flux[substrate_keys[0]]],\n", " marker=dict(color='rgba(55, 128, 191, 0.7)',\n", " line=dict(color='rgba(55, 128, 191, 1.0)',\n", " width=2,)))\n", "\n", "\n", "biomass_trace = Bar(x=[biomass_keys[0]],\n", " y=[-mass_flux[biomass_keys[0]]],\n", " marker=dict(color='rgba(50, 171, 96, 0.7)',\n", " line=dict(color='rgba(50, 171, 96, 1.0)',\n", " width=2,)))\n", "\n", "products_trace = Bar(x=product_keys,\n", " y=[-mass_flux[metabolite] for metabolite in product_keys],\n", " marker=dict(color='rgba(219, 64, 82, 0.7)',\n", " line=dict(color='rgba(219, 64, 82, 1.0)',\n", " width=2,)),\n", " )\n", "\n", "balance_base_trace = Bar(x=['Balance'],\n", " y=[base[1]-balance],\n", " marker=dict(color='rgba(1,1,1, 0.0)',))\n", "\n", "balance_trace = Bar(x=['Balance'],\n", " y=[balance],\n", " marker=dict(color='rgba(0, 0, 0, 0.7)',\n", " line=dict(color='rgba(0, 0, 0, 1.0)',\n", " width=2,)),\n", " )\n", "\n", "data = [substrate_trace, balance_base_trace, base_trace, balance_trace, biomass_trace,products_trace]\n", "layout = Layout(barmode='stack',\n", "# paper_bgcolor='rgba(245, 246, 249, 1)',\n", "# plot_bgcolor='rgba(245, 246, 249, 1)',\n", " yaxis={'title': 'Exchange rate (mmol/(gdw h))'},\n", " showlegend=False\n", " )\n", "fig = Figure(data=data,layout=layout)\n", "iplot(fig)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Flux mapping with escher\n", "More detail is provided in the escher documentation: http://nbviewer.jupyter.org/github/zakandrewking/escher/blob/master/docs/notebooks/COBRApy%20and%20Escher.ipynb" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import escher\n", "import json\n", "from IPython.display import HTML" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "
\n", "\n", " \n" ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b = escher.Builder(map_name='iJO1366.Central metabolism',\n", " reaction_data=solution.x_dict,\n", " # color and size according to the absolute value\n", " reaction_styles=['color', 'size', 'abs', 'text'],\n", " # change the default colors\n", " reaction_scale=[{'type': 'min', 'color': '#cccccc', 'size': 4},\n", " {'type': 'mean', 'color': '#0000dd', 'size': 20},\n", " {'type': 'max', 'color': '#ff0000', 'size': 40}],\n", " # only show the primary metabolites\n", " hide_secondary_metabolites=True)\n", "b.display_in_notebook()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "celltoolbar": "Raw Cell Format", "kernelspec": { "display_name": "Python [default]", "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.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }