Generated April 16, 2021

Formation, characterization and modeling of emergent synthetic microbial communities

Introduction

This narrative was used for the 4-member community modeling using MOPS medium for the bacteria isolated from Populus deltoides (PD). 10 bacterial strains isolated from PD were co-cultured as a synthetic microbial community in MOPS minimal medium. After 15 passages there were 4 members survived in MOPS medium.

The genome of each community member was sequenced and uploaded into KBase for genome annotation and metabolic modeling. To simulate the metabolic interactions among the finally surviving community members, the individual metabolic models of each strain were merged into a compartmentalized community model, and then the community model was gapfilled using MOPS medium. The FBA modeling was performed and the metabolites exchange among community members was proposed.

The publication by Jia Wang, Dana L. Carper, Leah H. Burdick, Him Shrestha, Manasa Appidi, Paul E. Abraham, Collin M. Timm, Robert L. Hettich, Dale A. Pelletier, Mitchel J. Doktycz can be found here: https://doi.org/10.​1016/​j.​csbj.​2021.​03.​034

The metabolic modeling for each individual bacterium in the community can be found at:

Pseudomonas sp. GM17: https://narrative.kbase.us/narrative/73080

Rhizobium sp. CF142: https://narrative.kbase.us/narrative/73214

Sphingobium sp. AP49: https://narrative.kbase.us/narrative/73212

Variovorax sp. CF313: https://narrative.kbase.us/narrative/73213

References

[1] Arkin AP, Cottingham RW, Henry CS, Harris NL, Stevens RL, et al. (2018) KBase: The United States Department of Energy Systems Biology Knowledgebase. Nat Biotechnol 36: 566-569.

[2]. Henry CS, Bernstein HC, Weisenhorn P, Taylor RC, Lee J-Y, et al. (2016) Microbial community metabolic modeling: A community data-driven network reconstruction. Journal of Cell Physiol 231: 2339-2345.

Step 1. Merge the 4 individual metabolic models (GM17, CF142, AP49 and CF313, without gapfilling) into compartmentalized community model

The modeling of community was following post-gapfilled strategy [2]. The individual species models were not gapfilled and they were merged into community model first, and then the community model was gapfilled using MOPS medium conditions.

Merge two or more metabolic models into a compartmentalized community model.
This app completed without errors in 7m 24s.
Objects
Created Object Name Type Description
MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_NoGF FBAModel FBAModel-12 MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_NoGF
Output from Merge Metabolic Models into Community Model
The viewer for the output created by this App is available at the original Narrative here: https://narrative.kbase.us/narrative/73218

Step 2. Adjust relative ratio of each species in the community

The relative ratio of each community member in the mixed culture was adjusted using the method in [2]. The relative ratio was adjusted according to the 16S rRNA gene amplicon Illumina sequencing result of the No. 15 passage (the last passage) culture in MOPS medium.

import os
import sys
import re
current_ws = os.environ['KB_WORKSPACE_ID']
#Instantiating work service client, which is all we will use for these alterations
from biokbase.workspace.client import Workspace
ws_client = Workspace()
#Retrieving the selected models into the python enviroment
output = ws_client.get_objects([{"workspace":current_ws,
   "name":"MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_NoGF"}])
biomass_array = output[0]['data']['biomasses']
for biorxn in biomass_array:
    if biorxn['id'] == "bio1":
        biorxn['biomasscompounds'][1]['coefficient'] = -0.060
        biorxn['biomasscompounds'][2]['coefficient'] = -0.060
        biorxn['biomasscompounds'][3]['coefficient'] = -0.080
        biorxn['biomasscompounds'][4]['coefficient'] = -0.800

wsoutput = ws_client.save_objects({'workspace':current_ws,'objects':[{'type':'KBaseFBA.FBAModel','data':output[0]['data'],'name':"MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_NoGF_adjusted"}]})
print ("Successfully adjusted community biomass composition")
Successfully adjusted community biomass composition

Step 3. Gapfill the adjusted community model using MOPS medium conditions

Identify the minimal set of biochemical reactions to add to a draft metabolic model to enable it to produce biomass in a specified media.
This app completed without errors in 18m 28s.
Objects
Created Object Name Type Description
MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled FBAModel FBAModel-12 MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled
MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled.gf.0 FBA FBA-13 MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled.gf.0
Report
Output from Gapfill Metabolic Model
The viewer for the output created by this App is available at the original Narrative here: https://narrative.kbase.us/narrative/73218

Step 4. FBA modeling for gapfilled community model

The FBA model was applied to predict the metabolic fluxes in the gapfilled community model. No carbon uptake limit was added into the current FBA model.

Use flux balance analysis to predict metabolic fluxes in a metabolic model of an organism grown on a given media.
This app completed without errors in 4m 55s.
Objects
Created Object Name Type Description
MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled_FBA_NoCarbonLimit FBA FBA-13 MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled_FBA_NoCarbonLimit
Report
Summary
A flux balance analysis (FBA) was performed on the metabolic model 73218/18/1 growing in 73218/2/1 media.
Output from Run Flux Balance Analysis
The viewer for the output created by this App is available at the original Narrative here: https://narrative.kbase.us/narrative/73218

Step 5. FBA modeling for the gapfilled community model with carbon source uptake limit

The carbon uptake limit was added to the MOPS community FBA model. For constraining microbial growth in the community model, a calibration curve between the carbon uptake limit and growth rate was built using the FBA model of each individual strain, and the carbon uptake limit was calculated based on the experimental growth rate of each strain using the linear regression equation of the corresponding calibration curve. The carbon uptake limit of the community model was the summation of individual growth rate multiply relative percentage.

Use flux balance analysis to predict metabolic fluxes in a metabolic model of an organism grown on a given media.
This app completed without errors in 4m 21s.
Objects
Created Object Name Type Description
MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled_FBA_CarbonLimit16.72 FBA FBA-13 MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled_FBA_CarbonLimit16.72
Report
Summary
A flux balance analysis (FBA) was performed on the metabolic model 73218/18/1 growing in 73218/2/1 media.
Output from Run Flux Balance Analysis
The viewer for the output created by this App is available at the original Narrative here: https://narrative.kbase.us/narrative/73218

Step 6. Extract the predicted metabolic exchanges from the community FBA model

The predicted fluxes of metabolite exchanges among the 4 community members were extracted from community FBA model using the method in [2]. Negative values represent uptake, and positive values represent secretion.

import os
import sys
import re
current_ws = os.environ['KB_WORKSPACE_ID']
from biokbase.workspace.client import Workspace
ws_client = Workspace()
output = ws_client.get_objects([{"workspace":current_ws,
    "name":"MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled"}])

model = output[0]['data']
cpdhash = {}
rxnhash = {}
compound_array = model['modelcompounds']
for cpd in compound_array:
    cpdhash[cpd['id']] = cpd
reaction_array = model['modelreactions']
for rxn in reaction_array:
    rxnhash[rxn['id']] = rxn

output = ws_client.get_objects([{"workspace":current_ws,
    "name":"MOPS_4_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled_FBA_CarbonLimit16.72"}])

exchangehash = {}
excpdhash = {}

fba = output[0]['data']
reaction_array = fba['FBAReactionVariables']
for fbarxn in reaction_array:
    id_array = fbarxn['modelreaction_ref'].split("/")
    rxnid = id_array.pop()
    if rxnid in rxnhash.keys():
        rxn = rxnhash[rxnid]
        rgt_array = rxn['modelReactionReagents']
        for rgt in rgt_array:
            id_array = rgt['modelcompound_ref'].split("/")
            cpdid = id_array.pop()
            id_array = cpdid.split("_")
            cmpid = id_array.pop()
            if cmpid == 'e0':
                for rgttwo in rgt_array:
                    if rgt['coefficient']*rgttwo['coefficient'] < 0:
                        id_array = rgttwo['modelcompound_ref'].split("/")
                        newcpdid = id_array.pop()
                        id_array = newcpdid.split("_")
                        cmpid = id_array.pop()
                        if cmpid != 'e0':
                            if cmpid not in exchangehash.keys():
                                exchangehash[cmpid] = {}
                            if cpdid not in exchangehash[cmpid].keys():
                                exchangehash[cmpid][cpdid] = 0
                            exchangehash[cmpid][cpdid] += fbarxn['value'] * rgt['coefficient']
                            excpdhash[cpdid] = 1

line = ""
for cmpid in exchangehash.keys():
    line += "\t"
    line += cmpid
print (line)

for cpdid in excpdhash.keys():
    printline = 0
    line = ""
    line += cpdhash[cpdid]['name']
    for cmpid in exchangehash.keys():
        line += "\t"
        if cpdid not in exchangehash[cmpid].keys():
            line += '0'
        else:
            if exchangehash[cmpid][cpdid] != 0:
                printline = 1
            line += str(exchangehash[cmpid][cpdid])
    if printline == 1:
        print (line)
	c1	c2	c3	c4
H+_e0	0.12118400999999612	0.4104341187999986	0.218012378000001	4.5757279560000095
H2O_e0	0.47264	0.49811	0.511131	8.37452
Cu2+_e0	-0.0003154736	-7.88684e-05	-0.000420632	-0.00420632
L-Leucine_e0	-0.03824532	0	-0.0625652	0.0504054
NH3_e0	-0.175451	-0.177978	-0.169666	-3.11886
Fe2+_e0	-0.001261896	-0.01976968	0	0
Phosphate_e0	-0.0620439	-0.062044199999999994	-0.0827259	-0.827256
Gly-Phe_e0	0	-0.01574272	-0.02099032	0.03673304
Spermidine_e0	0.00494244	-7.88684e-05	-0.000420632	-0.00420632
N-Acetyl-D-glucosamine_e0	0	-0.00509626	0	0.00509626
Putrescine_e0	0.00420632	0	0	-0.00420632
fe3_e0	0	0.0185078	-0.001682528	-0.00420632
L-Aspartate_e0	0	0	-0.1402308	0.0701154
Mg_e0	-7.88684e-05	-7.88684e-05	-0.000105158	-0.00105158
K+_e0	-1.9999999998688602e-10	-1.9999999998688602e-10	0.0	0.0
Zn2+_e0	-7.88684e-05	-7.88684e-05	-0.000105158	-0.00105158
Gly-Tyr_e0	-0.01261024	-0.01261024	-0.016393	0.0416136
Sulfate_e0	-0.01133572	-0.01133572	-0.01490398	-0.1513532
L-Proline_e0	-0.00933518	0.01867036	0	0
Mn2+_e0	-0.0001577368	-0.0001577368	-0.000210316	-0.00210316
Co2+_e0	-7.88684e-05	-7.88684e-05	-0.000105158	-0.00105158
Cl-_e0	-7.88684e-05	-7.88684e-05	-0.000105158	-0.00105158
Aminoethanol_e0	-0.00862296	0	0	0.00862296
D-Glucose_e0	-0.242402	-0.306216	-0.274094	-4.75202
TRHL_e0	-0.00637032	-0.00637032	-0.00849376	0.0212344
HYXN_e0	0	-0.00967828	0	0.00967828
O2_e0	0.0927612	0.0704905	0.142833	0.955742
gly-asn-L_e0	-0.020461	-0.020461	-0.02728136	0.0682032
Thiamin_e0	0	0	-0.000420632	0.000210316
L-Phenylalanine_e0	-0.00787136	0	0	0.00787136
L-Malate_e0	0	0.0099814	-0.0099814	0
L-Lysine_e0	0	0	-0.00969365	0.0193873
CO2_e0	-0.036621	0.036621	0	0
Inosine_e0	0	0.000946422	0	0
Ca2+_e0	-0.00023660520000000002	-0.00023660520000000002	-0.000105158	-0.00105158
L-Arginine_e0	0	0	-0.00576724	0.00576724
Ornithine_e0	0	0	0.00576724	-0.00576724
4-Hydroxy-benzylalcohol_e0	0	0	0	0.00115674

Apps

  1. Gapfill Metabolic Model
    • [1] Henry CS, DeJongh M, Best AA, Frybarger PM, Linsay B, Stevens RL. High-throughput generation, optimization and analysis of genome-scale metabolic models. Nat Biotechnol. 2010;28: 977 982. doi:10.1038/nbt.1672
    • [2] Henry CS, Jankowski MD, Broadbelt LJ, Hatzimanikatis V. Genome-Scale Thermodynamic Analysis of Escherichia coli Metabolism. Biophysical Journal. 2006;90: 1453 1461. doi:10.1529/biophysj.105.071720
    • [3] Jankowski MD, Henry CS, Broadbelt LJ, Hatzimanikatis V. Group Contribution Method for Thermodynamic Analysis of Complex Metabolic Networks. Biophysical Journal. 2008;95: 1487 1499. doi:10.1529/biophysj.107.124784
    • [4] Henry CS, Zinner JF, Cohoon MP, Stevens RL. iBsu1103: a new genome-scale metabolic model of Bacillus subtilisbased on SEED annotations. Genome Biology. 2009;10: R69. doi:10.1186/gb-2009-10-6-r69
    • [5] Orth JD, Thiele I, Palsson B . What is flux balance analysis? Nature Biotechnology. 2010;28: 245 248. doi:10.1038/nbt.1614
    • [6] Latendresse M. Efficiently gap-filling reaction networks. BMC Bioinformatics. 2014;15: 225. doi:10.1186/1471-2105-15-225
    • [7] Dreyfuss JM, Zucker JD, Hood HM, Ocasio LR, Sachs MS, Galagan JE. Reconstruction and Validation of a Genome-Scale Metabolic Model for the Filamentous Fungus Neurospora crassa Using FARM. PLOS Computational Biology. 2013;9: e1003126. doi:10.1371/journal.pcbi.1003126
  2. Merge Metabolic Models into Community Model
    • Arkin AP, Cottingham RW, Henry CS, Harris NL, Stevens RL, Maslov S, et al. KBase: The United States Department of Energy Systems Biology Knowledgebase. Nature Biotechnology. 2018;36: 566. doi: 10.1038/nbt.4163
    • Henry CS, DeJongh M, Best AA, Frybarger PM, Linsay B, Stevens RL. High-throughput generation, optimization and analysis of genome-scale metabolic models. Nat Biotechnol. 2010;28: 977 982. doi:10.1038/nbt.1672
  3. Run Flux Balance Analysis
    • Henry CS, DeJongh M, Best AA, Frybarger PM, Linsay B, Stevens RL. High-throughput generation, optimization and analysis of genome-scale metabolic models. Nat Biotechnol. 2010;28: 977 982. doi:10.1038/nbt.1672
    • Orth JD, Thiele I, Palsson B . What is flux balance analysis? Nature Biotechnology. 2010;28: 245 248. doi:10.1038/nbt.1614