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.
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: 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: print(e.id)
GF6PTA MAN6PI_reverse TKT2_reverse F6PA_reverse PGI_reverse