Generated April 16, 2021

Formation, characterization and modeling of emergent synthetic microbial communities

Introduction

This narrative was used for the 3-member community modeling using R2A medium for the bacteria isolated from Populus deltoides (PD). 10 bacteiral strains isolated from PD were co-cultured as a synthetic microbial community in R2A complex medium. After 15 passages, there were 3 members survived in R2A 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 R2A 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:

Pantoea sp. YR343: https://narrative.kbase.us/narrative/73211

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

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

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 3 individual metabolic models (YR343, GM17 and AP49, without gapfilling) into compartmentalized community model

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

Merge two or more metabolic models into a compartmentalized community model.
This app completed without errors in 5m 6s.
Objects
Created Object Name Type Description
R2A_3_Member_Resequenced_MergedCompartmentalizedModel_NoGF FBAModel FBAModel-12 R2A_3_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/73221

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

The relative ratio of each community member in the mixed culture was adjusted following 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 using R2A 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":"R2A_3_Member_Resequenced_MergedCompartmentalizedModel_NoGF"}])
biomass_array = output[0]['data']['biomasses']
for biorxn in biomass_array:
    if biorxn['id'] == "bio1":
        biorxn['biomasscompounds'][1]['coefficient'] = -0.030
        biorxn['biomasscompounds'][2]['coefficient'] = -0.070
        biorxn['biomasscompounds'][3]['coefficient'] = -0.900

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

Step 3: Gapfill the adjusted community model using R2A 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 10m 22s.
Objects
Created Object Name Type Description
R2A_3_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled FBAModel FBAModel-12 R2A_3_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled
R2A_3_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled.gf.0 FBA FBA-13 R2A_3_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/73221

Step 4. FBA modeling for gapfilled community model

The FBA model was used 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 5m 3s.
Objects
Created Object Name Type Description
R2A_3_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled_FBA_NoCarbonLimit FBA FBA-13 R2A_3_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled_FBA_NoCarbonLimit
Report
Summary
A flux balance analysis (FBA) was performed on the metabolic model 73221/17/1 growing in 73221/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/73221

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

The carbon uptake limit was added to the R2A 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 2m 56s.
Objects
Created Object Name Type Description
R2A_3_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled_FBA_CarbonLimit25.36 FBA FBA-13 R2A_3_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled_FBA_CarbonLimit25.36
Report
Summary
A flux balance analysis (FBA) was performed on the metabolic model 73221/17/1 growing in 73221/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/73221

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

The predicted fluxes of metabolite exchanges among the 3 community members were extracted from communiy 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":"R2A_3_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":"R2A_3_Member_Resequenced_MergedCompartmentalizedModel_adjusted_Gapfilled_FBA_CarbonLimit25.36"}])

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
H+_e0	1.0673983740000015	-3.3121636040000126	-0.06903844200000009
Adenosine_e0	-0.0084861	0	0.0084861
Fumarate_e0	0	0.01213062	-0.01213062
Succinate_e0	-0.0279036	-0.0830118	0.1109154
Inosine_e0	0.00920426	0	-0.00920426
D-Fructose_e0	0	0.530176	-0.530176
H2O_e0	0.968968	0	4.20139
Na+_e0	0	0.0	1.9999999999881224e-08
Cytidine_e0	0.281116	0	-0.281116
Thymidine_e0	-0.000445088	0	-0.01691272
NH3_e0	-0.450544	0	0
Fe2+_e0	-0.000718168	0	0
Phosphate_e0	-0.0469011	-0.33395759999999997	-1.1253781
Deoxyadenosine_e0	0	0	-0.40021
Deoxycytidine_e0	0	0	-0.670162
Gly-Phe_e0	-0.02127556	0.02127556	0
N-Acetyl-D-glucosamine_e0	-0.1107214	0.1107214	0
Deoxyguanosine_e0	-0.000793298	0	0.000793298
Mg_e0	-5.98474e-05	-0.000139644	-0.00179542
K+_e0	-2.0000000000043854e-10	0.0	-0.00179542
Zn2+_e0	-5.98474e-05	-0.000139644	-0.00718168
L-Proline_e0	0	0.350064	-0.633328
fe3_e0	-0.0002393896	-0.000558576	-0.00718169
Mn2+_e0	-0.0001196948	-0.000279288	-0.00359084
Co2+_e0	-5.98474e-05	-0.000139644	-0.00179542
Cl-_e0	-5.98474e-05	-0.000139644	-0.00179542
2-Oxoglutarate_e0	0	-0.337946	0.337946
D-Glucose_e0	-0.375436	-1.984552	-0.412366
TRHL_e0	-0.00386716	0.148886	-0.1450188
HYXN_e0	-0.01197296	0	0.01197296
Sulfate_e0	-0.00848214	-0.000279288	-0.1026674
Gly-Leu_e0	-0.0356072	0.0356072	0
O2_e0	0.0248131	1.43788	0.0174052
gly-asn-L_e0	-0.01552636	0.01552636	0
CO2_e0	-0.155406	-0.133194	0.288601
Ornithine_e0	0	0.00387013	-0.01548052
Glycerol-3-phosphate_e0	0	0.188577	-0.377154
Ca2+_e0	-5.98474e-05	-0.000139644	-0.00179542
Cu2+_e0	-5.98474e-05	-0.000558576	-0.00718168
L-Leucine_e0	0	-0.0593454	-0.534108
L-Arginine_e0	0	-0.01838085	-0.572168
Glycerol_e0	0	0.00144061	-0.00144061
L-Methionine_e0	0	-0.03902476	-0.3035936
L-Histidine_e0	0	-0.01429848	-0.1838376
L-Isoleucine_e0	0	-0.0217864	-0.280404
L-Serine_e0	0	-0.022657	-0.344228
L-Aspartate_e0	0	0.620524	-0.620524
L-Lysine_e0	-0.02400096	-0.0140006	-0.180007
Putrescine_e0	0	-0.001117152	0.001117152
XAN_e0	0	-0.0267158	0.0267158
L-Tryptophan_e0	0	-0.0042574	-0.0547382
Myristic acid_e0	0	0.1740226	-0.1740226
Aminoethanol_e0	0	-0.01077254	0.01077254
L-Tyrosine_e0	0	-0.0108845	-0.1399436
L-Valine_e0	0	-0.0323284	-0.40847
Uracil_e0	0	-0.72817	0.72817
ocdca_e0	0	0.0987848	-0.0987848
L-Phenylalanine_e0	0	-0.0245748	-0.1791898
Glycine_e0	0	0	-0.472648
PAN_e0	0	0	-0.00718168
Thiamine phosphate_e0	-0.0001196948	-0.000279288	-0.00359084
Folate_e0	0	-0.000837864	0
Riboflavin_e0	0	-0.000558576	0

Supplementary Information

The community model was performed using the realtive ratio of each community memeber in No. 15 passage obtained by quantitative metaproteomics.

Merge two or more metabolic models into a compartmentalized community model.
This app completed without errors in 4m 38s.
Objects
Created Object Name Type Description
R2A_3_Member_Resequenced_MergedCompartmentalizedModel_NoGF_ForProteomicsRatio FBAModel FBAModel-12 R2A_3_Member_Resequenced_MergedCompartmentalizedModel_NoGF_ForProteomicsRatio
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/73221
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":"R2A_3_Member_Resequenced_MergedCompartmentalizedModel_NoGF_ForProteomicsRatio"}])
biomass_array = output[0]['data']['biomasses']
for biorxn in biomass_array:
    if biorxn['id'] == "bio1":
        biorxn['biomasscompounds'][1]['coefficient'] = -0.100
        biorxn['biomasscompounds'][2]['coefficient'] = -0.300
        biorxn['biomasscompounds'][3]['coefficient'] = -0.600

wsoutput = ws_client.save_objects({'workspace':current_ws,'objects':[{'type':'KBaseFBA.FBAModel','data':output[0]['data'],'name':"R2A_3_Member_Resequenced_MergedCompartmentalizedModel_NoGF_ForProteomicsRatio_adjusted"}]})
print ("Successfully adjusted community biomass composition")
Successfully adjusted community biomass composition
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 11m 36s.
Objects
Created Object Name Type Description
R2A_3_Member_Resequenced_MergedCompartmentalizedModel_ForProteomicsRatio_adjusted_R2A003_Gapfilled FBAModel FBAModel-12 R2A_3_Member_Resequenced_MergedCompartmentalizedModel_ForProteomicsRatio_adjusted_R2A003_Gapfilled
R2A_3_Member_Resequenced_MergedCompartmentalizedModel_ForProteomicsRatio_adjusted_R2A003_Gapfilled.gf.0 FBA FBA-13 R2A_3_Member_Resequenced_MergedCompartmentalizedModel_ForProteomicsRatio_adjusted_R2A003_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/73221
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 52s.
Objects
Created Object Name Type Description
R2A_3_Member_Resequenced_MergedCompartmentalizedModel_ForProteomicsRatio_adjusted_R2A003_Gapfilled_FBA FBA FBA-13 R2A_3_Member_Resequenced_MergedCompartmentalizedModel_ForProteomicsRatio_adjusted_R2A003_Gapfilled_FBA
Report
Summary
A flux balance analysis (FBA) was performed on the metabolic model 73221/28/1 growing in 73221/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/73221

The community was also modeled at equal ratio for each surviving member.

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 10m 41s.
Objects
Created Object Name Type Description
R2A_3_Member_Resequenced_MergedCompartmentalizedMode_EqualRatio_R2A003_Gapfilled FBAModel FBAModel-12 R2A_3_Member_Resequenced_MergedCompartmentalizedMode_EqualRatio_R2A003_Gapfilled
R2A_3_Member_Resequenced_MergedCompartmentalizedMode_EqualRatio_R2A003_Gapfilled.gf.0 FBA FBA-13 R2A_3_Member_Resequenced_MergedCompartmentalizedMode_EqualRatio_R2A003_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/73221
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 31s.
Objects
Created Object Name Type Description
R2A_3_Member_Resequenced_MergedCompartmentalizedMode_EqualRatio_R2A003_Gapfilled_FBA FBA FBA-13 R2A_3_Member_Resequenced_MergedCompartmentalizedMode_EqualRatio_R2A003_Gapfilled_FBA
Report
Summary
A flux balance analysis (FBA) was performed on the metabolic model 73221/33/1 growing in 73221/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/73221

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