GrowMatch and SMILEY are gap-filling algorithms, which try to to make the minimal number of changes to a model and allow it to simulate growth. For more information, see Kumar et al.. Please note that these algorithms are Mixed-Integer Linear Programs, which need solvers such as gurobi or cplex to function correctly.
import cobra.test
model = cobra.test.create_test_model("salmonella")
In this model D-Fructose-6-phosphate is an essential metabolite. We will remove all the reactions using it, and at them to a separate model.
# remove some reactions and add them to the universal reactions
Universal = cobra.Model("Universal_Reactions")
for i in [i.id for i in model.metabolites.f6p_c.reactions]:
reaction = model.reactions.get_by_id(i)
Universal.add_reaction(reaction.copy())
reaction.remove_from_model()
Now, because of these gaps, the model won't grow.
model.optimize().f
2.821531499799383e-12
We will use GrowMatch to add back the minimal number of reactions from this set of "universal" reactions (in this case just the ones we removed) to allow it to grow.
r = cobra.flux_analysis.growMatch(model, Universal)
for e in r[0]:
print(e.id)
GF6PTA FBP MAN6PI_reverse TKT2_reverse PGI_reverse
We can obtain multiple possible reaction sets by having the algorithm go through multiple iterations.
result = cobra.flux_analysis.growMatch(model, Universal,
iterations=4)
for i, entries in enumerate(result):
print("---- Run %d ----" % (i + 1))
for e in entries:
print(e.id)
---- Run 1 ---- GF6PTA FBP MAN6PI_reverse TKT2_reverse PGI_reverse ---- Run 2 ---- F6PP GF6PTA TALA MAN6PI_reverse F6PA_reverse ---- Run 3 ---- GF6PTA MAN6PI_reverse TKT2_reverse F6PA_reverse PGI_reverse ---- Run 4 ---- F6PP GF6PTA FBP TALA MAN6PI_reverse
SMILEY is very similar to growMatch, only instead of setting growth as the objective, it sets production of a specific metabolite
r = cobra.flux_analysis.gapfilling.SMILEY(model, "ac_e",
Universal)
for e in r[0]:
print(e.id)
GF6PTA MAN6PI_reverse TKT2_reverse F6PA_reverse PGI_reverse