Skip to content

Instantly share code, notes, and snippets.

@aebrahim
Created February 19, 2016 18:46
Show Gist options
  • Save aebrahim/a7a49ebc066af15e7355 to your computer and use it in GitHub Desktop.
Save aebrahim/a7a49ebc066af15e7355 to your computer and use it in GitHub Desktop.
from lxml.etree import parse, Element, SubElement, \
ElementTree, register_namespace, ParseError, XPath, \
XMLParser
from cobra.io.sbml3 import namespaces, strnum, ns
def add_in_flux_bounds(filename, outfile=None, min_value=-1000,
max_value=1000):
if outfile is None or outfile == "":
outfile = "fixed_" + filename
doc = parse(filename, XMLParser(remove_blank_text=True))
xml_model = doc.find("sbml:model", namespaces=namespaces)
parameter_list = xml_model.find("sbml:listOfParameters",
namespaces=namespaces)
if parameter_list is None:
parameter_list = parameter_list = SubElement(xml_model,
"listOfParameters")
param_attr = {"constant": "true"}
SubElement(parameter_list, "parameter", value=strnum(min_value),
id="cobra_default_lb", sboTerm="SBO:0000626", **param_attr)
SubElement(parameter_list, "parameter", value=strnum(max_value),
id="cobra_default_ub", sboTerm="SBO:0000626", **param_attr)
SubElement(parameter_list, "parameter", value="0",
id="cobra_0_bound", sboTerm="SBO:0000626", **param_attr)
for sbml_reaction in xml_model.iterfind(
"sbml:listOfReactions/sbml:reaction", namespaces=namespaces):
sbml_reaction.set(ns("fbc:upperFluxBound"), "cobra_default_ub")
if sbml_reaction.get("reversible") == "true":
sbml_reaction.set(ns("fbc:lowerFluxBound"), "cobra_0_bound")
else:
sbml_reaction.set(ns("fbc:lowerFluxBound"), "cobra_default_lb")
doc.write(outfile, pretty_print=True, encoding="UTF-8",
xml_declaration=True)
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description='Add flux bounds to a model')
parser.add_argument("filename")
parser.add_argument("-o", "--outfile")
parser.add_argument("--min", default=-1000)
parser.add_argument("--max", default=1000)
args = parser.parse_args()
add_in_flux_bounds(args.filename, args.outfile, args.min, args.max)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment