Reversible reactions seem to carry flux in both directions (when irreversible)

146 views
Skip to first unread message

Uri David Akavia

unread,
Jan 9, 2017, 6:40:02 PM1/9/17
to COBRA Toolbox
Hi.

I've been using GIMME to model flux of certain cell lines. GIMME (and other algorithms) split reversible reactions into two reversible reactions before optimizing the model.

There are some split reversible reactions that carry flux in both forward and back direction. This happens even when I run the optimization in a loopless manner by modifying the code to optimize in a loopless manner using the command optimizeCbModel(model2gimme,'min', 0, 0);

One example of such a flux is
    'EX_arg_L(e)_f' 0.8203
    'EX_arg_L(e)_b' 1

Where Exchange of arginine runs forward and back in the same optimization.

I'm not sure what this means. I think it means that EX_arg is running backwards with a flux of 0.1797 (1 - 0.8203) and not running forwards. Is that correct?
Is there something I can do to avoid these forward and back reactions?

Thank you,

Yours,

Uri David Akavia

Thomas Pfau

unread,
Jan 10, 2017, 12:42:57 AM1/10/17
to cobra-...@googlegroups.com

Hi Uri,

What is the objective you are optimising for?
One reason for what you observe could be that, as far as I can see from the code, addLoopLawConstraints excludes Exchange reactions (assuming, that those are only present as reversible reactions (a common assumption in COBRA). Thus it does not expect that there could be multiple exchangers for the same metabolite.

Personally, I prefer to remove unnecessary loops by the taxicab norm (i.e. running optimizeCbModel(model,'min','one') ), which minimises the total amount of flux used to achieve the objective. While this can not be applied to more complex objectives, it works fine for simple minimizations and maximisations e.g. biomass.
Using this approach you won't get any cycles, as they would not be optimal( since the total flux is higher if the cycle exists).

The problem with this approach is if you try to optimize reactions within the system which are part of a cycle themselves, as it will commonly only activate that specific cycle (simply imagine a large network containing, among other reactions the Cycle R1:A<->B, R2:B <->C, R3:C<->A. If you maximize or minimize any reaction within this cycle the - most likely - flux minimal answer will be to just activate the cycle).

Anoter option you have is to merge the reverse and forward reactions again into one reaction and ensure that you don't have multiple exchangers for the same metabolite (in the same compartment), at which point the looplawconstraints should work again.

Best,

Thomas

--

---
You received this message because you are subscribed to the Google Groups "COBRA Toolbox" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cobra-toolbo...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

-- 
Université du Luxembourg
Faculté des Sciences, de la Technologie et de la Communication
Campus Belval, Biotech II 115
6 avenue du Swing
L-4367 Belvaux
Tel: (+352) 46 66 44 5309
Email: thoma...@uni.lu

Uri David Akavia

unread,
Jan 17, 2017, 11:54:43 AM1/17/17
to cobra-...@googlegroups.com
Dear Thomas,

I'm running GIMME, so the objective is minimizing the penalties for reactions that were calculated as not expressed. I'm using the version of the code that Nathan Lewis provided, which allows for discrete penalties in GIMME.
Running optimizeCbModel(model, 'min', X) where X is any value other than 0 doesn't allow the problems to be solved.

What do you mean by "merge the reverse and forward reactions"? I have a model where there is one reversible exchange reaction, but it is split into two by convertToIrreversible() function (which is part of GIMME). If merging, should I subtract the forward and back direction, so
> 'EX_arg_L(e)_f' 820.3
> 'EX_arg_L(e)_b' 1000
becomes EX_arg_L(e)_b becomes 179.7
OR should I set bounds on EX_arg_L(e) so it is not reversible?

I'm not sure what you meant.

Yours,

Uri David
> > <mailto:cobra-toolbo...@googlegroups.com>.
> > For more options, visit https://groups.google.com/d/optout.
>
> --
> Université du Luxembourg
> Faculté des Sciences, de la Technologie et de la Communication
> Campus Belval, Biotech II 115
> 6 avenue du Swing
> L-4367 Belvaux
> Tel: (+352) 46 66 44 5309
> Email:thoma...@uni.lu
>
> --
>
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "COBRA Toolbox" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/cobra-toolbox/_gNxVfGKqzA/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> cobra-toolbo...@googlegroups.com
> <mailto:cobra-toolbo...@googlegroups.com>.

Thomas Pfau

unread,
Jan 30, 2017, 12:36:54 AM1/30/17
to cobra-...@googlegroups.com
Hi Uri,

Sorry for only coming back to this now,

On 2017-01-17 17:54, Uri David Akavia wrote:
>
> What do you mean by "merge the reverse and forward reactions"? I have
> a model where there is one reversible exchange reaction, but it is
> split into two by convertToIrreversible() function (which is part of
> GIMME). If merging, should I subtract the forward and back direction, so
> > 'EX_arg_L(e)_f' 820.3
> > 'EX_arg_L(e)_b' 1000
> becomes EX_arg_L(e)_b becomes 179.7
> OR should I set bounds on EX_arg_L(e) so it is not reversible?
Since you are using GIMME, which inherently splits reactions into
forward and backward parts, you would indeed need to restrict exchange
reactions to either uptake or excretion reactions (if you want to add
the looplaw constraints). As mentioned before, addLoopLawConstraints
assumes, that there is only one reaction that can exchange a metabolite,
and will otherwise be unable to remove that specific loop.
Or you could, as you mention, simply subtract forward and backward flux,
since the efficient flux over the exchanger is the value you mention above.

Hope this helps,

Thomas
Reply all
Reply to author
Forward
0 new messages