In [2]:
# This generates an SBML model for core acetogen metabolism according to Schuchman 2014
import cobra
from cobra import Model, Reaction, Metabolite

# Load the GEMM
M = cobra.io.read_sbml_model("../Data/models/c_ljungdahlii_nagarajan_2013.xml");

# Produce a .json model for use with Escher
cobra.io.save_json_model(M, "../Data/models/c_ljungdahlii_nagarajan_2013.json");

# save the default medium
model = M.copy()

### set the objective to ATPM without a lower bound
model.reactions.ATPM.lower_bound = 0
model.objective = model.reactions.ATPM

### set medium to CO2 + H2 in a 2:4 ratio as in Schuchmann
model.reactions.EX_fru_e.lower_bound = 0
model.reactions.EX_co2_e.lower_bound = -2
model.reactions.EX_h2_e.lower_bound = -4

model.reactions.EX_ac_e.lower_bound = 1

# turning on blocked reactions
model.reactions.ACACT1r.upper_bound = 1000
model.reactions.HACD1.upper_bound = 1000

DM_3hbcoa_c = Reaction('DM_3hbcoa_c')
model.add_reaction(DM_3hbcoa_c)
model.reactions.DM_3hbcoa_c.add_metabolites({'3hbcoa_c':-1,'coa_c':1})

### Adding new reactions according to (Schuchmann, 2014)
# Formate dehydrogenase with H2
FDHH2 = Reaction('FDHH2')
FDHH2.name = 'Formate dehydrogenase with H2 as electron donor'
model.add_reaction(FDHH2)
model.reactions.FDHH2.add_metabolites({'co2_c':-1,'h2_c':-1,'for_c':1,'h_c':1})
model.reactions.FDHH2.lower_bound = 0; model.reactions.FDHH2.upper_bound = 0;
print('New reaction FDHH2:',model.reactions.FDHH2.reaction)

# Formate dehydrogenase with H2
FDHFDNADPH = Reaction('FDHFDNADPH')
FDHFDNADPH.name = 'Formate dehydrogenase with Fd and NADPH as electron donor'
model.add_reaction(FDHFDNADPH)
model.reactions.FDHFDNADPH.add_metabolites({'co2_c':-2,'fdxr_4_2_c':-1,'nadph_c':-1,'h_c':-1,'for_c':2,'fdxo_4_2_c':1,'nadp_c':1})
model.reactions.FDHFDNADPH.lower_bound = 0; model.reactions.FDHFDNADPH.upper_bound = 0;
print('New reaction FDHFDNADPH:',model.reactions.FDHFDNADPH.reaction)

# alternative to MTHFD
MTHFD_alt = Reaction('MTHFD_alt')
MTHFD_alt.name = 'MTHFD with nadh'
model.add_reaction(MTHFD_alt)
model.reactions.MTHFD_alt.add_metabolites({'methf_c':-1,'nadh_c':-1,'mlthf_c':1,'nad_c':1})
model.reactions.MTHFD_alt.lower_bound = 0; model.reactions.MTHFD_alt.upper_bound = 0;
print('New reaction MTHFD_alt:',model.reactions.MTHFD_alt.reaction)

# alternative to MTHFR5
MTHFR5_alt = Reaction('MTHFR5_alt')
MTHFR5_alt.name = 'MTHFR5 with nadh only'
model.add_reaction(MTHFR5_alt)
model.reactions.MTHFR5_alt.add_metabolites({'mlthf_c':-1,'h_c':-2,'nadh_c':-1,'5mthf_c':1,'nad_c':1})
model.reactions.MTHFR5_alt.lower_bound = 0; model.reactions.MTHFR5_alt.upper_bound = 0;
print('New reaction MTHFR5_alt:',model.reactions.MTHFR5_alt.reaction)

# Write to SBML
cobra.io.write_sbml_model(model,'../Data/models/c_ljungdahlii_nagarajan_2013_update.xml')

# Produce a .json model for use with Escher
cobra.io.save_json_model(model, "../Data/models/c_ljungdahlii_nagarajan_2013_update.json");


Error encountered trying to <set model history>.
LibSBML error code -5: The object passed as an argument to the method is not of a type that is valid for the operation or kind of object involved. For example, handing an invalidly-constructed ASTNode to a method expecting an ASTNode will result in this error.
New reaction FDHH2: co2_c + h2_c --> for_c + h_c
New reaction FDHFDNADPH: 2 co2_c + fdxr_4_2_c + h_c + nadph_c --> fdxo_4_2_c + 2 for_c + nadp_c
New reaction MTHFD_alt: methf_c + nadh_c --> mlthf_c + nad_c
New reaction MTHFR5_alt: 2 h_c + mlthf_c + nadh_c --> 5mthf_c + nad_c

In [ ]: