diff --git a/Data/TAModel/.~lock.Balakrishnan-etal_2023_RNAseq_tableS3.xlsx# b/Data/TAModel/.~lock.Balakrishnan-etal_2023_RNAseq_tableS3.xlsx# deleted file mode 100644 index 7298920..0000000 --- a/Data/TAModel/.~lock.Balakrishnan-etal_2023_RNAseq_tableS3.xlsx# +++ /dev/null @@ -1 +0,0 @@ -,samiralvdb,QPE-IAMBPC156,16.02.2024 15:11,file:///home/samiralvdb/.config/libreoffice/4; \ No newline at end of file diff --git a/Data/TAModel/Sinha-etal_2021_transcript-data.xlsx b/Data/TAModel/Sinha-etal_2021_transcript-data.xlsx index 5acbbad..d8191d1 100644 Binary files a/Data/TAModel/Sinha-etal_2021_transcript-data.xlsx and b/Data/TAModel/Sinha-etal_2021_transcript-data.xlsx differ diff --git a/Data/proteinAllocationModel_iML1515_EnzymaticData_230503.xls b/Data/proteinAllocationModel_iML1515_EnzymaticData_230503.xls index cdbf7d8..52887d5 100644 Binary files a/Data/proteinAllocationModel_iML1515_EnzymaticData_230503.xls and b/Data/proteinAllocationModel_iML1515_EnzymaticData_230503.xls differ diff --git a/Scripts/.ipynb_checkpoints/Translation_parameters_estimation-checkpoint.ipynb b/Scripts/.ipynb_checkpoints/Translation_parameters_estimation-checkpoint.ipynb index fb0bf04..72dfb51 100644 --- a/Scripts/.ipynb_checkpoints/Translation_parameters_estimation-checkpoint.ipynb +++ b/Scripts/.ipynb_checkpoints/Translation_parameters_estimation-checkpoint.ipynb @@ -135,13 +135,13 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 32, "id": "a62e2d06", "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAARpElEQVR4nO3de6zkZX3H8fdHqFA1RSgHSlnMwWZjRXuRnFBbE0OKF1osa1KJC9VsLM3GBq29RXbrH+w/pJv0qk29bIVKUhdKqA2rVCvZlpCm3g5eKhcRlC2srOxRU9vYQsV++8eZXWbPztlz5nZmznPer+Rk5vf85jfzfebymec885vfpKqQJLXlWZMuQJI0eoa7JDXIcJekBhnuktQgw12SGmS4S1KDTp50AQBnnnlmzc7OTroMSVpX7rnnnm9V1UyvdVMR7rOzs8zPz0+6DElaV5L8+3LrnJaRpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwlzQxb/zAp3jjBz416TImZpz9N9wlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBK4Z7khuTHE5yb491v5+kkpzZ1bYzycNJHkzy2lEXLEla2WpG7h8CLl3amOQ84NXAo11tFwBbgZd0tnlvkpNGUqnWndkddzC7445JlyFtSCuGe1XdDXynx6o/A94JVFfbFuCWqnqqqh4BHgYuGkWhkqTVG2jOPcnlwDeq6ktLVp0LPNa1fLDTJklaQyf3u0GS5wDvAl7Ta3WPturRRpLtwHaAF7zgBf2WIUk6gUFG7j8BnA98KckBYBPw+SQ/xuJI/byuy24CHu91JVW1p6rmqmpuZmZmgDIkScvpO9yr6stVdVZVzVbVLIuBfmFVfRPYB2xNckqS84HNwGdHWrGa4Qeu0visZlfIm4FPAS9KcjDJ1ctdtqruA24F7gc+AVxTVT8YVbGSpNVZcc69qq5cYf3skuXrgeuHK0uSNIy+P1CVTmjXaV0LeydWhrTRefgBSWqQ4S5JDTLcJalBhrskNchwl6QGubeMxq77i0oHdl82wUqkjcNw18QZ/tLoOS0jSQ1y5K6xO3DqVV1L351YHdJG4shdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CC/xKQ15Q9iS2tjNT+QfWOSw0nu7Wr7oyRfSfJvSf4+yfO71u1M8nCSB5O8dkx1S5JOYDXTMh8CLl3Sdifw0qr6aeCrwE6AJBcAW4GXdLZ5b5KTRlatJGlVVgz3qrob+M6Stk9W1dOdxU8DmzrntwC3VNVTVfUI8DBw0QjrlSStwig+UP114OOd8+cCj3WtO9hpO06S7Unmk8wvLCyMoAxJ0hFDhXuSdwFPAx8+0tTjYtVr26raU1VzVTU3MzMzTBmSpCUG3lsmyTbgdcAlVXUkwA8C53VdbBPw+ODlaersOm2Zdg/lK02TgUbuSS4FrgUur6r/7lq1D9ia5JQk5wObgc8OX6YkqR8rjtyT3AxcDJyZ5CBwHYt7x5wC3JkE4NNV9daqui/JrcD9LE7XXFNVPxhX8ZKk3lYM96q6skfzDSe4/PXA9cMUJUkajt9Q1VTxx7Kl0fDYMpLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIa5OEHtKYOnHrV0fOzT+6dYCVS2wx3rc5yx3GXNJWclpGkBhnuktQgp2U0Nt3z65LWliN3SWqQ4S5JDXJaRqPh3jTSVFlx5J7kxiSHk9zb1XZGkjuTPNQ5Pb1r3c4kDyd5MMlrx1W4JGl5q5mW+RBw6ZK2HcD+qtoM7O8sk+QCYCvwks42701y0siqlSStyorhXlV3A99Z0rwFuKlz/ibg9V3tt1TVU1X1CPAwcNFoSpUkrdagH6ieXVWHADqnZ3XazwUe67rcwU7bcZJsTzKfZH5hYWHAMiRJvYx6b5n0aKteF6yqPVU1V1VzMzMzIy5Dkja2QcP9iSTnAHROD3faDwLndV1uE/D44OVJkgYxaLjvA7Z1zm8Dbu9q35rklCTnA5uBzw5XoiSpXyvu557kZuBi4MwkB4HrgN3ArUmuBh4FrgCoqvuS3ArcDzwNXFNVPxhT7ZKkZawY7lV15TKrLlnm8tcD1w9TlCRpOB5+QJIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcNfUmt1xB7M77ph0GdK6ZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4a2IOnHoVB069atJlSE0y3CWpQYa7JDVoqHBP8jtJ7ktyb5Kbk5ya5IwkdyZ5qHN6+qiKlSStzsDhnuRc4LeAuap6KXASsBXYAeyvqs3A/s6yJGkNrfgD2avY/oeTfB94DvA4sBO4uLP+JuAu4Nohb0eTsOu0SVcgaUADj9yr6hvAHwOPAoeA71bVJ4Gzq+pQ5zKHgLNGUagkafWGmZY5HdgCnA/8OPDcJG/qY/vtSeaTzC8sLAxahiSph2E+UH0V8EhVLVTV94GPAL8APJHkHIDO6eFeG1fVnqqaq6q5mZmZIcqQJC01zJz7o8DLkzwH+B/gEmAe+B6wDdjdOb192CK1sXX/GtOB3ZdNsBJp/Rg43KvqM0luAz4PPA18AdgDPA+4NcnVLL4BXDGKQiVJqzfU3jJVdR1w3ZLmp1gcxUur0n0Igtkn906wEqkdw+4Kqda4+6PUBA8/IEkNMtwlqUGGuyQ1yHCXpAYZ7pLUIPeW0VRxt0hpNBy5S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBQ4V7kucnuS3JV5I8kOTnk5yR5M4kD3VOTx9VsRqRXaf5c3pS44Ydub8b+ERV/STwM8ADwA5gf1VtBvZ3liVJa2jgcE/yI8ArgRsAqup/q+o/gC3ATZ2L3QS8frgSJUn9Gmbk/kJgAfjrJF9I8sEkzwXOrqpDAJ3Ts3ptnGR7kvkk8wsLC0OUoY1kdscdzO64Y9JlSFNvmHA/GbgQeF9VvQz4Hn1MwVTVnqqaq6q5mZmZIcqQJC01zC8xHQQOVtVnOsu3sRjuTyQ5p6oOJTkHODxskVoDfsAqNWXgkXtVfRN4LMmLOk2XAPcD+4BtnbZtwO1DVShJ6tuwv6H6duDDSZ4NfB14C4tvGLcmuRp4FLhiyNuQJPVpqHCvqi8Ccz1WXTLM9UqShuM3VCWpQYa7JDXIcJekBhnuktSgYfeWkSai+1uqB3ZfNsFKpOnkyF2SGmS4S1KDDHdJapBz7pp6B0696uj52Sf3TrASaf0w3DW1ukNdUn+clpGkBjly38g8zK/ULEfuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUFDh3uSk5J8IcnHOstnJLkzyUOd09OHL1OS1I9RjNzfATzQtbwD2F9Vm4H9nWVJ0hoa6ktMSTYBlwHXA7/bad4CXNw5fxNwF3DtMLcjnYjHdpeON+zI/c+BdwL/19V2dlUdAuicnjXkbUiS+jRwuCd5HXC4qu4ZcPvtSeaTzC8sLAxahiSph2FG7q8ALk9yALgF+MUkfwM8keQcgM7p4V4bV9WeqpqrqrmZmZkhypAkLTVwuFfVzqraVFWzwFbgn6rqTcA+YFvnYtuA24euUpLUl3Hs574beHWSh4BXd5YlSWtoJIf8raq7WNwrhqr6NnDJKK5XkjQYv6EqSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNGsk3VKW1duDUq46en31y7wQrkaaTI3dJapAj941i12mTrkDSGnLkLkkNcuSudaV7rr2XI7+n6m+paqMz3Fu2QaZi/HBVOp7TMpLUIMNdkhpkuEtSgwx3SWrQwOGe5Lwk/5zkgST3JXlHp/2MJHcmeahzevroypUkrcYwI/engd+rqhcDLweuSXIBsAPYX1Wbgf2dZUnSGhp4V8iqOgQc6pz/ryQPAOcCW4CLOxe7CbgLuHaoKtWfDbILpKTljWTOPcks8DLgM8DZneA/8gZw1jLbbE8yn2R+YWFhFGVIkjqGDvckzwP+DvjtqvrP1W5XVXuqaq6q5mZmZoYtQ5LUZahwT/JDLAb7h6vqI53mJ5Kc01l/DnB4uBJ1nF2nOfUi6YSG2VsmwA3AA1X1p12r9gHbOue3AbcPXp4kaRDDHFvmFcCbgS8n+WKn7Q+A3cCtSa4GHgWuGKpCSVLfhtlb5l+ALLP6kkGvV5I0PI8KuZ51z7vv+u7k6pgizxwh0vtDG5vhriYdOa47eGx3bUweW0aSGuTIXU069hebnKLRxmO4t8L93pflFI02IqdlJKlBhrskNchwl6QGOec+jdx/faT8cFUbkSN3SWqQI/f1wr1hRuLInjPuNaPWGe7aUI5O0ezqauwx9eXuk1rvDPdxGGTOfLmRuSN2SQNwzl2SGuTIfdIcmUsaA8N9ErsdGuhT5eiHrMfsMrn3+PXOvWsd2bjh3itgxxD0x3wwd0x4SNL4OOcuSQ3auCP3QRwZ2S8zqn/m3/tn2hytT79ej1F32+yTe49b766SmnZjC/cklwLvBk4CPlhVu8d1W0eNclpltfPiXZfrDnW140jQz+7Ye1zboh7Ptc7zovuNYeg3gdUOLjbwm41vus8Yy7RMkpOAvwR+CbgAuDLJBeO4LUnS8cY1cr8IeLiqvg6Q5BZgC3D/WG7tBB+OHjNyGtUUiXu7bEgrPn96PC+O2WbXM2ePPC+PXf/MiLz3HjzHrlvutrr/wzi6rnsUu8J/uCvuBNDrP4eu61ypb7307K8HzRtKqmr0V5q8Abi0qn6js/xm4Oeq6m1dl9kObO8svgh4EDiNZ/7HPXL+TOBbA5bSfX39rO/VvrStV63d57vbBu3DSvWf6DKj7MM4H4MTXWalPizXn2l5Hp2oxl7LK51fr6+F7vPr/bUA09WH51fVTM9rqqqR/wFXsDjPfmT5zcBfrGK7PUvPA/ND1LFnkPW92pe29ap1Sd3dbQP1YaX616oP43wMhunDcv2ZlufRSvf5ah6DSfdhFM+jUfRhWl4L09yHpX/j2hXyIHBe1/Im4PFVbPfRZc4PaqXrWG59r/albcvV+tEebYNazXVs5D4s159peR71WtfvY7Ca21+NSb4WVnP7K/G10Of1jWta5mTgq8AlwDeAzwFXVdV9A1zXfFXNjbjENbXe+7De6wf7MC3sw9oZyweqVfV0krcB/8jirpA3DhLsHXtGV9nErPc+rPf6wT5MC/uwRsYycpckTZaHH5CkBhnuktQgw12SGrSuwz3Ji5O8P8ltSX5z0vX0K8nrk/xVktuTvGbS9QwiyQuT3JDktknX0o8kz01yU+f+/7VJ1zOI9Xrfd1vvr4GpzqBBdsYfxR9wI3AYuHdJ+6Usflv1YWDHKq/rWcAN67j+09e6/jH04bZJPZcG6Q+LX6z7lc75v5107cM8JtNw34+gDxN5DYyw/jXPoBX7McE78JXAhd13IIu7TX4NeCHwbOBLLB547KeAjy35O6uzzeXAv7K4H/26q7+z3Z8AF67Xx6Cz3cQDps/+7AR+tnOZvZOufZA+TNN9P4I+TOQ1MIr6J5VBK/1N7HjuVXV3ktklzT0POFZVfwi8bpnr2QfsS3IH3b+NNmajqD9JgN3Ax6vq82Mu+TijegymRT/9YfFb1JuALzJF05N99mE8B+IbUj99SPIAE3wN9NLvYzCpDFrJ1DypO84FHutaPthp6ynJxUnek+QDwD+Mu7hV6Kt+4O3Aq4A3JHnrOAvrQ7+PwY8meT/wsiQ7x13cAJbrz0eAX03yPkbz1fJx6tmHdXDfd1vucZjG10Avyz0G05ZBR03bLzGlR9uy37KqqruAu8ZVzAD6rf89wHvGV85A+u3Dt4FpflH27E9VfQ94y1oXM6Dl+jDt93235fowja+BXpar/y6mK4OOmraR+6AHHJsW671+aKMP3Vroj32YvHVX/7SF++eAzUnOT/JsYCuwb8I19WO91w9t9KFbC/2xD5O3/uqf4CfSNwOHgO+z+K54daf9l1k8ouTXgHdN+hPnVutvpQ+t9cc+TP5vvdd/5M8Dh0lSg6ZtWkaSNAKGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalB/w+NHJiSViJLYAAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAbM0lEQVR4nO3df7hcVX3v8feHoPwoGkACjYR4gEYxWEU8F/zB9QmiFS9I8BbKD+slCM3jjwJqrQSxJY+V21yoraLXH7nyI1UCIlKI0HJLU/JQRcAAgYQAkgsBAikJIigggYTv/WOvs7NzmMnsc87s2TNzPq/nmWf2XnvP7O86c875zlp777UUEZiZmQFsU3cAZmbWPZwUzMws56RgZmY5JwUzM8s5KZiZWc5JwczMctvWHcBY7LbbbjEwMFB3GGZmPeX2229/MiImNdrW00lhYGCApUuX1h2GmVlPkfRws23uPjIzs5yTgpmZ5ZwUzMws56RgZmY5JwUzM8s5KZiZWc5JwczMcpUlBUkXSVonaUWDbZ+XFJJ2K5SdJWmVpPslfbCquMzMrLkqb167BPgm8I/FQkl7AR8AHimUTQeOB/YHXg/8m6Q3RsSmCuOzPjUw57p8efW8I2qMxKz3VNZSiIibgKcabPoH4AtAccq3mcDlEbEhIh4CVgEHVRWbmZk11tFzCpKOAh6LiLuGbdoTeLSwviaVmZlZB3Vs7CNJOwJnA3/UaHODsoaTR0uaDcwGmDp1atviMzOzzrYU9gX2Bu6StBqYAtwh6ffJWgZ7FfadAjze6E0iYn5EDEbE4KRJDQf5MzOzUepYUoiI5RGxe0QMRMQAWSI4MCL+E1gEHC9pO0l7A9OA2zoVm5mZZSrrPpJ0GTAD2E3SGuCciLiw0b4RcY+kK4CVwEbg077yyKrkK5TMGqssKUTECS22DwxbPxc4t6p4zMysNd/RbGZmuZ6eec0sN3diYWVhbWGY9Tq3FMzMLOekYGZmOScFMzPLOSmYmVnOJ5qtr/l+BLORcUvBzMxybinYuOfWhNlmTgrW11Zvf2Jh7Zna4jDrFe4+MjOznJOCmZnlnBTMzCznpGBmZjknBTMzyzkpmJlZzknBzMxyTgpmZpZzUjAzs5yTgpmZ5TzMhY0bxTGOzKyxyloKki6StE7SikLZ+ZLuk3S3pH+StHNh21mSVkm6X9IHq4rLzMyaq7L76BLg8GFlNwBviYi3Ar8EzgKQNB04Htg/veZbkiZUGJuZmTVQWVKIiJuAp4aV/WtEbEyrtwBT0vJM4PKI2BARDwGrgIOqis3MzBqr80Tzx4F/Sct7Ao8Wtq1JZa8gabakpZKWrl+/vuIQzczGl1pONEs6G9gIXDpU1GC3aPTaiJgPzAcYHBxsuI/1mbkTm5R7fgSzdut4UpB0EnAkcFhEDP1TXwPsVdhtCvB4p2MzMxvvOtp9JOlw4EzgqIh4vrBpEXC8pO0k7Q1MA27rZGxmZlZhS0HSZcAMYDdJa4BzyK422g64QRLALRHxiYi4R9IVwEqybqVPR8SmqmIzM7PGKksKEXFCg+ILt7L/ucC5VcVjZmat+Y5ms4Lhdz2vnndETZGY1cNjH5mZWc5JwczMck4KZmaWc1IwM7Ock4KZmeWcFMzMLOekYGZmOScFMzPLOSmYmVnOScHMzHIe5sLGjdXbn5gvD7ywsMZIzLqXWwpmZpZzS8G6U7PZ1sysUm4pmJlZzknBzMxy7j6yvlM8oWxmI+OWgpmZ5ZwUzMws17L7SNK+wJqI2CBpBvBW4B8j4ulqQzNrwVcombVdmZbCj4FNkv4AuBDYG2h554+kiyStk7SiULarpBskPZCedylsO0vSKkn3S/rgKOpiZmZjVCYpvBwRG4GPAF+LiM8Ck0u87hLg8GFlc4DFETENWJzWkTQdOB7YP73mW5ImlKqBmZm1TZmk8JKkE4CTgGtT2atavSgibgKeGlY8E1iQlhcARxfKL4+IDRHxELAKOKhEbGZm1kZlksLJwLuAcyPiIUl7Az8Y5fH2iIi1AOl591S+J/BoYb81qewVJM2WtFTS0vXr148yDDMza6RlUoiIlcCZwB1p/aGImNfmONTo0E3imR8RgxExOGnSpDaHYWY2vrVMCpI+DCwDrk/rB0haNMrjPSFpcnqfycC6VL4G2Kuw3xTg8VEew8zMRqlM99Fcsv79pwEiYhnZFUijsYjs3ATp+ZpC+fGStkvdU9OA20Z5DDMzG6Uyw1xsjIhnpC16eBp27RRJugyYAewmaQ1wDjAPuELSKcAjwLEAEXGPpCuAlcBG4NMRsWkkFTEzs7ErkxRWSDoRmCBpGnA6cHOrF0XECU02HdZk/3OBc0vEY2ZmFSnTfXQa2f0DG4DLgN8An6kwJjMzq0nLlkJEPA+cnR5mZtbHyox99Ebg88BAcf+IeF91YZmZWR3KnFP4EfAd4HuAT/6amfWxslcffbvySMzMrHZlTjT/RNKnJE1Oo5zuKmnXyiMzM7OOK9NSGLrZ7C8LZQHs0/5wzMysTmWuPhrt3ctmPW9gznX58up5R9QYiVlnlBn7aEdJX5I0P61Pk3Rk9aGZmVmnlTmncDHwIvDutL4G+EplEZmZWW3KJIV9I+I84CWAiPgdjYe6NjOzHlcmKbwoaQfSIHiS9iUb8sLMzPpMmauPziGbS2EvSZcC7wFmVRmUmZnVo8zVRzdIugN4J1m30RkR8WTlkZmZWceVGfvowLS4Nj1PlTQReDgiNlYWmZmZdVyZ7qNvAQcCd5O1FN6Sll8n6RMR8a8VxmdmZh1U5kTzauDtETEYEe8A3g6sAN4PnFdhbGaVWb39ifnDzDYrkxT2i4h7hlYiYiVZkniwurDMzKwOZbqP7pf0beDytH4c8EtJ25HuXTAzs/5QpqUwC1hFNgXnZ4EHU9lLwKEVxWVmZjUoc0nq74Cvpsdwz47moJI+C5xKdkPccuBkYEfgh2QzvK0G/iQifj2a9zczs9Ep01JoK0l7AqcDgxHxFmACcDwwB1gcEdOAxWndzMw6qMw5haqOu4Okl8haCI8DZwEz0vYFwBLgzDqCs5rMnVh3BGbjXtOWgqTvp+cz2nnAiHgM+DvgEbIb4p5J9zrsERFr0z5rgd2bxDVb0lJJS9evX9/O0MzMxr2tdR+9Q9IbgI9L2qU4FedYpuOUtAswE9gbeD3we5L+tOzrI2J+umdicNKkSaMNw8zMGtha99F3yAbC2we4nS2Hyx7LdJzvBx6KiPUAkq4im6vhCUmTI2KtpMnAulG+v5mZjVLTpBARFwAXSPp2RHyyjcd8BHinpB2B3wGHAUuB58jmg56Xnq9p4zHNxsxTc9p4UOaS1E9KehvwX1PRTRFx92gPGBG3SroSuAPYCNwJzAd2Aq6QdApZ4jh2tMcwM7PRKTNK6unAbOCqVHSppPkR8Y3RHjQiziGbp6FoA1mrwayjiuMfDbywsMZIzOpX5pLUU4GDI+I5AEn/C/g5MOqkYJbzZahmXaXMzWsCNhXWN+E5ms3M+lKZlsLFwK2S/imtHw1cWFlEZmZWmzInmv9e0hLgELIWwskRcWfVgZmZWeeVGuYiIu4gu1rIzMz6WMcHxDMzs+5V14B4Zl1p+PScvkTVxputthQkTZD0b50KxszM6rXVpBARm4DnJflicjOzcaBM99ELwHJJN5CNTwRARJxeWVRmZlaLMknhuvQwM7M+V+Y+hQWSdgCmRsT9HYjJzMxq0vKSVEkfBpaRza2ApAMkLao4LjMzq0GZ+xTmAgcBTwNExDKyWdPMzKzPlEkKGyPimWFlUUUwZmZWrzInmldIOhGYIGkacDpwc7VhmZlZHcq0FE4D9iebBOcy4DfAZyqMyczMalLm6qPngbPT5DoREb+tPiwzM6tDmauP/ouk5cDdZDex3SXpHdWHZmZmnVbmnMKFwKci4j8AJB1CNvHOW6sMzMzMOq/MOYXfDiUEgIj4KTCmLiRJO0u6UtJ9ku6V9C5Ju0q6QdID6XmXsRzDzMxGrmlLQdKBafE2Sd8lO8kcwHHAkjEe9+vA9RFxjKRXAzsCXwQWR8Q8SXOAOcCZYzyO1WluYRzFucOvajazbrS17qOvDls/p7A86vsUJL0WeC8wCyAiXgRelDQTmJF2W0CWeJwUzMw6qGlSiIhDKzrmPsB64GJJbwNuB84A9oiItenYayXt3ujFkmYDswGmTp1aUYhmWzcwZ/MYkavnHVFjJGbt1fJEs6Sdgf8BDBT3H8PQ2dsCBwKnRcStkr5O1lVUSkTMB+YDDA4O+s5qM7M2KnP10T8DtwDLgZfbcMw1wJqIuDWtX0mWFJ6QNDm1EiYD69pwLOtGcz1nk1m3KpMUto+Iz7XrgBHxn5IelfSmNBT3YcDK9DgJmJeer2nXMc3MrJwySeH7kv4MuJZsqAsAIuKpMRz3NODSdOXRg8DJZJfHXiHpFOAR4NgxvL+ZmY1CmaTwInA+cDabrzoKshPGo5KG3x5ssOmw0b6nmZmNXZmk8DngDyLiyaqDMTOzepW5o/ke4PmqAzEzs/qVaSlsApZJupEtzymM9pJUMzPrUmWSwtXpYWZmfa7MfAoLOhGImZnVr8wdzQ/RYKyjiBj11Udm/cRDXlg/KdN9VLx0dHuy+wd2rSYcMzOrU8urjyLiV4XHYxHxNeB91YdmZmadVqb76MDC6jZkLYfXVBaRmZnVpkz3UXFehY3AauBPKonGrIut3v7EfHnghYU1RmJWnTJXH1U1r4KZmXWZMt1H2wF/zCvnU/hydWGZdYdi68BsPCjTfXQN8AzZDGkbWuxr1pjnUDDrCWWSwpSIOLzySMzMrHZlBsS7WdIfVh6JmZnVrkxL4RBgVrqzeQMgICLirZVGZmZmHVcmKXyo8ijMzKwrlLkk9eFOBGJmZvUrc07BzMzGCScFMzPL1ZYUJE2QdKeka9P6rpJukPRAet6lrtjMzMarOlsKZwD3FtbnAIsjYhqwOK2bmVkHlbn6qO0kTQGOAM4FPpeKZwIz0vICYAlwZqdjMxsLT7hjva6ulsLXgC8ALxfK9oiItQDpefca4jIzG9c6nhQkHQmsi4jbR/n62ZKWSlq6fv36NkdnZja+1dFSeA9wlKTVwOXA+yT9AHhC0mSA9Lyu0YsjYn5EDEbE4KRJkzoVs5nZuNDxpBARZ0XElIgYAI4H/j0i/hRYBJyUdjuJbHRWMzProG66T2Ee8AFJDwAfSOtmZtZBtVx9NCQilpBdZURE/Ao4rM54zMzGu25qKZiZWc2cFMzMLOekYGZmOScFMzPLOSmYmVnOScHMzHJOCmZmlnNSMDOznJOCmZnlar2j2awfrN7+xHx54IWFNUZiNnZuKZiZWc5JwczMcu4+svaaO7HuCMxsDNxSMDOznFsKZqNQPLnczMCc6zbvP++IKsMxaxsnBRs7dxnlfCWS9Tp3H5mZWc5JwczMck4KZmaWc1IwM7Ncx5OCpL0k3SjpXkn3SDojle8q6QZJD6TnXTodm5nZeFdHS2Ej8BcR8WbgncCnJU0H5gCLI2IasDitm5lZB3X8ktSIWAusTcu/lXQvsCcwE5iRdlsALAHO7HR8VpIvQzXrS7WeU5A0ALwduBXYIyWMocSxe42hmZmNS7UlBUk7AT8GPhMRvxnB62ZLWipp6fr166sL0MxsHKrljmZJryJLCJdGxFWp+AlJkyNiraTJwLpGr42I+cB8gMHBwehIwONNsWto7jP1xWFmHVfH1UcCLgTujYi/L2xaBJyUlk8Crul0bGZm410dLYX3AB8Dlktalsq+CMwDrpB0CvAIcGwNsZmZjWt1XH30U0BNNh/WyVjMzGxLvqPZzMxyHjrbts4nnUdtyzkX/LOz3uCkYNYBnnDHeoW7j8zMLOeWglkHuCvJeoWTgpXn8Y7awl1J1s3cfWRmZjknBTMzyzkpmJlZzucUxhPfc9AVfNLZuplbCmZmlnNLwTK+sqgWvhLJuo2TglmNtuhKmlvY0KR7z0nEqubuIzMzy7ml0AvGcoK4WbeQu4vMrAEnhX7kf/hmNkruPjIzs5xbCu3QDdf/u3XQV7Y4obzFfQ0LG+/jk87WJk4Ko1Wmr76CBNH8n4WZ2di5+8jMzHJuKdShRGtiyxYBhWW3DsaDZp9zsXzghYUN93G3ko1F1yUFSYcDXwcmAN+LiHkdOXAV3T4j7ecv7F9MBGaNbJEg5ixsWN50bKXC71oxubQ1iYz0y48TWEud+Hl1VfeRpAnA/wY+BEwHTpA0vd6ozMzGj25rKRwErIqIBwEkXQ7MBFZWcrQSJ4u3+BZVRdeNrxqyNij1u9nkd63ZUBtb/d0vfPMvc/FDcZ9mxy62drbYp/iNeMRdr01+Ls16A8r87ZfsSWgaR5ePUKyIqDuGnKRjgMMj4tS0/jHg4Ij488I+s4HZafVNwP1peSJZW3k34Mk2hDP0fmPZp9H2VmXDtw+tF8vbUccy9Wu1X7NtzerQaL3ZcjfXsUxZqzp2c/0alfsz7K86viEiJjV8p4jomgdwLNl5hKH1jwHfKPna+el5aZtimT/WfRptb1U2fHuhXsV9xlzHMvVrtV+zbc3q0Kq+vVLHMmWt6tjN9fNnOH7q2OjRVecUgDXAXoX1KcDjJV/7kzbHUub9Wu3TaHursuHbf9KkfKzKvt/W9mu2rVkdGq1vre5jVVUdy5R1oo7+DMvt182f4Ujer4o6vkK3dR9tC/wSOAx4DPgFcGJE3DOC91gaEYMVhdgVXMfe1+/1A9exV3XVieaI2Cjpz4H/S3ZJ6kUjSQjJ/PZH1nVcx97X7/UD17EndVVLwczM6tVt5xTMzKxGTgpmZpZzUjAzs9y4SgqS3izpO5KulPTJuuOpgqSjJf0fSddI+qO642k3SftIulDSlXXH0k6Sfk/SgvTZfbTueKrQr5/dkL752xvrjRedegAXAeuAFcPKDye7q3kVMKfke20DXFh3nSqu4y7dVsc21+/KuuvTzvqS3aj54bT8w7pjr/Iz7YXPboz167q/vRHVue4ARvDhvBc4sPjhkF22+v+AfYBXA3eRDaT3h8C1wx67p9ccBdxMdv9D7fWqoo7pdV8FDqy7ThXWr+v/sYywvmcBB6R9FtYdexV17KXPboz167q/vZE8uuo+ha2JiJskDQwrbjiAXkT8LXBkk/dZBCySdB3FuQ27QDvqKEnAPOBfIuKOikMekXZ9hr1iJPUlu5t/CrCMHurWHWEdqxnYskIjqZ+ke+nSv72R6Jlfvib2BB4trK9JZQ1JmiHpAknfBf656uDaZER1BE4D3g8cI+kTVQbWJiP9DF8n6TvA2yWdVXVwFWhW36uAP5b0bdo/jEKnNaxjH3x2Q5p9hr32t9dQz7QUmlCDsqZ340XEEmBJVcFUZKR1vAC4oLpw2m6k9fsV0LN/cDSpb0Q8B5zc6WAq0qyOvf7ZDWlWv17722uo11sKYxlAr1f0ex37vX7DjYf69nsd+7p+vZ4UfgFMk7S3pFcDxwOLao6p3fq9jv1ev+HGQ337vY59Xb+eSQqSLgN+DrxJ0hpJp0TERmBoAL17gSti5APodY1+r2O/12+48VDffq9jv9evEQ+IZ2ZmuZ5pKZiZWfWcFMzMLOekYGZmOScFMzPLOSmYmVnOScHMzHJOCmZmlnNSsNIk7SzpUx04zgxJ17bY5wBJ/62wfpSkOW06/s0l9vmepOlp+Ysjef3wn6Ok13d64pk0Icz0Eb5mrqTHJH05re8n6eeSNkj6fIP9vyvpPU3e6zhJq1p9ztZ5Tgo2EjsDDZOCpAmdDYUDgDwpRMSiiJjXjjeOiHeX2OfUiBgaCvqLw7a1ev3OFH6OEfF4RBwz0jhbafGZHE02j8NI/UNE/HVafgo4Hfi7JvseDNzSaENE/BA4dRTHt4o5KdhIzAP2lbRM0vnpG/2NkhYCywEkXS3pdkn3SJo99EJJz0o6V9Jdkm6RtEcqP1bSilR+0/ADSjpI0s2S7kzPb0rjzXwZOC7FcpykWZK+mV7zBkmLJd2dnqem8kvS0Ok3S3pQUsN/xJKeTc8zJC1RNn3rfZIulaS0bYmkQUnzgB1SHJcOe/1O6fh3SFouaWaTn+OApBXpNdtLujjtf6ekQ1P5LElXSbpe0gOSzmsS+2pJfy3pp8Cxkv5M0i/Sz/fHknaU9G6yyabOTzHsmx7Xp8/uPyTt1+qXISLWRcQvgJcaxPFm4JcRsUnS6ZJWps/j8lbvazWre5YfP3rnAQyw5QxUM4DngL0LZbum5x2AFcDr0nqwebrJ84AvpeXlwJ5peefC+16bll8LbJuW3w/8OC3PAr5ZOG6+TjYfwUlp+ePA1Wn5EuBHZF+GppNNlNKons8W4niGbBTMbcjGwDkkbVsCDBb3b/D6bYHXpuXdyKZuVIOfY74O/AVwcVreD3gE2D7V70FgYlp/GNirQeyrgS8U1l9XWP4KcFrhZ3FMYdtiYFpaPhj49wbvPRf4fJly4HPAx9Py48B2xc94+OfsR/c8en0+BavfbRHxUGH9dEkfSct7AdOAXwEvkk2pCXA78IG0/DPgEklXkE00M9xEYIGkaWSJ5VUlYnoX8N/T8vfJktCQqyPiZWDlUGulhdsiYg2ApGVk/8B/WuJ1kCWA/ynpvcDLZBOxtDrmIcA3ACLiPkkPA29M2xZHxDMplpXAG9hyspchPywsv0XSV8i6rHYiG8RtyyClnYB3Az9KDSGA7VpVroUPsnl+iLuBSyVdDVw9xve1ijkp2Fg9N7QgaQbZt/l3RcTzkpaQfasFeCnS10NgE+l3LyI+Ielg4AhgmaQDhr3/3wA3RsRHlE2LuGQUMRZHfdxQWG40Wcpwxf3zuEv6KDAJeEdEvCRpNZt/Hs1sLaaysTxXWL4EODoi7pI0i+zb+XDbAE9HxAEtYitF0o5kLYKhOQaOIJvr+CjgryTtH9lIo9aFfE7BRuK3wGu2sn0i8OuUEPYD3tnqDSXtGxG3Rnby8km2nLxk6D0fS8uzSsZyM9kY95D9Yy77zX60XpLUqAUzEViXEsKhZN/sYeux30QWM5LeCEwF7h9DbK8B1qb4Plooz2OIiN8AD0k6Nh1Xkt42hmMeCtyY3msbsm6uG4EvsLnFYl3KScFKi2w6xZ+lE8PnN9jlemBbSXeTfcNveOXJMOenk6oryP4h3jVs+3nA30r6GVC8muZGYPrQieZhrzkdODnF8THgjBJxjMV84O6hE80FlwKDkpaS/UO+D1r+HL8FTJC0nKwbaFZEbGD0/gq4Fbhh6PjJ5cBfppPZ+6b4TpF0F3APMPMV7zSMpN+XtIbs/MGXlM038FrgQ2S/C5B9Zj9I9bmT7Oqlp8dQH6uY51Mws1IkzSU7id7sEtSh/e4ADo6IV1yVNGy/GWQnqI9sV4w2dm4pmFlZzwKzlW5eayYiDiyREI4jaxX9uo3xWRu4pWBmZjm3FMzMLOekYGZmOScFMzPLOSmYmVnOScHMzHL/H+hmQ2KcLW05AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] @@ -160,7 +160,9 @@ "logbins = np.logspace(np.log10(bins[0]),np.log10(bins[-1]),len(bins))\n", "plt.hist(translation_initiation_wt, bins=logbins)\n", "plt.hist(translation_initiation_clim, bins= logbins)\n", - "plt.vlines([min_diff_limited_on_rate, max_diff_limited_on_rate], 0, 150)\n", + "plt.xlabel('translation initiation rate [1/s]')\n", + "plt.ylabel('number of genes')\n", + "# plt.vlines([min_diff_limited_on_rate, max_diff_limited_on_rate], 0, 150)\n", "plt.xscale('log')" ] }, @@ -721,7 +723,7 @@ "for name, group in groups:\n", " ax.scatter(group['growth_rate'], group['mRNA_per_CDW_mmol'], label=name)\n", "ax.set_xlabel('growth rate $h^{-1}$')\n", - "ax.set_ylabel('RNA concentration $mmol/OD_{600}$')\n", + "ax.set_ylabel('RNA concentration $mmol/g_{CDW}$')\n", "plt.legend()\n", "plt.show()" ] @@ -1233,7 +1235,7 @@ { "cell_type": "code", "execution_count": 30, - "id": "de4654a9", + "id": "7f3c4438", "metadata": {}, "outputs": [ { @@ -1263,7 +1265,7 @@ " alpha = 0.1, color ='green')\n", "\n", "ax.set_xlabel('growth rate $h^{-1}$', fontsize = fontsize)\n", - "ax.set_ylabel('RNA concentration $mmol/g_{CDW}$', fontsize = fontsize)\n", + "ax.set_ylabel('mRNA concentration $mmol/g_{CDW}$', fontsize = fontsize)\n", "\n", "fig.set_figwidth(width)\n", "fig.set_figheight(height)\n", @@ -1272,12 +1274,13 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "id": "f5bdb93c", + "cell_type": "markdown", + "id": "a575fd12", "metadata": {}, - "outputs": [], - "source": [] + "source": [ + "## Calculate the fraction of mRNA allocated to the core metabolism\n", + "at mu = 0.72 h-1" + ] } ], "metadata": { diff --git a/Scripts/Translation_parameters_estimation.ipynb b/Scripts/Translation_parameters_estimation.ipynb index 83bc37f..c8d6fc6 100644 --- a/Scripts/Translation_parameters_estimation.ipynb +++ b/Scripts/Translation_parameters_estimation.ipynb @@ -5,13 +5,34 @@ "execution_count": 1, "id": "2b093cef", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading PAModelpy modules version 0.0.3.4\n", + "Loading PAModelpy modules version 0.0.3.3\n" + ] + } + ], "source": [ "import pandas as pd\n", "import numpy as np\n", "import os\n", "import matplotlib.pyplot as plt\n", - "from scipy.stats import norm, sem, linregress" + "from scipy.stats import norm, sem, linregress\n", + "\n", + "# Get the current working directory\n", + "current_directory = os.getcwd()\n", + "# If required go to repository root\n", + "if os.path.split(current_directory)[1] != 'PAModelpy':\n", + " # Go up one level\n", + " parent_directory = os.path.dirname(current_directory)\n", + " # Change the directory to the parent directory\n", + " os.chdir(parent_directory)\n", + " \n", + "from Scripts.ecolicore_tam_incl_transcript_info import get_transcript_data\n", + "from Scripts.tam_generation import set_up_ecolicore_tam" ] }, { @@ -21,7 +42,7 @@ "metadata": {}, "outputs": [], "source": [ - "DATA_PATH = os.path.join(os.path.split(os.getcwd())[0], 'Data')\n", + "DATA_PATH = 'Data'\n", "PARAM_FILE_PATH = os.path.join(DATA_PATH, 'TAModel', 'Balakrishnan-etal_2023_dogma-parameters_tableS6.xlsx')\n", "RNA_FILE_PATH = os.path.join(DATA_PATH, 'TAModel', 'Balakrishnan-etal_2023_mrna-vs-growth_fig2a.xlsx')\n", "ECOLI_RIBO_DIAMETER = 26 #nm for Ecoli Zhu et al 1997 DOI:9169230\n", @@ -135,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 8, "id": "a62e2d06", "metadata": {}, "outputs": [ @@ -700,7 +721,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEXCAYAAABCjVgAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA6M0lEQVR4nO3deXxU5fX48c8hBIisoqAgq8ieDYkgVhaNgAiIIIJLBUHrLlgKpbgv8LOLSmldqFpBEQH1yyqVtiAIyqIsYQmbCIhhFwoCEkLC+f1xZ65ZJslMmMlMkvN+veaVzDN3njkTLnPmPs+95xFVxRhjjAEoF+4AjDHGRA5LCsYYY1yWFIwxxrgsKRhjjHFZUjDGGOOypGCMMcZVKpKCiLwrIodEZFOQ+vuTiGzy3AYGo09jjCkJSkVSACYDNwajIxHpCVwJJALtgVEiUi0YfRtjTKQrFUlBVZcCR7O3iUgTEVkgImtEZJmItPCzu1bAF6qaqaqngPUEKeEYY0ykKxVJIR9vAY+paltgJPCGn89bD/QQkQtE5GLgOqB+iGI0xpiIUj7cAYSCiFQBrgE+FhFvc0XPY/2AF3w8ba+qdlfV/4jIVcBy4DCwAsgMfdTGGBN+UlpqH4lII+BTVY31zAFsU9U6Qej3Q+ADVf3X+fZljDGRrlQOH6nqT8AuEbkNQBwJ/jxXRKJE5CLP7/FAPPCfkAVrjDERpFQcKYjINKALcDFwEHgW+Bx4E6gDRAPTVdXXsFHuvioBaz13fwIeVNWU4EdtjDGRp1QkBWOMMcFRKoePjDHGFI0lBWOMMa4Sf0rqxRdfrI0aNQp3GMYYU6KsWbPmR1Wtlbu9xCeFRo0asXr16nCHYYwxJYqIfO+r3YaPjDHGuCwpGGOMcVlSMMYY4yrxcwq+nD17lrS0NNLT08MdiinFKlWqRL169YiOjg53KMYETalMCmlpaVStWpVGjRqRrSCeMUGjqhw5coS0tDQaN24c7nBMWbPhI1j0AhxPg+r1IPkZiB8QlK5L5fBReno6F110kSUEEzIiwkUXXWRHo6b4bfgI5g2D4z8A6vycN8xpD4JSmRQASwgm5GwfM2Gx6AU4ezpn29nTTnsQlNqkYIwxpdLxtMDaA2RJIUROnz5N586dycrKYvfu3XTp0gWAJUuWICLMmzfP3bZXr14sWbIEcCbJ//CHP9C0aVNiY2Np164dn332GeBcqNexY8ccr5OYmEhsbCwAX3/9NYmJiSQmJpKQkMCsWbMAOHHihNuemJjIxRdfzOOPPw7Aq6++SqtWrYiPjyc5OZnvv3euZ0lJSaFDhw60bt2a+Ph4ZsyY4b5mly5d2L17d4Hv/5577nHfE8Dhw4eJjo7mH//4R0B/x+yWLFnC8uXLg7bd5MmTee655wB47bXXmDRpUpFjM6bYVK8XWHuALCkAs9ft5Vd//JzGf5jPr/74ObPX7T3vPt9991369etHVFRUnsfq1avHuHHjfD7v6aefZv/+/WzatIlNmzYxb948Tpw44T5+4sQJfvjhBwC2bNmS47mxsbGsXr2alJQUFixYwAMPPEBmZiZVq1YlJSXFvTVs2JB+/foB0KZNG1avXs2GDRvo378/v//97wG44IILeP/990lNTWXBggU8/vjjHDt2rMh/j48//pirr76aadOmFbmPYCeF7IYOHcrf/va3ooZmTPFJfgaiY3K2Rcc47UFQ5pPC7HV7GTNzI3uPnUaBvcdOM2bmxvNODFOnTqVPnz4AREVFUbNmTfexhIQEqlevzn//+98cz/n55595++23+fvf/07FihUBuOSSSxgw4JezCgYMGOB+a582bRp33HGH+9gFF1xA+fLOCWXp6ek+x7y//fZbDh065B5xXHfddVxwwQUAXH311aSlOYegzZo1o2nTpgDUrVuX2rVrc/jwYQBq1qzpM9llV716dSpUqODenzZtGq+88gppaWns3fvL3/b9998nPj6ehIQE7r77bsA5qrj11lu56qqruOqqq/jqq6/YvXs3EydOZPz48SQmJrJs2TLmzZtH+/btadOmDTfccAMHDx70uZ2v/gBiYmKoUqWK+7dr1KgRX3/9dYHvy5iwix8Avf8G1esD4vzs/begnX2EqpboW9u2bTW3zZs352nLzzUvLdKGoz/Nc7vmpUV+95HbmTNn9JJLLvH52OLFi7Vnz566dOlS7dSpk6qq9uzZUxcvXqzr16/XxMTEfPtt2LChbtu2TTt06KCqqomJiZqamqqtW7d2t1m5cqW2atVKK1eurDNnzszTx/PPP6+/+93vfPb/yCOP6IsvvpinfdWqVdqiRQvNysrK/00XYM+ePXrFFVeoquqYMWP0lVdeUVXVTZs2abNmzfTw4cOqqnrkyBFVVb3jjjt02bJlqqr6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\n", + "image/png": "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38Mzzzyjo0eP9tm2du1abdu2raqqTp48WWNjYzUhIUEHDx6sqqqHDh3Sm2++WePj47Vt27Z67733qqrq1q1bNT4+XhMTE3Xx4sX6ySefaPPmzfWKK67QkSNHateuXf3ul197ubVv3z7P77cwNsZgyioKGGMo0YFioFl+iSHXfmcDewJpMxSJIRxWr16td9xxR6TDCKuMjAwdMGBApMMIiaL+e5WGY82YoigoMZTW6apDgc/ze1JE7hGRlSKy0j2FsrRp3749V111FTk5OZEOJWxq167Nxx9/HOkwQuKnn37i+eefj3QYxpQKpW7wWUSuwkkMV+S3j6q+BbwFkJycrCUUWtCGDBkS6RBMgLp37x7pEIwpNUpVYhCRBOCfQC9VPRzpeIwxpiIqNV1JItIEmAkMUtVtkY7HGGMqqhI7YxCRqUA34FwRSQeeAaoAqOpE4GngHOAN19z2bFVNLqn4jDHGOEosMajqrYU8fzdwdwmFY4wxJh+lpiupvLGy27+V3c7Ozubxxx+nZcuWnhi8q8u6C9lFivsiwKysLK688krPRYLGVFSWGMBZEm98HDxbx/kZgiXyrOz2b5588kn27t3L+vXrSUtLY8mSJZw+fbpIbYVT1apVSUlJ8UmCxlRElhjCtH6qld12ym57fyZ3Mb9atWr5rWu0aNEi+vTp43n80EMPeepBffvtt1x22WUkJibSsWNHjh07RmZmJqmpqcTHx9O+fXsWLlwIwMaNG+nYsSNJSUkkJCTw3XffAU6hQPf2e++913ONSb169Tzvef3113tqOhlTUVliCMP6qVlZWezYscPTRdG4cWNmzpzps8+TTz7J2LFjfbZt376dJk2aULt27XzbHjBggKetuXPn0rdvX5/nV6xYQWxsLPHx8UycONGTKNymTp3KwIED/SaNd955h169euXZ/s0335CVlUWLFi0AmDlzJo0bN843RoAJEyZw2WWXeT5TQUUBC5OVlcXAgQOZMGECa9euZf78+URHR/P6668DsH79eqZOncrgwYPJzMxk4sSJjBgxgrS0NFauXEmjRo3YvHkz06dP5+uvvyYtLY2oqChPAvj222897xUXF+fz2JiKqFRdxxARYVg/1cpu52/SpElMmDCBw4cPs3Tp0kITDDiF+Bo0aMAll1wC4EmcX331FcOGDQOgTZs2NG3alG3bttG5c2fGjRtH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\n", "text/plain": [ "
" ] @@ -723,7 +744,7 @@ "for name, group in groups:\n", " ax.scatter(group['growth_rate'], group['mRNA_per_CDW_mmol'], label=name)\n", "ax.set_xlabel('growth rate $h^{-1}$')\n", - "ax.set_ylabel('RNA concentration $mmol/OD_{600}$')\n", + "ax.set_ylabel('RNA concentration $mmol/g_{CDW}$')\n", "plt.legend()\n", "plt.show()" ] @@ -764,15 +785,7 @@ "execution_count": 17, "id": "cfd4e489", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading PAModelpy modules version 0.0.3.3\n" - ] - } - ], + "outputs": [], "source": [ "#go to main directory for proper import statements\n", "if os.path.split(os.getcwd())[1] == 'Scripts':\n", @@ -803,8 +816,13 @@ "output_type": "stream", "text": [ "Set parameter Username\n", + "\n", + "--------------------------------------------\n", + "Warning: your license will expire in 14 days\n", + "--------------------------------------------\n", + "\n", "Academic license - for non-commercial use only - expires 2024-03-07\n", - "Read LP format model from file /tmp/tmpe7lszdsx.lp\n", + "Read LP format model from file /tmp/tmpgee2fxtn.lp\n", "Reading time = 0.01 seconds\n", ": 1877 rows, 5424 columns, 21150 nonzeros\n", "Setting up the proteome allocation model iML1515\n", @@ -820,7 +838,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/samiralvdb/.local/lib/python3.10/site-packages/PAModelpy/PAModel.py:222: UserWarning: Molar mass for E332 is invalid: 0.0\n", + "/home/samiralvdb/Documents/3_Projects/7_MCA_analysis/PAModelpy/src/PAModelpy/PAModel.py:222: UserWarning: Molar mass for E332 is invalid: 0.0\n", " warnings.warn(f'Molar mass for {enz.id} is invalid: {molmass}')\n" ] }, @@ -868,6 +886,8 @@ "cell_components_sorted = cell_components_basan.sort_values(by = ['growth_rate'])\n", "growth_rates_on_glucose = cell_components_sorted[cell_components_sorted['C_source'] == 'Glucose']['growth_rate']\n", "mmol_mrna_on_glucose = cell_components_sorted[cell_components_sorted['C_source'] == 'Glucose']['mRNA_per_CDW_mmol']\n", + "g_mrna_on_glucose = cell_components_sorted[cell_components_sorted['C_source'] == 'Glucose']['mRNA_per_CDW']\n", + "\n", "substrate_uptake_rates = []\n", "\n", "for growth_rate in growth_rates_on_glucose:\n", @@ -918,13 +938,14 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 24, "id": "31fbd3cf", "metadata": {}, "outputs": [], "source": [ "mrna_per_sector_df = pd.DataFrame({'growth_rate': growth_rates_on_glucose, \n", " 'mRNA_per_CDW_mmol': mmol_mrna_on_glucose,\n", + " 'mRNA_per_CDW_g': g_mrna_on_glucose,\n", " 'substrate_uptake_rate': [abs(rate) for rate in substrate_uptake_rates]})\n", "mrna_per_sector_df = mrna_per_sector_df.assign(protein_ue = lambda x: phi_ue_0+w_ue*x['growth_rate'],\n", " protein_t = lambda x: phi_t_0 + w_t*x['substrate_uptake_rate'],\n", @@ -933,7 +954,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 25, "id": "2309454b", "metadata": {}, "outputs": [], @@ -943,12 +964,13 @@ " fraction_ae = lambda x: x['protein_ae']/TOT_PROT_CONTENT)\n", "mrna_per_sector_df = mrna_per_sector_df.assign(mrna_ue = lambda x: x.fraction_ue*x.mRNA_per_CDW_mmol,\n", " mrna_t = lambda x: x.fraction_t*x.mRNA_per_CDW_mmol,\n", - " mrna_ae = lambda x: x.fraction_ae*x.mRNA_per_CDW_mmol)" + " mrna_ae = lambda x: x.fraction_ae*x.mRNA_per_CDW_mmol,\n", + " mrna_ae_g = lambda x: x.fraction_ae*x.mRNA_per_CDW_g)" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 26, "id": "fbc1fbfd", "metadata": {}, "outputs": [ @@ -975,6 +997,7 @@ " \n", " growth_rate\n", " mRNA_per_CDW_mmol\n", + " mRNA_per_CDW_g\n", " substrate_uptake_rate\n", " protein_ue\n", " protein_t\n", @@ -985,6 +1008,7 @@ " mrna_ue\n", " mrna_t\n", " mrna_ae\n", + " mrna_ae_g\n", " \n", " \n", " \n", @@ -992,6 +1016,7 @@ " 14\n", " 0.24\n", " 4.038188e-10\n", + " 0.002947\n", " 2.968601\n", " 0.080690\n", " 0.050338\n", @@ -1002,11 +1027,13 @@ " 6.034109e-11\n", " 3.764316e-11\n", " 9.495141e-11\n", + " 0.000693\n", " \n", " \n", " 13\n", " 0.35\n", " 4.627830e-10\n", + " 0.003377\n", " 4.228137\n", " 0.066374\n", " 0.055001\n", @@ -1017,11 +1044,13 @@ " 5.688299e-11\n", " 4.713579e-11\n", " 1.170886e-10\n", + " 0.000854\n", " \n", " \n", " 20\n", " 0.42\n", " 6.001197e-10\n", + " 0.004379\n", " 5.036557\n", " 0.057264\n", " 0.057993\n", @@ -1032,11 +1061,13 @@ " 6.363931e-11\n", " 6.444995e-11\n", " 1.586346e-10\n", + " 0.001158\n", " \n", " \n", " 19\n", " 0.51\n", " 6.754475e-10\n", + " 0.004929\n", " 6.076103\n", " 0.045551\n", " 0.061842\n", @@ -1047,11 +1078,13 @@ " 5.697634e-11\n", " 7.735354e-11\n", " 1.883839e-10\n", + " 0.001375\n", " \n", " \n", " 12\n", " 0.58\n", " 6.148441e-10\n", + " 0.004486\n", " 6.888753\n", " 0.036441\n", " 0.064850\n", @@ -1062,11 +1095,13 @@ " 4.149138e-11\n", " 7.383858e-11\n", " 1.784289e-10\n", + " 0.001302\n", " \n", " \n", " 18\n", " 0.64\n", " 7.055842e-10\n", + " 0.005148\n", " 7.590956\n", " 0.028632\n", " 0.067450\n", @@ -1077,11 +1112,13 @@ " 3.741161e-11\n", " 8.813258e-11\n", " 2.115683e-10\n", + " 0.001544\n", " \n", " \n", " 11\n", " 0.72\n", " 6.921189e-10\n", + " 0.005050\n", " 8.528990\n", " 0.018220\n", " 0.070923\n", @@ -1092,41 +1129,42 @@ " 2.335305e-11\n", " 9.090157e-11\n", " 2.164244e-10\n", + " 0.001579\n", " \n", " \n", "\n", "" ], "text/plain": [ - " growth_rate mRNA_per_CDW_mmol substrate_uptake_rate protein_ue \\\n", - "14 0.24 4.038188e-10 2.968601 0.080690 \n", - "13 0.35 4.627830e-10 4.228137 0.066374 \n", - "20 0.42 6.001197e-10 5.036557 0.057264 \n", - "19 0.51 6.754475e-10 6.076103 0.045551 \n", - "12 0.58 6.148441e-10 6.888753 0.036441 \n", - "18 0.64 7.055842e-10 7.590956 0.028632 \n", - "11 0.72 6.921189e-10 8.528990 0.018220 \n", + " growth_rate mRNA_per_CDW_mmol mRNA_per_CDW_g substrate_uptake_rate \\\n", + "14 0.24 4.038188e-10 0.002947 2.968601 \n", + "13 0.35 4.627830e-10 0.003377 4.228137 \n", + "20 0.42 6.001197e-10 0.004379 5.036557 \n", + "19 0.51 6.754475e-10 0.004929 6.076103 \n", + "12 0.58 6.148441e-10 0.004486 6.888753 \n", + "18 0.64 7.055842e-10 0.005148 7.590956 \n", + "11 0.72 6.921189e-10 0.005050 8.528990 \n", "\n", - " protein_t protein_ae fraction_ue fraction_t fraction_ae mrna_ue \\\n", - "14 0.050338 0.126972 0.149426 0.093218 0.235134 6.034109e-11 \n", - "13 0.055001 0.136625 0.122915 0.101853 0.253010 5.688299e-11 \n", - "20 0.057993 0.142743 0.106044 0.107395 0.264338 6.363931e-11 \n", - "19 0.061842 0.150607 0.084353 0.114522 0.278902 5.697634e-11 \n", - "12 0.064850 0.156709 0.067483 0.120093 0.290202 4.149138e-11 \n", - "18 0.067450 0.161918 0.053022 0.124907 0.299848 3.741161e-11 \n", - "11 0.070923 0.168857 0.033741 0.131338 0.312698 2.335305e-11 \n", + " protein_ue protein_t protein_ae fraction_ue fraction_t fraction_ae \\\n", + "14 0.080690 0.050338 0.126972 0.149426 0.093218 0.235134 \n", + "13 0.066374 0.055001 0.136625 0.122915 0.101853 0.253010 \n", + "20 0.057264 0.057993 0.142743 0.106044 0.107395 0.264338 \n", + "19 0.045551 0.061842 0.150607 0.084353 0.114522 0.278902 \n", + "12 0.036441 0.064850 0.156709 0.067483 0.120093 0.290202 \n", + "18 0.028632 0.067450 0.161918 0.053022 0.124907 0.299848 \n", + "11 0.018220 0.070923 0.168857 0.033741 0.131338 0.312698 \n", "\n", - " mrna_t mrna_ae \n", - "14 3.764316e-11 9.495141e-11 \n", - "13 4.713579e-11 1.170886e-10 \n", - "20 6.444995e-11 1.586346e-10 \n", - "19 7.735354e-11 1.883839e-10 \n", - "12 7.383858e-11 1.784289e-10 \n", - "18 8.813258e-11 2.115683e-10 \n", - "11 9.090157e-11 2.164244e-10 " + " mrna_ue mrna_t mrna_ae mrna_ae_g \n", + "14 6.034109e-11 3.764316e-11 9.495141e-11 0.000693 \n", + "13 5.688299e-11 4.713579e-11 1.170886e-10 0.000854 \n", + "20 6.363931e-11 6.444995e-11 1.586346e-10 0.001158 \n", + "19 5.697634e-11 7.735354e-11 1.883839e-10 0.001375 \n", + "12 4.149138e-11 7.383858e-11 1.784289e-10 0.001302 \n", + "18 3.741161e-11 8.813258e-11 2.115683e-10 0.001544 \n", + "11 2.335305e-11 9.090157e-11 2.164244e-10 0.001579 " ] }, - "execution_count": 24, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1138,7 +1176,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 27, "id": "5786172e", "metadata": {}, "outputs": [ @@ -1148,7 +1186,7 @@ "LinregressResult(slope=2.6415151053080683e-10, intercept=3.5930841561397775e-11, rvalue=0.9660739670313448, pvalue=0.00039980420101613166, stderr=3.158087679241018e-11, intercept_stderr=1.6370787118943977e-11)" ] }, - "execution_count": 25, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1160,7 +1198,29 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 28, + "id": "89389944", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LinregressResult(slope=0.0019274475344656643, intercept=0.00026217836816312917, rvalue=0.9660739670313447, pvalue=0.0003998042010161341, stderr=0.00023043776273501935, intercept_stderr=0.00011945354091015464)" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g_mrna_ae_vs_mu = linregress(mrna_per_sector_df['growth_rate'], mrna_per_sector_df['mrna_ae_g'])\n", + "g_mrna_ae_vs_mu" + ] + }, + { + "cell_type": "code", + "execution_count": 29, "id": "cf75029c", "metadata": {}, "outputs": [ @@ -1183,7 +1243,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 30, "id": "56c74c51", "metadata": { "scrolled": true @@ -1234,13 +1294,13 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "id": "7f3c4438", "metadata": {}, "outputs": [ { "data": { - "image/png": "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XLkSj8dDs2bNeOONN4rsc+vWrSilWLNmDQBZWVncdNNNNGrUiNjYWPr160dpk5wXZrFYaNy4cZFbfLwxxZM3DpvNxiWXXILFYiExMZGFCxf6Xl9aq3LJkiVMnTq1xJZT7969ueuuuwCYMGECI0aM4MUXX/Qd++GHH8bj8TBlyhQaNWpE48aNefHFF4vs43TvNysri/Hjx9OoUSOioqJo06YNr7322inPhVLqpHNhsViYNWsWMTExgNFyfOqpp9i0aZPvvc6aNeu057m8PNrDccdx0o+lsytzF9l52VjNVmLMMdWy/lxtlpGTwbur3mXwx4MZ9PEg/rv6v3RK6MQ7I95hzc1rmHbJNC5odoEkwQDyt44wTSnVD/gvsBHjOl8YcASjG9MvSikTRhL8RGs9u4Sn7AEKzwnUDNjn73FO5Z7v7mHtgbWVucvTOqfxObx26Wt+vSYlJYWWLVvSpUsXxo8fz5VXXsnzzz/vW2F93bp1DBgwgPHjx/PKK68QGRnJ0qVLcblcvP7662zdupUOHTr4WmUNGzZk9+5/GtthYWFcffXVfPLJJ9x5552+7Z988gmJiYl069YNrTXDhw8nPj6e+fPnU69ePT788EMuvvhitmzZwhlnVKzX+rHHHuOll17irbfe4plnnmHs2LHs2rWLmJgYZs+eTX5+vu+5Tz31FHPmzKFDhw60bduWqVOnsmLFCs4//3wAtmzZwm+//cZbb73le83SpUtp1qwZS5YsYc2aNYwbN461a9fSrVs3fvnlF3766SduvfVWBg0axLnnnlum9/v444+zYcMG5s+fT6NGjUhPT+fQoYovxHLVVVexceNG5s+fz5IlSwB8XxwqU54rzxj84jiGR3uMac9k8EuF2Z12vtv2HbY0Gz/v+hmP9tA1oStPD3iake1HUt9y8rJqInDKs0L9euACpdRZQCcgG/ijhNbcKRWMCH0fSNNav1LK074G7lBKfY4xSCZLa72/lOfWajNmzGD8+PEA9OvXD4vFwtdff01SUhIA06ZNo2vXrrz33nu+1xTuOjWbzb5WWWnGjx/Pyy+/zLZt22jbti0An376KTfccANgrP23du1aDh065OvCe/rpp5k3bx4ff/wxDz74YKn7fu+9905q0UybNo3bbrvNd//f//43l112GQDPPfccH330EWvXruWiiy4qsoDvF198waxZs1i8eLHv/Vx66aXMnDnTlwhnzpzJueeeS9euXX2vi4+P5z//+Q/h4eF06NCB6dOns2/fPr77zpgf4qyzzuKFF15g8eLFnHvuuWV6v7t27aJbt26+47Zq1arUc+CVk5Pja/l5FR8gEx0dTUxMDBEREZXefa3Rvkmvc/NziQiPkBXfK4FHe/h99++kpKWwYOsCcpw5NIltwu3n3U5yYjJt67UNdIiiFP7WETYD7gXOAHZizDO6098kWKA3MB7YoJRaW7DtUaAFgNb6HYzRqMOAbRjlE34NyCkLf1tmgbBt2zZ+/fVXPvvsM8DoWhs3bhwzZszwJcI1a9ZwxRVXVOg4Xbp0oXPnznz66adMnjyZP/74g+3bt3PNNdcAsGrVKnJzcyne/exwOE665lXcVVddxZNPPllkW/H9dOnyz+RETZo0AYzllQpbuXIlN9xwA++//z49e/b0bZ80aRLXXXcdr776KmazmY8//pgnnniiyGsTExMJD/9nkEdCQkKRhYe927zHLMv7vfXWW0lOTmb16tVccsklXHbZZfTr1++U58JisbB27dpTPqcqeLQHj/bgcrvYc3wPkRGRxEXFVXsctc3WI1uxpdqYvXk2+7L3EWOO4bKzLiMpMYmezXrKF4wawN8WoQ1ogDFo5nxgElBPKXUCWKe17lvWHWmtf6Hka4CFn6OB2/2MsdaZMWMGbre7yEAg72oLu3fvpnnz5pW2+sK4ceOYOXMmkydP5pNPPqFPnz60bNkSAI/HQ0JCAsuWLTvpdXFxp/5AjY+P97UyS+Pt5gV8xcIej8e3bd++fYwaNYp7773Xl5y9hg8fjsViwWazER8fT2ZmJldffXWp+/ceo6Rt3mOW5f0OHTqUXbt28e233/Ljjz8yfPhwxowZwwcffFDq+1RKnfZcVBatNR7twe1x49EeUMbxpfuzYg7nHmbu5rnY0mysP7iecBVOv5b9eLzP4ww+czDRpsAPehJl528i7AT01Fpv8G4oaCV2Q+YarRIul4sPP/yQ559/nhEjRhR5bPz48XzwwQdMnjyZ7t2789NPP5W6H7PZjNvtPu3xxo0bx6OPPsry5cv54osveOaZf0pDu3fvzsGDBwkLC6NNmzblf1Pl4HA4GDVqFD179mTq1KknPR4REcGECROYOXMm8fHxjB49+qTWnr/K+n4bNGjA+PHjGT9+PEOHDuXqq6/mnXfeITKyYsXPZf03K4nWGrd24/K4QBvJLyzMaJmoU3//FKWwO+38sOMHbKk2lqQvwa3ddGrUiSf7PcmoDqNoZG0U6BBFOfmbCFcCRS5uaK33YAxqmVdZQYl/LFiwgMOHDzNp0iTq1y96gX3s2LG8/fbbPP744zzwwAP07NmTm266idtvv52oqCiWLVvG4MGDadGiBa1atWLFihWkp6cTExNT5JpbYc2aNaNv377ccsstZGVlMWbMGN9jgwYNonfv3owcOZJp06bRoUMHDhw4wHfffcegQYPo06dPqe8jNzeXAwcOFNlmNptLjaO4m2++mczMTD7//HMOHjzo216vXj3MZmOW/YkTJ/Liiy8SFhbGDz/8UKb9nkpZ3q/3S8jZZ5+Ny+Vi9uzZtGnTpsJJEIzrjbt27WL16tW0aNGC2NjYU+5Xa43WGpd2Ga0/IIww/8eGCx+P9rBi7wpSUlOYv3U+2fnZNI5pzM3n3kxSYhIdGnQIdIiiEvj7X+Q+4GmlVJ0qiEWU4P3332fAgAEnJUGAMWPGsGvXLhYtWsQ555zDokWL2Lx5Mz179uSCCy7g888/93X93X///ZjNZhITE2nYsCF///13qcccP34869atY/jw4UVaVUopvvnmGy6++GImTZpE+/btufLKK9myZYvvml5pPvjgA84444wit8svv7zM5+Hnn3/mr7/+4swzzyyyj99+801yRJs2bejXrx8tWrSgf//+Zd53acryfiMjI3nsscfo2rUrvXv3Jjs7m3nzKuc7YVJSEsOGDWPgwIE0bNjQd424OK01Lo+LfHc++e58tNaEqTDj2pQ0/spl+7HtTPt1Gr3e70XS/5L4astXDGk7hM+TP2fFxBU81vcxSYK1iPLn2pJSqj0wC2gDzMZYcWINkKq1Ll8fTiXr0aOHLq2urTKK0EVwS0xMZNy4cTz22GOBDqXKea/9uT3Gfz1vveHpbN28lXotyjdjyaJdi05aGNa7Pl5Nd9R+lK+3fE1KagprDqwhTIXRp0UfkhOTubTtpVhMlkCHGJJO5J+gXb12FZ5kXCm1Smtd4lyS/naNfoGx6sQXGKM7n8ao83MopTZqrc+vUKRClFNGRgafffYZ6enp3HzzzYEOp8p4B7+4PC5jgJTCd+2vqi3atYjpK6eT584DICM3g+krpwPU2GSY58pj0Y5F2NJs/LjzR1weFx0bdOSJvk8wqsMoGsdUz8xLIrD8TYTtgPO11r5ZZJRSdYHuGIvzChEQCQkJNGjQgHfffZcGDRoEOpxK52v9FXS8KFS1JUCvGRtm+JKgV547jxkbZtSoRKi1ZuW+lXyZ+iXzt84nKy+LRtZG3NjtRpISkzi74dmBDlFUM38T4XKgSJ+K1voY8GPBTYiAqKzykWBSYusvgDVph3JLnjGntO3BJj0zHVuqDVuajV1Zu4iOiGZo26EkJSZxUYuLZCq5EObvv/y7wFNKqSu11oerIiAhQl2R1l+x0odAamhpSEZuRonbg9Ux+zHmbZ2HLc3Gyn0rUSh6t+jNPT3vYVi7YcSYY06/ExEw3tHPVc3fRPh5wc+tSqn5GC3ENRjF9LmVGlkV0VrLys4i6JRU+F4Voz69LcvymNh5YpFrhACR4ZFM7DyxkqKrHPnufH7a+RO2VBuLdi4i351P+/rtefSiR7mi4xU0iT31CGcRWB7tIc+Vh8vjIkyFUS+qXpV/ZvubCJtjXAvsWvDzbuBMQCul/tJaJ1ZqdJXMZDJht9uxWGT0lwgOvmnPSih8rwoup6vc+/deBwzGUaNaa1bvX40tzcZXW74i05FJA0sD/tX1X4xJHMPZDc+WL8BBzO1xk+fOw+1xEx4WTnxkPDHmGKIioqrl383f1Sf2AnuBBd5tSikLRmIM+pllGjVqxN69e2natCnR0dHyH0MEhK/1p93GdG6qegrfPR4PhzIOYbKaTv/kUgxqOSgoEp/X31l/Y0uzYUu1sTNzJ1HhUQxpO4TkxGT6tuwr1/2CmMvjIs+Vh9aaiLAI6kbVxWq2EhkeWe2fzRX+KynoEv294BbUvPND7tu3D6fTGeBoRKjRWqMxkqC3i766pzuLiIogtmHNnmc0y5HF/K3zsaXZ+GOvsZZ3r2a9uOP8OxjebrjMoxrEnG6nMekDRvJrYGmAxWTBHG4OaMOkMlafWKO13lYFsVWJuLi4004QLURl0VrjcDnIcmSRlZeFQhFtiiY8LPz0LxY+TreTxemLsaXZWLh9IXnuPNrWa8tDvR9idMfRNItrFugQRSny3fnku4y1RM3hZhpZGxFtisYcbg5wZP+ojNUn6iulsvFz9QkhajO3x+1b8y/fnU9EWAQx5hjpjveD1pp1B9dhSzWu+x2xH6FedD3GdR5HcmIyXRK6VOh81uZZcgItz5WH0+NEa020KZrGMY2JNkVjCi9/t3xVktUnhKhEea48svKyyLRngsJY8T1Cuur8sff4XuO6X5qNbUe3ERkeySVnXkJyYjL9W/avlA/T2jhLTiBprclz5+F0O1EoLCYLDSwNiDZF14jrtLL6hBAV5NEeo/WXe4Q8dx4RYRFYzVZp/fkhOy+bb/76hi9Tv+T3PcZwgwuaXsBNg25ixFkjiI+Kr9Tj1ZZZcgKpePKLiYwxuj0jal7Xv7+J8D7gBaVUstY6swriEaLGyHfnc9xxnGOOY3i0x2j9yUCNMnN5XCzdtZSU1BS+3/Y9DreD1nVac/+F95PUMYkW8S1Ov5Nyqumz5ARK4Ro/pRRx5jhirbFEm6IDOutRRfmbCLMBK7BFKRWUq08IUZU82oPdaeeI/Qh2p53wsPAa/yFQnbTWbDq0iZTUFOZunsuh3EPUiarDVZ2uIqljEt3P6F4tLemaOEtOoBQvcI+P+qfGr7b83cvqE0KUgdPtJDs/m2P2Y7g8LiIjIqX154f92fuZs3kOKakpbDmyBXO4mUGtB5GUmMTFrS+u9hGENWWWnEApXOAeERZBfGQ8VrO12grcq5usPiFEKbTW2F12juYeJceZQ7gKJ8oURbSKDnRoNUJOfg7fbPuGlNQUfv37VzSaHk168PzA57nsrMuoG103YLEF8yw5geItcPdoD6YwU0AL3KubrD4hRDEuj4vsPKP15/Q4MYWbpPVXRm6Pm1/+/oWUtBS+/etb7C47LeNb8u+e/2Z0x9G0rts60CH6BNssOYHgLXD3aA/mcLOvwD0yIjLQoVUrWX1CCP4pfD/mOEZ2XjZhKoyoiCiiTFGBDq1GSD2Uii3VxpzNcziYc5D4yHiSEpNI7phMjyY9an2LoibxFrhrNJHhkUFZ4F7dQm71CSEKc3vcnMg/wRH7EZxupxS+++HgiYPM2TwHW5qN1EOpmMJMXNz6YpI6JjGozaCQa1UEM2+BOxi1rcFe4F7dQmr1CSG8HC4Hx/OOk2nPRClFZEQkURHS+judXGcu3237DluqjaV/L8WjPXRr3I1nL36Wy9tfTr3oeqffiahy3ho/l9sFgMVkoaG1IVERUTWiwL26hdTqEyK0ebSHE3knOGo/KoXvfnB73Py25zdsqTa++esbcpw5NI9rzp3n30lSYhJn1j0z0CEK/une95Y5WM1W4q3xREVE1bgC9+oWUqtPiNCU58ozBr9I4btfthzegi3Nxuy02ew/sZ9Ycywj248kKTGJ85ueX2tqyGqy4jV+seZY4qLialWNX3WQNrKolTzaQ64zl6P2o+Tm5xIRHoHFZJHW32kcyjnE3C1zsaXa2JCxgXAVzoDWA5jcbzKXtLmEaJOUjgSaR3twuBy+RWzjIuOINccSGREpya+cJBGKWiXfne8rfXBrN5ERkcRFybJbp2J32vlh+w+kpKXwc/rPuLWbrgldmdp/KiM7jKSBpUGgQwx5bo8bh8vhq/GrE1mHmMiYkKjxqw6SCEWNV7zwPUyFybRnp+HRHpbvWY4t1caCvxaQnZ9Nk9gm3HrerSR3TKZd/XaBDjHkuTwu8l35uLUbU5iJ+pb6WE3WgC9iWxtJIhQ1ltPt5ES+MfjF5XFhDjfLtb/T2HZ0GympKcxOm83e7L1YTVZGnDWCpI5J9GreS748BFjhAvfI8EjqW+qHZIF7dfM7ESqlrgIGAo2AIv9rtNaXV1JcQpSotMJ3uXZVuiO5R/hqy1fYUm2sPbiWMBVGv5b9eLTPoww5c4icuwArXOAeFRElBe4B4FciVEq9BNwDLAb2AboKYhLiJC6Py7fmn0x7dnoOl4OFOxZiS7WxOH0xLo+LsxuezZP9nmRUh1E0sjYKdIghS2tNvjvft4K7xWSRAvcA87dF+C/gaq11SlUEI0RxDpeDTHsmx/OOAxBlkmnPSqO1ZsXeFdjSbMzbOo/jecdpbG3MTd1vIikxiQ4NOgQ6xJBVvMDdarZKgXsQ8fdfIAxYWwVxCOHj9riN1p/9CPnufCl8P40dx3ZgS7Uxe/Ns/s76G4vJwtC2Q0lOTKZ3895STB0g3m58t3YbK7ibY4izxkmBexDyNxG+B1wLTKn8UESoy3PlkZWXRZYjyzchcDB0fy7atSjolus5aj/KvK3zSElNYfX+1YSpMC5qcRH397qfS9teitVsDWh8oUoK3GsmfxNhHeAapdQlwHrAWfhBrfVdlRSXCBHewvcjuUdwuBxEhAVX4fuiXYuKLOCakZvB9JXTAao9Gea58vhp50+kpKbw484fcXqcdGzQkcf7PM6oDqM4I/aMao1HGAovYisF7jWTv4kwkX+6RotfcJCBM6LM8t35HHccJ9ORaayFFhGcpQ8zNswosoo5QJ47jxkbZlRLItRas2r/KlJSU5i3ZR6ZeZk0sjbi+m7Xk5yYzNkNz67yGMTJpMC9dvF30u0BVRWIqP201v9Me+bMJTzMWPE9mL81H8o95Nf2yrIrcxe2NBu2NBvpmelERUQxtO1Qkjom0adlHxlgEQBFVnAPlwL32kT+N4kq53Q7yc43pj2raYXvDS0NycjNKHF7Zct0ZDJv6zxsqTb+3PcnCsWFzS/krgvuYni74cSYYyr9mOLUnG4nea483zXrBpYGWM1WqfGrZcpTUJ8A3I7RTaqBVOAtrfXBSo5N1GDeac8yHZk1uvB9YueJRa4RAkSGRzKx88RK2X++O58l6Uv4MvVLFu1YRL47n3b12vHIRY9wRccraBrbtFKOI8ou351Pnsv49442RZMQk4DFZJEav1rM34L63sB3wEH+WXZpHPBvpdQQrbUsxRTiXB6Xb82/2lD47r0OWJmjRrXWrD2wlpTUFL7a8hXHHMeoH12f8V3Gk5yYTOdGnaWrrRp5C9zz3fmAsYjtGTFnYDFbpAs6RCityz7GRSn1O7ABuEVr7SnYFga8A3TSWl9YJVH6oUePHnrlypWBDiOkeOulshxZZOVloVBEm6KlVqqYPcf3YEuzkZKawo5jO4gMj2RI2yEkdUyiX8t+0uKoRt4Cd6fbiUIZi9hGxUuBey2mlFqlte5R0mP+/oufA0zwJkEArbVHKfUKsMbPoGYCI4AMrXWnEh7vD3wF7CzYNFtrPdXPeEUV8ha+H7YfJt+VjyncRIw5RlozhRzPO86CrQtISU1h+d7lAPRq1ovbetzG8LOGExcpS0RVl8IF7gCx5lgSrAlS4C78ToRZQGtgS7HtrYFMP/c1C3gT+OgUz1mmtR7h535FFXO4HBzPO06mPRMUREVEERUl0555Od1Oft71MympKSzcvhCH20Gbum14sPeDjO4wmubxzQMdYsjwFri7PW6UUkaNX2SsFLiLIvxNhJ8D7yulHgR+wxgscxHwAvCZPzvSWi9VSrXy8/giQDza45v02uF2YAozybRnhWit2ZCxgZTUFOZunssR+xHqRtVlbKexJCcmc07jc+RcVRNvgbtHewhTYcRHxhNjjiEqIkr+DUSJ/E2EDwIKmFnotU7gbeDhSozLq5dSah3GShf3a603lfQkpdRNwE0ALVq0qIIwQleeK89Y8d1xDI/2EBURJd15hezN3suctDmkpKbw19G/MIebGdRmEGMSx9C/VX8ZZl9NvDV+WmsiwiKkwF34xa/BMr4XKWUBzsRIitu01rnlOrjRIpxfyjXCOMCjtT6hlBoGvK61Pu2y2TJYpuI82oPdaeeI/Qh2p90ofJeuJJ8T+SdY8Jdx3e/33b+j0ZzX5DySE5MZcdYI6kTVCXSIIaF4gXvdqLpYTBYpcBclqszBMgAUJL4NFYrq9Mc4Xuj3b5RSbymlGmitD1flcUOZt/D9aO5R3NpNZERwTHodDFweF8t2LcOWZuPbbd/icDloFd+Ke3vdy+iOo2lVp1WgQwwJhRexjQyPpKGlIRazRVreokJOmwiVUl8D12qtjxf8XqrKXKFeKdUYOKi11kqp8zGWgDpSWfsXBm/h+9Hco+Q4cwhXwT/tWXXRWrPp0Cbfdb9DuYeoE1mHMYljSE5M5twzzpWWRzXw1vhpraXAXVSJsrQIj/DPhNqVloiUUp8B/YEGSqk9wJOACUBr/Q6QDNyqlHIBdmCsLk8/riiRy+MiOy+bo/ajNW7as6q2P3s/czfPJSU1hc1HNmMKMzGw9UCSEpMY2HogkRGRgQ6xVite4G41WalnrScF7qLK+FtQ3wLYU7iOsGC7Apprrf+u5Pj8JtcIS+etozrmOMaJ/BMolNRQFcjJz+Hbbd9iS7OxbNcyNJruZ3QnqWMSl7e/nHrR9QIdYq1WvMA9JjKGuMg4oiNkYgZROSrzGuFO4Ayg+CzE9Qoek7/YIOT2uDmRf4Ij9iM43ca0Z1aTlD64PW5+3f0rKakpfLvtW3KdubSIb8HdF9xNUmISbeq2CXSItVrhRWyVUsSZ44i1xsqXM1Ht/E2EipLXHYwBHBUPR1Qm37RnjiwAokxRREVI4XvaoTRsaTbmpM3hQM4B4iLjuKLDFSQnJnNek/NC/gtCVSq+gnt81D81fnJdWgRKmRKhUur/Cn7VwPNKqcLlEuHA+fyzYK8IIO+0Z0ftR8lz5xERFiGF70BGTgZzNhv1fqmHUokIi2BAqwFMSZzCJW0ukS8IVaj4Cu51IutgNVulwF0EjbK2CDsX/FRARyC/0GP5wGrg5UqMS/gpz5VHVp7R+vMOLQ/1wS92p53vtn1HSmoKS/9eikd7OCfhHJ4e8DQj24+kvqV+oEOstYrU+IUZNX5Ws1UK3EVQKlMi9K5Mr5T6ALi7cI2fCByP9vhWfPcWvltMlpD+oPFoD7/t/g1bmo0FWxeQ48yhaWxTbj/vdpITk2lbr22gQ6y1nG4n+e58X4F7A0sDKXAXNYJf1wi11tdXVSCi7PLd+Rx3HCfTkSmF7wW2HtmKLdWGLc3G/hP7iTHHcNlZl5GUmETPZj3l+lMV8Ra4A5jDzTSyNiLaFC0F7qJGKc8K9REY1wRbAEX+2rXWp1pJQlSA1ppcZy7H7MfIceYQpsKINkWH9Af84dzDzN08F1uajfUH1xOuwunXqh9P9H2CwWcOJtoUHegQa6U8Vx5OjxMwVh5pHNOYaFO0FLiLGsvfFeo7APMwll1SgLtgH04gj1MvqSTKwel2ciL/hBS+F7A77fyw4wdsqTaWpC/Brd10btSZKf2nMKr9KBpaGwY6xFqneI2fxWShgaUB0aZoKXAXtYK/f8WvAaswFug9UPAzHmP1iccrMa6QVrjwPTsvmzAVRlREVMi2cDzawx97/sCWZmP+1vlk52dzRswZ3NLjFpI6JtG+QftAh1jreP8GvWUOVrPV6PaUAndRC/mbCM8D+mmtc5RSHiBCa726YH3CN4AulR5hCHF5XL41/5weo/A9lFt/245uw5ZmY3babPYc34PVZGVYu2EkJSZxYbML5QO5kpVY4B4ZG/Jd8KL2K09BvbeG8BDQFGO1+j2ADMcrB2+3U6Y9k6y8LBSKaFM0UabQrGs7aj/KV5u/wpZmY82BNYSpMPq26MtDvR/i0raXYjFZAh1ireLRHhwuB26PWwrcRcjyNxFuBLoCO4AVwENKKTcwCdhWybHVat7C9yP2I+S784kIiyDGHBOSw8wdLgeLdizClmbjp50/4fK4SGyYyBN9n+CKDleQEJMQ6BBrlcIF7t5FbKXAXYQyfxPhs4D3K/njwHxgMXAYuLIS46q1ihe+R0VEERsRet2fWmv+3PcnKakpzN86n6y8LBKsCUzsNpGkxCQSGyYGOsRaRQrchShdmROhUsoETAX+BaC13gEkKqXqAcdkiaTSebTHd+3PO+1ZqBa+7zy203fdb1fWLqIjohnabihjEsfQu3lvue5XiQoXuJvDzb4Cd1lGSoiiypwItdZOpVRrik26rbU+WulR1RJS+G44Zj/G11u/xpZqY9X+VSgUF7W4iH/3+jfD2g7DarYGOsRao/gK7lLgLsTp+ds1+iHG9cAHqiCWWsGjPdiddo7Yj/imPQvFFd/zXHn8tPMnbGk2Fu1YhNPjpH399jzW5zFGdRhFk9gmgQ6xVvAuYisF7kKUn7+J0AqMU0pdglFPmFP4Qa31XZUVWE3jdDvJzs/mmP1YyBa+a61ZtX8VtjQbX2/5mkxHJg0tDZlwzgSSE5M5u+HZIdkdXNm8I41dbhcAFpOFhtaGREVESYG7EOXg7/+ajhgrTQAUX7U05K4Raq2xu+wcsxsrvocro/UXrUKr8H1X5i5mp80mJS2F9Mx0oiKiuPTMS0lKTKJvy77y4VwJSipwj7fGyyK2QlQCfyfdHlBVgdQkLo+L7Dyj9Reqhe+Zjkzmb52PLc3Gir0rALiw+YXcdf5dDGs3LOTOR1UovohtrDmWuKg4qfETopL5O9doC2B3SSNElVIttNZ/V1pkQcb7jTzLkUVWXpZv2rNQKnx3up0sTl9MSmoKi3YsIs+dR7t67Xj4oocZ3WE0TeOaBjrEGq/4IrZxkXHEmmOJjIiU5CdEFfG3z2oncAaQUXijUqp+wWO1ro/G7XFzIv8ER+xHcLqdIVf4rrVm3cF1pKSm8NWWrzhqP0q96Hpc2+Vakjom0SWhS8ici6ri9rhxuBy+Gr86kXWIiYyRGj8hqkl5plgr6VpgDOCoeDjBw1v4nmnPBGWMxouKCJ3W357je7Cl2bCl2th+bDuR4ZEMPnMwSYlJ9G/ZX0YkVlDxAvf6lvpYTVZZxFaIAChTIlRK/V/Brxp4XimVW+jhcIz1CddWbmiBo7Vm9/HdKBRWszVkPpiO5x1nwdYF2NJs/L7ndwB6Nu3JLT1uYXi74cRHxQc4wprN6XaS58rz1fhJgbsQwaGsLcLOBT8VxsjR/EKP5WOMJH25EuMKOI/2EGOOCXQYVc7lcfFz+s+kpKXww7YfcLgdtK7TmgcufIDRHUfTIr5FoEOs0QoXuEdFRJEQkyAF7kIEmTIlQu9oUaXUB8DdWuvjVRqVqFJaazZmbOTL1C/5astXHM49TJ2oOoztNJakxCS6Ne4WMq3gyla4wF1rjcVkkQJ3IYKcv+UT11dVIKLq7cvex5y0OaSkpbD1yFbM4WYGtR5EcmIyA1oPqLRWyqJdi5ixYQaHcg/R0NKQiZ0nMqjloErZdzAqXuBuNVulwF2IGsTv/6VKqauAgUAjoMh4bq315ZUUl6gkJ/JP8M1f35CSmsJvu39Do+nRpAcvDHqBEe1GUDe6bqUeb9GuRUxfOZ08dx4AGbkZTF85HaBWJUNvOY1buwGMGj9rnBS4C1ED+VtH+BJwD8bSS/sIwdlkagKXx8Uvf/9CSmoK3277FofLQcv4ltzb615GdxxNqzqtquzYMzbM8CVBrzx3HjM2zKjxibB4gXtcpLGCuxS4C1Gz+dsi/BdwtdY6pSqCERWz6dAmbKk25myeQ0ZOBvGR8SQnJpOcmEyPM3pUy3W/Q7mH/Noe7KTAXYjaz99EGEYtKpOoDQ6cOMDczXNJSU0h7XAapjATF7e+mOTEZAa2HljtQ/MbWhqSkZtR4vaaQgrchQgt/ibC94BrgSmVH4ooq1xnLt/+9S22NBvL/l6GR3vo1rgbz178LJe3v5x60fUCFtvEzhOLXCMEiAyPZGLniQGLqSyKFLiHS4G7EKHE30RYB7imYBmm9YCz8IOhvAxTVXN73Py6+1dsaTa++esbcp25NI9rzp3n30lSYhJn1j0z0CEC/wyIqQmjRksqcLearVLjJ0SI8TcRJvJP12iHYo/JwJkqsPnwZmypNmZvns2BEweIi4xjVPtRJCcmc17T84LyOtWgloOCMvFBQYG7Ox+tNdGmaBJiErCYLFLjJ0QIk2WYglBGTgZzN8/FlmZjY8ZGwlU4A1oP4Ml+T3JJm0uINoXWeocV4S1wz3cbkyFZTVbqWethMVukxk8IAZSvjnAocDvGwrxDtNa7lVITgZ1a6x8rO8BQYXfa+X7799hSbfy862fc2k3XhK5M7T+VkR1G0sDSINAh1hjeAnen2+mbL1YK3IUQpfG3jnAc8A4wA6Oo3tufFA48CEgi9INHe/h99+/Y0mws+GsBJ/JP0CS2CbeedyvJHZNpV79doEOsMQqv4K6UItYcS4I1QQrchRCn5e/X4weBSVrrzwtagV7LgamVF1bt9teRv0hJS2FO2hz2Zu8lxhzD8HbDSeqYRK/mvYLyul8w8ha4uz1ulFJS4C6EKBd/E2E74PcStp8A4ioeTu11OPcwX23+CluajXUH1xGmwujfsj+P9nmUIWcOket+ZeQtcPdoD2EqjPjIeGLMMURFREmZgxCiXPxNhPuAs4Bdxbb3BbZXSkS1iMPl4IftP2BLs7F452Lc2s3ZDc/myX5PMqrDKBpZGwU6xBrBW+OntSYiLIK6UXWxmq1S4C6EqBTlKaj/v0Ldos2VUn2AaUiRPWB01/25909SUlOY/9d8jucdp7G1MTefezNJiUl0aFC86kSUxOl2ku/O9xW4exexlQJ3IURl87d8YppSKh5YCERhTL6dB7ystf5PFcRXY2w/tt2o90ubze7ju7GYLAxrN4ykjkn0bt5bBmyUQeFFbCPDI2loaYjFbJECdyFElfJ7LLnW+jGl1LMYxfVhQKrW+kSlR1YDHLUf5estX5OSmsKaA2sIU2H0adGHBy58gKHthmIxWQIdYtCTAnchRKCVq6hKa50LrKzIgZVSM4ERQIbWulMJjyvgdWAYkAtM0FqvrsgxK0OeK49FOxZhS7Px086fcHqcdGzQkSf6PsGoDqNoHNM40CEGNSlwF0IEG3/rCJ8Fdmut3ym2/Ragqdb6CT92Nwt4E/iolMeHYoxSbQdcALxd8LPaaa1ZuX+lcd1vy3wy8zJpZG3E9d2uJzkxmbMbnh2IsGqM4gXuMZExNLQ2JDoiWrqMhRAB5+9X8PHAmBK2rwIeAcqcCLXWS5VSrU7xlJHAR1prDSxXStVRSp2htd7vT8AVkZ6Zzuy02dhSbaRnpRMVEcXQtkNJTkzmohYXSQvmFAovYquUIs4cR6w1VgrchRBBx99P8kZASSusHgESKh5OEU2B3YXu7ynYVqWJUGvNe6ve491V77LmwBoUigubX8jdPe9mWLthxJhjqvLwNVrxFdzjo/6p8ZMCdyFEsPI3Ef4N9AF2FNveFyNRVaaSxsiXuMKFUuom4CaAFi1aVOygSvHZxs/Izs/mkYse4YqOV9A0tmmF9lmbFV/BvU5kHaxmqxS4CyFqDH8T4bvAq0opM/BTwbaBwPPAi5UZGEZibV7ofjOMgv6TaK3fw6hxpEePHhVeDmrOVXPIyMkgNjK2oruqlYosYhtmkgJ3IUSN5m8d4XSlVAPg/wBvcVc+8LrWelolx/Y1cIdS6nOMQTJZ1XF9cMGOBby26jV2Ze2isbVx0C4qW92kwF0IUVuVp47wEaXUMxh1hIpy1hEqpT4D+gMNlFJ7gCcpWM2iYFTqNxilE9swyieu9/cY/lqwYwFTfpuC3WVHo8nIzWD6yukAIZkMvQXuAOZwM42sjYg2RUuBuxCiVilvHWEO8GdFDqy1vvo0j2uMdQ+rzeurX8fhdhTZlufOY8aGGSGTCPNceTg9TgCiIqJoHNOYaFO0FLgLIWqt8izMexXGdcFGGDPL+GitL6+kuALiQM6BErcfyi1poGztULzGz2KyyCK2QoiQ4m9B/UvAPRhzjO6jlFGcNVVja2P255x8GbKhpWEAoqk6hRexDVNhWM1Wo9tTCtyFEMFi/f/gx6mQtQfim8HAydDlyio5lL9f+f8FXK21TqmKYALt7u53+64RekWGRzKx88RTvKpmKLHAPTKWaFO01PgJIYLL+v/BvLvAWfBZnLXbuA9Vkgz9TYRhwNpKjyJIDG8zHMA3arSRpVGNHjUqBe5CiBrpx6n/JEEvp93YHgSJ8D3gWmrx2oPD2wxnWOth/HX0rxo5i0zhAveIsAjiI+OlwF2I2qIauwsDKquU+VlK215B/ibCOsA1SqlLgPWAs/CDWuu7Kiku4QcpcBciBFRzd2FAxTcz3l9J26uAv4kwkX+6RosvtV6rBs4Eu8IF7uZws6/APTIiMtChCSGqQjV3FwbUwMlFkz6AKdrYXgX8nVlmQJVEIcqk+AruUuAuRAip5u7CgPIm9iAdNSqqkXcRWylwF0JUd3dhwHW5stpauuUpqE/AmPElEaM7NBV4S2t9sJJjC0neAneX2wUgBe5CCEM1dxeGEn8L6nsD3wEHgd8LNo8D/q2UGqK1/r3UF4tSlVTgHm+Nl0VshRD/qObuwlDibxPjZeAz4BattQdAKRUGvANMBy6s3PBqr+I1frHmWOKi4qTGTwhRumrsLgwl/ibCc4AJ3iQIoLX2KKVeAdZUZmC1kUd7cLgcvkVs4yLjiDXHEhkRKclPCCECxN9EmAW0BrYU294ayKyMgGobt8eNw+Xw1fjViaxDTGSM1PgJIUSQ8DcRfg68r5R6EPgNY7DMRcALGF2mgmIF7uEm6lvqYzVZZRFbIYQIQv4mwgcxFuOdWei1TuBt4OFKjKvGKVzgHhkeKQXuonYKlSm+REjxt6A+H7hbKfUIcCZGUtymtc6tiuCCXeEC96iIKClwF7VbKE3xJUKKv+UTzwK7tdbvABsKbb8FaKq1fqKS4wsqhQvctdZYTBYpcBehI5Sm+BIhxd+u0fHAmBK2rwYeAWpdIixe4G41W6XAXYSm2jbFl3TzigL+fpI3Ag6VsP0wkFDxcILLifwTAEaNnzVOCtxFaKtNU3xJN68oxN/itb+BPiVs7wvU0K+FJ1NK0cDSgGZxzWhbry1nxJ6B1WyVJChC28DJxpRehdXUKb5O1c0rQo6/LcJ3gVeVUmbgp4JtA4HngRcrM7BAqxddL9AhCBFcatMUX7Wtm1dUiL+jRqcrpRoA/wd4h0bmA69rradVdnBCiCBTW6b4qk3dvKLC/J7XS2v9CNAA6An0AhpqrUO6hlAIUcPUpm5eUWHlGvaotc4B/qzkWIQQonrUpm5eUWEy/l8IEZpqSzevqDBZ8kAIIURIk0QohBAipFVaIlRKDaqsfQkRVNb/D17tBFPqGD/X/y/QEQkhKlGFrhEqpZoC1wM3Ai0AqTgXtcv6/+H66k4i3A7jftZu4z7I9SUhagm/W4RKqXCl1BVKqQVAOnAFxjJMbSs5NiECLvfbyf8kwQIRbge538oweyFqizK3CJVS7YGJwL+AHOBTYDAwXmudWjXhCRFYUfYDfm0XQtQ8ZUqESqllQCcgBbhSa/1zwfaHqjC2gJi7Zi8vfb+FfZl2mtSJ5oEh7RnVrWmgwxIBss9Tn2Zhh0veHoB4hBCVr6xdo72AjzCmUvu5CuMJqLlr9vLI7A3szbSjgb2Zdh6ZvYG5a/YGOjQRIDPM15Kriy60nKvNzDBfG6CIhBCVrayJsAdG63GZUmqNUurfSqnGVRhXQLz0/RbsTneRbXanm5e+3xKgiESgnTP8Jibrm9jjaYBHK/Z4GjBZ38Q5w28KdGhCiEpSpq5RrfVa4Hal1H0YC/PeCEzDSKTDlVL7tdbHqizKarIv0+7XdlH7Gd3it3HV9wOluxy5dCBqJ39Xn3AAHwMfK6XaYgye+TfwjFLqJ6310CqIsdo0qRPN3hKSXpM60SU8W5Smtn1YjurWtEbHX1m8lw68vSbeSweAnB9Ro5W7oF5rva1g1YnmwJUYyzHVaA8MaU+0qWgpZLQpnAeGtA9QRDWPXGetveTSgaitKjyzjNbarbX+Sms9sjICCqRR3Zry/OjONK0TjQKa1onm+dGd5duuH+TDsvaSSweitipr+USZlmvXWh+tWDiBJ91gFSMflrWXXDoQtVVZW4SHgUOnuWVURYCiZintQ1E+LGs+uXQgaquyDpYZcIrHLgXuBlwVD0fUdA8MaV9kQAXIh2Vt4e0pqU0DoYSAspdPnFREr5TqDrwI9AXeBZ729+BKqUuB1zEm656htX6h2OP9ga+AnQWbZmutp/p7HFF95MOydpNLB6I28nv1CaVUa+BZjHrC2UCi1np7OfYTDvwHuATYA/yplPq6hHlLl2mtR/i7fxE48mEphKhJyjxqVClVXyn1OrAZaAz00lpfVZ4kWOB8YJvWeofWOh/4HKjxI0+FEELULGVKhEqpR4HtQD9gpNb6Yq31ygoeuymwu9D9PQXbiuullFqnlPpWKXV2BY8phBBCFFHWrtFnADtGsrpNKXVbSU/SWl/ux7FVSbsodn810FJrfUIpNQyYC7Q7aUdK3QTcBNCiRQs/QhBVYv3/4MepkLUH4pvBwMmyiK0QImiVNRF+xMlJqqL2YMxK49UM2Ff4CVrr44V+/0Yp9ZZSqoHW+nCx570HvAfQo0ePyo5T+GP9/2DeXeAsqDfL2m3cB0mGQoigVNZRoxNO9xylVPPTPaeYP4F2BYNv9gJjgWuK7bMxcFBrrZVS52N05R7x8ziiOv049Z8k6OW0G9slEQohgpDfo0aLK0hWj2OsSFHmqmmttUspdQfwPUb5xEyt9Sal1C0Fj78DJAO3KqVcGF2zY7XW0uILZll7/NsuhBABVtYp1upglDoMBpzAC8AbwGTgIWATcIO/B9dafwN8U2zbO4V+fxN409/9igCKb2Z0h5a0XQghglBZW4TPYRTOf4gxk8yrGPV/VmBobV61Xvhp4OSi1wgBTNHGdiGCSG1bLkyUX1kT4XDgeq31IqXUW8A2YLvW+p4qi0zUTN7rgDJqVAQxWVtRFFbWRNgESAXQWu9QSjmA/1ZZVKJm63KlJD4R1E61XJgkwtBT1pllwjCuDXq5gdzKD0cIIaqeLBcmCitri1AB/08plVdwPwr4r1KqSDL0s6A+OEkxuBC1Xk1dW1Gua1aNsrYIP8Qodj9ScPt/GNOjHSl2q9m8xeBZuwH9TzH4+v8FOjIhRCWqiWsreq9r7s20o/nnuubcNXsDHVqNV9aC+uurOpCgIMXgQoSEmrhcmFzXrDoVLqivVaQYXIiQUdOWC5PrmlWnzMswhYTSir6lGFwIEWClXb8M9uuaNYEkwsIGTjaKvwuTYnAhRBCoidc1awrpGi1MisGFEEGqJl7XrClUbZvDukePHnrlyoquGSyEEKI2UUqt0lr3KOkx6RoVQggR0iQRCiGECGmSCIUQQoQ0SYRCCCFCmiRCIYQQIU0SoRBCiJAmiVAIIURIk4J6IYQQQac6l5ySRCiEECKoeJec8q624V1yCqiSZChdo0IIIYLKqZacqgqSCIUQQgSV6l5yShKhEEKIoFLdS05JIhRCCBFUqnvJKRksI4QQIqhU95JTkgiFEEIEnVHdmlbbWovSNSqEECKkSSIUQggR0iQRCiGECGmSCIUQQoQ0SYRCCCFCmiRCIYQQIU0SoRBCiJCmtNaBjqFSKaUOAbsCHUcANAAOBzqIGkDOU9nIeSobOU9lEwznqaXWumFJD9S6RBiqlFIrtdY9Ah1HsJPzVDZynspGzlPZBPt5kq5RIYQQIU0SoRBCiJAmibD2eC/QAdQQcp7KRs5T2ch5KpugPk9yjVAIIURIkxahEEKIkCaJUAghREiTRFjDKKUuVUptUUptU0o9XMLjI5VS65VSa5VSK5VSFwUizkA73Xkq9LzzlFJupVRydcYXLMrw99RfKZVV8Pe0Vik1ORBxBlpZ/p4KztVapdQmpdTP1R1jMCjD39MDhf6WNhb836sXiFiL0FrLrYbcgHBgO9AGMAPrgMRiz4nhn2u/XYDNgY47GM9Toef9BHwDJAc67mA8T0B/YH6gY60B56kOkAq0KLjfKNBxB+N5Kvb8y4CfAh231lpahDXM+cA2rfUOrXU+8DkwsvATtNYndMFfGWAFQnE01GnPU4E7ARuQUZ3BBZGynqdQV5bzdA0wW2v9N4DWOhT/pvz9e7oa+KxaIjsNSYQ1S1Ngd6H7ewq2FaGUukIptRlYANxQTbEFk9OeJ6VUU+AK4J1qjCvYlOnvCeillFqnlPpWKXV29YQWVMpyns4C6iqlliilViml/lVt0QWPsv49oZSyAJdifBENuIhAByD8okrYdlKLT2s9B5ijlOoLPA0MqurAgkxZztNrwENaa7dSJT09JJTlPK3GmKPxhFJqGDAXaFfVgQWZspynCOBcYCAQDfyulFqutd5a1cEFkTJ9PhW4DPhVa320CuMpM0mENcseoHmh+82AfaU9WWu9VCl1plKqgdY60BPeVqeynKcewOcFSbABMEwp5dJaz62WCIPDac+T1vp4od+/UUq9JX9PJf497QEOa61zgByl1FKgKxBKidCfz6exBEm3KEjXaE3zJ9BOKdVaKWXG+GP6uvATlFJtVcGnu1KqO8ZF6yPVHmlgnfY8aa1ba61baa1bASnAbSGWBKFsf0+NC/09nY/xmSF/T8XOE/AV0EcpFVHQ7XcBkFbNcQZaWc4TSql4oB/GOQsK0iKsQbTWLqXUHcD3GCO0ZmqtNymlbil4/B0gCfiXUsoJ2IGrCg2eCQllPE8hr4znKRm4VSnlwvh7Git/TyefJ611mlLqO2A94AFmaK03Bi7q6ufH/7srgB8KWs9BQaZYE0IIEdKka1QIIURIk0QohBAipEkiFEIIEdIkEQohhAhpkgiFEEKENEmEQgghQpokQiGEECFNEqEQIugppb5WSh1TSqUEOhZR+0giFELUBK8Cobiig6gGkgiFqAEKlvd5M9BxlIdS6kWl1MKK7ENrvRjIrqSQhChCEqEQQSQYEl4VxHAOxmrlQgQlmXRbiHJQSpkLVuGuMQIYc1fg/53qCUqp0iaoHqq13l3KY0JUCmkRCgEopaxKqY+UUieUUgeVUo8opeYrpWYVPL5EKfW2UuplpdQh4NeC7ZFKqdcKXuNQSi1XSl1UaL9DlVLZSqmIgvvtlFJaKfV2oec8q5RaWHCsfsDtBc/RSqlWhcIMU0o9p5Q6rJTKKIil1P/Dp4j5UqXUsoLBJ0eVUt8rpToWPFZqDMrwoFJqu1LKrpTaoJS69jTntTGQAOQrpb5RSuUUvH5A4edprTuVcpMkKKqcJEIhDNMxEsAVwMUYrZg+xZ5zLcYq3H34Z+DGNOAq4AagG7AB+E4pdUbB48uAKIyFgAH6A4eBwomgP7AEuBv4HfgAOKPgVjgRjANcwIXAHcA9Bcc+lZJitgKvAecXHDsLmFewhtypYngGuBG4HUgEngfeVUoNP8XxuxX8vB1jwEtXYCPwymniFqL6aK3lJreQvgExQD7GWnvebVbgGDCr4P4SYH2x11kLXvevQtvCge3AM4W2/QE8UvD7J8CTGGv7nQFYCvbRu9Bx3iwhxiXA78W2LcRY966093VSzKU8zwq4gYtKi6HgOXagT7HtrwHfnGLfjwCZQONC28YDe/z8N1oEHAJyMVZC7xXovxu51Z6bXCMUAs4ETMAK7watdU4J161WlfK6Xwu9zq2U+h2jxeS1BKPl9TxGq/N1jFZnf4zWobPwsU9hfbH7+4BGp3lN8ZhRSp0JPI2xinpDjJ6hMKDFKfaTiNGy/U4pVXgRUxOQforXnQPM01ofKLStLbDtNHEXobUe5M/zhfCHJEIhjK5DgNOtUl18Re1Tva7wtiUY19wSgViM5LQEo3v0EPCb1tpZhjiLP0dz+ssbJa0CPg/YC9xc8NMFpALmU+zHe5zLgL9PE1dh52Ak/sK6AWtP8RohqpVcIxTCaJ04Ma6ZAaCUsgCdyvC6fKDw4JhwoBdGYvFaBkQCDwK/aK3d/JMI+xf87pWP0b1aJZRS9YGOwHNa60Va6zSM5Fz4S3FJMaQCeUBLrfW2YrddpRzLgtH6W1PsIUmEIqhIi1CEPK31CaXUTOBFpdRhYD/wOMYXxVJbiQXdp28DLxS8bifwb4xRkm8V2/9qjIErDxds/h1oDrTGSJBe6cD5BSM1TwBHtdaeynifBY5hdMdOUkrtBpoCL2G0Ck8VQ7ZS6mXgZaWUApZiXFvtCXi01u+VcKyuBT99XboFibgZkghFEJEWoRCG+zFabl8DizE+vFcCjtO87iHgfxijLNcCXYBLtdb7iz1vMUYrawmA1toBLMdoZRW+PvgyRossFaPb9FTX7fxWkFSvKohzI/Af4ImCOE4XwxPAFIxztQljsE4SxheAknQF/tJaF+6e7YbR+k4t+SVCVD+l9ekuiwgRepRSkcAu4CWt9fRAxyOEqDrSNSoEoJTqhnHtbAXGNbOHCn5+Eci4hBBVTxKhEP+4F2iPcb1sLdBXa70noBEJIaqcdI0KIYQIaTJYRgghREiTRCiEECKkSSIUQggR0iQRCiGECGmSCIUQQoQ0SYRCCCFCmiRCIYQQIU0SoRBCiJAmiVAIIURI+/85nibCrlwthAAAAABJRU5ErkJggg==\n", + "image/png": "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OXPo1KkTkZGRNGvWjOeff77EWowtW7bkueee44477iA+Pp6mTZvyyiuvlIjntddeo3PnzsTExNCkSRMmTJhAdna2V+e+ZcuWTJ06lRtvvJHY2FgaNWp0WotWKcW//vUvRo0aRUxMDE8++SQA7733Hm3atMFoNNKmTRv+85//lNgvwOjRo1FKee4DzJ8/nwsvvJCoqChatWrFU089RWFhYYnzWLxrtCLnQtRsdqedHGsOu7N281fOX1jtVk/rLzws/Ow7EGdV2URYZgmD1tqMa4aZ2mvj/2D+fZCzF9Cun/Pv82syPJsnnniCu+++m/T0dEaOHInVavUkoi1btnD//fdzxx13sGTJkhKv++STT4iIiODXX3/l7bff5o033vAsFnvo0CHGjBnDzTffTEZGBsuXL2fcuHHlxnDq1CmGDBnCokWL2LBhAykpKYwaNYqtW7cCruTWtGlTpkyZwsGDB09bHNhtzZo1jB49mlGjRrFp0yZeeuklXnzxRd5+u+Tg4ddff51OnTqxdu1aHnvsMR599FF+++03z+NhYWG88cYbbNmyhU8//ZRVq1Zx7733en1uX3vtNTp06MDatWt59tlnefLJJ5kzp+TcD88++yxXXXUVmzZt4p577mHu3LlMmjSJBx54gM2bN3P//fdz9913M3/+fAD++OMPAP7zn/9w8OBBz/3vv/+esWPHMmnSJLZs2cKsWbNIS0vzJNfynO1ciJrJardyKPcQu07s4vCpw0SER4TUtGfVqVLLMBWNGn0I2AJs01rbij32h9b6It+F6B2/L8P0eseiJFhKQjP4h39XYU9LS2P06NGe1lFmZiatWrXi1Vdf5aGHHjrja8eMGUNsbCwzZ84EXC2LgoKCEh+YV1xxBS1atGDmzJmsXbuWCy+8kMzMTFq0aHHa/mbPns2kSZM4depUucfs0aMHw4YNY/LkyYCr9TJp0iQefvhhz3OWLVtG//79OXr0KA0aNGDs2LEcPHiQH3/80fOcqVOnMnPmTPbt2+fZT8+ePfnss888z2nbti0333yz51ilfffdd4wYMQKLxUJYWNhpxy1Ly5Ytadu2LYsWLfJsmzBhAlu3buXnn38GXC3CSZMm8dZbb3me06tXL9q1a8esWbM828aPH8+OHTtKvO7LL78kNTXV85w+ffpwxRVXlJgQfN68edx4443k5uailKJfv350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\n", "text/plain": [ "
" ] @@ -1273,10 +1333,544 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "id": "ec8d94d0", + "metadata": {}, + "source": [ + "## Calculate the fraction of mRNA allocated to the core metabolism\n", + "at mu = 0.72 h-1" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "4d1026e3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No enzyme information found for reaction: D_LACt2\n", + "No enzyme information found for reaction: FRD7\n", + "No enzyme information found for reaction: LDH_D\n", + "Read LP format model from file /tmp/tmpl4nlo8is.lp\n", + "Reading time = 0.00 seconds\n", + ": 72 rows, 190 columns, 720 nonzeros\n", + "Setting up the proteome allocation model e_coli_core\n", + "\n", + "Add total condition-dependent protein constraint\n", + "\tTotal protein concentration: 0.16995 g/gDW\n", + "\n", + "Add active protein sector\n", + "\n", + "Add the following protein sector: TranslationalProteinSector\n", + "\n", + "Add the following protein sector: UnusedEnzymeSector\n", + "\n", + "Done with setting up the proteome allocation model e_coli_core\n", + "\n", + "Add the following mRNA sector: ActivemRNASector \n", + "\n", + "1.1.1.42\n", + "-1.0*1.1.1.42 - 1.0*1.1.1.42_reverse_0ad9c + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_1.1.1.42_max: 0 <= -1.0*1.1.1.42 - 1.0*1.1.1.42_reverse_0ad9c + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*1.1.1.42 - 1.0*1.1.1.42_reverse_0ad9c + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_1.1.1.42_min: -1000000.0 <= -1.0*1.1.1.42 - 1.0*1.1.1.42_reverse_0ad9c + 56250.0*mRNA_gene_dummy <= 0\n", + "1.2.1.10\n", + "-1.0*1.2.1.10 - 1.0*1.2.1.10_reverse_7bee2 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_1.2.1.10_max: 0 <= -1.0*1.2.1.10 - 1.0*1.2.1.10_reverse_7bee2 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*1.2.1.10 - 1.0*1.2.1.10_reverse_7bee2 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_1.2.1.10_min: -1000000.0 <= -1.0*1.2.1.10 - 1.0*1.2.1.10_reverse_7bee2 + 56250.0*mRNA_gene_dummy <= 0\n", + "4.2.1.11\n", + "-1.0*4.2.1.11 - 1.0*4.2.1.11_reverse_3b7e2 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_4.2.1.11_max: 0 <= -1.0*4.2.1.11 - 1.0*4.2.1.11_reverse_3b7e2 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*4.2.1.11 - 1.0*4.2.1.11_reverse_3b7e2 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_4.2.1.11_min: -1000000.0 <= -1.0*4.2.1.11 - 1.0*4.2.1.11_reverse_3b7e2 + 56250.0*mRNA_gene_dummy <= 0\n", + "4.1.2.13\n", + "-1.0*4.1.2.13 - 1.0*4.1.2.13_reverse_00a63 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_4.1.2.13_max: 0 <= -1.0*4.1.2.13 - 1.0*4.1.2.13_reverse_00a63 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*4.1.2.13 - 1.0*4.1.2.13_reverse_00a63 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_4.1.2.13_min: -1000000.0 <= -1.0*4.1.2.13 - 1.0*4.1.2.13_reverse_00a63 + 56250.0*mRNA_gene_dummy <= 0\n", + "5.3.1.9\n", + "-1.0*5.3.1.9 - 1.0*5.3.1.9_reverse_7ffb4 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_5.3.1.9_max: 0 <= -1.0*5.3.1.9 - 1.0*5.3.1.9_reverse_7ffb4 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*5.3.1.9 - 1.0*5.3.1.9_reverse_7ffb4 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_5.3.1.9_min: -1000000.0 <= -1.0*5.3.1.9 - 1.0*5.3.1.9_reverse_7ffb4 + 56250.0*mRNA_gene_dummy <= 0\n", + "2.7.2.3\n", + "-1.0*2.7.2.3 - 1.0*2.7.2.3_reverse_4d152 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_2.7.2.3_max: 0 <= -1.0*2.7.2.3 - 1.0*2.7.2.3_reverse_4d152 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*2.7.2.3 - 1.0*2.7.2.3_reverse_4d152 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_2.7.2.3_min: -1000000.0 <= -1.0*2.7.2.3 - 1.0*2.7.2.3_reverse_4d152 + 56250.0*mRNA_gene_dummy <= 0\n", + "5.1.3.1\n", + "-1.0*5.1.3.1 - 1.0*5.1.3.1_reverse_9f863 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_5.1.3.1_max: 0 <= -1.0*5.1.3.1 - 1.0*5.1.3.1_reverse_9f863 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*5.1.3.1 - 1.0*5.1.3.1_reverse_9f863 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_5.1.3.1_min: -1000000.0 <= -1.0*5.1.3.1 - 1.0*5.1.3.1_reverse_9f863 + 56250.0*mRNA_gene_dummy <= 0\n", + "2.2.1.2\n", + "-1.0*2.2.1.2 - 1.0*2.2.1.2_reverse_a3a39 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_2.2.1.2_max: 0 <= -1.0*2.2.1.2 - 1.0*2.2.1.2_reverse_a3a39 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*2.2.1.2 - 1.0*2.2.1.2_reverse_a3a39 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_2.2.1.2_min: -1000000.0 <= -1.0*2.2.1.2 - 1.0*2.2.1.2_reverse_a3a39 + 56250.0*mRNA_gene_dummy <= 0\n", + "2.2.1.1\n", + "-1.0*2.2.1.1 - 1.0*2.2.1.1_reverse_21e4a + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_2.2.1.1_max: 0 <= -1.0*2.2.1.1 - 1.0*2.2.1.1_reverse_21e4a + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*2.2.1.1 - 1.0*2.2.1.1_reverse_21e4a + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_2.2.1.1_min: -1000000.0 <= -1.0*2.2.1.1 - 1.0*2.2.1.1_reverse_21e4a + 56250.0*mRNA_gene_dummy <= 0\n", + "1.1.1.1\n", + "-1.0*1.1.1.1 - 1.0*1.1.1.1_reverse_e086a + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_1.1.1.1_max: 0 <= -1.0*1.1.1.1 - 1.0*1.1.1.1_reverse_e086a + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*1.1.1.1 - 1.0*1.1.1.1_reverse_e086a + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_1.1.1.1_min: -1000000.0 <= -1.0*1.1.1.1 - 1.0*1.1.1.1_reverse_e086a + 56250.0*mRNA_gene_dummy <= 0\n", + "2.3.1.8\n", + "-1.0*2.3.1.8 - 1.0*2.3.1.8_reverse_fce3d + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_2.3.1.8_max: 0 <= -1.0*2.3.1.8 - 1.0*2.3.1.8_reverse_fce3d + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*2.3.1.8 - 1.0*2.3.1.8_reverse_fce3d + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_2.3.1.8_min: -1000000.0 <= -1.0*2.3.1.8 - 1.0*2.3.1.8_reverse_fce3d + 56250.0*mRNA_gene_dummy <= 0\n", + "2.7.2.1\n", + "-1.0*2.7.2.1 - 1.0*2.7.2.1_reverse_25ba2 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_2.7.2.1_max: 0 <= -1.0*2.7.2.1 - 1.0*2.7.2.1_reverse_25ba2 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*2.7.2.1 - 1.0*2.7.2.1_reverse_25ba2 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_2.7.2.1_min: -1000000.0 <= -1.0*2.7.2.1 - 1.0*2.7.2.1_reverse_25ba2 + 56250.0*mRNA_gene_dummy <= 0\n", + "1.1.1.37\n", + "-1.0*1.1.1.37 - 1.0*1.1.1.37_reverse_27abb + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_1.1.1.37_max: 0 <= -1.0*1.1.1.37 - 1.0*1.1.1.37_reverse_27abb + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*1.1.1.37 - 1.0*1.1.1.37_reverse_27abb + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_1.1.1.37_min: -1000000.0 <= -1.0*1.1.1.37 - 1.0*1.1.1.37_reverse_27abb + 56250.0*mRNA_gene_dummy <= 0\n", + "4.2.1.2\n", + "-1.0*4.2.1.2 - 1.0*4.2.1.2_reverse_a8cab + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_4.2.1.2_max: 0 <= -1.0*4.2.1.2 - 1.0*4.2.1.2_reverse_a8cab + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*4.2.1.2 - 1.0*4.2.1.2_reverse_a8cab + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_4.2.1.2_min: -1000000.0 <= -1.0*4.2.1.2 - 1.0*4.2.1.2_reverse_a8cab + 56250.0*mRNA_gene_dummy <= 0\n", + "2.7.4.3\n", + "-1.0*2.7.4.3 - 1.0*2.7.4.3_reverse_8c315 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_2.7.4.3_max: 0 <= -1.0*2.7.4.3 - 1.0*2.7.4.3_reverse_8c315 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*2.7.4.3 - 1.0*2.7.4.3_reverse_8c315 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_2.7.4.3_min: -1000000.0 <= -1.0*2.7.4.3 - 1.0*2.7.4.3_reverse_8c315 + 56250.0*mRNA_gene_dummy <= 0\n", + "1.2.1.12\n", + "-1.0*1.2.1.12 - 1.0*1.2.1.12_reverse_59126 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_1.2.1.12_max: 0 <= -1.0*1.2.1.12 - 1.0*1.2.1.12_reverse_59126 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*1.2.1.12 - 1.0*1.2.1.12_reverse_59126 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_1.2.1.12_min: -1000000.0 <= -1.0*1.2.1.12 - 1.0*1.2.1.12_reverse_59126 + 56250.0*mRNA_gene_dummy <= 0\n", + "1.1.1.49\n", + "-1.0*1.1.1.49 - 1.0*1.1.1.49_reverse_10374 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_1.1.1.49_max: 0 <= -1.0*1.1.1.49 - 1.0*1.1.1.49_reverse_10374 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*1.1.1.49 - 1.0*1.1.1.49_reverse_10374 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_1.1.1.49_min: -1000000.0 <= -1.0*1.1.1.49 - 1.0*1.1.1.49_reverse_10374 + 56250.0*mRNA_gene_dummy <= 0\n", + "E11\n", + "-1.0*E11 - 1.0*E11_reverse_e6a6a + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E11_max: 0 <= -1.0*E11 - 1.0*E11_reverse_e6a6a + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E11 - 1.0*E11_reverse_e6a6a + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E11_min: -1000000.0 <= -1.0*E11 - 1.0*E11_reverse_e6a6a + 56250.0*mRNA_gene_dummy <= 0\n", + "E411\n", + "-1.0*E411 - 1.0*E411_reverse_f6dc2 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E411_max: 0 <= -1.0*E411 - 1.0*E411_reverse_f6dc2 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E411 - 1.0*E411_reverse_f6dc2 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E411_min: -1000000.0 <= -1.0*E411 - 1.0*E411_reverse_f6dc2 + 56250.0*mRNA_gene_dummy <= 0\n", + "E828\n", + "-1.0*E828 - 1.0*E828_reverse_ce5bd + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E828_max: 0 <= -1.0*E828 - 1.0*E828_reverse_ce5bd + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E828 - 1.0*E828_reverse_ce5bd + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E828_min: -1000000.0 <= -1.0*E828 - 1.0*E828_reverse_ce5bd + 56250.0*mRNA_gene_dummy <= 0\n", + "E1034\n", + "-1.0*E1034 - 1.0*E1034_reverse_4a3cd + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E1034_max: 0 <= -1.0*E1034 - 1.0*E1034_reverse_4a3cd + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E1034 - 1.0*E1034_reverse_4a3cd + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E1034_min: -1000000.0 <= -1.0*E1034 - 1.0*E1034_reverse_4a3cd + 56250.0*mRNA_gene_dummy <= 0\n", + "E19\n", + "-1.0*E19 - 1.0*E19_reverse_a8694 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E19_max: 0 <= -1.0*E19 - 1.0*E19_reverse_a8694 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E19 - 1.0*E19_reverse_a8694 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E19_min: -1000000.0 <= -1.0*E19 - 1.0*E19_reverse_a8694 + 56250.0*mRNA_gene_dummy <= 0\n", + "E836\n", + "-1.0*E836 - 1.0*E836_reverse_a82df + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E836_max: 0 <= -1.0*E836 - 1.0*E836_reverse_a82df + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E836 - 1.0*E836_reverse_a82df + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E836_min: -1000000.0 <= -1.0*E836 - 1.0*E836_reverse_a82df + 56250.0*mRNA_gene_dummy <= 0\n", + "E37\n", + "-1.0*E37 - 1.0*E37_reverse_5e893 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E37_max: 0 <= -1.0*E37 - 1.0*E37_reverse_5e893 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E37 - 1.0*E37_reverse_5e893 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E37_min: -1000000.0 <= -1.0*E37 - 1.0*E37_reverse_5e893 + 56250.0*mRNA_gene_dummy <= 0\n", + "E840\n", + "-1.0*E840 - 1.0*E840_reverse_a909f + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E840_max: 0 <= -1.0*E840 - 1.0*E840_reverse_a909f + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E840 - 1.0*E840_reverse_a909f + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E840_min: -1000000.0 <= -1.0*E840 - 1.0*E840_reverse_a909f + 56250.0*mRNA_gene_dummy <= 0\n", + "E90\n", + "-1.0*E90 - 1.0*E90_reverse_96ab9 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E90_max: 0 <= -1.0*E90 - 1.0*E90_reverse_96ab9 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E90 - 1.0*E90_reverse_96ab9 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E90_min: -1000000.0 <= -1.0*E90 - 1.0*E90_reverse_96ab9 + 56250.0*mRNA_gene_dummy <= 0\n", + "E869\n", + "-1.0*E869 - 1.0*E869_reverse_0ac53 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E869_max: 0 <= -1.0*E869 - 1.0*E869_reverse_0ac53 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E869 - 1.0*E869_reverse_0ac53 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E869_min: -1000000.0 <= -1.0*E869 - 1.0*E869_reverse_0ac53 + 56250.0*mRNA_gene_dummy <= 0\n", + "3.6.3.14\n", + "-1.0*3.6.3.14 - 1.0*3.6.3.14_reverse_192ee + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_3.6.3.14_max: 0 <= -1.0*3.6.3.14 - 1.0*3.6.3.14_reverse_192ee + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*3.6.3.14 - 1.0*3.6.3.14_reverse_192ee + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_3.6.3.14_min: -1000000.0 <= -1.0*3.6.3.14 - 1.0*3.6.3.14_reverse_192ee + 56250.0*mRNA_gene_dummy <= 0\n", + "E114\n", + "-1.0*E114 - 1.0*E114_reverse_54657 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E114_max: 0 <= -1.0*E114 - 1.0*E114_reverse_54657 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E114 - 1.0*E114_reverse_54657 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E114_min: -1000000.0 <= -1.0*E114 - 1.0*E114_reverse_54657 + 56250.0*mRNA_gene_dummy <= 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "E881\n", + "-1.0*E881 - 1.0*E881_reverse_dc333 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E881_max: 0 <= -1.0*E881 - 1.0*E881_reverse_dc333 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E881 - 1.0*E881_reverse_dc333 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E881_min: -1000000.0 <= -1.0*E881 - 1.0*E881_reverse_dc333 + 56250.0*mRNA_gene_dummy <= 0\n", + "E177\n", + "-1.0*E177 - 1.0*E177_reverse_b7980 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E177_max: 0 <= -1.0*E177 - 1.0*E177_reverse_b7980 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E177 - 1.0*E177_reverse_b7980 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E177_min: -1000000.0 <= -1.0*E177 - 1.0*E177_reverse_b7980 + 56250.0*mRNA_gene_dummy <= 0\n", + "E356\n", + "-1.0*E356 - 1.0*E356_reverse_fab31 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E356_max: 0 <= -1.0*E356 - 1.0*E356_reverse_fab31 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E356 - 1.0*E356_reverse_fab31 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E356_min: -1000000.0 <= -1.0*E356 - 1.0*E356_reverse_fab31 + 56250.0*mRNA_gene_dummy <= 0\n", + "E910\n", + "-1.0*E910 - 1.0*E910_reverse_67932 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E910_max: 0 <= -1.0*E910 - 1.0*E910_reverse_67932 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E910 - 1.0*E910_reverse_67932 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E910_min: -1000000.0 <= -1.0*E910 - 1.0*E910_reverse_67932 + 56250.0*mRNA_gene_dummy <= 0\n", + "E1005\n", + "-1.0*E1005 - 1.0*E1005_reverse_05c42 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E1005_max: 0 <= -1.0*E1005 - 1.0*E1005_reverse_05c42 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E1005 - 1.0*E1005_reverse_05c42 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E1005_min: -1000000.0 <= -1.0*E1005 - 1.0*E1005_reverse_05c42 + 56250.0*mRNA_gene_dummy <= 0\n", + "E180\n", + "-1.0*E180 - 1.0*E180_reverse_7b7b6 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E180_max: 0 <= -1.0*E180 - 1.0*E180_reverse_7b7b6 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E180 - 1.0*E180_reverse_7b7b6 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E180_min: -1000000.0 <= -1.0*E180 - 1.0*E180_reverse_7b7b6 + 56250.0*mRNA_gene_dummy <= 0\n", + "E913\n", + "-1.0*E913 - 1.0*E913_reverse_0493a + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E913_max: 0 <= -1.0*E913 - 1.0*E913_reverse_0493a + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E913 - 1.0*E913_reverse_0493a + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E913_min: -1000000.0 <= -1.0*E913 - 1.0*E913_reverse_0493a + 56250.0*mRNA_gene_dummy <= 0\n", + "E390\n", + "-1.0*E390 - 1.0*E390_reverse_50146 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E390_max: 0 <= -1.0*E390 - 1.0*E390_reverse_50146 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E390 - 1.0*E390_reverse_50146 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E390_min: -1000000.0 <= -1.0*E390 - 1.0*E390_reverse_50146 + 56250.0*mRNA_gene_dummy <= 0\n", + "E1025\n", + "-1.0*E1025 - 1.0*E1025_reverse_0ce33 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_E1025_max: 0 <= -1.0*E1025 - 1.0*E1025_reverse_0ce33 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*E1025 - 1.0*E1025_reverse_0ce33 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_E1025_min: -1000000.0 <= -1.0*E1025 - 1.0*E1025_reverse_0ce33 + 56250.0*mRNA_gene_dummy <= 0\n", + "1.4.1.4\n", + "-1.0*1.4.1.4 - 1.0*1.4.1.4_reverse_16d5d + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_1.4.1.4_max: 0 <= -1.0*1.4.1.4 - 1.0*1.4.1.4_reverse_16d5d + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*1.4.1.4 - 1.0*1.4.1.4_reverse_16d5d + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_1.4.1.4_min: -1000000.0 <= -1.0*1.4.1.4 - 1.0*1.4.1.4_reverse_16d5d + 56250.0*mRNA_gene_dummy <= 0\n", + "1.4.1.13\n", + "-1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_1.4.1.13_max: 0 <= -1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_1.4.1.13_min: -1000000.0 <= -1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 56250.0*mRNA_gene_dummy <= 0\n", + "6.2.1.5\n", + "-1.0*6.2.1.5 - 1.0*6.2.1.5_reverse_81a81 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_6.2.1.5_max: 0 <= -1.0*6.2.1.5 - 1.0*6.2.1.5_reverse_81a81 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*6.2.1.5 - 1.0*6.2.1.5_reverse_81a81 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_6.2.1.5_min: -1000000.0 <= -1.0*6.2.1.5 - 1.0*6.2.1.5_reverse_81a81 + 56250.0*mRNA_gene_dummy <= 0\n", + "5.4.2.12\n", + "-1.0*5.4.2.12 - 1.0*5.4.2.12_reverse_89e39 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_5.4.2.12_max: 0 <= -1.0*5.4.2.12 - 1.0*5.4.2.12_reverse_89e39 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*5.4.2.12 - 1.0*5.4.2.12_reverse_89e39 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_5.4.2.12_min: -1000000.0 <= -1.0*5.4.2.12 - 1.0*5.4.2.12_reverse_89e39 + 56250.0*mRNA_gene_dummy <= 0\n", + "5.4.2.11\n", + "-1.0*5.4.2.11 - 1.0*5.4.2.11_reverse_12f8d + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_5.4.2.11_max: 0 <= -1.0*5.4.2.11 - 1.0*5.4.2.11_reverse_12f8d + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*5.4.2.11 - 1.0*5.4.2.11_reverse_12f8d + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_5.4.2.11_min: -1000000.0 <= -1.0*5.4.2.11 - 1.0*5.4.2.11_reverse_12f8d + 56250.0*mRNA_gene_dummy <= 0\n", + "5.3.1.1\n", + "-1.0*5.3.1.1 - 1.0*5.3.1.1_reverse_1b3f8 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_5.3.1.1_max: 0 <= -1.0*5.3.1.1 - 1.0*5.3.1.1_reverse_1b3f8 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*5.3.1.1 - 1.0*5.3.1.1_reverse_1b3f8 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_5.3.1.1_min: -1000000.0 <= -1.0*5.3.1.1 - 1.0*5.3.1.1_reverse_1b3f8 + 56250.0*mRNA_gene_dummy <= 0\n", + "5.3.1.6\n", + "-1.0*5.3.1.6 - 1.0*5.3.1.6_reverse_43474 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_5.3.1.6_max: 0 <= -1.0*5.3.1.6 - 1.0*5.3.1.6_reverse_43474 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*5.3.1.6 - 1.0*5.3.1.6_reverse_43474 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_5.3.1.6_min: -1000000.0 <= -1.0*5.3.1.6 - 1.0*5.3.1.6_reverse_43474 + 56250.0*mRNA_gene_dummy <= 0\n", + "4.2.1.3\n", + "-1.0*4.2.1.3 - 1.0*4.2.1.3_reverse_0da28 + 4687500000.0*mRNA_gene_dummy mRNA_gene_dummy_4.2.1.3_max: 0 <= -1.0*4.2.1.3 - 1.0*4.2.1.3_reverse_0da28 + 4687500000.0*mRNA_gene_dummy <= 1000000.0\n", + "-1.0*4.2.1.3 - 1.0*4.2.1.3_reverse_0da28 + 56250.0*mRNA_gene_dummy mRNA_gene_dummy_4.2.1.3_min: -1000000.0 <= -1.0*4.2.1.3 - 1.0*4.2.1.3_reverse_0da28 + 56250.0*mRNA_gene_dummy <= 0\n", + "2.3.3.16\n", + "-1.0*2.3.3.16 - 1.0*2.3.3.16_reverse_6d274 + 13717408333.3333*mRNA_b0720 mRNA_b0720_2.3.3.16_max: 0 <= -1.0*2.3.3.16 - 1.0*2.3.3.16_reverse_6d274 + 13717408333.3333*mRNA_b0720 <= 1000000.0\n", + "-1.0*2.3.3.16 - 1.0*2.3.3.16_reverse_6d274 + 164608.9*mRNA_b0720 mRNA_b0720_2.3.3.16_min: -1000000.0 <= -1.0*2.3.3.16 - 1.0*2.3.3.16_reverse_6d274 + 164608.9*mRNA_b0720 <= 0\n", + "4.1.1.49\n", + "-1.0*4.1.1.49 - 1.0*4.1.1.49_reverse_fe6ac + 21924033333.3333*mRNA_b3403 mRNA_b3403_4.1.1.49_max: 0 <= -1.0*4.1.1.49 - 1.0*4.1.1.49_reverse_fe6ac + 21924033333.3333*mRNA_b3403 <= 1000000.0\n", + "-1.0*4.1.1.49 - 1.0*4.1.1.49_reverse_fe6ac + 263088.4*mRNA_b3403 mRNA_b3403_4.1.1.49_min: -1000000.0 <= -1.0*4.1.1.49 - 1.0*4.1.1.49_reverse_fe6ac + 263088.4*mRNA_b3403 <= 0\n", + "1.1.1.38\n", + "-1.0*1.1.1.38 - 1.0*1.1.1.38_reverse_a027c + 23998408333.3333*mRNA_b1479 mRNA_b1479_1.1.1.38_max: 0 <= -1.0*1.1.1.38 - 1.0*1.1.1.38_reverse_a027c + 23998408333.3333*mRNA_b1479 <= 1000000.0\n", + "-1.0*1.1.1.38 - 1.0*1.1.1.38_reverse_a027c + 287980.9*mRNA_b1479 mRNA_b1479_1.1.1.38_min: -1000000.0 <= -1.0*1.1.1.38 - 1.0*1.1.1.38_reverse_a027c + 287980.9*mRNA_b1479 <= 0\n", + "3.1.3.11\n", + "-1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 5494533333.33333*mRNA_b3697 mRNA_b3697_3.1.3.11_max: 0 <= -1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 5494533333.33333*mRNA_b3697 <= 1000000.0\n", + "-1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 65934.4*mRNA_b3697 mRNA_b3697_3.1.3.11_min: -1000000.0 <= -1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 65934.4*mRNA_b3697 <= 0\n", + "3.1.3.11\n", + "-1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 8500833333.33333*mRNA_b3925 mRNA_b3925_3.1.3.11_max: 0 <= -1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 8500833333.33333*mRNA_b3925 <= 1000000.0\n", + "-1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 102010.0*mRNA_b3925 mRNA_b3925_3.1.3.11_min: -1000000.0 <= -1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 102010.0*mRNA_b3925 <= 0\n", + "3.1.3.11\n", + "-1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 8300033333.33333*mRNA_b4232 mRNA_b4232_3.1.3.11_max: 0 <= -1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 8300033333.33333*mRNA_b4232 <= 1000000.0\n", + "-1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 99600.4*mRNA_b4232 mRNA_b4232_3.1.3.11_min: -1000000.0 <= -1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 99600.4*mRNA_b4232 <= 0\n", + "3.1.3.11\n", + "-1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 7760208333.33333*mRNA_b2930 mRNA_b2930_3.1.3.11_max: 0 <= -1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 7760208333.33333*mRNA_b2930 <= 1000000.0\n", + "-1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 93122.5*mRNA_b2930 mRNA_b2930_3.1.3.11_min: -1000000.0 <= -1.0*3.1.3.11 - 1.0*3.1.3.11_reverse_6760e + 93122.5*mRNA_b2930 <= 0\n", + "2.7.1.40\n", + "-1.0*2.7.1.40 - 1.0*2.7.1.40_reverse_21252 + 17328033333.3333*mRNA_b1854 mRNA_b1854_2.7.1.40_max: 0 <= -1.0*2.7.1.40 - 1.0*2.7.1.40_reverse_21252 + 17328033333.3333*mRNA_b1854 <= 1000000.0\n", + "-1.0*2.7.1.40 - 1.0*2.7.1.40_reverse_21252 + 207936.4*mRNA_b1854 mRNA_b1854_2.7.1.40_min: -1000000.0 <= -1.0*2.7.1.40 - 1.0*2.7.1.40_reverse_21252 + 207936.4*mRNA_b1854 <= 0\n", + "2.7.1.40\n", + "-1.0*2.7.1.40 - 1.0*2.7.1.40_reverse_21252 + 16614533333.3333*mRNA_b1676 mRNA_b1676_2.7.1.40_max: 0 <= -1.0*2.7.1.40 - 1.0*2.7.1.40_reverse_21252 + 16614533333.3333*mRNA_b1676 <= 1000000.0\n", + "-1.0*2.7.1.40 - 1.0*2.7.1.40_reverse_21252 + 199374.4*mRNA_b1676 mRNA_b1676_2.7.1.40_min: -1000000.0 <= -1.0*2.7.1.40 - 1.0*2.7.1.40_reverse_21252 + 199374.4*mRNA_b1676 <= 0\n", + "2.7.9.2\n", + "-1.0*2.7.9.2 - 1.0*2.7.9.2_reverse_a35f2 + 47124033333.3333*mRNA_b1702 mRNA_b1702_2.7.9.2_max: 0 <= -1.0*2.7.9.2 - 1.0*2.7.9.2_reverse_a35f2 + 47124033333.3333*mRNA_b1702 <= 1000000.0\n", + "-1.0*2.7.9.2 - 1.0*2.7.9.2_reverse_a35f2 + 565488.4*mRNA_b1702 mRNA_b1702_2.7.9.2_min: -1000000.0 <= -1.0*2.7.9.2 - 1.0*2.7.9.2_reverse_a35f2 + 565488.4*mRNA_b1702 <= 0\n", + "3.1.1.31\n", + "-1.0*3.1.1.31 - 1.0*3.1.1.31_reverse_df6b1 + 8250208333.33333*mRNA_b0767 mRNA_b0767_3.1.1.31_max: 0 <= -1.0*3.1.1.31 - 1.0*3.1.1.31_reverse_df6b1 + 8250208333.33333*mRNA_b0767 <= 1000000.0\n", + "-1.0*3.1.1.31 - 1.0*3.1.1.31_reverse_df6b1 + 99002.5*mRNA_b0767 mRNA_b0767_3.1.1.31_min: -1000000.0 <= -1.0*3.1.1.31 - 1.0*3.1.1.31_reverse_df6b1 + 99002.5*mRNA_b0767 <= 0\n", + "2.3.1.54\n", + "-1.0*2.3.1.54 - 1.0*2.3.1.54_reverse_2d89b + 4563333333.33333*mRNA_b0902 mRNA_b0902_2.3.1.54_max: 0 <= -1.0*2.3.1.54 - 1.0*2.3.1.54_reverse_2d89b + 4563333333.33333*mRNA_b0902 <= 1000000.0\n", + "-1.0*2.3.1.54 - 1.0*2.3.1.54_reverse_2d89b + 54760.0*mRNA_b0902 mRNA_b0902_2.3.1.54_min: -1000000.0 <= -1.0*2.3.1.54 - 1.0*2.3.1.54_reverse_2d89b + 54760.0*mRNA_b0902 <= 0\n", + "2.3.1.54\n", + "-1.0*2.3.1.54 - 1.0*2.3.1.54_reverse_2d89b + 43396033333.3333*mRNA_b0903 mRNA_b0903_2.3.1.54_max: 0 <= -1.0*2.3.1.54 - 1.0*2.3.1.54_reverse_2d89b + 43396033333.3333*mRNA_b0903 <= 1000000.0\n", + "-1.0*2.3.1.54 - 1.0*2.3.1.54_reverse_2d89b + 520752.4*mRNA_b0903 mRNA_b0903_2.3.1.54_min: -1000000.0 <= -1.0*2.3.1.54 - 1.0*2.3.1.54_reverse_2d89b + 520752.4*mRNA_b0903 <= 0\n", + "4.1.3.1\n", + "-1.0*4.1.3.1 - 1.0*4.1.3.1_reverse_5fd12 + 14170133333.3333*mRNA_b4015 mRNA_b4015_4.1.3.1_max: 0 <= -1.0*4.1.3.1 - 1.0*4.1.3.1_reverse_5fd12 + 14170133333.3333*mRNA_b4015 <= 1000000.0\n", + "-1.0*4.1.3.1 - 1.0*4.1.3.1_reverse_5fd12 + 170041.6*mRNA_b4015 mRNA_b4015_4.1.3.1_min: -1000000.0 <= -1.0*4.1.3.1 - 1.0*4.1.3.1_reverse_5fd12 + 170041.6*mRNA_b4015 <= 0\n", + "4.1.1.31\n", + "-1.0*4.1.1.31 - 1.0*4.1.1.31_reverse_cafcc + 58565008333.3333*mRNA_b3956 mRNA_b3956_4.1.1.31_max: 0 <= -1.0*4.1.1.31 - 1.0*4.1.1.31_reverse_cafcc + 58565008333.3333*mRNA_b3956 <= 1000000.0\n", + "-1.0*4.1.1.31 - 1.0*4.1.1.31_reverse_cafcc + 702780.1*mRNA_b3956 mRNA_b3956_4.1.1.31_min: -1000000.0 <= -1.0*4.1.1.31 - 1.0*4.1.1.31_reverse_cafcc + 702780.1*mRNA_b3956 <= 0\n", + "1.6.1.1\n", + "-1.0*1.6.1.1 - 1.0*1.6.1.1_reverse_12ee1 + 16333333333.3333*mRNA_b3962 mRNA_b3962_1.6.1.1_max: 0 <= -1.0*1.6.1.1 - 1.0*1.6.1.1_reverse_12ee1 + 16333333333.3333*mRNA_b3962 <= 1000000.0\n", + "-1.0*1.6.1.1 - 1.0*1.6.1.1_reverse_12ee1 + 196000.0*mRNA_b3962 mRNA_b3962_1.6.1.1_min: -1000000.0 <= -1.0*1.6.1.1 - 1.0*1.6.1.1_reverse_12ee1 + 196000.0*mRNA_b3962 <= 0\n", + "2.3.3.9\n", + "-1.0*2.3.3.9 - 1.0*2.3.3.9_reverse_7e099 + 39277008333.3333*mRNA_b2976 mRNA_b2976_2.3.3.9_max: 0 <= -1.0*2.3.3.9 - 1.0*2.3.3.9_reverse_7e099 + 39277008333.3333*mRNA_b2976 <= 1000000.0\n", + "-1.0*2.3.3.9 - 1.0*2.3.3.9_reverse_7e099 + 471324.1*mRNA_b2976 mRNA_b2976_2.3.3.9_min: -1000000.0 <= -1.0*2.3.3.9 - 1.0*2.3.3.9_reverse_7e099 + 471324.1*mRNA_b2976 <= 0\n", + "2.3.3.9\n", + "-1.0*2.3.3.9 - 1.0*2.3.3.9_reverse_7e099 + 21360008333.3333*mRNA_b4014 mRNA_b4014_2.3.3.9_max: 0 <= -1.0*2.3.3.9 - 1.0*2.3.3.9_reverse_7e099 + 21360008333.3333*mRNA_b4014 <= 1000000.0\n", + "-1.0*2.3.3.9 - 1.0*2.3.3.9_reverse_7e099 + 256320.1*mRNA_b4014 mRNA_b4014_2.3.3.9_min: -1000000.0 <= -1.0*2.3.3.9 - 1.0*2.3.3.9_reverse_7e099 + 256320.1*mRNA_b4014 <= 0\n", + "1.8.1.4\n", + "-1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 65380008333.3333*mRNA_b0726 mRNA_b0726_1.8.1.4_max: 0 <= -1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 65380008333.3333*mRNA_b0726 <= 1000000.0\n", + "-1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 784560.1*mRNA_b0726 " + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/samiralvdb/Documents/3_Projects/7_MCA_analysis/PAModelpy/src/PAModelpy/PAModel.py:222: UserWarning: Molar mass for E429 is invalid: 0.0\n", + " warnings.warn(f'Molar mass for {enz.id} is invalid: {molmass}')\n", + "/home/samiralvdb/Documents/3_Projects/7_MCA_analysis/PAModelpy/src/PAModelpy/PAModel.py:262: UserWarning: FORt: Inconsistencies between the reaction reversibility and the provided kcat values\n", + " warnings.warn(rxn_id+': Inconsistencies between the reaction reversibility and the provided kcat values')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mRNA_b0726_1.8.1.4_min: -1000000.0 <= -1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 784560.1*mRNA_b0726 <= 0\n", + "1.8.1.4\n", + "-1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 12342408333.3333*mRNA_b0727 mRNA_b0727_1.8.1.4_max: 0 <= -1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 12342408333.3333*mRNA_b0727 <= 1000000.0\n", + "-1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 148108.9*mRNA_b0727 mRNA_b0727_1.8.1.4_min: -1000000.0 <= -1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 148108.9*mRNA_b0727 <= 0\n", + "1.8.1.4\n", + "-1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 16898133333.3333*mRNA_b0116 mRNA_b0116_1.8.1.4_max: 0 <= -1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 16898133333.3333*mRNA_b0116 <= 1000000.0\n", + "-1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 202777.6*mRNA_b0116 mRNA_b0116_1.8.1.4_min: -1000000.0 <= -1.0*1.8.1.4 - 1.0*1.8.1.4_reverse_5817c + 202777.6*mRNA_b0116 <= 0\n", + "1.2.4.1\n", + "-1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 16898133333.3333*mRNA_b0116 mRNA_b0116_1.2.4.1_max: 0 <= -1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 16898133333.3333*mRNA_b0116 <= 1000000.0\n", + "-1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 202777.6*mRNA_b0116 mRNA_b0116_1.2.4.1_min: -1000000.0 <= -1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 202777.6*mRNA_b0116 <= 0\n", + "1.1.1.44\n", + "-1.0*1.1.1.44 - 1.0*1.1.1.44_reverse_f2a2f + 16473633333.3333*mRNA_b2029 mRNA_b2029_1.1.1.44_max: 0 <= -1.0*1.1.1.44 - 1.0*1.1.1.44_reverse_f2a2f + 16473633333.3333*mRNA_b2029 <= 1000000.0\n", + "-1.0*1.1.1.44 - 1.0*1.1.1.44_reverse_f2a2f + 197683.6*mRNA_b2029 mRNA_b2029_1.1.1.44_min: -1000000.0 <= -1.0*1.1.1.44 - 1.0*1.1.1.44_reverse_f2a2f + 197683.6*mRNA_b2029 <= 0\n", + "1.1.1.40\n", + "-1.0*1.1.1.40 - 1.0*1.1.1.40_reverse_f80c4 + 43282008333.3333*mRNA_b2463 mRNA_b2463_1.1.1.40_max: 0 <= -1.0*1.1.1.40 - 1.0*1.1.1.40_reverse_f80c4 + 43282008333.3333*mRNA_b2463 <= 1000000.0\n", + "-1.0*1.1.1.40 - 1.0*1.1.1.40_reverse_f80c4 + 519384.1*mRNA_b2463 mRNA_b2463_1.1.1.40_min: -1000000.0 <= -1.0*1.1.1.40 - 1.0*1.1.1.40_reverse_f80c4 + 519384.1*mRNA_b2463 <= 0\n", + "3.5.1.2\n", + "-1.0*3.5.1.2 - 1.0*3.5.1.2_reverse_0465f + 7145633333.33333*mRNA_b1524 mRNA_b1524_3.5.1.2_max: 0 <= -1.0*3.5.1.2 - 1.0*3.5.1.2_reverse_0465f + 7145633333.33333*mRNA_b1524 <= 1000000.0\n", + "-1.0*3.5.1.2 - 1.0*3.5.1.2_reverse_0465f + 85747.6*mRNA_b1524 mRNA_b1524_3.5.1.2_min: -1000000.0 <= -1.0*3.5.1.2 - 1.0*3.5.1.2_reverse_0465f + 85747.6*mRNA_b1524 <= 0\n", + "3.5.1.2\n", + "-1.0*3.5.1.2 - 1.0*3.5.1.2_reverse_0465f + 7238533333.33333*mRNA_b0485 mRNA_b0485_3.5.1.2_max: 0 <= -1.0*3.5.1.2 - 1.0*3.5.1.2_reverse_0465f + 7238533333.33333*mRNA_b0485 <= 1000000.0\n", + "-1.0*3.5.1.2 - 1.0*3.5.1.2_reverse_0465f + 86862.4*mRNA_b0485 mRNA_b0485_3.5.1.2_min: -1000000.0 <= -1.0*3.5.1.2 - 1.0*3.5.1.2_reverse_0465f + 86862.4*mRNA_b0485 <= 0\n", + "1.6.1.2\n", + "-1.0*1.6.1.2 - 1.0*1.6.1.2_reverse_a20c6 + 16054533333.3333*mRNA_b1602 mRNA_b1602_1.6.1.2_max: 0 <= -1.0*1.6.1.2 - 1.0*1.6.1.2_reverse_a20c6 + 16054533333.3333*mRNA_b1602 <= 1000000.0\n", + "-1.0*1.6.1.2 - 1.0*1.6.1.2_reverse_a20c6 + 192654.4*mRNA_b1602 mRNA_b1602_1.6.1.2_min: -1000000.0 <= -1.0*1.6.1.2 - 1.0*1.6.1.2_reverse_a20c6 + 192654.4*mRNA_b1602 <= 0\n", + "1.6.1.2\n", + "-1.0*1.6.1.2 - 1.0*1.6.1.2_reverse_a20c6 + 19558533333.3333*mRNA_b1603 mRNA_b1603_1.6.1.2_max: 0 <= -1.0*1.6.1.2 - 1.0*1.6.1.2_reverse_a20c6 + 19558533333.3333*mRNA_b1603 <= 1000000.0\n", + "-1.0*1.6.1.2 - 1.0*1.6.1.2_reverse_a20c6 + 234702.4*mRNA_b1603 mRNA_b1603_1.6.1.2_min: -1000000.0 <= -1.0*1.6.1.2 - 1.0*1.6.1.2_reverse_a20c6 + 234702.4*mRNA_b1603 <= 0\n", + "E25\n", + "-1.0*E25 - 1.0*E25_reverse_5e44b + 2669633333.33333*mRNA_b0010 mRNA_b0010_E25_max: 0 <= -1.0*E25 - 1.0*E25_reverse_5e44b + 2669633333.33333*mRNA_b0010 <= 1000000.0\n", + "-1.0*E25 - 1.0*E25_reverse_5e44b + 32035.6*mRNA_b0010 mRNA_b0010_E25_min: -1000000.0 <= -1.0*E25 - 1.0*E25_reverse_5e44b + 32035.6*mRNA_b0010 <= 0\n", + "E26\n", + "-1.0*E26 - 1.0*E26_reverse_51ad2 + 2669633333.33333*mRNA_b0010 mRNA_b0010_E26_max: 0 <= -1.0*E26 - 1.0*E26_reverse_51ad2 + 2669633333.33333*mRNA_b0010 <= 1000000.0\n", + "-1.0*E26 - 1.0*E26_reverse_51ad2 + 32035.6*mRNA_b0010 mRNA_b0010_E26_min: -1000000.0 <= -1.0*E26 - 1.0*E26_reverse_51ad2 + 32035.6*mRNA_b0010 <= 0\n", + "E25\n", + "-1.0*E25 - 1.0*E25_reverse_5e44b + 13781633333.3333*mRNA_b3528 mRNA_b3528_E25_max: 0 <= -1.0*E25 - 1.0*E25_reverse_5e44b + 13781633333.3333*mRNA_b3528 <= 1000000.0\n", + "-1.0*E25 - 1.0*E25_reverse_5e44b + 165379.6*mRNA_b3528 mRNA_b3528_E25_min: -1000000.0 <= -1.0*E25 - 1.0*E25_reverse_5e44b + 165379.6*mRNA_b3528 <= 0\n", + "E26\n", + "-1.0*E26 - 1.0*E26_reverse_51ad2 + 13781633333.3333*mRNA_b3528 mRNA_b3528_E26_max: 0 <= -1.0*E26 - 1.0*E26_reverse_51ad2 + 13781633333.3333*mRNA_b3528 <= 1000000.0\n", + "-1.0*E26 - 1.0*E26_reverse_51ad2 + 165379.6*mRNA_b3528 mRNA_b3528_E26_min: -1000000.0 <= -1.0*E26 - 1.0*E26_reverse_51ad2 + 165379.6*mRNA_b3528 <= 0\n", + "E125\n", + "-1.0*E125 - 1.0*E125_reverse_d53b8 + 13781633333.3333*mRNA_b3528 mRNA_b3528_E125_max: 0 <= -1.0*E125 - 1.0*E125_reverse_d53b8 + 13781633333.3333*mRNA_b3528 <= 1000000.0\n", + "-1.0*E125 - 1.0*E125_reverse_d53b8 + 165379.6*mRNA_b3528 mRNA_b3528_E125_min: -1000000.0 <= -1.0*E125 - 1.0*E125_reverse_d53b8 + 165379.6*mRNA_b3528 <= 0\n", + "E344\n", + "-1.0*E344 - 1.0*E344_reverse_f78cf + 13781633333.3333*mRNA_b3528 mRNA_b3528_E344_max: 0 <= -1.0*E344 - 1.0*E344_reverse_f78cf + 13781633333.3333*mRNA_b3528 <= 1000000.0\n", + "-1.0*E344 - 1.0*E344_reverse_f78cf + 165379.6*mRNA_b3528 mRNA_b3528_E344_min: -1000000.0 <= -1.0*E344 - 1.0*E344_reverse_f78cf + 165379.6*mRNA_b3528 <= 0\n", + "1.10.3.10\n", + "-1.0*1.10.3.10 - 1.0*1.10.3.10_reverse_2923c + 10754133333.3333*mRNA_b0979 mRNA_b0979_1.10.3.10_max: 0 <= -1.0*1.10.3.10 - 1.0*1.10.3.10_reverse_2923c + 10754133333.3333*mRNA_b0979 <= 1000000.0\n", + "-1.0*1.10.3.10 - 1.0*1.10.3.10_reverse_2923c + 129049.6*mRNA_b0979 mRNA_b0979_1.10.3.10_min: -1000000.0 <= -1.0*1.10.3.10 - 1.0*1.10.3.10_reverse_2923c + 129049.6*mRNA_b0979 <= 0\n", + "1.10.3.10\n", + "-1.0*1.10.3.10 - 1.0*1.10.3.10_reverse_2923c + 19866133333.3333*mRNA_b0978 mRNA_b0978_1.10.3.10_max: 0 <= -1.0*1.10.3.10 - 1.0*1.10.3.10_reverse_2923c + 19866133333.3333*mRNA_b0978 <= 1000000.0\n", + "-1.0*1.10.3.10 - 1.0*1.10.3.10_reverse_2923c + 238393.6*mRNA_b0978 mRNA_b0978_1.10.3.10_min: -1000000.0 <= -1.0*1.10.3.10 - 1.0*1.10.3.10_reverse_2923c + 238393.6*mRNA_b0978 <= 0\n", + "3.5.1.1\n", + "-1.0*3.5.1.1 - 1.0*3.5.1.1_reverse_e9473 + 9117633333.33333*mRNA_b2957 mRNA_b2957_3.5.1.1_max: 0 <= -1.0*3.5.1.1 - 1.0*3.5.1.1_reverse_e9473 + 9117633333.33333*mRNA_b2957 <= 1000000.0\n", + "-1.0*3.5.1.1 - 1.0*3.5.1.1_reverse_e9473 + 109411.6*mRNA_b2957 mRNA_b2957_3.5.1.1_min: -1000000.0 <= -1.0*3.5.1.1 - 1.0*3.5.1.1_reverse_e9473 + 109411.6*mRNA_b2957 <= 0\n", + "3.6.3.-\n", + "-1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 3619008333.33333*mRNA_b0810 mRNA_b0810_3.6.3.-_max: 0 <= -1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 3619008333.33333*mRNA_b0810 <= 1000000.0\n", + "-1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 43428.1*mRNA_b0810 mRNA_b0810_3.6.3.-_min: -1000000.0 <= -1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 43428.1*mRNA_b0810 <= 0\n", + "3.6.3.-\n", + "-1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 4344033333.33333*mRNA_b0809 mRNA_b0809_3.6.3.-_max: 0 <= -1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 4344033333.33333*mRNA_b0809 <= 1000000.0\n", + "-1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 52128.4*mRNA_b0809 mRNA_b0809_3.6.3.-_min: -1000000.0 <= -1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 52128.4*mRNA_b0809 <= 0\n", + "3.6.3.-\n", + "-1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 4637633333.33333*mRNA_b0811 mRNA_b0811_3.6.3.-_max: 0 <= -1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 4637633333.33333*mRNA_b0811 <= 1000000.0\n", + "-1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 55651.6*mRNA_b0811 mRNA_b0811_3.6.3.-_min: -1000000.0 <= -1.0*3.6.3.- - 1.0*3.6.3.-_reverse_23cab + 55651.6*mRNA_b0811 <= 0\n", + "2.7.1.191\n", + "-1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 6035008333.33333*mRNA_b1819 mRNA_b1819_2.7.1.191_max: 0 <= -1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 6035008333.33333*mRNA_b1819 <= 1000000.0\n", + "-1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 72420.1*mRNA_b1819 mRNA_b1819_2.7.1.191_min: -1000000.0 <= -1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 72420.1*mRNA_b1819 <= 0\n", + "2.7.3.9\n", + "-1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 21120533333.3333*mRNA_b1621 mRNA_b1621_2.7.3.9_max: 0 <= -1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 21120533333.3333*mRNA_b1621 <= 1000000.0\n", + "-1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 253446.4*mRNA_b1621 mRNA_b1621_2.7.3.9_min: -1000000.0 <= -1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 253446.4*mRNA_b1621 <= 0\n", + "2.7.1.191\n", + "-1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 7857008333.33333*mRNA_b1817 mRNA_b1817_2.7.1.191_max: 0 <= -1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 7857008333.33333*mRNA_b1817 <= 1000000.0\n", + "-1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 94284.1*mRNA_b1817 mRNA_b1817_2.7.1.191_min: -1000000.0 <= -1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 94284.1*mRNA_b1817 <= 0\n", + "2.7.3.9\n", + "-1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 2159008333.33333*mRNA_b2417 mRNA_b2417_2.7.3.9_max: 0 <= -1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 2159008333.33333*mRNA_b2417 <= 1000000.0\n", + "-1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 25908.1*mRNA_b2417 mRNA_b2417_2.7.3.9_min: -1000000.0 <= -1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 25908.1*mRNA_b2417 <= 0\n", + "2.7.1.191\n", + "-1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 5333333333.33333*mRNA_b1818 mRNA_b1818_2.7.1.191_max: 0 <= -1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 5333333333.33333*mRNA_b1818 <= 1000000.0\n", + "-1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 64000.0*mRNA_b1818 mRNA_b1818_2.7.1.191_min: -1000000.0 <= -1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 64000.0*mRNA_b1818 <= 0\n", + "2.7.3.9\n", + "-1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 550408333.333333*mRNA_b2415 mRNA_b2415_2.7.3.9_max: 0 <= -1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 550408333.333333*mRNA_b2415 <= 1000000.0\n", + "-1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 6604.9*mRNA_b2415 mRNA_b2415_2.7.3.9_min: -1000000.0 <= -1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 6604.9*mRNA_b2415 <= 0\n", + "2.7.1.191\n", + "-1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 550408333.333333*mRNA_b2415 mRNA_b2415_2.7.1.191_max: 0 <= -1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 550408333.333333*mRNA_b2415 <= 1000000.0\n", + "-1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 6604.9*mRNA_b2415 mRNA_b2415_2.7.1.191_min: -1000000.0 <= -1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 6604.9*mRNA_b2415 <= 0\n", + "2.7.3.9\n", + "-1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 24854408333.3333*mRNA_b2416 mRNA_b2416_2.7.3.9_max: 0 <= -1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 24854408333.3333*mRNA_b2416 <= 1000000.0\n", + "-1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 298252.9*mRNA_b2416 mRNA_b2416_2.7.3.9_min: -1000000.0 <= -1.0*2.7.3.9 - 1.0*2.7.3.9_reverse_970c3 + 298252.9*mRNA_b2416 <= 0\n", + "2.7.1.191\n", + "-1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 24854408333.3333*mRNA_b2416 mRNA_b2416_2.7.1.191_max: 0 <= -1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 24854408333.3333*mRNA_b2416 <= 1000000.0\n", + "-1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 298252.9*mRNA_b2416 mRNA_b2416_2.7.1.191_min: -1000000.0 <= -1.0*2.7.1.191 - 1.0*2.7.1.191_reverse_2d14c + 298252.9*mRNA_b2416 <= 0\n", + "E436\n", + "-1.0*E436 - 1.0*E436_reverse_723f3 + 5992533333.33333*mRNA_b2492 mRNA_b2492_E436_max: 0 <= -1.0*E436 - 1.0*E436_reverse_723f3 + 5992533333.33333*mRNA_b2492 <= 1000000.0\n", + "-1.0*E436 - 1.0*E436_reverse_723f3 + 71910.4*mRNA_b2492 mRNA_b2492_E436_min: -1000000.0 <= -1.0*E436 - 1.0*E436_reverse_723f3 + 71910.4*mRNA_b2492 <= 0\n", + "E437\n", + "-1.0*E437 - 1.0*E437_reverse_985b2 + 5992533333.33333*mRNA_b2492 mRNA_b2492_E437_max: 0 <= -1.0*E437 - 1.0*E437_reverse_985b2 + 5992533333.33333*mRNA_b2492 <= 1000000.0\n", + "-1.0*E437 - 1.0*E437_reverse_985b2 + 71910.4*mRNA_b2492 mRNA_b2492_E437_min: -1000000.0 <= -1.0*E437 - 1.0*E437_reverse_985b2 + 71910.4*mRNA_b2492 <= 0\n", + "E436\n", + "-1.0*E436 - 1.0*E436_reverse_723f3 + 6120408333.33333*mRNA_b0904 mRNA_b0904_E436_max: 0 <= -1.0*E436 - 1.0*E436_reverse_723f3 + 6120408333.33333*mRNA_b0904 <= 1000000.0\n", + "-1.0*E436 - 1.0*E436_reverse_723f3 + 73444.9*mRNA_b0904 mRNA_b0904_E436_min: -1000000.0 <= -1.0*E436 - 1.0*E436_reverse_723f3 + 73444.9*mRNA_b0904 <= 0\n", + "E437\n", + "-1.0*E437 - 1.0*E437_reverse_985b2 + 6120408333.33333*mRNA_b0904 mRNA_b0904_E437_max: 0 <= -1.0*E437 - 1.0*E437_reverse_985b2 + 6120408333.33333*mRNA_b0904 <= 1000000.0\n", + "-1.0*E437 - 1.0*E437_reverse_985b2 + 73444.9*mRNA_b0904 mRNA_b0904_E437_min: -1000000.0 <= -1.0*E437 - 1.0*E437_reverse_985b2 + 73444.9*mRNA_b0904 <= 0\n", + "1.4.1.13\n", + "-1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 16756033333.3333*mRNA_b3213 mRNA_b3213_1.4.1.13_max: 0 <= -1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 16756033333.3333*mRNA_b3213 <= 1000000.0\n", + "-1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 201072.4*mRNA_b3213 mRNA_b3213_1.4.1.13_min: -1000000.0 <= -1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 201072.4*mRNA_b3213 <= 0\n", + "1.4.1.13\n", + "-1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 165763333333.333*mRNA_b3212 mRNA_b3212_1.4.1.13_max: 0 <= -1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 165763333333.333*mRNA_b3212 <= 1000000.0\n", + "-1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 1989160.0*mRNA_b3212 mRNA_b3212_1.4.1.13_min: -1000000.0 <= -1.0*1.4.1.13 - 1.0*1.4.1.13_reverse_5c50e + 1989160.0*mRNA_b3212 <= 0\n", + "1.2.4.1\n", + "-1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 29830533333.3333*mRNA_b0115 mRNA_b0115_1.2.4.1_max: 0 <= -1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 29830533333.3333*mRNA_b0115 <= 1000000.0\n", + "-1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 357966.4*mRNA_b0115 mRNA_b0115_1.2.4.1_min: -1000000.0 <= -1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 357966.4*mRNA_b0115 <= 0\n", + "1.2.4.1\n", + "-1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 59096408333.3333*mRNA_b0114 mRNA_b0114_1.2.4.1_max: 0 <= -1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 59096408333.3333*mRNA_b0114 <= 1000000.0\n", + "-1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 709156.9*mRNA_b0114 mRNA_b0114_1.2.4.1_min: -1000000.0 <= -1.0*1.2.4.1 - 1.0*1.2.4.1_reverse_b9bf0 + 709156.9*mRNA_b0114 <= 0\n", + "2.7.1.11\n", + "-1.0*2.7.1.11 - 1.0*2.7.1.11_reverse_0ffbe + 7712033333.33333*mRNA_b3916 mRNA_b3916_2.7.1.11_max: 0 <= -1.0*2.7.1.11 - 1.0*2.7.1.11_reverse_0ffbe + 7712033333.33333*mRNA_b3916 <= 1000000.0\n", + "-1.0*2.7.1.11 - 1.0*2.7.1.11_reverse_0ffbe + 92544.4*mRNA_b3916 mRNA_b3916_2.7.1.11_min: -1000000.0 <= -1.0*2.7.1.11 - 1.0*2.7.1.11_reverse_0ffbe + 92544.4*mRNA_b3916 <= 0\n", + "2.7.1.11\n", + "-1.0*2.7.1.11 - 1.0*2.7.1.11_reverse_0ffbe + 7192008333.33333*mRNA_b1723 mRNA_b1723_2.7.1.11_max: 0 <= -1.0*2.7.1.11 - 1.0*2.7.1.11_reverse_0ffbe + 7192008333.33333*mRNA_b1723 <= 1000000.0\n", + "-1.0*2.7.1.11 - 1.0*2.7.1.11_reverse_0ffbe + 86304.1*mRNA_b1723 mRNA_b1723_2.7.1.11_min: -1000000.0 <= -1.0*2.7.1.11 - 1.0*2.7.1.11_reverse_0ffbe + 86304.1*mRNA_b1723 <= 0\n", + "6.3.1.2\n", + "-1.0*6.3.1.2 - 1.0*6.3.1.2_reverse_52dd3 + 16544008333.3333*mRNA_b3870 mRNA_b3870_6.3.1.2_max: 0 <= -1.0*6.3.1.2 - 1.0*6.3.1.2_reverse_52dd3 + 16544008333.3333*mRNA_b3870 <= 1000000.0\n", + "-1.0*6.3.1.2 - 1.0*6.3.1.2_reverse_52dd3 + 198528.1*mRNA_b3870 mRNA_b3870_6.3.1.2_min: -1000000.0 <= -1.0*6.3.1.2 - 1.0*6.3.1.2_reverse_52dd3 + 198528.1*mRNA_b3870 <= 0\n", + "1.3.5.1\n", + "-1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 25989633333.3333*mRNA_b0723 mRNA_b0723_1.3.5.1_max: 0 <= -1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 25989633333.3333*mRNA_b0723 <= 1000000.0\n", + "-1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 311875.6*mRNA_b0723 mRNA_b0723_1.3.5.1_min: -1000000.0 <= -1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 311875.6*mRNA_b0723 <= 0\n", + "1.3.5.1\n", + "-1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 4272133333.33333*mRNA_b0724 mRNA_b0724_1.3.5.1_max: 0 <= -1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 4272133333.33333*mRNA_b0724 <= 1000000.0\n", + "-1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 51265.6*mRNA_b0724 mRNA_b0724_1.3.5.1_min: -1000000.0 <= -1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 51265.6*mRNA_b0724 <= 0\n", + "1.3.5.1\n", + "-1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 1261008333.33333*mRNA_b0721 mRNA_b0721_1.3.5.1_max: 0 <= -1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 1261008333.33333*mRNA_b0721 <= 1000000.0\n", + "-1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 15132.1*mRNA_b0721 mRNA_b0721_1.3.5.1_min: -1000000.0 <= -1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 15132.1*mRNA_b0721 <= 0\n", + "1.3.5.1\n", + "-1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 1003408333.33333*mRNA_b0722 mRNA_b0722_1.3.5.1_max: 0 <= -1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 1003408333.33333*mRNA_b0722 <= 1000000.0\n", + "-1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 12040.9*mRNA_b0722 mRNA_b0722_1.3.5.1_min: -1000000.0 <= -1.0*1.3.5.1 - 1.0*1.3.5.1_reverse_ee1a5 + 12040.9*mRNA_b0722 <= 0\n", + "1.6.5.11\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 28244008333.3333*mRNA_b2278 mRNA_b2278_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 28244008333.3333*mRNA_b2278 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 338928.1*mRNA_b2278 mRNA_b2278_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 338928.1*mRNA_b2278 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 2448033333.33333*mRNA_b2281 mRNA_b2281_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 2448033333.33333*mRNA_b2281 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 29376.4*mRNA_b2281 mRNA_b2281_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 29376.4*mRNA_b2281 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 2083333333.33333*mRNA_b2285 mRNA_b2285_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 2083333333.33333*mRNA_b2285 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 25000.0*mRNA_b2285 mRNA_b2285_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 25000.0*mRNA_b2285 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 1635408333.33333*mRNA_b2288 mRNA_b2288_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 1635408333.33333*mRNA_b2288 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 19624.9*mRNA_b2288 mRNA_b2288_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 19624.9*mRNA_b2288 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 17690408333.3333*mRNA_b2276 mRNA_b2276_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 17690408333.3333*mRNA_b2276 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 212284.9*mRNA_b2276 mRNA_b2276_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 212284.9*mRNA_b2276 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 2557633333.33333*mRNA_b2280 mRNA_b2280_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 2557633333.33333*mRNA_b2280 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 30691.6*mRNA_b2280 mRNA_b2280_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 30691.6*mRNA_b2280 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 19482008333.3333*mRNA_b2277 mRNA_b2277_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 19482008333.3333*mRNA_b2277 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 233784.1*mRNA_b2277 mRNA_b2277_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 233784.1*mRNA_b2277 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 61925633333.3333*mRNA_b2283 mRNA_b2283_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 61925633333.3333*mRNA_b2283 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 743107.6*mRNA_b2283 mRNA_b2283_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 743107.6*mRNA_b2283 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 3652033333.33333*mRNA_b2287 mRNA_b2287_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 3652033333.33333*mRNA_b2287 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 43824.4*mRNA_b2287 mRNA_b2287_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 43824.4*mRNA_b2287 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 760033333.333333*mRNA_b2279 mRNA_b2279_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 760033333.333333*mRNA_b2279 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 9120.4*mRNA_b2279 mRNA_b2279_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 9120.4*mRNA_b2279 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 14896408333.3333*mRNA_b2284 mRNA_b2284_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 14896408333.3333*mRNA_b2284 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 178756.9*mRNA_b2284 mRNA_b2284_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 178756.9*mRNA_b2284 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 7954408333.33333*mRNA_b2282 mRNA_b2282_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 7954408333.33333*mRNA_b2282 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 95452.9*mRNA_b2282 mRNA_b2282_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 95452.9*mRNA_b2282 <= 0\n", + "1.6.5.11\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 26700833333.3333*mRNA_b2286 mRNA_b2286_1.6.5.11_max: 0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 26700833333.3333*mRNA_b2286 <= 1000000.0\n", + "-1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 320410.0*mRNA_b2286 mRNA_b2286_1.6.5.11_min: -1000000.0 <= -1.0*1.6.5.11 - 1.0*1.6.5.11_reverse_4fb5b + 320410.0*mRNA_b2286 <= 0\n", + "E751\n", + "-1.0*E751 - 1.0*E751_reverse_f1890 + 18725008333.3333*mRNA_b2987 mRNA_b2987_E751_max: 0 <= -1.0*E751 - 1.0*E751_reverse_f1890 + 18725008333.3333*mRNA_b2987 <= 1000000.0\n", + "-1.0*E751 - 1.0*E751_reverse_f1890 + 224700.1*mRNA_b2987 mRNA_b2987_E751_min: -1000000.0 <= -1.0*E751 - 1.0*E751_reverse_f1890 + 224700.1*mRNA_b2987 <= 0\n", + "E752\n", + "-1.0*E752 - 1.0*E752_reverse_0cc91 + 18725008333.3333*mRNA_b2987 mRNA_b2987_E752_max: 0 <= -1.0*E752 - 1.0*E752_reverse_0cc91 + 18725008333.3333*mRNA_b2987 <= 1000000.0\n", + "-1.0*E752 - 1.0*E752_reverse_0cc91 + 224700.1*mRNA_b2987 mRNA_b2987_E752_min: -1000000.0 <= -1.0*E752 - 1.0*E752_reverse_0cc91 + 224700.1*mRNA_b2987 <= 0\n", + "E751\n", + "-1.0*E751 - 1.0*E751_reverse_f1890 + 18725008333.3333*mRNA_b3493 mRNA_b3493_E751_max: 0 <= -1.0*E751 - 1.0*E751_reverse_f1890 + 18725008333.3333*mRNA_b3493 <= 1000000.0\n", + "-1.0*E751 - 1.0*E751_reverse_f1890 + 224700.1*mRNA_b3493 mRNA_b3493_E751_min: -1000000.0 <= -1.0*E751 - 1.0*E751_reverse_f1890 + 224700.1*mRNA_b3493 <= 0\n", + "E752\n", + "-1.0*E752 - 1.0*E752_reverse_0cc91 + 18725008333.3333*mRNA_b3493 mRNA_b3493_E752_max: 0 <= -1.0*E752 - 1.0*E752_reverse_0cc91 + 18725008333.3333*mRNA_b3493 <= 1000000.0\n", + "-1.0*E752 - 1.0*E752_reverse_0cc91 + 224700.1*mRNA_b3493 mRNA_b3493_E752_min: -1000000.0 <= -1.0*E752 - 1.0*E752_reverse_0cc91 + 224700.1*mRNA_b3493 <= 0\n" + ] + } + ], + "source": [ + "transcript_data = get_transcript_data(mmol =False)\n", + "tam = set_up_ecolicore_tam()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "ebb9ba43", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.06770383160962078" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mrna_fraction = 0\n", + "for gene, expression_data in transcript_data.iterrows():\n", + " transcript_id = 'mRNA_'+gene\n", + " if not transcript_id in tam.transcripts: continue\n", + " transcript = tam.transcripts.get_by_id('mRNA_'+gene)\n", + " #wildtype condition at mu = 0.72 h-1 in first column\n", + " mrna_fraction+=expression_data[0]\n", + "mrna_fraction" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "c2cc8bd7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Core model of Ecoli has the following parameters for the active mRNA fraction:\n", + "\t - intercept: 2.4326556466648386e-12 mmol/gcdw \n", + "\t - slope: 1.7884069388404715e-11 mmol/gcdw/h\n" + ] + } + ], + "source": [ + "mrnas_0 = mrna_fraction * mmol_mrna_ae_vs_mu.intercept\n", + "mrnas_mu = mrna_fraction * mmol_mrna_ae_vs_mu.slope\n", + "\n", + "print('Core model of Ecoli has the following parameters for the active mRNA fraction:')\n", + "print(f'\\t - intercept: {mrnas_0} mmol/gcdw \\n\\t - slope: {mrnas_mu} mmol/gcdw/h')" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "372199bb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Core model of Ecoli has the following parameters for the active mRNA fraction:\n", + "\t - intercept: 1.7750480089801658e-05 grna/gcdw \n", + "\t - slope: 0.00013049558330984208 grna/gcdw/h\n" + ] + } + ], + "source": [ + "mrnas_0 = mrna_fraction * g_mrna_ae_vs_mu.intercept\n", + "mrnas_mu = mrna_fraction * g_mrna_ae_vs_mu.slope\n", + "\n", + "print('Core model of Ecoli has the following parameters for the active mRNA fraction:')\n", + "print(f'\\t - intercept: {mrnas_0} grna/gcdw \\n\\t - slope: {mrnas_mu} grna/gcdw/h')" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "f5bdb93c", + "id": "f093eb3e", "metadata": {}, "outputs": [], "source": [] diff --git a/Scripts/__pycache__/pam_generation.cpython-310.pyc b/Scripts/__pycache__/pam_generation.cpython-310.pyc index 2ded031..7290919 100644 Binary files a/Scripts/__pycache__/pam_generation.cpython-310.pyc and b/Scripts/__pycache__/pam_generation.cpython-310.pyc differ diff --git a/Scripts/__pycache__/toy_ec_pam.cpython-310.pyc b/Scripts/__pycache__/toy_ec_pam.cpython-310.pyc index 6a7138e..c61a780 100644 Binary files a/Scripts/__pycache__/toy_ec_pam.cpython-310.pyc and b/Scripts/__pycache__/toy_ec_pam.cpython-310.pyc differ diff --git a/Scripts/ecolicore_tam_incl_transcript_info.py b/Scripts/ecolicore_tam_incl_transcript_info.py new file mode 100644 index 0000000..c6af74e --- /dev/null +++ b/Scripts/ecolicore_tam_incl_transcript_info.py @@ -0,0 +1,44 @@ +import pandas as pd +import os + +from Scripts.tam_generation import set_up_toy_tam, set_up_ecolicore_tam +sinha_ref_conditions = { + 'Holm et al': ['REF', 'NOX', 'ATP'], #WT and NADH overexpression conditions, mu 0.72, 0.65,0.58 h-1 respectively + 'Ishii et al': ['WT_0.7h-1'], + 'Gerosa et al.': ['Glycerol','Glucose','Acetate', 'Pyruvate','Gluconate','Succinate','Galactose','Fructose'], +} +TRANSCRIPT_FILE_PATH = os.path.join('Data', 'TAModel', 'Sinha-etal_2021_transcript-data.xlsx') + + +mrna_vs_mu_slope = 2.64E-10 +mrna_vs_mu_intercept = 3.59E-11 + + +def get_transcript_data(transcript_file_path:str = TRANSCRIPT_FILE_PATH, mmol = True, + reference: str = 'Holm et al', growth_rates = [0.72, 0.65,0.58]): + expression_data = pd.read_excel(transcript_file_path, sheet_name=reference, index_col=0) + # Normalize columns by dividing by the sum of each column + expression_data_normalized = expression_data.div(expression_data.sum(axis=0), axis=1) + if mmol: + mrna_conc = [mrna_vs_mu_intercept + mrna_vs_mu_slope*mu for mu in growth_rates] + expression_data_mmol = expression_data_normalized.apply(lambda row: row * mrna_conc, axis=1) + return expression_data_mmol + else: + return expression_data_normalized + +if __name__ == '__main__': + tam = set_up_ecolicore_tam() + tam.optimize() + transcript_data_mmol = get_transcript_data() + + for gene, expression_data in transcript_data_mmol.iterrows(): + transcript_id = 'mRNA_'+gene + if not transcript_id in tam.transcripts: continue + transcript = tam.transcripts.get_by_id('mRNA_'+gene) + #testing wildtype condition + transcript.change_concentration(concentration=expression_data[0], + error= expression_data[0]*0.01) + print(tam.reactions.get_by_id('EX_glc__D_e')) + + tam.optimize() + print(tam.summary()) diff --git a/Scripts/pam_generation.py b/Scripts/pam_generation.py index 8ab937a..31ea7cd 100644 --- a/Scripts/pam_generation.py +++ b/Scripts/pam_generation.py @@ -2,11 +2,12 @@ import pandas as pd import os from typing import Union +import ast # load PAMpy modules -from PAModelpy.PAModel import PAModel -from PAModelpy.EnzymeSectors import ActiveEnzymeSector, UnusedEnzymeSector, TransEnzymeSector -from PAModelpy.configuration import Config +from src.PAModelpy.PAModel import PAModel +from src.PAModelpy.EnzymeSectors import ActiveEnzymeSector, UnusedEnzymeSector, TransEnzymeSector +from src.PAModelpy.configuration import Config from Scripts.toy_ec_pam import build_toy_gem, build_active_enzyme_sector, build_translational_protein_sector, build_unused_protein_sector @@ -26,7 +27,7 @@ def set_up_toy_pam(sensitivity =True): active_enzyme = build_active_enzyme_sector(config) unused_enzyme = build_unused_protein_sector(config) translation_enzyme = build_translational_protein_sector(config) - pamodel = PAModel(model, name='toy model MCA with enzyme constraints', active_sector=active_enzyme, + pamodel = PAModel(model, name='toy model with enzyme constraints', active_sector=active_enzyme, translational_sector=translation_enzyme, unused_sector=unused_enzyme, p_tot=Etot, sensitivity=sensitivity) pamodel.objective = 'R7' @@ -35,122 +36,33 @@ def set_up_toy_pam(sensitivity =True): def set_up_ecolicore_pam(total_protein:bool = True, active_enzymes: bool = True, translational_enzymes:bool = True, unused_enzymes:bool = True, sensitivity =True): # Setting the relative paths - DATA_DIR = os.path.join(os.path.split(os.getcwd())[0], 'Data') - MODEL_DIR = os.path.join(os.path.split(os.getcwd())[0], 'Models') + DATA_DIR = 'Data' + MODEL_DIR = 'Models' PAM_DATA_FILE_PATH = os.path.join(DATA_DIR, 'proteinAllocationModel_iML1515_EnzymaticData_py.xls') + TAM_DATA_FILE_PATH = os.path.join(DATA_DIR, 'TAModel','2024-02-16_gene_enzyme_reaction_relation_Ecoli.xlsx') # some other constants BIOMASS_REACTION = 'BIOMASS_Ecoli_core_w_GAM' TOTAL_PROTEIN_CONCENTRATION = 0.16995 # [g_prot/g_cdw] + config = Config() + config.reset() + config.BIOMASS_REACTION = BIOMASS_REACTION + # load the genome-scale information model = cobra.io.load_json_model(os.path.join(MODEL_DIR, 'e_coli_core.json')) #load example data for the E.coli iML1515 model if active_enzymes: - # load active enzyme sector information - enzyme_db = pd.read_excel(PAM_DATA_FILE_PATH, sheet_name='ActiveEnzymes') - enzyme_db = enzyme_db.set_index('rxnID') - # correct reaction IDS - for idx in enzyme_db.index.to_list(): - # transprt reactions< - - if 'pp' in idx: - idx_new = idx.replace('pp', '') - if idx_new not in enzyme_db.index: - enzyme_db.rename(index={idx: idx_new}, inplace=True) - if 'ex' in idx: - idx_new = idx.replace('ex', '') - if idx_new not in enzyme_db.index: - enzyme_db.rename(index={idx: idx_new}, inplace=True) - - # replace NaN values with unique identifiers - # replace NaN enzyme ids with a dummy enzyme identifier - # select the NaN values - nan_values = enzyme_db['EC_nmbr'].isnull() - # make a list with unique ids - nan_ids = [f'E{i}' for i in range(nan_values.sum())] - # replace nan values by unique id - enzyme_db.loc[nan_values, 'EC_nmbr'] = nan_ids + enzyme_db = _parse_enzyme_information_from_file(TAM_DATA_FILE_PATH) # create enzyme objects for each gene-associated reaction - kcats = {} - rxn2ec = {} - molmass = {} - for rxn in model.reactions: - if rxn.genes: - # correct transport reactions - if 't' in rxn.id: - rxn.id = rxn.id - # are enzyme information in the PAM database? - rev = 0 # denotes reversibility - if rxn.lower_bound >= 0: - # irreversible reaction (forward direction) - rev = 0 - rxn_id = rxn.id # save reaction ID for retrieveing molar masses/enzyme information later - if rxn.id in enzyme_db.index: - kcats[rxn.id] = {'f': enzyme_db.loc[rxn.id, 'kcat']} - elif rxn.upper_bound <= 0: - # irreversible reaction (reverse direction) - rev = 1 - rxn_id = rxn.id + '_b' - if rxn_id in enzyme_db.index: - kcats[rxn.id] = {'b': enzyme_db.loc[rxn_id, 'kcat']} - else: - rev = 2 - # reversible reaction - rxn_id_f = rxn.id + '_f' - rxn_id_b = rxn.id + '_b' - if rxn_id_f in enzyme_db.index and rxn_id_b in enzyme_db.index: - rxn_id = rxn_id_f # save reaction ID for retrieveing molar masses/enzyme information later - kcats[rxn.id] = {'f': enzyme_db.loc[rxn_id_f, 'kcat'], - 'b': enzyme_db.loc[rxn_id_b, 'kcat']} - - else: - # try if only forward reaction is in database - rxn_id = rxn.id # save reaction ID for retrieveing molar masses/enzyme information later - kcats[rxn.id] = {'f': enzyme_db.loc[rxn.id, 'kcat'], - 'b': enzyme_db.loc[ - rxn.id, 'kcat'] / 2} # deduce backwards kcat from forward value - - # where enzyme information found? - if rxn.id in kcats.keys(): - # save molmass - molmass[rxn.id] = enzyme_db.loc[rxn_id, 'molMass'] - # save enzyme information - # is enzyme information NaN? - if pd.isna(enzyme_db.loc[rxn_id, 'EC_nmbr']): - rxn2ec[rxn.id] = '' - else: - rxn2ec[rxn.id] = enzyme_db.loc[rxn_id, 'EC_nmbr'] - - - else: - # no enzyme information found - print('No enzyme information found for reaction: ' + rxn.id) - # Create generic Enzyme with mean molar masses and kcat - if rev == 0: - kcats[rxn.id] = {'f': 22} - elif rev == 1: - kcats[rxn.id] = {'b': 22} - else: - kcats[rxn.id] = {'f': 22, 'b': 22} - - molmass[rxn.id] = 3.947778784340140e04 - - rxn2protein = {} - for rxn, ec in rxn2ec.items(): - ec_dict = {**kcats[rxn], **{'molmass': molmass[rxn]}} - # add enzyme to enzymes related to reaction if these are already stored - if rxn in rxn2protein.keys(): - rxn2protein[rxn] = {**rxn2protein[rxn], **{ec: ec_dict}} - # if not create new reaction entry - else: - rxn2protein[rxn] = {ec: ec_dict} + rxn2protein, protein2gene, gene2transcript = parse_reaction2protein(enzyme_db, model) # create active enzymes sector - active_enzyme_sector = ActiveEnzymeSector(rxn2protein=rxn2protein) - + active_enzyme_sector = ActiveEnzymeSector(rxn2protein=rxn2protein, + protein2gene=protein2gene, + configuration=config) else: active_enzyme_sector = None @@ -340,3 +252,168 @@ def parse_coefficients(pamodel): def parse_esc(pamodel): return pamodel.enzyme_sensitivity_coefficients.coefficient.to_list() + +def _parse_enzyme_information_from_file(file_path:str): + # load active enzyme sector information + enzyme_db = pd.read_excel(file_path, sheet_name='enzyme-gene-reaction') + # enzyme_db = enzyme_db.set_index('rxnID') + # correct reaction IDS + for idx in enzyme_db.rxnID.to_list(): + # transport reactions + if 'pp' in idx: + idx_new = idx.replace('pp', '') + if idx_new not in enzyme_db.index: + enzyme_db.rename(index={idx: idx_new}, inplace=True) + if 'ex' in idx: + idx_new = idx.replace('ex', '') + if idx_new not in enzyme_db.index: + enzyme_db.rename(index={idx: idx_new}, inplace=True) + + # replace NaN values with unique identifiers + # replace NaN enzyme ids with a dummy enzyme identifier + # select the NaN values + nan_values = enzyme_db['EC_nmbr'].isnull() + # make a list with unique ids + nan_ids = [f'E{i}' for i in range(nan_values.sum())] + # replace nan values by unique id + enzyme_db.loc[nan_values, 'EC_nmbr'] = nan_ids + + return enzyme_db + + +def parse_reaction2protein(enzyme_db: pd.DataFrame, model:cobra.Model) -> dict: + # Initialize dictionaries + rxn2protein = {} + protein2gene = {} + gene2transcript = {'gene_dummy': {'id': 'mRNA_gene_dummy', 'length': 750.0}} + + # Iterate over each row in the DataFrame + for index, row in enzyme_db.iterrows(): + # Parse data from the row + rxn_id = row['rxnID'] + rxn_id = _check_rxn_identifier_format(rxn_id) + #only parse those reactions which are in the model + kcat_f_b = _get_fwd_bckw_kcat(rxn_id, row['kcat'], model) + if kcat_f_b is None: continue + #check if there is a forward or backward string which needs to be removed from the rxn id + if any([rxn_id.endswith('_f'), rxn_id.endswith('_b')]): rxn_id = rxn_id[:-2] + + #get the identifiers and replace nan values by dummy placeholders + enzyme_id = row['EC_nmbr'] + if not isinstance(enzyme_id, str): enzyme_id = 'Enzyme_'+rxn_id + gene_id = row['gene_id'] + if not isinstance(gene_id, str): gene_id = 'gene_dummy' + mrna_length = row['mrna_length'] + + #get the gene-protein-reaction-associations + gpr = parse_gpr_information_for_protein2genes(row['gpr']) + + # Create gene-protein-reaction associations + if enzyme_id not in protein2gene: + protein2gene[enzyme_id] = [] + protein2gene[enzyme_id].append(gpr) + + # Create gene2transcript dictionary + if gene_id not in gene2transcript.keys(): + gene2transcript[gene_id] = {'id': f'mRNA_{gene_id}', 'length': mrna_length} + + # Create rxn2protein dictionary + if rxn_id not in rxn2protein: + rxn2protein[rxn_id] = {} + if enzyme_id not in rxn2protein[rxn_id]: + rxn2protein[rxn_id][enzyme_id] = { + 'f': kcat_f_b[0], # Forward kcat + 'b': kcat_f_b[1], # Backward kcat + 'molmass': row['molMass'], + 'genes': [gene_id], + 'complex_with': None + } + else: + rxn2protein[rxn_id][enzyme_id]['genes'].append(gene_id) + + #if no enzyme info is found, add dummy enzyme with median kcat and molmass + for rxn in model.reactions: + if rxn.id not in rxn2protein.keys() and 'EX' not in rxn.id and 'BIOMASS' not in rxn.id and rxn.genes: + rev = _check_reaction_reversibility(rxn) + if rev == 0: + kcat_dict = {'f': 22} + elif rev ==1: + kcat_dict = {'b': 22} + else: + kcat_dict = {'f': 22,'b': 22} + # no enzyme information found + print('No enzyme information found for reaction: ' + rxn.id) + enzyme_id = 'Enzyme_'+rxn.id + rxn2protein[rxn.id] = {enzyme_id:{ + **kcat_dict, + 'molmass': 3.947778784340140e04}} + #add geneinfo for unknown enzymes + gpr_info = parse_gpr_information_for_protein2genes(rxn.gpr) + protein2gene[enzyme_id] = gpr_info + + for gene in [gene for sublist in gpr_info for gene in sublist]: + if gene not in gene2transcript.keys(): + gene2transcript[gene] = {'id': f'mRNA_{gene}', 'length': 750.0} + + return rxn2protein, protein2gene, gene2transcript + +def _check_rxn_identifier_format(rxn_id:str) -> str: + if 'pp' in rxn_id: + idx_new = rxn_id.replace('pp', '') + elif 'ex' in rxn_id: + idx_new = rxn_id.replace('ex', '') + else: + idx_new = rxn_id + return idx_new + +def _get_fwd_bckw_kcat(rxn_id: str, kcat:float, model:PAModel) -> Union[list, None]: + #skip exchange and biomass reaction + if 'EX' in rxn_id or 'BIOMASS' in rxn_id: + return None + + # Extract the base identifier without any suffixes + base_id = rxn_id.split('_')[0] + + # Iterate over each identifier in the input + if base_id in model.reactions: + # Determine the form of the identifier + if rxn_id.endswith('_f'): + kcat_fwd = kcat + kcat_rev = 0 + elif rxn_id.endswith('_b'): + kcat_fwd = 0 + kcat_rev = kcat + # identifier has no suffix + elif base_id == rxn_id: + kcat_fwd = kcat + kcat_rev = kcat + else: + return None + elif rxn_id in model.reactions: + kcat_fwd = kcat + kcat_rev = kcat + else: + return None + return [kcat_fwd, kcat_rev] + +def _check_reaction_reversibility(reaction): + if reaction.lower_bound >= 0: + # irreversible reaction (forward direction) + rev = 0 + elif reaction.upper_bound <= 0: + # irreversible reaction (reverse direction) + rev = 1 + else: + rev = 2 + # reversible r + return rev + +def parse_gpr_information_for_protein2genes(gpr_info:str): + #filter out nan entries + if isinstance(gpr_info, str): + nested_list = ast.literal_eval(gpr_info) + # Extracting the inner lists and removing parentheses + gpr_list = [[[item.strip("(')")] + sublist[1:] for item in sublist[0].split(" or ")] for sublist in nested_list] + return gpr_list[0] + else: + return [['gene_dummy']] \ No newline at end of file diff --git a/Scripts/tam_generation.py b/Scripts/tam_generation.py index 43b3fed..fbbaaa3 100644 --- a/Scripts/tam_generation.py +++ b/Scripts/tam_generation.py @@ -48,12 +48,14 @@ def set_up_ecolicore_tam(total_protein:bool = True, active_enzymes: bool = True, # some other constants BIOMASS_REACTION = 'BIOMASS_Ecoli_core_w_GAM' TOTAL_PROTEIN_CONCENTRATION = 0.16995 # [g_prot/g_cdw] - MRNA_MU = 1 - MRNA_0=1 + MRNA_MU = 0.00013049558330984208 # [g_mrna/g_cdw/h] + MRNA_0= 1.7750480089801658e-05 # [g_mrna/g_cdw] + + # MRNA_MU = 0.0036378316565569466 + # MRNA_0= 10000000 config = Config() config.reset() config.BIOMASS_REACTION = BIOMASS_REACTION - #TODO need to fit mrna vs growth relation # load the genome-scale information model = cobra.io.load_json_model(os.path.join(MODEL_DIR, 'e_coli_core.json')) @@ -69,6 +71,8 @@ def set_up_ecolicore_tam(total_protein:bool = True, active_enzymes: bool = True, active_enzyme_sector = ActiveEnzymeSector(rxn2protein=rxn2protein, protein2gene = protein2gene, configuration = config) + + # gene2transcript = {'gene_dummy': {'id': 'mRNA_gene_dummy', 'length': 750.0}} active_mrna_sector = ActivemRNASector(mrnas_0 = MRNA_0, mrnas_mu = MRNA_MU, id_list = [BIOMASS_REACTION], @@ -126,14 +130,8 @@ def set_up_ecoli_pam(total_protein: Union[bool, float] = True, active_enzymes: b config = Config() config.reset() # Setting the relative paths - cwd = os.getcwd() - if os.path.split(cwd)[1] != 'Scripts': - BASE_DIR = cwd - else: - BASE_DIR = os.path.split(os.getcwd())[0] - MODEL_DIR = os.path.join(BASE_DIR, 'Models') - DATA_DIR = os.path.join(BASE_DIR, 'Data') - pam_info_file = os.path.join(DATA_DIR, 'proteinAllocationModel_iML1515_EnzymaticData_py.xls') + MODEL_DIR = 'Models' + pam_info_file = os.path.join('Data', 'proteinAllocationModel_iML1515_EnzymaticData_py.xls') # some other constants TOTAL_PROTEIN_CONCENTRATION = 0.258 # [g_prot/g_cdw] @@ -289,7 +287,6 @@ def parse_reaction2protein(enzyme_db: pd.DataFrame, model:cobra.Model) -> dict: rxn2protein = {} protein2gene = {} gene2transcript = {'gene_dummy': {'id': 'mRNA_gene_dummy', 'length': 750.0}} - print(gene2transcript) # Iterate over each row in the DataFrame for index, row in enzyme_db.iterrows(): diff --git a/Scripts/toy_ec_pam.py b/Scripts/toy_ec_pam.py index 5d78ef5..d10865c 100644 --- a/Scripts/toy_ec_pam.py +++ b/Scripts/toy_ec_pam.py @@ -4,9 +4,9 @@ import numpy as np #importing the tools from the PAModelpy package -from PAModelpy.EnzymeSectors import ActiveEnzymeSector, UnusedEnzymeSector, TransEnzymeSector -from PAModelpy.PAModel import PAModel -from PAModelpy.configuration import Config +from src.PAModelpy.EnzymeSectors import ActiveEnzymeSector, UnusedEnzymeSector, TransEnzymeSector +from src.PAModelpy.PAModel import PAModel +from src.PAModelpy.configuration import Config Config.BIOMASS_REACTION = 'R7' Config.GLUCOSE_EXCHANGE_RXNID = 'R1' diff --git a/src/PAModelpy/Enzyme.py b/src/PAModelpy/Enzyme.py index 45766db..da24e5d 100644 --- a/src/PAModelpy/Enzyme.py +++ b/src/PAModelpy/Enzyme.py @@ -753,3 +753,27 @@ def __deepcopy__(self, memo: dict) -> 'PAModelpy.Enzyme.EnzymeVariable': cop = deepcopy(super(EnzymeVariable, self), memo) return cop + + +class EnzymeComplex(Enzyme): + + DEFAULT_ENZYME_MOL_MASS = 3.947778784340140e04 # mean enzymes mass E.coli [g/mol] + + def __init__( + self, + id: str, + rxn2kcat: Dict, + genes: list = [], + upper_bound: Union[int, float] = 1000.0, + lower_bound: Union[int, float] = 0, + name: Optional[str] = None, + molmass: Union[int, float] = DEFAULT_ENZYME_MOL_MASS,): + + super().__init__( + id = id, + rxn2kcat = rxn2kcat, + genes = genes, + upper_bound = upper_bound, + lower_bound = lower_bound, + name = name, + molmass=molmass) \ No newline at end of file diff --git a/src/PAModelpy/EnzymeSectors.py b/src/PAModelpy/EnzymeSectors.py index 06d8c96..9052c25 100644 --- a/src/PAModelpy/EnzymeSectors.py +++ b/src/PAModelpy/EnzymeSectors.py @@ -2,7 +2,7 @@ from copy import copy, deepcopy from cobra import Object, Gene, Model -from .Enzyme import Enzyme +from .Enzyme import Enzyme, EnzymeComplex from .configuration import Config @@ -160,12 +160,14 @@ def add(self, model): enzyme.create_catalytic_event(rxn_id=rxn_id, kcats=kcat) model.add_catalytic_events([enzyme.catalytic_events.get_by_id(f'CE_{rxn_id}')]) else: + enzyme_obj = Enzyme if self.protein2gene != {}: gene_list = self._get_model_genes_from_enzyme(enzyme_id, model) + if any([len(gene)>1 for gene in gene_list]): enzyme_obj = EnzymeComplex else: gene_list = [] - enzyme = Enzyme( + enzyme = enzyme_obj( id = enzyme_id, rxn2kcat= {rxn_id: kcat}, molmass = molmass, diff --git a/src/PAModelpy/__pycache__/CatalyticEvent.cpython-310.pyc b/src/PAModelpy/__pycache__/CatalyticEvent.cpython-310.pyc index 12a9ec3..a697166 100644 Binary files a/src/PAModelpy/__pycache__/CatalyticEvent.cpython-310.pyc and b/src/PAModelpy/__pycache__/CatalyticEvent.cpython-310.pyc differ diff --git a/src/PAModelpy/__pycache__/Enzyme.cpython-310.pyc b/src/PAModelpy/__pycache__/Enzyme.cpython-310.pyc index 40f904f..943599f 100644 Binary files a/src/PAModelpy/__pycache__/Enzyme.cpython-310.pyc and b/src/PAModelpy/__pycache__/Enzyme.cpython-310.pyc differ diff --git a/src/PAModelpy/__pycache__/EnzymeSectors.cpython-310.pyc b/src/PAModelpy/__pycache__/EnzymeSectors.cpython-310.pyc index 1a2bcec..4dadacc 100644 Binary files a/src/PAModelpy/__pycache__/EnzymeSectors.cpython-310.pyc and b/src/PAModelpy/__pycache__/EnzymeSectors.cpython-310.pyc differ diff --git a/src/PAModelpy/__pycache__/PAModel.cpython-310.pyc b/src/PAModelpy/__pycache__/PAModel.cpython-310.pyc index 92a778d..e4ec476 100644 Binary files a/src/PAModelpy/__pycache__/PAModel.cpython-310.pyc and b/src/PAModelpy/__pycache__/PAModel.cpython-310.pyc differ diff --git a/src/PAModelpy/__pycache__/__init__.cpython-310.pyc b/src/PAModelpy/__pycache__/__init__.cpython-310.pyc index 1fa1856..3202e1d 100644 Binary files a/src/PAModelpy/__pycache__/__init__.cpython-310.pyc and b/src/PAModelpy/__pycache__/__init__.cpython-310.pyc differ diff --git a/src/TAModelpy/TAModel.py b/src/TAModelpy/TAModel.py index 06e8810..45e187a 100644 --- a/src/TAModelpy/TAModel.py +++ b/src/TAModelpy/TAModel.py @@ -9,10 +9,11 @@ from src.PAModelpy.PAModel import PAModel from src.PAModelpy.EnzymeSectors import ActiveEnzymeSector, TransEnzymeSector, UnusedEnzymeSector, CustomSector, Sector from src.PAModelpy.configuration import Config -from src.PAModelpy.Enzyme import Enzyme +from src.PAModelpy.Enzyme import Enzyme, EnzymeComplex class TAModel(PAModel): TOTAL_MRNA_CONSTRAINT_ID = 'total_mrna_constraint' + MOLMASS_MRNA_NT = 324.3 #g/mol def __init__(self, id_or_model: Union[str, "Model", None] = None, name: Optional[str] = None, p_tot: Optional[float] = Config.P_TOT_DEFAULT, @@ -169,22 +170,32 @@ def add_transcript(self, transcript_object: Transcript, """ #adjust minimal and maximal protein/transcript ratios based transcript_object.f_min = f_min*transcript_object.length**2/3 - transcript_object.f_max = f_max*transcript_object.length**2/3 + transcript_object.f_max = f_max*transcript_object.length**2/3*1e6 - print('adding model to transcript ', transcript_object.id) + # print('adding model to transcript ', transcript_object.id) transcript_object.model = self self.transcripts.append(transcript_object) + def add_transcript_enzyme_relations(self, enzyme: Union[Enzyme, EnzymeComplex]) -> None: + # check the gpr relations: is an additional gene required or is there 'competition' with another gene? + transcript_associated_with_enzyme = self.get_transcripts_associated_with_enzyme(enzyme) + for relation, transcripts in transcript_associated_with_enzyme.items(): + self.make_mrna_min_max_constraint(enzyme, transcripts, relation) + # TODO how to handle other mrna relations? + # add the mRNA relations to the model + + def add_total_mrna_constraint(self, mrna_sector:ActivemRNASector) -> None: tot_mrna_constraint = self.problem.Constraint(Zero,name=self.TOTAL_MRNA_CONSTRAINT_ID, - lb=mrna_sector.intercept, ub = mrna_sector.intercept) + lb=0, ub = mrna_sector.intercept) self.add_cons_vars(tot_mrna_constraint) constraint_coefficients = {self.reactions.get_by_id(self.BIOMASS_REACTION).forward_variable:-mrna_sector.slope} for transcript in self.transcripts: + coeff = transcript.length*self.MOLMASS_MRNA_NT constraint_coefficients = {**constraint_coefficients, - **{transcript.mrna_variable:1}} + **{transcript.mrna_variable:coeff}} self.constraints[self.TOTAL_MRNA_CONSTRAINT_ID].set_linear_coefficients(constraint_coefficients) @@ -206,10 +217,11 @@ def _check_if_gene_in_enzyme_genes(self, gene_id: str, for gene in and_relation: if gene.id == gene_id: return True - return False - def make_mrna_min_max_constraint(self, enz: Enzyme, transcript:Transcript) -> Transcript: + def make_mrna_min_max_constraint(self, enz: Enzyme, + transcripts:Union[Transcript, list], + relation = 'or') -> Union[Transcript, list]: """ Adding variables and constraints for the lower and upperbounds of an Enzyme to a model. The bounds are related to the mRNA content present in the cell. @@ -218,18 +230,30 @@ def make_mrna_min_max_constraint(self, enz: Enzyme, transcript:Transcript) -> Tr mrna_emzyme_ub : fmax * mRNA - Enzyme >= 0 mrna_emzyme_lb : fmin * mRNA - Enzyme <= 0 - Parameters + Args: ---------- m: cobra.Model or PAModelpy.PAModel model to which the upper and lowerbound constraints and variables should be added enz: PAModelpy.Enzyme Enzyme for which minimal and maximal concentration constraints should be generated - - Returns + transcript: Transcript + Transcripts or list of Transcripts to relate to the enzyme. If the list of transcripts is longer than 1, + the relation between the transcripts and enzyme is considered to be an 'or' relation. + relation: str + Determines the type of relation with which the transcripts are related to the enzyme. In an `or` relation, + all transcripts are added to the min/max constraints, in an `and` relation only the lowest available + transcript is used to constrain the enzyme using a dummy variable: + and_mrna <= mrna1 + and_mrna <= mrna2 + and_mrna - E <= 0 + + Returns: ------- transcript : Transcript updated transcript object """ + if not isinstance(transcripts, list): transcripts = [transcripts] + # make separate constraints for forward and reverse enzyme variables fwd_var = self.enzyme_variables.get_by_id(enz.id).forward_variable rev_var = self.enzyme_variables.get_by_id(enz.id).reverse_variable @@ -240,30 +264,160 @@ def make_mrna_min_max_constraint(self, enz: Enzyme, transcript:Transcript) -> Tr # if f'{self.id}_{enz.id}_min' in m.constraints.keys(): # m.constraints[f'{enz.id}_min'].ub = -lower_bound # else: - max_constraint = self.problem.Constraint(Zero, name=f'{transcript.id}_{enz.id}_max', lb=0, ub=1e6) - min_constraint = self.problem.Constraint(Zero, name=f'{transcript.id}_{enz.id}_min', lb=-1e6, ub=0) + transcripts_ids = "_".join([transcript.id for transcript in transcripts]) + max_constraint = self.problem.Constraint(Zero, name=f'{transcripts_ids}_{enz.id}_max', lb=0, ub=1e6) + min_constraint = self.problem.Constraint(Zero, name=f'{transcripts_ids}_{enz.id}_min', lb=-1e6, ub=0) self.add_cons_vars([max_constraint, min_constraint]) # for key, var in self.variables.iteritems(): # print(key,var) # self.variables[transcript.id] # setting up the constraints - self.constraints[f'{transcript.id}_{enz.id}_max'].set_linear_coefficients({ + self.constraints[f'{transcripts_ids}_{enz.id}_max'].set_linear_coefficients({ fwd_var: -1, - rev_var: -1, - transcript.mrna_variable: transcript.f_max + rev_var: -1 }) - self.constraints[f'{transcript.id}_{enz.id}_min'].set_linear_coefficients({ + self.constraints[f'{transcripts_ids}_{enz.id}_min'].set_linear_coefficients({ fwd_var: -1, - rev_var: -1, + rev_var: -1 + }) + + if relation == 'and': + #add auxiliary variable for an and relationship + self.set_mrna_enzyme_minmax_constraint_and_relationship(enz, transcripts, transcripts_ids) + for transcript in transcripts: + if relation == 'or': + self.set_mrna_enzyme_minmax_constraint_or_relationship(enz, transcript, transcripts_ids) + + #save the constraints in the transcript object + transcript._constraints = {**transcript._constraints, + **{f'{transcripts_ids}_{enz.id}_max':self.constraints[f'{transcripts_ids}_{enz.id}_max'], + f'{transcripts_ids}_{enz.id}_min':self.constraints[f'{transcripts_ids}_{enz.id}_min'] + }} + + if len(transcripts) == 1: transcripts = transcripts[0] + return transcripts + + def set_mrna_enzyme_minmax_constraint_and_relation(self, enzyme: Enzyme, + transcripts: list, transcript_ids: list) -> None: + transcript_aux_min_variable = self.problem.Variable(Zero, name=f'{transcript_ids}_{enzyme.id}_min_aux', lb=0, ub=1e6) + transcript_aux_max_variable = self.problem.Variable(Zero, name=f'{transcript_ids}_{enzyme.id}_max_aux', lb=0, ub=1e6) + + self.add_cons_vars([transcript_aux_min_variable, transcript_aux_max_variable]) + + #Add auxiliary constraints for all transcripts to ensure the minimal mrna abundance in the enzyme complex + # is used to constrain the enzyme concentration + for transcript in transcripts: + aux_min_constraint = self.problem.Constraint(Zero, name=f'{transcript.id}_{enzyme.id}_min_aux', lb=0, ub=1e6) + aux_max_constraint = self.problem.Constraint(Zero, name=f'{transcript.id}_{enzyme.id}__max_aux', lb=0, ub=1e6) + self.add_cons_vars([aux_min_constraint, aux_max_constraint]) + + # this auxiliary variable is already converted to g_enzyme/g_cdw + self.constraints[f'{transcript.id}_{enzyme.id}_min_aux'].set_linear_coefficients({ + transcript_aux_min_variable: -1, + transcripts.mrna_variable: transcript.f_min + }) + self.constraints[f'{transcript.id}_{enzyme.id}_max_aux'].set_linear_coefficients({ + transcript_aux_max_variable: -1, + transcripts.mrna_variable: transcript.f_max + }) + + #save the constraints in the transcript object + transcript._constraints = {**transcript._constraints, + **{f'{transcript.id}_{enzyme.id}_min_aux': self.constraints[f'{transcript.id}_{enzyme.id}_min_aux'], + f'{transcript.id}_{enzyme.id}_max_aux': self.constraints[f'{transcript.id}_{enzyme.id}_max_aux'] + }} + + #use the auxiliary variables to constrain the enzyme + self.constraints[f'{transcript_ids}_{enzyme.id}_min'].set_linear_coefficients({ + transcript_aux_min_variable: 1 + }) + self.constraints[f'{transcript_ids}_{enzyme.id}_max'].set_linear_coefficients({ + transcript_aux_max_variable: 1 + }) + + def set_mrna_enzyme_minmax_constraint_or_relationship(self, enzyme: Enzyme, + transcript: Transcript, transcript_ids: list): + self.constraints[f'{transcript_ids}_{enzyme.id}_max'].set_linear_coefficients({ + transcript.mrna_variable: transcript.f_max + }) + self.constraints[f'{transcript_ids}_{enzyme.id}_min'].set_linear_coefficients({ transcript.mrna_variable: transcript.f_min }) + def get_genes_associated_with_enzyme(self, enzyme: Enzyme) -> dict: + """ Retrieve the model associated genes including their relation from the model + + Goes through all the genes associated with an enzyme and checks if there is an 'and' or 'or' relation + between the genes. It only saves those genes, which are already associated with the model + + Args: + enzyme: the enzyme for which the gene list should be evaluated + + Returns: + gene_relations_dict: a dictionary with all the cobra.Gene objects associated with both the model as + the enzyme and their relationship + + Example: + Example of returned object: + for an enzyme with the following list of genes: `[[gene1, gene2],[gene3, gene4],[gene5]]` + In this enzyme, there are 2 enzyme complexes with the ids 0 and 1. + `gene_relation_dict = {'and':[[gene1, gene2], [gene3, gene4]], + 'or':[gene5]}` + """ + gene_relations_dict = {'and':[], 'or':[]} + # enzyme_complex_id = 0 + for gene_list in enzyme.genes: + if len(gene_list)>1: # and relationship + # gene_relations_dict = {**gene_relations_dict, + # **{gene:['and', enzyme_complex_id] for gene in gene_list if gene in self.genes}} + # enzyme_complex_id += 1 + gene_relations_dict['and'] += [[gene for gene in gene_list if gene in self.genes]] + elif gene_list[0] in self.genes: + gene_relations_dict['or'] += [gene_list[0]] + # gene_relations_dict = {**gene_relations_dict, + # **{gene_list[0]: ['or', 0] if gene_list[0] in self.genes}} + return gene_relations_dict + + def get_transcripts_associated_with_enzyme(self, enzyme: Enzyme) -> dict: + """ Retrieve the model associated transcripts including their relation from the model + + Goes through all the genes associated with an enzyme and checks if there is an 'and' or 'or' relation + between the transcripts. It only saves those transcripts, which are already associated with the model - #save the constraints in the enzyme object - transcript._constraints = {**transcript._constraints, - **{f'{transcript.id}_{enz.id}_max':self.constraints[f'{transcript.id}_{enz.id}_max'], - f'{transcript.id}_{enz.id}_min':self.constraints[f'{transcript.id}_{enz.id}_min'] - }} + Args: + enzyme: the enzyme for which the gene list should be evaluated - return transcript + Returns: + mrna_relations_dict: a dictionary with all the TAModelpy.Transcript objects associated with both the model as + the enzyme and their relationship + Example: + Example of returned object: + for an enzyme with the following list of genes: `[[gene1, gene2],[gene3, gene4],[gene5]]` + In this enzyme, there are 2 enzyme complexes with the ids 0 and 1. + `mrna_relation_dict = {'and':[[mRNA_gene1, mRNA_gene2], [mRNA_gene3, mRNA_gene4]], + 'or':[mRNA_gene5]}` + """ + mrna_relations_dict = {'and':[], 'or':[]} + # enzyme_complex_id = 0 + for gene_list in enzyme.genes: + if len(gene_list)>1: # and relationship + # mrna_relations_dict = {**mrna_relations_dict, + # **{self.transcripts.get_by_id('mRNA_'+gene): + # ['and', enzyme_complex_id] for gene in gene_list if 'mRNA_'+gene in self.transcripts}} + # enzyme_complex_id += 1 + mrna_relations_dict['and'] += [[self.transcripts.get_by_id('mRNA_'+gene) for gene in gene_list if 'mRNA_'+gene in self.transcripts]] + elif 'mRNA_' + gene_list[0] in self.transcripts: + # mrna_relations_dict = {**mrna_relations_dict, + # **{self.transcripts.get_by_id('mRNA_'+gene_list[0]): + # ['or', 0] if 'mRNA_'+gene_list[0] in self.transcripts}} + + mrna_relations_dict['or'] += [self.transcripts.get_by_id('mRNA_' + gene_list[0])] + return mrna_relations_dict + + def _gene_is_in_enzyme_complex(self, gene: Union[str, Gene], enzyme: Enzyme) -> bool: + if not isinstance(gene, str): gene = gene.id + if isinstance(enzyme, EnzymeComplex) and any([gene in genelist for genelist in enzyme.genes]): + return True + else: + return False \ No newline at end of file diff --git a/src/TAModelpy/Transcript.py b/src/TAModelpy/Transcript.py index 561adb7..1d4e479 100644 --- a/src/TAModelpy/Transcript.py +++ b/src/TAModelpy/Transcript.py @@ -31,5 +31,21 @@ def model(self, model): # check if enzymes are in the model for enzyme in self.enzymes: if not enzyme in model.enzymes: model.add_enzyme(enzyme) - # add the mRNA relations to the model - self._model.make_mrna_min_max_constraint(enzyme, self) + # #check the gpr relations: is an additional gene required or is there 'competition' with another gene? + # other_mrnas= model.get_transcripts_associated_with_enzyme(enzyme) + # #TODO how to handle other mrna relations? + # # add the mRNA relations to the model + # self._model.make_mrna_min_max_constraint(enzyme, self) + + def change_concentration(self, concentration:float, error: float = 0) -> None: + """ Setting the concentration of an mRNA species + + Changes the mRNA concentration and thereby influencing the enzyme concentration and reaction rate. The bounds + on the mrna variable can be made more flexible by including a (measurement) error + + :param concentration: + :return: + """ + self.mrna_variable.ub = concentration+error + self.mrna_variable.lb = concentration-error + self._model.solver.update() diff --git a/src/TAModelpy/mRNASectors.py b/src/TAModelpy/mRNASectors.py index 8909546..10c0940 100644 --- a/src/TAModelpy/mRNASectors.py +++ b/src/TAModelpy/mRNASectors.py @@ -33,8 +33,8 @@ def __init__(self, mrnas_0:float =3.59*1e-5, if len(id_list) == 0: id_list = [configuration.BIOMASS_REACTION] super().__init__(id_list, mol_mass, configuration) - self.mrnas_0 = mrnas_0 # amount of protein allocated to the translational sector at zero growth (g_p/g_cdw) - self.mrnas_mu = mrnas_mu # amount of protein allocated to the translational sector at zero growth (g_p/g_cdw)' + self.mrnas_0 = mrnas_0 # amount of mrna allocated to the active enzyme sector at zero growth (mmol_mrna/g_cdw) + self.mrnas_mu = mrnas_mu # amount of mrna allocated to the active enzyme sector at zero growth (mmol_mrna/g_cdw/h)' self.id = 'ActivemRNASector' self.slope = None # mmol/gcdw @@ -50,8 +50,8 @@ def __init__(self, mrnas_0:float =3.59*1e-5, self.f_max = self.elongation_rates[1]/self.ribosome_spacing[1] def set_slope(self): - self.slope = self.mrnas_mu + self.slope = self.mrnas_mu * 1e3 # unit correction for efficient computing def set_intercept(self): - self.intercept = self.mrnas_0 + self.intercept = self.mrnas_0 *1e3 # unit correction for efficient computing diff --git a/tests/unit_tests/test_tam_generation.py b/tests/unit_tests/test_tam_generation.py index e7216b4..f23fc9d 100644 --- a/tests/unit_tests/test_tam_generation.py +++ b/tests/unit_tests/test_tam_generation.py @@ -1,4 +1,51 @@ from Scripts.tam_generation import set_up_toy_tam, set_up_ecolicore_tam +from Scripts.pam_generation import set_up_ecolicore_pam, set_up_toy_pam + + +def test_set_up_toy_tam_works(): + sut = set_up_toy_tam def test_set_up_ecolicore_tam_works(): sut = set_up_ecolicore_tam() + assert True + +def test_toy_tam_without_constraints_has_same_result_as_pam(): + # Arrange + sut = set_up_toy_tam() + toy_pam = set_up_toy_pam() + + sut.change_reaction_bounds(rxn_id='R1', + lower_bound=0, upper_bound=1e-3) + toy_pam.change_reaction_bounds(rxn_id='R1', + lower_bound=0, upper_bound=1e-3) + + + # Act + sut.optimize() + toy_pam.optimize() + + # Arrange + assert 'optimal' == toy_pam.solver.status + assert 'optimal' == sut.solver.status + assert toy_pam.objective.value == sut.objective.value + +def test_ecolicore_tam_without_constraints_has_same_result_as_pam(): + # Arrange + sut = set_up_ecolicore_tam() + ecolicore_pam = set_up_ecolicore_pam() + + sut.change_reaction_bounds(rxn_id='EX_glc__D_e', + lower_bound=-10, upper_bound=0) + ecolicore_pam.change_reaction_bounds(rxn_id='EX_glc__D_e', + lower_bound=-10, upper_bound=0) + + # Act + sut.optimize() + ecolicore_pam.optimize() + for enzyme in ecolicore_pam.enzyme_variables: + print(enzyme.id, enzyme.flux) + + # Arrange + assert 'optimal' == ecolicore_pam.solver.status + assert 'optimal' == sut.solver.status + assert ecolicore_pam.objective.value == sut.objective.value