#!/usr/bin/env python3 # coding: utf-8 from argparse import ArgumentParser from os import path, mkdir from timeit import default_timer as timer from cobra.flux_analysis import flux_variability_analysis, add_loopless from cobra.io import read_sbml_model parser = ArgumentParser(description="FVA Solver") parser.add_argument("--model", help="SBML file with the model") parser.add_argument("--method", help="Loop removal method", default="fastSNP") args = parser.parse_args() workdir = f"instances/{args.model}/" outdir = path.join(workdir, "output") if not path.exists(outdir): mkdir(outdir) file = path.join(workdir, f"{args.model}.xml") model = read_sbml_model(file) model.solver = "cplex" # model.objective = "FRD7" print(f"Number of reactions: {len(model.reactions)}") print(f"Number of metabolites: {len(model.metabolites)}") time = timer() add_loopless(model, zero_cutoff=1E-6, method=args.method) fba = model.optimize(raise_error=True) time = timer() - time print(f"Time: {time}") print(f"FBA objective: {fba.objective_value}") fba.fluxes.to_csv(path.join(outdir, f"cobrapy-fba-{args.method}.tsv"), sep='\t', header=True) for optimum in [0.0, 1.0]: fva = flux_variability_analysis(model, model.reactions, loopless=False, fraction_of_optimum=optimum) outfile = path.join(outdir, f"cobrapy-fva-{args.method}-opt{optimum}.tsv") fva.to_csv(outfile, sep='\t', encoding="utf-8", float_format="%.10f")