Skip to content

Commit 248412d

Browse files
committed
fix fake elasticities in Symca to assign -1 to products and modifiers
1 parent 52594bb commit 248412d

File tree

3 files changed

+61
-4
lines changed

3 files changed

+61
-4
lines changed

psctb/analyse/_symca/_symca.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def __init__(self, mod, auto_load=False, internal_fixed=False, ignore_steady_sta
5252
warnings.warn_explicit("\nIgnoring steady-state solution: Steady-state variables set to 1. Note that parameter scan functionality is unavailable.",
5353
Warning,
5454
filename=get_filename_from_caller(),
55-
lineno=36)
55+
lineno=42)
5656
SMCAtools.populate_with_fake_elasticities(mod)
5757
SMCAtools.populate_with_fake_fluxes(mod)
5858
SMCAtools.populate_with_fake_ss_concentrations(mod)

psctb/analyse/_symca/symca_toolbox.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
# from os import mkdir
99
import sys
1010
#from re import sub
11+
from pysces import ModelMap
1112
from sympy import Symbol, sympify, nsimplify, fraction, S
1213
from sympy.matrices import Matrix, diag, NonSquareMatrixError
1314
from .ccobjects import CCBase, CCoef
1415
from ...utils.misc import DotDict
1516
from ...utils.misc import formatter_factory
1617
from ...utils import ConfigReader
17-
from ...utils.misc import ec_list, flux_list, ss_species_list
18-
18+
from ...utils.misc import ec_list, prod_ec_list, mod_ec_list, \
19+
flux_list, ss_species_list
1920

2021
## Everything in this file can be a function rather than a static method
2122
## better yet, almost everything can be part of symca. Finally everything can
@@ -638,6 +639,10 @@ def generic_populate(mod, function, value = 1):
638639
@staticmethod
639640
def populate_with_fake_elasticities(mod):
640641
SymcaToolBox.generic_populate(mod, ec_list)
642+
# set product elasticities to -1 to avoid divide by zero errors in Symca
643+
SymcaToolBox.generic_populate(mod, prod_ec_list, value=-1)
644+
# same for modifiers as these are mostly allosteric inhibitors
645+
SymcaToolBox.generic_populate(mod, mod_ec_list, value=-1)
641646

642647
@staticmethod
643648
def populate_with_fake_fluxes(mod):

psctb/utils/misc/_misc.py

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010
from numpy import array, errstate, nanmin, nanmax, nonzero, float64,\
1111
bool_, string_, ones
1212
from pysces.PyscesModel import PysMod
13+
from pysces import ModelMap
1314
from IPython.display import HTML
1415
from sympy import sympify
1516
from functools import wraps
1617
from ..config import ConfigReader
1718

1819
__all__ = ['cc_list',
1920
'ec_list',
21+
'prod_ec_list',
22+
'mod_ec_list',
2023
'rc_list',
2124
'prc_list',
2225
'silence_print',
@@ -84,7 +87,7 @@ def is_species(attr, model):
8487

8588
@memoize
8689
def is_reaction(attr, model):
87-
if attr.endswith('J_'):
90+
if attr.startswith('J_'):
8891
attr = attr[2:]
8992
if attr in model.reactions:
9093
return True
@@ -795,6 +798,55 @@ def ec_list(mod):
795798
ecs.sort()
796799
return ecs
797800

801+
@memoize
802+
def prod_ec_list(mod):
803+
"""
804+
Returns a list of product elasticity coefficients of a model.
805+
806+
Returns
807+
-------
808+
list of str
809+
The prod_ec_list is sorted alphabetically.
810+
811+
See Also
812+
--------
813+
ec_list, cc_list, rc_list, prc_list
814+
815+
"""
816+
ecs = []
817+
model_map = ModelMap(mod)
818+
for top_reaction in mod.reactions:
819+
r = getattr(model_map, top_reaction)
820+
for base_product in r.hasProducts():
821+
ec = 'ec%s_%s' % (top_reaction, base_product)
822+
ecs.append(str(ec))
823+
ecs.sort()
824+
return ecs
825+
826+
@memoize
827+
def mod_ec_list(mod):
828+
"""
829+
Returns a list of modifier elasticity coefficients of a model.
830+
831+
Returns
832+
-------
833+
list of str
834+
The mod_ec_list is sorted alphabetically.
835+
836+
See Also
837+
--------
838+
ec_list, cc_list, rc_list, prc_list
839+
840+
"""
841+
ecs = []
842+
modifiers = dict(mod.__modifiers__)
843+
for top_reaction in modifiers:
844+
for base_species in modifiers[top_reaction]:
845+
ec = 'ec%s_%s' % (top_reaction, base_species)
846+
ecs.append(str(ec))
847+
ecs.sort()
848+
return ecs
849+
798850
@memoize
799851
def ec_dict(mod):
800852
ecs = {}

0 commit comments

Comments
 (0)