SystemsBioinformatics / cbmpy

CBMPy is a Python based platform for constraint based modelling and analysis.
https://systemsbioinformatics.github.io/cbmpy/
GNU General Public License v3.0
18 stars 6 forks source link

doFBAMinSum fails when a new reaction is added to a model #25

Open willigott opened 4 years ago

willigott commented 4 years ago

Let's say I take an existing model and do

import cbmpy as cbm

mod = cbm.CBRead.readSBML3FBC('e_coli_core.xml.gz')
cbm.doFBAMinSum(mod)

everything will work as expected.

However, when I now add a new reaction to this model,

newmod = mod.clone()
newmod.createReaction('foo')
newmod.createReactionReagent('foo', 'M_h_e', -1.)

and try again to minimize the fluxes, I get an error

cbm.doFBAMinSum(newmod)

CPLEX is using solver option: "o"

KeyError Traceback (most recent call last) /opt/ibm/ILOG/CPLEX_Studio128/cplex/python/3.6/x86-64_linux/cplex/_internal/_aux_functions.py in _cachelookup(item, getindexfunc, cache) 277 try: --> 278 idx = cache[item] 279 except KeyError:

KeyError: 'foo'

The reason seems to be that the stoichiometric matrix is not updated when a new reaction is added. If I do

newmod.buildStoichMatrix()
cbm.doFBAMinSum(newmod)

it will work fine.

Not sure what the best approach would be to deal with it. Maybe one could also add the build_n=True option to the function call as in doFBA?

bgoli commented 4 years ago

Thanks, I'll give this priority