Supplementary Data 4: Specific reactions and customized codes used in this study. Genome-scale metabolic rewiring improves titers rates and yields of the non-native product indigoidine at scale Ê Deepanwita Banerjee*, Thomas Eng*, Andrew K. Lau, Yusuke Sasaki, Brenda Wang, Yan Chen, Jan-Philip Prahl, Vasanth R. Singan, Robin A. Herbert, Yuzhong Liu, Deepti Tanjore, Christopher J. Petzold, Jay D. Keasling, and Aindrila Mukhopadhyay# Ê * Co-first authors: Deepanwita Banerjee, Thomas Eng # Corresponding author The MCS algorithm used is available as part of CellNetAnalyzer (CNA 2018.2). Custom code and details required to replicate the simulations performed in this work are provided here. 1. Computation of constrained minimal cut sets (cMCS) 1.1. All cMCS calculations were done using API functions of CellNetAnalyzer (version 2018.2) publicly accessible at https://www2.mpi-magdeburg.mpg.de/projects/cna/cna.html on MATLAB 2017b platform using CPLEX 12.8 as the MILP solver. The script to calculate cMCS for growth-coupled production in Pseudomonas putida Òcalculate_coupling_mcs_ppu.mÓ was customized using the example script Òcalculate_coupling_mcs_coli.mÓ publicly accessible at http://www.mpi-magdeburg.mpg.de/projects/cna/repository/Scripts_Coupling_cMCS.zip. It works in concert with CellNetAnalyzer (CNA). Start MATLAB directly from the main directory of CellNetAnalyzer (e.g. via the command line in Linux). startcna cd Scripts calculate_coupling_mcs_ppu 1.1.1. Inputs required: iJN1462D.mat file containing the following variablesÊ 1.1.1.1. atpm - index for the ATPM reaction 1.1.1.2. del_exchanges - column vector with indices for exchanges other than exchanges for minimal media salts (EX_ca2_e, EX_cl_e, EX_cobalt2_e, EX_cu2_e, EX_fe2_e, EX_h2o_e, EX_h_e, EX_hco3_e, EX_k_e, EX_mg2_e, EX_mn2_e, EX_mobd_e, EX_na1_e, EX_nh4_e, EX_ni2_e, EX_pi_e, EX_sel_e, EX_so4_e, EX_tungs_e, EX_zn2_e), glucose, oxygen, and typical by products for P. putida (acetate, CO2, ethanol, lactate, methanol, gluconate and 2-ketogluconate, 3-oxoadipate and catechol) 1.1.1.3. exchange_ind - Row vector containing indices for DM, sink and exchanges 1.1.1.4. glucose - glucose exchange index 1.1.1.5. mue - biomass reaction index 1.1.1.6. noKO - row vector with indices of reactions which cannot be cut (knocked-out). Irrepressible reactions including ATPM, exchange, transporters and all reactions without a GPR, pseudo reactions, etc. 1.1.1.7. o2in - oxygen exchange index 1.1.1.8. iJN1462Bs - the model created in CellNetAnalyzer using following command: iJN1462Bs = CNAcobra2cna(iJN1462); 1.1.1.9. iJN1411Bs_reacNames - name of all the reactions 1.1.1.10. reac_off - indices for the reactions which need to be set to carry no flux (reaction IDs - CAT, CATpp, SPODM, PIt7pp, and sink_sink_pqqA_kt_c) 1.1.2. Additional inputs required: Following parameters/constraints need to be set for MCS calculation for growth coupling 1.1.2.1. glucose_uptake_limit = 6.3 1.1.2.2. min_yield = 0.8 (fraction of glucose that has to be converted to the product) 1.1.2.3. min_mue = 0.01(fraction of glucose that has to be converted to the product) 1.1.2.4. min_atpm = 0.92 1.1.2.5. screen_metabolites = 1120 (metabolite index of glutamine) 1.1.3. Outputs generated: A results.mat file is generated with the following variables 1.1.3.1. gluc_up Ð A row vector with the glucose uptake rate used for MCS calculation. 1Xm dimension, where m is the number of metabolites in the model. 1.1.3.2. mcs Ð A 1Xm cell array containing nXr logical array for each metabolite. The logical array contain reaction cut set information for the calculated MCS. Here m is the number of metabolites, r is the number of reactions in the model and n is the number of MCS possible for each metabolite. 1.1.3.3. max_mue Ð A row vector with the maximum possible biomass using the respective glucose uptake rate. 1Xm dimension, where m is the number of metabolites in the model. 1.1.3.4. max_prod - A row vector with the maximum possible metabolite production using the respective glucose uptake rate. 1Xm dimension, where m is the number of metabolites in the model. 1.2. Decision workflow (Figure 1a) after calculating cMCS 1.2.1. Determine the size (Z), i.e. number of reactions to be knocked out in each cut set, is biologically feasible (Z < 25) %Example: sizeofMCS = calculatesizeofMCS(mcs) for j = 1: length(mcs) j sizeA = size(mcs{1,j}); if sizeA(1) ~= 0 sizeofMCS(j,1) = sum(mcs{1,j}(1,:)~=0); else sizeofMCS(j,1) = 0; end end clear('sizeA'); 1.2.2. Feasibility of coupling using the reactions and genes involved in the cutset. The following code is used to test the cMCS set output generated from calculate_coupling_mcs_ppu script discussed in section 1.1.3. for each metabolite. 1.2.2.1. Initialization: Before starting the code described in section 1.2.2.2., start MATLAB and initialize COBRA Toolbox from your work directory (eg. DDBproject). COBRA Toolbox v.3.0 in MATLAB R2017b was used for all simulations with the GLPK (https://www.gnu.org/software/glpk/ or Gurobi Optimizer 8.1 (http://www.gurobi.com/) as the optimization solver. Installation details for COBRA Toolbox is available at https://opencobra.github.io/cobratoolbox/stable/installation.html cd DDBproject initCobraToolbox() changeCobraSolver('gurobi','all'); %% 1) Load one of the output file for a specific substrate % and product yield: load('É../CellNetAnalyzer/Scripts/results.mat'); %% 2) Load model and other parameters used for calculating % cMCS sets load('É./CellNetAnalyzer/Scripts/iJN1462D.mat','del_exchanges','exchange_ind','iJN1462Bs','reac_off'); %% 3) Load other parameters required to test the model load('É../Õother_info.mat','iJN1462Õ); % model can also be downloaded from Bigg database using the following command % iJN1462 = loadBiGGModel('iJN1463'); pRXNS={Ô3MBZALDH','3MBZDH','3MCAT23DOX','4MBZALDH','4MBZDH','4MCAT23DOX','4OD','4OD2','ACALD','BZALDH','BZDH','CAT23DOX','DH3MCHCDH','DH4MCHCDH','HMSD','HMSD2','HMSÕ,'HMSH2','HMSH3','HOPNTAL','HOPNTAL2','HOPNTAL3','MTOLDOX','MXMO','OP4ENH','OP4ENH2','OP4ENH3','PTOLDOX','PXMO','TOLtex','XMO'}; %% 4) Constraint the model to represent P. putida KT2440 model = removeRxns(iJN1462,iJN1462.rxns(530)); model = changeObjective(model,model.rxns(529)); model = changeRxnBounds(model,model.rxns(reac_off),0,'b'); model = changeRxnBounds(model,pRXNS,0,'b'); model = changeRxnBounds(model,model.rxns(del_exchanges),0,'u'); model = changeRxnBounds(model,{'sink_PHAg','sink_pqqA_kt_c_'},0,'b'); FBA = optimizeCbModel(model) WT_biomass = FBA.f; met_num = 1120; 1.2.2.2. Check if the phenotype for reactions versus gene KOs is congruent. % Example:[Bio,Bio_gene,KO_rxn_names,KO_geneList] = % testSetcMCS_yield(met_num,sizeofMCS,mcs_a,model) if sizeofMCS(met_num) == 0 warning('This metabolite doesnt have a cutset'); Bio = cell(0,0); Bio_gene = cell(0,0); KO_rxn_names = cell(0,0); KO_geneList = cell(0,0); else Modes_met = mcs_a{1,met_num}; % Get the RXNs and Genes for each of the modes for j = 1:size(Modes_met,1) KO_rxn_index(j,:) = find(Modes_met(j,:)); KO_rxn_names(:,j) = model.rxns(KO_rxn_index(j,:)); KO_geneList(:,j) = findGenesFromRxns(model,KO_rxn_names(:,j)); end % Test using FBA and FVA if it works for metabolite based on % reactions for j = 1: size(Modes_met,1) tmp_RXN = model; Dm_index = (length(model.rxns)+1); tmp_RXN = changeRxnBounds(tmp_RXN,KO_rxn_names(:,j),0,'b'); FBA_prev = optimizeCbModel(tmp_RXN); tmp_RXN = addDemandReaction(tmp_RXN,tmp_RXN.mets(met_num)); FBA_post = optimizeCbModel(tmp_RXN); Bio(j,1) = FBA_prev.f; Bio(j,2) = FBA_post.f; if FBA_post.f == 0 Bio(j,3) = 0; Bio(j,4) = 0; else [Bio(j,3), Bio(j,4)] = fluxVariability(tmp_RXN,100,'max',tmp_RXN.rxns(Dm_index)); end end % Test using FBA and FVA if it works for glutamine based on % associated genes for j = 1: size(Modes_met,1) tmp_GENE = model; for i = 1:length(KO_geneList(:,1)) tmp_GENE = deleteModelGenes(tmp_GENE,KO_geneList{i,j}); end FBA_prev_gene = optimizeCbModel(tmp_GENE); Bio_gene(j,1) = FBA_prev_gene.f; tmp_GENE=addDemandReaction(tmp_GENE,tmp_GENE.mets(met_num)); FBA_post_gene = optimizeCbModel(tmp_GENE); Bio_gene(j,2) = FBA_post_gene.f; if FBA_post_gene.f == 0 Bio_gene(j,3) = 0; Bio_gene(j,4) = 0; else [Bio_gene(j,3), Bio_gene(j,4)] = fluxVariability(tmp_GENE,100,'max', tmp_GENE.rxns(Dm_index)); end end end 1.2.3. Analyze the genes associated with the reactions in the cut set. This was done manually using existing literature evidence, in house generated RbTnSeq data and biocyc.org 1.2.3.1. Identify essential genes using RbTnseq data or biocyc.org evidence. 1.2.3.2. Identify each gene is involved in how many reactions (eg. for gene PP_5003) R = findRxnsFromGenes(model,ÕPP_5003Õ); R_nums = size(R.gene_PP_5003,1); for i = 1: R_nums R_IDs{i,1} = R.gene_PP_5003{i,1}; end 1.2.3.3. Identify smallest gene set to be targeted using the GPR Boolean logic 2. Constraint Based methods to confirm the cMCS For all the following code provided in this section start MATLAB and initialize COBRA Toolbox from your work directory (eg. DDBproject). COBRA Toolbox v.3.0 in MATLAB R2017b was used for all simulations with the GLPK (https://www.gnu.org/software/glpk/ or Gurobi Optimizer 8.1 (http://www.gurobi.com/) as the optimization solver. Installation details for COBRA Toolbox is available at https://opencobra.github.io/cobratoolbox/stable/installation.html cd DDBproject initCobraToolbox() changeCobraSolver('gurobi','all'); 2.1. Adding heterologous pathway for indigoidine production reaction model_INDG = addReaction(model,'INDG','2 gln_L_c + 2 atp_c + 2 coa_c + 2 fmn_c + 2.5 o2_c -> 2 pap_c + 2 fmnh2_c + 2 ppi_c + 2 amp_c + 2 ptth_c + h2o_c + 2 pi_c + ind_c'); % 2 L-gln + 2 ATP + 2 CoA + 2 FMN + 2.5 O2 -> 2 PAP + 2 FMNH2 + % 2 PPi + 2 AMP + 2 % Pantetheine + H2O + 2 Pi + Indigoidine model_INDG = addReaction(model_INDG,'APNPT','atp_c + ptth_c -> adp_c + h_c + pan4p_c'); % DB Jan142019 - changed sink reaction for ptth_c to above % reaction based on PP_0438 and R02971 reaction model_INDG = addReaction(model_INDG,'DF_INDG','ind_c -> ind_e'); model_INDG = addExchangeRxn(model_INDG,'ind_e'); model_INDG = changeRxnBounds(model_INDG,'EX_ind_e',0,'l'); 2.2. Testing glutamine and indigoidine across different hosts load('iCW773', 'iJN1462', 'iMM904', 'iRhto1108C','iML1515') % Three of the models can be directly downloaded from Bigg % Database using the following command: % [iJN1462,iMM904,iML1515] = loadBiGGModel({'iJN1463','iMM904','iML1515'}); % iCW773.xml can be downloaded from % https://github.com/notblank/sys-Bio-Cobra % iRhto1108C.xml can be downloaded from %https://github.com/maranasgroup/iRhto_memote/tree/master/model_files/release1 % These two models can be loaded using the readCbModel function iCW773 = changeObjective(iCW773,iCW773.rxns(971)); iMM904 = changeObjective(iMM904,iMM904.rxns(1521)); iRhto1108C = changeObjective(iRhto1108C, iRhto1108C.rxns(2115)); iJN1462 = changeObjective(iJN1462,iJN1462.rxns(529)); iML1515 = changeObjective(iML1515,iML1515.rxns(2669)); %% Add demand for glutamine production across models model_gln_773 = addDemandReaction(iCW773,'gln-L_c'); model_gln_904 = addDemandReaction(iMM904,'gln__L_c'); model_gln_1108 = addDemandReaction(iRhto1108C,'gln__L_c'); model_gln_1462 = addDemandReaction(iJN1462,'gln__L_c'); model_gln_1515 = addDemandReaction(iML1515, 'gln__L_c'); model_gln_773 = changeObjective(model_gln_773,'DM_gln-L_c'); model_gln_904 = changeObjective(model_gln_904,'DM_gln__L_c'); model_gln_1108 = changeObjective(model_gln_1108,'DM_gln__L_c'); model_gln_1462 = changeObjective(model_gln_1462,'DM_gln__L_c'); model_gln_1515 = changeObjective(model_gln_1515,'DM_gln__L_c'); FBA_773 = optimizeCbModel(iCW773); FBA_904 = optimizeCbModel(iMM904); FBA_1108 = optimizeCbModel(iRhto1108C); FBA_1462 = optimizeCbModel(iJN1462); FBA_1515 = optimizeCbModel(iML1515); FBA_773_g = optimizeCbModel(model_gln_773); FBA_904_g = optimizeCbModel(model_gln_904); FBA_1108_g = optimizeCbModel(model_gln_1108); FBA_1462_g = optimizeCbModel(model_gln_1462); FBA_1515_g = optimizeCbModel(model_gln_1515); Results_wt(1,1) = FBA_773.f; Results_wt(1,2) = FBA_904.f; Results_wt(1,3) = FBA_1108.f; Results_wt(1,4) = FBA_1462.f; Results_wt(1,5) = FBA_1515.f; Results_wt(2,1) = FBA_773_g.f; Results_wt(2,2) = FBA_904_g.f; Results_wt(2,3) = FBA_1108_g.f; Results_wt(2,4) = FBA_1462_g.f; Results_wt(2,5) = FBA_1515_g.f; Results_wt(3,1) = FBA_773.x(strcmp(iCW773.rxns,'EX_glc(e)')); Results_wt(3,2) = FBA_904.x(strcmp(iMM904.rxns,'EX_glc__D_e')); Results_wt(3,3) = FBA_1108.x(strcmp(iRhto1108C.rxns,'EX_glc__D_e')); Results_wt(3,4) = FBA_1462.x(strcmp(iJN1462.rxns,'EX_glc__D_e')); Results_wt(3,5) = FBA_1515.x(strcmp(iML1515.rxns,'EX_glc__D_e')); Results_wt(4,1) = FBA_773.x(strcmp(iCW773.rxns,'ATPM')); Results_wt(4,2) = FBA_904.x(strcmp(iMM904.rxns,'ATPM')); Results_wt(4,3) = FBA_1108.x(strcmp(iRhto1108C.rxns,'ATPM_c')); Results_wt(4,4) = FBA_1462.x(strcmp(iJN1462.rxns,'ATPM')); Results_wt(4,5) = FBA_1515.x(strcmp(iML1515.rxns,'ATPM')); %% Add indigoidine reactions to different models % C. glutamicum, model iCW773, ATCC13032 model_INDG_773 = addReaction(iCW773,'INDG','2 gln-L_c + 2 atp_c + 2 coa_c + 2.5 o2_c -> 2 pap_c + 2 ppi_c + 2 amp_c + 2 ptth_c + h2o_c + 2 pi_c + ind_c'); model_INDG_773 = addReaction(model_INDG_773,'APNPT_db','atp_c + ptth_c -> adp_c + h_c + pan4p_c'); % DB Jan142019 - changed sink reaction for ptth_c to above % reaction based on cgl0995 and R02971 reaction model_INDG_773 = addReaction(model_INDG_773,'DF_INDG','ind_c -> ind_e'); model_INDG_773 = addExchangeRxn(model_INDG_773,'ind_e'); model_INDG_773 = changeRxnBounds(model_INDG_773,'EX_ind_e',0,'l'); %S. cerevisiae, model iMM904 model_INDG_904 = addReaction(iMM904,'INDG','2 gln__L_c + 2 atp_c + 2 coa_c + 2 fmn_c + 2.5 o2_c -> 2 pap_c + 2 fmnh2_c + 2 ppi_c + 2 amp_c + 2 ptth_c + h2o_c + 2 pi_c + ind_c'); model_INDG_904 = addReaction(model_INDG_904,'APNPT_db','atp_c + ptth_c -> adp_c + h_c + pan4p_c'); % DB Jan142019 - changed sink reaction for ptth_c to above % reaction based on YDR531W and R02971 reaction model_INDG_904 = addReaction(model_INDG_904,'DF_INDG','ind_c -> ind_e'); model_INDG_904 = addExchangeRxn(model_INDG_904,'ind_e'); model_INDG_904 = changeRxnBounds(model_INDG_904,'EX_ind_e',0,'l'); % FMN maybe limiting, so change INDG reaction without % utilization of FMN model_INDG_904 = removeRxns(model_INDG_904,'INDG'); model_INDG_904 = addReaction(model_INDG_904,'INDG','2 gln__L_c + 2 atp_c + 2 coa_c + 2.5 o2_c -> 2 pap_c + 2 ppi_c + 2 amp_c + 2 ptth_c + h2o_c + 2 pi_c + ind_c'); %R. toruloides, model iRhto1108C model_INDG_1108 = addReaction(iRhto1108C,'INDG','2 gln__L_c + 2 atp_c + 2 coa_c + 2 fmn_c + 2.5 o2_c -> 2 pap_c + 2 fmnh2_c + 2 ppi_c + 2 amp_c + 2 ptth_c + h2o_c + 2 pi_c + ind_c'); model_INDG_1108 = addReaction(model_INDG_1108,'APNPT_db','atp_c + ptth_c -> adp_c + h_c + pan4p_c'); % DB Jan142019 - changed sink reaction for ptth_c to above % reaction based on YDR531W and R02971 reaction model_INDG_1108 = addReaction(model_INDG_1108,'DF_INDG','ind_c -> ind_e'); model_INDG_1108 = addExchangeRxn(model_INDG_1108,'ind_e'); model_INDG_1108 = changeRxnBounds(model_INDG_1108,'EX_ind_e',0,'l'); % FMN maybe limiting, so change INDG reaction without % utilization of FMN model_INDG_1108 = removeRxns(model_INDG_1108,'INDG'); model_INDG_1108 = addReaction(model_INDG_1108,'INDG','2 gln__L_c + 2 atp_c + 2 coa_c + 2.5 o2_c -> 2 pap_c + 2 ppi_c + 2 amp_c + 2 ptth_c + h2o_c + 2 pi_c + ind_c'); %P. putida, model iJN1462 model_INDG_1462 = addReaction(iJN1462,'INDG','2 gln__L_c + 2 atp_c + 2 coa_c + 2 fmn_c + 2.5 o2_c -> 2 pap_c + 2 fmnh2_c + 2 ppi_c + 2 amp_c + 2 ptth_c + h2o_c + 2 pi_c + ind_c'); model_INDG_1462 = addReaction(model_INDG_1462,'APNPT_db','atp_c + ptth_c -> adp_c + h_c + pan4p_c'); % DB Jan142019 - changed sink reaction for ptth_c to above % reaction based on PP_0438 and R02971 reaction model_INDG_1462 = addReaction(model_INDG_1462,'DF_INDG','ind_c -> ind_e'); model_INDG_1462 = addExchangeRxn(model_INDG_1462,'ind_e'); model_INDG_1462 = changeRxnBounds(model_INDG_1462,'EX_ind_e',0,'l'); %E. coli, model iML1515 model_INDG_1515 = addReaction(iML1515,'INDG','2 gln__L_c + 2 atp_c + 2 coa_c + 2 fmn_c + 2.5 o2_c -> 2 pap_c + 2 fmnh2_c + 2 ppi_c + 2 amp_c + 2 ptth_c + h2o_c + 2 pi_c + ind_c'); model_INDG_1515= addReaction(model_INDG_1515,'APNPT_db','atp_c + ptth_c -> adp_c + h_c + pan4p_c'); % DB Jan142019 - changed sink reaction for ptth_c to above % reaction based on b3974 and R02971 reaction model_INDG_1515 = addReaction(model_INDG_1515,'DF_INDG','ind_c -> ind_e'); model_INDG_1515 = addExchangeRxn(model_INDG_1515,'ind_e'); model_INDG_1515 = changeRxnBounds(model_INDG_1515,'EX_ind_e',0,'l'); FBA_773_b = optimizeCbModel(model_INDG_773); model_INDG_773 = changeObjective(model_INDG_773,'EX_ind_e'); FBA_773_i = optimizeCbModel(model_INDG_773); model_GLN_773 = addDemandReaction(model_INDG_773,'gln-L_c'); model_GLN_773 = changeObjective(model_GLN_773,'DM_gln-L_c'); FBA_773_g = optimizeCbModel(model_GLN_773); FBA_904_b = optimizeCbModel(model_INDG_904); model_INDG_904 = changeObjective(model_INDG_904,'EX_ind_e'); FBA_904_i = optimizeCbModel(model_INDG_904); model_GLN_904 = addDemandReaction(model_INDG_904,'gln__L_c'); model_GLN_904 = changeObjective(model_GLN_904,'DM_gln__L_c'); FBA_904_g = optimizeCbModel(model_GLN_904); FBA_1108_b = optimizeCbModel(model_INDG_1108); model_INDG_1108 = changeObjective(model_INDG_1108,'EX_ind_e'); FBA_1108_i = optimizeCbModel(model_INDG_1108); model_GLN_1108 = addDemandReaction(model_INDG_1108,'gln__L_c'); model_GLN_1108 = changeObjective(model_GLN_1108,'DM_gln__L_c'); FBA_1108_g = optimizeCbModel(model_GLN_1108); FBA_1462_b = optimizeCbModel(model_INDG_1462); model_INDG_1462 = changeObjective(model_INDG_1462,'EX_ind_e'); FBA_1462_i = optimizeCbModel(model_INDG_1462); model_GLN_1462 = addDemandReaction(model_INDG_1462,'gln__L_c'); model_GLN_1462 = changeObjective(model_GLN_1462,'DM_gln__L_c'); FBA_1462_g = optimizeCbModel(model_GLN_1462); FBA_1515_b = optimizeCbModel(model_INDG_1515); model_INDG_1515 = changeObjective(model_INDG_1515,'EX_ind_e'); FBA_1515_i = optimizeCbModel(model_INDG_1515); model_GLN_1515 = addDemandReaction(model_INDG_1515,'gln__L_c'); model_GLN_1515 = changeObjective(model_GLN_1515,'DM_gln__L_c'); FBA_1515_g = optimizeCbModel(model_GLN_1515); Results_indg(1,1) = FBA_773_b.f; Results_indg(1,2) = FBA_904_b.f; Results_indg(1,3) = FBA_1108_b.f; Results_indg(1,4) = FBA_1462_b.f; Results_indg(1,5) = FBA_1515_b.f; Results_indg(2,1) = FBA_773_g.f; Results_indg(2,2) = FBA_904_g.f; Results_indg(2,3) = FBA_1108_g.f; Results_indg(2,4) = FBA_1462_g.f; Results_indg(2,5) = FBA_1515_g.f; Results_indg(3,1) = FBA_773.x(strcmp(iCW773.rxns,'EX_glc(e)')); Results_indg(3,2) = FBA_904.x(strcmp(iMM904.rxns,'EX_glc__D_e')); Results_indg(3,3) = FBA_1108.x(strcmp(iRhto1108C.rxns,'EX_glc__D_e')); Results_indg(3,4) = FBA_1462.x(strcmp(iJN1462.rxns,'EX_glc__D_e')); Results_indg(3,5) = FBA_1515.x(strcmp(iML1515.rxns,'EX_glc__D_e')); Results_indg(4,1) = FBA_773.x(strcmp(iCW773.rxns,'ATPM')) Results_indg(4,2) = FBA_904.x(strcmp(iMM904.rxns,'ATPM')) Results_indg(4,3) = FBA_1108.x(strcmp(iRhto1108C.rxns,'ATPM_c')) Results_indg(4,4) = FBA_1462.x(strcmp(iJN1462.rxns,'ATPM')) Results_indg(4,5) = FBA_1515.x(strcmp(iML1515.rxns,'ATPM')) Results_indg(5,1) = FBA_773_i.f; Results_indg(5,2) = FBA_904_i.f; Results_indg(5,3) = FBA_1108_i.f; Results_indg(5,4) = FBA_1462_i.f; Results_indg(5,5) = FBA_1515_i.f; 2.3. Testing what all substrates can be growth coupled using the cMCS strategy for Indigoidine load('iJN1462' ,'del_exchanges') FBA = optimizeCbModel(iJN1462); model = removeRxns(iJN1462,iJN1462.rxns(530)); model = changeObjective(model,model.rxns(529)); model = changeRxnBounds(model,pRXNS,0,'b'); model = changeRxnBounds(model,model.rxns(del_exchanges),0,'u'); FBA = optimizeCbModel(model); KOs = {'ANHMK','D_LACt2pp','GLCDpp','H2CO3D','HCO3E','MDH','MDH2','ME2','NACODA','ORNDC','PHAPC40','PPS','PROD2','TALA'}; geneKO = {ÔPP_0100','PP_0434','PP_0654','PP_0751','PP_0864','PP_1251',ÕPP_1444','PP_2082Õ,'PP_2168','PP_2925','PP_4735','PP_4947','PP_5003','PP_5005','PP_5085','PP_5186'}; pRXNS = {Ô3MBZALDH','3MBZDH','3MCAT23DOX','4MBZALDH','4MBZDH','4MCAT23DOX','4OD','4OD2','ACALD','BZALDH','BZDH','CAT23DOX','DH3MCHCDH','DH4MCHCDH','HMSD','HMSD2','HMSÕ,'HMSH2','HMSH3','HOPNTAL','HOPNTAL2','HOPNTAL3','MTOLDOX','MXMO','OP4ENH','OP4ENH2','OP4ENH3','PTOLDOX','PXMO','TOLtex','XMO'}; model_INDG = addIndigoidineRxn(model); FBA_indg = optimizeCbModel(model_INDG); [min max] = fluxVariability(model_INDG, 100, 'max' ,{'EX_ind_e'}) model_R = changeRxnBounds(model_INDG,KOs,0,'b'); model_G = deleteModelGenes(model_INDG,geneKO); %% Test using FBA and FVA if it works for metabolite based on reactions for i = 1:length(del_exchanges) Substrate(i) = model_R.rxns(del_exchanges(i)); tmp = changeRxnBounds(model_R,model_R.rxns(del_exchanges(i)),-10,'l'); FBA = optimizeCbModel(tmp); Bio_R(i) = FBA.f; if Bio_R(i) ~= 0 [min_R(i) max_R(i)] = fluxVariability(tmp,100, 'max' ,{'EX_ind_e'}); end end %% Test using FBA and FVA if it works for metabolite based on associated genes for i = 1:length(del_exchanges) Substrate(i) = model_G.rxns(del_exchanges(i)); tmp = changeRxnBounds(model_G,model_G.rxns(del_exchanges(i)),-10,'l'); FBA = optimizeCbModel(tmp); Bio_G(i) = FBA.f; if Bio_G(i) ~= 0 [min_G(i) max_G(i)] = fluxVariability(tmp,100, 'max' ,{'EX_ind_e'}); end end 2.4. Production envelop and yield space calculation load('É../CellNetAnalyzer/Scripts/results.mat'); load('É./CellNetAnalyzer/Scripts/iJN1462D.mat','del_exchanges','reac_off'); load('É../Õother_info.mat','iJN1462Õ); % model can also be downloaded from Bigg database using the % following command % iJN1462 = loadBiGGModel('iJN1463'); pRXNS={Ô3MBZALDH','3MBZDH','3MCAT23DOX','4MBZALDH','4MBZDH','4MCAT23DOX','4OD','4OD2','ACALD','BZALDH','BZDH','CAT23DOX','DH3MCHCDH','DH4MCHCDH','HMSD','HMSD2','HMSÕ,'HMSH2','HMSH3','HOPNTAL','HOPNTAL2','HOPNTAL3','MTOLDOX','MXMO','OP4ENH','OP4ENH2','OP4ENH3','PTOLDOX','PXMO','TOLtex','XMO'}; %% Constraint the model to represent P. putida KT2440 model = removeRxns(iJN1462,iJN1462.rxns(530)); model = changeObjective(model,model.rxns(529)); model = changeRxnBounds(model,model.rxns(reac_off),0,'b'); model = changeRxnBounds(model,pRXNS,0,'b'); model = changeRxnBounds(model,model.rxns(del_exchanges),0,'u'); model = changeRxnBounds(model,{'sink_PHAg','sink_pqqA_kt_c_'},0,'b'); FBA = optimizeCbModel(model) model_INDG = addReaction(model,'INDG','2 gln_L_c + 2 atp_c + 2 coa_c + 2 fmn_c + 2.5 o2_c -> 2 pap_c + 2 fmnh2_c + 2 ppi_c + 2 amp_c + 2 ptth_c + h2o_c + 2 pi_c + ind_c'); % 2 L-gln + 2 ATP + 2 CoA + 2 FMN + 2.5 O2 -> 2 PAP + 2 FMNH2 + % 2 PPi + 2 AMP + 2 % Pantetheine + H2O + 2 Pi + Indigoidine model_INDG = addReaction(model_INDG,'APNPT','atp_c + ptth_c -> adp_c + h_c + pan4p_c'); % DB Jan142019 - changed sink reaction for ptth_c to above % reaction based on PP_0438 and R02971 reaction model_INDG = addReaction(model_INDG,'DF_INDG','ind_c -> ind_e'); model_INDG = addExchangeRxn(model_INDG,'ind_e'); model_INDG = changeRxnBounds(model_INDG,'EX_ind_e',0,'l'); geneKO = {ÔPP_0100','PP_0434','PP_0654','PP_0751','PP_0864','PP_1251',ÕPP_1444','PP_2082Õ,'PP_2168','PP_2925','PP_4735','PP_4947','PP_5003','PP_5005','PP_5085','PP_5186'}; geneKO_tar = {'PP_0434','PP_0654','PP_0864','PP_1251',ÕPP_1444','PP_2082Õ,'PP_2168','PP_2925','PP_4735','PP_4947','PP_5003','PP_5005','PP_5085','PP_5186'}; [biomassValuesWT, targetValuesWT, lineHandleWT] = productionEnvelope(model_INDG,{},'k','EX_ind_e','BiomassKT2440_Core2') [biomassValues16, targetValues16, lineHandle16] = productionEnvelope(model_indg,geneKO,'r','EX_ind_e','BiomassKT2440_Core2',true) [biomassValues14, targetValues14, lineHandle14] = productionEnvelope(model_indg,geneKO_tar,'b','EX_ind_e','BiomassKT2440_Core2',true) for i = 1:20 Yield(i,1) =(biomassValuesWT(i,1)/max(biomassValuesWT)); Yield(i,2) =(targetValuesWT(i,1)/max(targetValuesWT(:,2))); Yield(i,3) =(targetValuesWT(i,2)/max(targetValuesWT(:,2))); Yield(i,4) =(biomassValues16(i,1)/max(biomassValuesWT)); Yield(i,5) =(targetValues16(i,1)/max(targetValuesWT(:,2))); Yield(i,6) =(targetValues16(i,2)/max(targetValuesWT(:,2))); Yield(i,7) =(biomassValues14(i,1)/max(biomassValuesWT)); Yield(i,8) =(targetValues14(i,1)/max(targetValuesWT(:,2))); Yield(i,9) =(targetValues14(i,2)/max(targetValuesWT(:,2))); end