Source code for psctb.modeltools._pscmanipulate

from __future__ import division, print_function
from __future__ import absolute_import
from __future__ import unicode_literals

from os import path
import io
import string

from pysces import model, PyscesModel

from ._paths import get_model_name


__all__ = ['psc_to_str',
           'mod_to_str',
           'strip_fixed',
           'augment_fix_sting',
           'fix_metabolite',
           'fix_metabolite_ss']


[docs]def psc_to_str(name): """ Takes a filename and returns a path of where this file should be found. Parameters ---------- name : str A string containing a filename. Returns ------- str A string indicating the path to a psc file. """ if name[-4:] != '.psc': name += '.psc' F = file(path.join(PyscesModel.MODEL_DIR, name), 'r') fstr = F.read() F.close() return fstr
[docs]def mod_to_str(mod): """ Converts an instantiated PySCeS model to a string. Parameters ---------- mod : PysMod A Pysces model. Returns ------- str A string representation of the contents of a PySCeS model file. """ F = io.StringIO() mod.showModel(filename=F) fstr = F.getvalue() F.close() return fstr
[docs]def strip_fixed(fstr): """ Take a psc file string and return two strings: (1) The file header containing the "FIX: " line and (2) the remainder of file. Parameters ---------- fstr : str String representation of psc file. Returns ------- tuple of str 1st element contains file header, second the remainder of the file. See also -------- psc_to_str mod_to_str """ Fi = io.StringIO() Fi.write(fstr) Fi.seek(0) Fo = io.StringIO() Fhead = None for line in Fi: if line[:4] == "FIX:": Fhead = line.strip() Fo.write('\n') else: Fo.write(line) Fo.seek(0) return Fhead, Fo.read()
[docs]def augment_fix_sting(OrigFix, fix): """ Adds a species to a psc file header. Parameters ---------- OrigFix : str A psc file header fix : str Additional species to add to psc file header. Returns ------- str A new psc file header that contains the contents of the original together with the new fixed species. """ return OrigFix + ' %s' % fix
[docs]def fix_metabolite(mod, fix, model_name=None): """ Fix a metabolite in a model and return a new model with the fixed metabolite. Parameters ---------- mod : PysMod The original model. fix : str The metabolite to fix. model_name : str, optional (Default : none) The file name to use when saving the model (in psc/orca). If None it defaults to original_model_name_fix. Returns ------- PysMod A new model instance with an additional fixed species. """ assert fix in mod.species, "\nInvalid fixed species." if model_name is None: model_name = get_model_name(mod) + '_' + fix mod_str = mod_to_str(mod) fix_head, mod_str_sans_fix = strip_fixed(mod_str) new_fix_head = augment_fix_sting(fix_head, fix) new_mod = model(model_name, loader="string", fString=new_fix_head + '\n' + mod_str_sans_fix) return new_mod
[docs]def fix_metabolite_ss(mod, fix, model_name=None): """ Fix a metabolite at its steady state in a model and return a new model with the fixed metabolite. Parameters ---------- mod : PysMod The original model. fix : str The metabolite to fix. model_name : str, optional (Default : none) The file name to use when saving the model (in psc/orca). If None it defaults to original_model_name_fix. Returns ------- PysMod A new model instance with an additional fixed species. See Also -------- fix_metabolite """ mod.doState() fixed_ss = getattr(mod,fix) fix_mod = fix_metabolite(mod,fix,model_name) setattr(fix_mod,fix,fixed_ss) return fix_mod