{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "247af578", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Determination of memory status is not supported on this \n", " platform, measuring for memoryleaks will never fail\n" ] } ], "source": [ "import pandas as pd\n", "import cobra\n", "from BFAIR.mfa.INCA import INCA_reimport\n", "from BFAIR.mfa.sampling import (\n", " model_rxn_overlap,\n", " rxn_coverage,\n", " split_lumped_rxns,\n", " split_lumped_reverse_rxns,\n", " find_reverse_rxns,\n", " combine_split_rxns,\n", " cobra_add_split_rxns,\n", " find_biomass_reaction,\n", " replace_biomass_rxn_name,\n", ")" ] }, { "cell_type": "markdown", "id": "0e52647c", "metadata": {}, "source": [ "#### INCA re-import" ] }, { "cell_type": "markdown", "id": "ac4d8422", "metadata": {}, "source": [ "First, let's reimport the data using our `BFAIR INCA_reimport` tools" ] }, { "cell_type": "code", "execution_count": 2, "id": "ee0f4c60", "metadata": {}, "outputs": [], "source": [ "filename = 'data/MFA_modelInputsData/TestFile.mat'\n", "simulation_info = pd.read_csv('data/MFA_modelInputsData/Re-import/experimentalMS_data_I.csv')\n", "simulation_id = 'WTEColi_113C80_U13C20_01'" ] }, { "cell_type": "markdown", "id": "1ae4727d", "metadata": {}, "source": [ "Here we re-import the INCA output" ] }, { "cell_type": "code", "execution_count": 3, "id": "b514e21e", "metadata": {}, "outputs": [], "source": [ "reimport_data = INCA_reimport()\n", "(fittedData,\n", " fittedFluxes,\n", " fittedFragments,\n", " fittedMeasuredFluxes,\n", " fittedMeasuredFragments,\n", " fittedMeasuredFluxResiduals,\n", " fittedMeasuredFragmentResiduals,\n", " simulationParameters) = reimport_data.reimport(\n", " filename,\n", " simulation_info,\n", " simulation_id\n", ")" ] }, { "cell_type": "code", "execution_count": 4, "id": "a56c8f11", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
simulation_idsimulation_dateAndTimerxn_idfluxflux_stdevflux_lbflux_ubflux_unitsfit_alffit_chi2sfit_corfit_covfreeused_comment_
0WTEColi_113C80_U13C20_012021-04-16 18:29:3726dap_DASH_MSYN2.295040e-010.0026080.2243920.234616mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
1WTEColi_113C80_U13C20_012021-04-16 18:29:37ACONTa_ACONTb2.074886e+0016996.8649761.1859841000.000000mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
2WTEColi_113C80_U13C20_012021-04-16 18:29:37ACONTa_ACONTb_reverse8.690514e-0715432.5920320.00000028.927600mmol*gDCW-1*hr-10.05NoneNoneNoneTrueTrueNone
3WTEColi_113C80_U13C20_012021-04-16 18:29:37AKGDH1.423617e-017673.6155920.0000001.919800mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
4WTEColi_113C80_U13C20_012021-04-16 18:29:37ALATA_L3.435520e-010.0039040.3359000.351204mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
................................................
92WTEColi_113C80_U13C20_012021-04-16 18:29:37TPI2.175603e+0025620.6563410.0000001000.000000mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
93WTEColi_113C80_U13C20_012021-04-16 18:29:37TPI_reverse8.689299e-0724739.5936490.0000001000.000000mmol*gDCW-1*hr-10.05NoneNoneNoneTrueTrueNone
94WTEColi_113C80_U13C20_012021-04-16 18:29:37TrpSYN3.801600e-020.0004320.0371690.038863mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
95WTEColi_113C80_U13C20_012021-04-16 18:29:37TyrSYN9.222400e-020.0010480.0901700.094278mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
96WTEColi_113C80_U13C20_012021-04-16 18:29:37ValSYN2.830080e-010.0032160.2767050.289311mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
\n", "

97 rows × 15 columns

\n", "
" ], "text/plain": [ " simulation_id simulation_dateAndTime rxn_id \\\n", "0 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 26dap_DASH_MSYN \n", "1 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 ACONTa_ACONTb \n", "2 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 ACONTa_ACONTb_reverse \n", "3 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 AKGDH \n", "4 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 ALATA_L \n", ".. ... ... ... \n", "92 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 TPI \n", "93 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 TPI_reverse \n", "94 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 TrpSYN \n", "95 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 TyrSYN \n", "96 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 ValSYN \n", "\n", " flux flux_stdev flux_lb flux_ub flux_units \\\n", "0 2.295040e-01 0.002608 0.224392 0.234616 mmol*gDCW-1*hr-1 \n", "1 2.074886e+00 16996.864976 1.185984 1000.000000 mmol*gDCW-1*hr-1 \n", "2 8.690514e-07 15432.592032 0.000000 28.927600 mmol*gDCW-1*hr-1 \n", "3 1.423617e-01 7673.615592 0.000000 1.919800 mmol*gDCW-1*hr-1 \n", "4 3.435520e-01 0.003904 0.335900 0.351204 mmol*gDCW-1*hr-1 \n", ".. ... ... ... ... ... \n", "92 2.175603e+00 25620.656341 0.000000 1000.000000 mmol*gDCW-1*hr-1 \n", "93 8.689299e-07 24739.593649 0.000000 1000.000000 mmol*gDCW-1*hr-1 \n", "94 3.801600e-02 0.000432 0.037169 0.038863 mmol*gDCW-1*hr-1 \n", "95 9.222400e-02 0.001048 0.090170 0.094278 mmol*gDCW-1*hr-1 \n", "96 2.830080e-01 0.003216 0.276705 0.289311 mmol*gDCW-1*hr-1 \n", "\n", " fit_alf fit_chi2s fit_cor fit_cov free used_ comment_ \n", "0 0.05 None None None False True None \n", "1 0.05 None None None False True None \n", "2 0.05 None None None True True None \n", "3 0.05 None None None False True None \n", "4 0.05 None None None False True None \n", ".. ... ... ... ... ... ... ... \n", "92 0.05 None None None False True None \n", "93 0.05 None None None True True None \n", "94 0.05 None None None False True None \n", "95 0.05 None None None False True None \n", "96 0.05 None None None False True None \n", "\n", "[97 rows x 15 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fittedFluxes" ] }, { "cell_type": "markdown", "id": "ea2e6c1e", "metadata": {}, "source": [ "Here we import the model" ] }, { "cell_type": "code", "execution_count": 5, "id": "f2f6f0d7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Academic license - for non-commercial use only - expires 2021-07-30\n", "Using license file /Users/matmat/gurobi.lic\n" ] } ], "source": [ "model = cobra.io.load_json_model('data/FIA_MS_example/database_files/iJO1366.json')" ] }, { "cell_type": "code", "execution_count": 6, "id": "213b6a45", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "61.0 %\n" ] } ], "source": [ "rxn_coverage(fittedFluxes, model)" ] }, { "cell_type": "markdown", "id": "ef6cf6a2", "metadata": {}, "source": [ "61 % of all the reimported reactions have non-overlapping names with the model we want to use for simulations! That a bit much. Let's do something about that" ] }, { "cell_type": "markdown", "id": "9cac90bd", "metadata": {}, "source": [ "First, let's find the name of the biomass reaction in the model and replace the one in our data with it" ] }, { "cell_type": "code", "execution_count": 7, "id": "9f0cb319", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['BIOMASS_Ec_iJO1366_WT_53p95M', 'BIOMASS_Ec_iJO1366_core_53p95M']" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_biomass_reaction(model)" ] }, { "cell_type": "markdown", "id": "db5cf93e", "metadata": {}, "source": [ "This model has two biomass reactions, a full and a reduced core biomass reaction. In the summary we can see that the core biomass reaction is the assigned objective function, so we will reassign this name to our biomass function" ] }, { "cell_type": "code", "execution_count": 8, "id": "0716fb30", "metadata": {}, "outputs": [ { "data": { "text/html": [ "

Objective

1.0 BIOMASS_Ec_iJO1366_core_53p95M = 0.9823718127269793

Uptake

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MetaboliteReactionFluxC-NumberC-Flux
ca2_eEX_ca2_e0.00511300.00%
cl_eEX_cl_e0.00511300.00%
cobalt2_eEX_cobalt2_e2.456E-0500.00%
cu2_eEX_cu2_e0.000696500.00%
fe2_eEX_fe2_e0.0157800.00%
glc__D_eEX_glc__D_e106100.00%
k_eEX_k_e0.191800.00%
mg2_eEX_mg2_e0.00852200.00%
mn2_eEX_mn2_e0.000678800.00%
mobd_eEX_mobd_e0.000126700.00%
nh4_eEX_nh4_e10.6100.00%
ni2_eEX_ni2_e0.000317300.00%
o2_eEX_o2_e17.5800.00%
pi_eEX_pi_e0.947600.00%
so4_eEX_so4_e0.247800.00%
zn2_eEX_zn2_e0.00033500.00%

Secretion

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MetaboliteReactionFluxC-NumberC-Flux
4crsol_cDM_4crsol_c-0.000219170.01%
5drib_cDM_5drib_c-0.00022150.01%
amob_cDM_amob_c-1.965E-06150.00%
mththf_cDM_mththf_c-0.000440150.01%
co2_eEX_co2_e-19.68199.98%
h2o_eEX_h2o_e-45.6200.00%
h_eEX_h_e-9.02600.00%
meoh_eEX_meoh_e-1.965E-0610.00%
" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": 9, "id": "7482586f", "metadata": {}, "outputs": [], "source": [ "fittedFluxes = replace_biomass_rxn_name(fittedFluxes, biomass_string='Biomass', biomass_rxn_name='BIOMASS_Ec_iJO1366_core_53p95M')" ] }, { "cell_type": "markdown", "id": "3cefceae", "metadata": {}, "source": [ "Next step, adjust the names of our MFA data so that they can be assigned to our model's reactions" ] }, { "cell_type": "code", "execution_count": 10, "id": "2dc33063", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 26dap_DASH_MSYN\n", "1 ACONTa_ACONTb\n", "2 ACONTa_ACONTb_reverse\n", "5 ArgSYN\n", "14 EX_ac_LPAREN_e_RPAREN_\n", "15 EX_co2_LPAREN_e_RPAREN_\n", "16 EX_co2_LPAREN_e_RPAREN__unlabeled\n", "17 EX_glc_LPAREN_e_RPAREN_\n", "18 EX_nh4_LPAREN_e_RPAREN_\n", "19 EX_o2_LPAREN_e_RPAREN_\n", "20 EX_so4_LPAREN_e_RPAREN_\n", "21 FADR_NADH_CYTBD_HYD_ATPS4r\n", "23 FBA_reverse\n", "25 FUM_reverse\n", "26 G6PDH2r_PGL\n", "27 GAPD_PGK\n", "28 GAPD_PGK_reverse\n", "30 GHMT2r_reverse\n", "34 GluSYN\n", "37 HisSYN\n", "39 ICDHyr_reverse\n", "41 IleSYN\n", "42 LeuSYN\n", "45 MDH_reverse\n", "48 MetSYN\n", "49 MlthfSYN\n", "50 MlthfSYN_reverse\n", "53 NADH_CYTBD_HYD_ATPS4r\n", "54 NADTRHD_THD2pp\n", "55 NADTRHD_THD2pp_reverse\n", "59 PGI_reverse\n", "61 PGM_reverse\n", "62 PheSYN\n", "65 ProSYN\n", "67 PTAr_ACKr_ACS\n", "68 PTAr_ACKr_ACS_reverse\n", "71 RPE_reverse\n", "73 RPI_reverse\n", "74 SERAT_CYSS\n", "75 SerSYN\n", "76 SUCCOAS\n", "77 SUCCOAS_reverse\n", "79 SUCDi_reverse\n", "81 TALA_reverse\n", "82 THRD_GLYAT\n", "83 ThrSYN\n", "84 TKT1a\n", "85 TKT1a_reverse\n", "86 TKT1b\n", "87 TKT1b_reverse\n", "88 TKT2a\n", "89 TKT2a_reverse\n", "90 TKT2b\n", "91 TKT2b_reverse\n", "93 TPI_reverse\n", "94 TrpSYN\n", "95 TyrSYN\n", "96 ValSYN\n", "Name: rxn_id, dtype: object" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model_rxn_overlap(fittedFluxes, model)" ] }, { "cell_type": "markdown", "id": "dbda89f0", "metadata": {}, "source": [ "Observations: \n", "1) some reaction names include more than one metabolite\n", "2) many unassigned amino acids end with `SYN` and\n", "3) some exchange reactions include `LPAREN_` and `RPAREN_`. Let's try to do something about that\n", "4) probably all `_reverse` reactions could not be assigned" ] }, { "cell_type": "markdown", "id": "dda8a6c2", "metadata": {}, "source": [ "1) Split the lumped reactions and give all of them the same bounds" ] }, { "cell_type": "markdown", "id": "1c5ecaf0", "metadata": {}, "source": [ "So let's pick the ones we want. Let's save the reverse reactions for a separate step" ] }, { "cell_type": "code", "execution_count": 11, "id": "4532e13b", "metadata": {}, "outputs": [], "source": [ "lumped_ids = [1, 21, 26, 27, 53, 54, 67, 74, 82]\n", "mask = []\n", "overlap = model_rxn_overlap(fittedFluxes, model)\n", "for i in overlap.iteritems():\n", " if i[0] in lumped_ids:\n", " mask.append(True)\n", " else:\n", " mask.append(False)" ] }, { "cell_type": "code", "execution_count": 12, "id": "698d6eb0", "metadata": {}, "outputs": [], "source": [ "lumped_rxns = model_rxn_overlap(fittedFluxes, model)[mask]\n", "fittedFluxes = split_lumped_rxns(lumped_rxns, fittedFluxes)" ] }, { "cell_type": "code", "execution_count": 13, "id": "80a80b32", "metadata": {}, "outputs": [], "source": [ "lumped_reverse_ids = [2, 28, 55, 68]\n", "mask_reverse = []\n", "for i in model_rxn_overlap(fittedFluxes, model).iteritems():\n", " if i[0] in lumped_reverse_ids:\n", " mask_reverse.append(True)\n", " else:\n", " mask_reverse.append(False)" ] }, { "cell_type": "code", "execution_count": 14, "id": "2f8149c7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ACONTa_ACONTb_reverse\n", "GAPD_PGK_reverse\n", "NADTRHD_THD2pp_reverse\n", "PTAr_ACKr_ACS_reverse\n" ] } ], "source": [ "lumped_reverse_rxns = model_rxn_overlap(fittedFluxes, model)[mask_reverse]\n", "fittedFluxes = split_lumped_reverse_rxns(lumped_reverse_rxns, fittedFluxes)" ] }, { "cell_type": "code", "execution_count": 15, "id": "b22349e6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 26dap_DASH_MSYN\n", "2 ACONTa_reverse\n", "5 ArgSYN\n", "14 EX_ac_LPAREN_e_RPAREN_\n", "15 EX_co2_LPAREN_e_RPAREN_\n", " ... \n", "112 ACONTb_reverse\n", "113 PGK_reverse\n", "114 THD2pp_reverse\n", "115 ACKr_reverse\n", "116 ACS_reverse\n", "Name: rxn_id, Length: 63, dtype: object" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model_rxn_overlap(fittedFluxes, model)" ] }, { "cell_type": "code", "execution_count": 16, "id": "b65848cb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "54.0 %\n" ] } ], "source": [ "rxn_coverage(fittedFluxes, model)" ] }, { "cell_type": "markdown", "id": "f163e56e", "metadata": {}, "source": [ "2) SYN, these reactions might be lumped; let's investigate!" ] }, { "cell_type": "code", "execution_count": 17, "id": "d78af3cb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ARGAGMt7pp\n", "ARGDC\n", "ARGDCpp\n", "ARGORNt7pp\n", "ARGSL\n", "ARGSS\n", "ARGTRS\n", "ARGabcpp\n", "ARGt3pp\n", "ARGtex\n" ] } ], "source": [ "for rxn in model.reactions:\n", " if 'ARG' in rxn.id:\n", " print(rxn.id)" ] }, { "cell_type": "markdown", "id": "38c9a1da", "metadata": {}, "source": [ "Yeah I guess so... This sucks, not sure of we can do anything about that" ] }, { "cell_type": "markdown", "id": "48a77bad", "metadata": {}, "source": [ "3) Let's remove the extra bits in the exchange reaction strings" ] }, { "cell_type": "code", "execution_count": 18, "id": "35ad96e7", "metadata": {}, "outputs": [], "source": [ "for i, row in fittedFluxes.iterrows():\n", " if 'LPAREN_' in row['rxn_id']:\n", " fittedFluxes.at[i, 'rxn_id'] = row['rxn_id'].replace('LPAREN_', '').replace('_RPAREN_', '')" ] }, { "cell_type": "code", "execution_count": 19, "id": "51464d06", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "50.0 %\n" ] } ], "source": [ "rxn_coverage(fittedFluxes, model)" ] }, { "cell_type": "markdown", "id": "2442e13a", "metadata": {}, "source": [ "4) Reverse. Let's check if the forward and reverse fluxes are actually separate. If not, then the two of them will define the bounds together. If they are, then we should add new reverse reactions to the model." ] }, { "cell_type": "code", "execution_count": 20, "id": "6113cc10", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
forwardreverse
2ACONTaACONTa_reverse
23FBAFBA_reverse
25FUMFUM_reverse
28GAPDGAPD_reverse
30GHMT2rGHMT2r_reverse
39ICDHyrICDHyr_reverse
45MDHMDH_reverse
50MlthfSYNMlthfSYN_reverse
55NADTRHDNADTRHD_reverse
59PGIPGI_reverse
61PGMPGM_reverse
68PTArPTAr_reverse
71RPERPE_reverse
73RPIRPI_reverse
77SUCCOASSUCCOAS_reverse
79SUCDiSUCDi_reverse
81TALATALA_reverse
85TKT1aTKT1a_reverse
87TKT1bTKT1b_reverse
89TKT2aTKT2a_reverse
91TKT2bTKT2b_reverse
93TPITPI_reverse
112ACONTbACONTb_reverse
113PGKPGK_reverse
114THD2ppTHD2pp_reverse
115ACKrACKr_reverse
116ACSACS_reverse
\n", "
" ], "text/plain": [ " forward reverse\n", "2 ACONTa ACONTa_reverse\n", "23 FBA FBA_reverse\n", "25 FUM FUM_reverse\n", "28 GAPD GAPD_reverse\n", "30 GHMT2r GHMT2r_reverse\n", "39 ICDHyr ICDHyr_reverse\n", "45 MDH MDH_reverse\n", "50 MlthfSYN MlthfSYN_reverse\n", "55 NADTRHD NADTRHD_reverse\n", "59 PGI PGI_reverse\n", "61 PGM PGM_reverse\n", "68 PTAr PTAr_reverse\n", "71 RPE RPE_reverse\n", "73 RPI RPI_reverse\n", "77 SUCCOAS SUCCOAS_reverse\n", "79 SUCDi SUCDi_reverse\n", "81 TALA TALA_reverse\n", "85 TKT1a TKT1a_reverse\n", "87 TKT1b TKT1b_reverse\n", "89 TKT2a TKT2a_reverse\n", "91 TKT2b TKT2b_reverse\n", "93 TPI TPI_reverse\n", "112 ACONTb ACONTb_reverse\n", "113 PGK PGK_reverse\n", "114 THD2pp THD2pp_reverse\n", "115 ACKr ACKr_reverse\n", "116 ACS ACS_reverse" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_reverse_rxns(fittedFluxes)" ] }, { "cell_type": "code", "execution_count": 21, "id": "b9820148", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "These reactions need to be split into two: ACONTa\n", "These reactions need to be split into two: FUM\n", "These reactions need to be split into two: GAPD\n", "These reactions need to be split into two: ICDHyr\n", "These reactions need to be split into two: MlthfSYN\n", "These reactions need to be split into two: PGM\n", "These reactions need to be split into two: PTAr\n", "These reactions need to be split into two: ACONTb\n", "These reactions need to be split into two: PGK\n", "These reactions need to be split into two: ACKr\n", "These reactions need to be split into two: ACS\n" ] } ], "source": [ "fittedFluxes, rxns_to_split = combine_split_rxns(fittedFluxes)" ] }, { "cell_type": "code", "execution_count": 22, "id": "b382bb6e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexsimulation_idsimulation_dateAndTimerxn_idfluxflux_stdevflux_lbflux_ubflux_unitsfit_alffit_chi2sfit_corfit_covfreeused_comment_
00WTEColi_113C80_U13C20_012021-04-16 18:29:3726dap_DASH_MSYN2.295040e-012.607999e-030.2243920.234616mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
11WTEColi_113C80_U13C20_012021-04-16 18:29:37ACONTa2.074886e+001.699686e+041.1859841000.000000mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
22WTEColi_113C80_U13C20_012021-04-16 18:29:37ACONTa_reverse8.690514e-071.543259e+040.00000028.927600mmol*gDCW-1*hr-10.05NoneNoneNoneTrueTrueNone
33WTEColi_113C80_U13C20_012021-04-16 18:29:37AKGDH1.423617e-017.673616e+030.0000001.919800mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
44WTEColi_113C80_U13C20_012021-04-16 18:29:37ALATA_L3.435520e-013.904002e-030.3359000.351204mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
...................................................
96111WTEColi_113C80_U13C20_012021-04-16 18:29:37GLYAT1.000000e-076.096786e-120.0000000.035201mmol*gDCW-1*hr-10.05NoneNoneNoneFalseTrueNone
97112WTEColi_113C80_U13C20_012021-04-16 18:29:37ACONTb_reverse8.690514e-071.543259e+040.00000028.927600mmol*gDCW-1*hr-10.05NoneNoneNoneTrueTrueNone
98113WTEColi_113C80_U13C20_012021-04-16 18:29:37PGK_reverse8.689295e-079.920303e+030.00000024.418874mmol*gDCW-1*hr-10.05NoneNoneNoneTrueTrueNone
99115WTEColi_113C80_U13C20_012021-04-16 18:29:37ACKr_reverse8.695792e-072.139235e+040.00000028.262368mmol*gDCW-1*hr-10.05NoneNoneNoneTrueTrueNone
100116WTEColi_113C80_U13C20_012021-04-16 18:29:37ACS_reverse8.695792e-072.139235e+040.00000028.262368mmol*gDCW-1*hr-10.05NoneNoneNoneTrueTrueNone
\n", "

101 rows × 16 columns

\n", "
" ], "text/plain": [ " index simulation_id simulation_dateAndTime rxn_id \\\n", "0 0 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 26dap_DASH_MSYN \n", "1 1 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 ACONTa \n", "2 2 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 ACONTa_reverse \n", "3 3 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 AKGDH \n", "4 4 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 ALATA_L \n", ".. ... ... ... ... \n", "96 111 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 GLYAT \n", "97 112 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 ACONTb_reverse \n", "98 113 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 PGK_reverse \n", "99 115 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 ACKr_reverse \n", "100 116 WTEColi_113C80_U13C20_01 2021-04-16 18:29:37 ACS_reverse \n", "\n", " flux flux_stdev flux_lb flux_ub flux_units \\\n", "0 2.295040e-01 2.607999e-03 0.224392 0.234616 mmol*gDCW-1*hr-1 \n", "1 2.074886e+00 1.699686e+04 1.185984 1000.000000 mmol*gDCW-1*hr-1 \n", "2 8.690514e-07 1.543259e+04 0.000000 28.927600 mmol*gDCW-1*hr-1 \n", "3 1.423617e-01 7.673616e+03 0.000000 1.919800 mmol*gDCW-1*hr-1 \n", "4 3.435520e-01 3.904002e-03 0.335900 0.351204 mmol*gDCW-1*hr-1 \n", ".. ... ... ... ... ... \n", "96 1.000000e-07 6.096786e-12 0.000000 0.035201 mmol*gDCW-1*hr-1 \n", "97 8.690514e-07 1.543259e+04 0.000000 28.927600 mmol*gDCW-1*hr-1 \n", "98 8.689295e-07 9.920303e+03 0.000000 24.418874 mmol*gDCW-1*hr-1 \n", "99 8.695792e-07 2.139235e+04 0.000000 28.262368 mmol*gDCW-1*hr-1 \n", "100 8.695792e-07 2.139235e+04 0.000000 28.262368 mmol*gDCW-1*hr-1 \n", "\n", " fit_alf fit_chi2s fit_cor fit_cov free used_ comment_ \n", "0 0.05 None None None False True None \n", "1 0.05 None None None False True None \n", "2 0.05 None None None True True None \n", "3 0.05 None None None False True None \n", "4 0.05 None None None False True None \n", ".. ... ... ... ... ... ... ... \n", "96 0.05 None None None False True None \n", "97 0.05 None None None True True None \n", "98 0.05 None None None True True None \n", "99 0.05 None None None True True None \n", "100 0.05 None None None True True None \n", "\n", "[101 rows x 16 columns]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fittedFluxes" ] }, { "cell_type": "markdown", "id": "58206bfc", "metadata": {}, "source": [ "The reactions that are acutally separate (i.e. non-overlapping bounds, exchange fluxes) are a problem. COBRA has some ways to account for that but they seem to be quite involved. An easier way to deal with that is that just add the reverse reaction as a separate reaction to the model; it's the same reaction, just with the inverse direction. The following method is \"destructive\", i.e. it will alter the model. Be aware of that." ] }, { "cell_type": "code", "execution_count": 28, "id": "85fc40e4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['ACONTa',\n", " 'FUM',\n", " 'GAPD',\n", " 'ICDHyr',\n", " 'MlthfSYN',\n", " 'PGM',\n", " 'PTAr',\n", " 'ACONTb',\n", " 'PGK',\n", " 'ACKr',\n", " 'ACS']" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rxns_to_split" ] }, { "cell_type": "code", "execution_count": 23, "id": "8c0cb14b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "- Added ACONTa to model\n", "- Added FUM to model\n", "- Added GAPD to model\n", "- Added ICDHyr to model\n", "# Could not add MlthfSYN to model\n", "- Added PGM to model\n", "- Added PTAr to model\n", "- Added ACONTb to model\n", "- Added PGK to model\n", "- Added ACKr to model\n", "- Added ACS to model\n" ] } ], "source": [ "cobra_add_split_rxns(rxns_to_split, model)" ] }, { "cell_type": "code", "execution_count": 24, "id": "becc5617", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 26dap_DASH_MSYN\n", "5 ArgSYN\n", "16 EX_co2_e_unlabeled\n", "17 EX_glc_e\n", "21 FADR\n", "32 GluSYN\n", "35 HisSYN\n", "39 IleSYN\n", "40 LeuSYN\n", "45 MetSYN\n", "46 MlthfSYN\n", "47 MlthfSYN_reverse\n", "50 NADH\n", "57 PheSYN\n", "60 ProSYN\n", "68 SerSYN\n", "69 SUCCOAS\n", "73 ThrSYN\n", "74 TKT1a\n", "75 TKT1b\n", "76 TKT2a\n", "77 TKT2b\n", "79 TrpSYN\n", "80 TyrSYN\n", "81 ValSYN\n", "83 NADH\n", "84 CYTBD\n", "85 HYD\n", "86 ATPS4r\n", "89 CYTBD\n", "90 HYD\n", "91 ATPS4r\n", "Name: rxn_id, dtype: object" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model_rxn_overlap(fittedFluxes, model)" ] }, { "cell_type": "code", "execution_count": 25, "id": "cdae7dde", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "32.0 %\n" ] } ], "source": [ "rxn_coverage(fittedFluxes, model)" ] }, { "cell_type": "markdown", "id": "f170ebdb", "metadata": {}, "source": [ "Ok... well, guess you can't please everyone. You could of course find a way to add the remaining reactions manually or investigate further how to distribute their values to other reactions but this is as far as we will go here." ] }, { "cell_type": "markdown", "id": "88d5a965", "metadata": {}, "source": [ "For the next steps, please check the `MFA_feasibility_and_sampling` notebook" ] }, { "cell_type": "code", "execution_count": 26, "id": "e4ec00a0", "metadata": {}, "outputs": [], "source": [ "fittedFluxes.to_pickle(\"data/MFA_sampling/preprocessed_fittedFluxes.obj\")" ] }, { "cell_type": "code", "execution_count": 27, "id": "dde3ee59", "metadata": {}, "outputs": [], "source": [ "cobra.io.save_json_model(model, \"data/MFA_sampling/preprocessed_model.json\")" ] }, { "cell_type": "code", "execution_count": null, "id": "99d4c41a", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "bfair", "language": "python", "name": "bfair" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 5 }