def run_detfl(yaml_file, uptake_funs, medium_funs=dict(), model=None, ini_sol=None): # pass in params = read_config(yaml_file) for key, value in params.items(): print('%s: %s' % (key, value)) if model is None: model = load_json_model(params['model']) standard_solver_config(model) model.solver.configuration.verbosity = params['options']['verbose'] time_data = run_dynamic_etfl(model, timestep=params['simulation']['timestep'], tfinal=params['simulation']['tfinal'], uptake_fun=uptake_funs, medium_fun=medium_funs, uptake_enz=params['assumptions']['uptake_enz'], S0=params['assumptions']['S0'], X0=params['assumptions']['X0'], inplace=params['options']['inplace'], initial_solution = ini_sol, chebyshev_include = params['options']['chebyshev_include'], dynamic_constraints = params['options']['constraints'] ) # plot_dynamics(model, time_data) out_path = join('outputs',params['tag']+get_timestr()) makedirs(out_path) time_data.to_csv(join(out_path,'solution.csv')) write_yaml(params,join(out_path,'config.yaml')) return time_data
from cobra.flux_analysis import single_gene_deletion from tqdm import tqdm import time solver = 'optlang-gurobi' # # ecoli_fba = cobra.io.json.load_json_model('models/iJO1366_T0E0N0__20180606_121758.json') # ecoli_fba.solver = solver # ecoli_tfa = pytfa.io.json.load_json_model('models/iJO1366_T1E0N0__20180606_121751.json') # ecoli_tfa.solver = solver # vETFL ecoli = load_json_model( 'models/SlackModel iJO1366_vETFL_431_enz_128_bins__20190701_082518.json') # vETFL_infer: #ecoli = load_json_model('models/SlackModel # iJO1366_vETFL_infer_2084_enz_128_bins__20190624_095428.json') ecoli.solver = solver standard_solver_config(ecoli) ecoli.optimize() max_growth = ecoli.solution.objective_value print('Growth : {}'.format(ecoli.solution.objective_value)) print(' - Ribosomes produced: {}'.format(ecoli.solution.raw.EZ_rib)) print(' - RNAP produced: {}'.format(ecoli.solution.raw.EZ_rnap)) # --
vec_dict = {'plasmid_pET-AR-ALS': get_bdo_plasmid, 'debug': get_debug_plasmid} def write_conf(model, conf): filename = 'outputs/' + conf['tag'] + '/config.yaml' conf['objective'] = str(model.objective.expression) with open(filename, 'w') as fid: yaml.dump(config, fid) if __name__ == '__main__': config = read_config(CONFIG) if config['model'] != 'debug': model = load_json_model(config['model'], solver=config['options']['solver']) else: from etfl.tests.small_model import create_etfl_model model = create_etfl_model(0, 1, solver=config['options']['solver']) standard_solver_config(model) model.solver.configuration.verbosity = config['options']['verbose'] copy_number = int(config['simulation']['copy_number']) vector_generator = vec_dict[config['simulation']['vector']] has_rnap = config['simulation']['add_rnap'] my_plasmid = vector_generator(model, has_rnap) ##################### # Model integration #
medium_funs = { 'EX_glc__D_e': glc_fun, 'EX_lcts_e': lac_fun, 'EX_o2_e': o2_diff, 'EX_ac_e': ac_fun, } uptake_funs = get_uptake_funs() if not has_lcts: medium_funs.pop('EX_lcts_e') uptake_funs.pop('EX_lcts_e') if config['model'] != 'debug': model = load_json_model(config['model']) else: from etfl.tests.small_model import create_etfl_model model = create_etfl_model(0, 0) standard_solver_config(model) model.solver.configuration.verbosity = 0 ini_sol = prepare_model(model, v0=config['assumptions']['v0'], S0=config['assumptions']['S0'], uptake_fun=uptake_funs) time_data = run_detfl(model=model, yaml_file=CONFIG, ini_sol=ini_sol,
import pandas as pd # # model = create_etfl_model( 0,0, # n_mu_bins = 128, # ) # # model.reactions.ATPM.lower_bound = 4 # model.reactions.EX_glc__D_e.lower_bound = -1 # model.optimize() # model.objective = model.growth_reaction.forward_variable + \ # model.reactions.EX_glc__D_e.reverse_variable from etfl.io.json import load_json_model model = load_json_model('models/iJO1366_T0E1N1_431_enz_128_bins__20180926_135704.json') # model = load_json_model('models/RelaxedModel iJO1366_T1E1N1_431_enz_128_bins__20180926_124941.json') def get_enzymes_of_subsystem(model, subsystem): reactions = [x for x in model.reactions if subsystem.lower() in x.subsystem.lower()] enzymes = [item for rxn in reactions if hasattr(rxn,'enzymes') for item in rxn.enzymes ] return enzymes def get_mrna_total(time_data, mrnas): return time_data.loc[[x.variable.name * x.scaling_factor for x in mrnas]].sum()
from math import exp import pandas as pd # # model = create_etfl_model( 0,0, # n_mu_bins = 128, # ) # # model.reactions.ATPM.lower_bound = 4 # model.reactions.EX_glc__D_e.lower_bound = -1 # model.optimize() # model.objective = model.growth_reaction.forward_variable + \ # model.reactions.EX_glc__D_e.reverse_variable from etfl.io.json import load_json_model # model = load_json_model('models/SlackModel iJO1366_vETFL_2084_enz_128_bins__20190122_170118.json') model = load_json_model( 'models/iJO1366_vEFL_431_enz_128_bins__20190121_090316.json') # model = load_json_model('models/SlackModel iJO1366_vETFL_431_enz_128_bins__20190122_145700.json') # model = load_json_model('models/iJO1366_T0E1N1_431_enz_128_bins__20180926_135704.json') # model = load_json_model('models/RelaxedModel iJO1366_T1E1N1_431_enz_128_bins__20180926_124941.json') model_tag = 'vEFL_mixed_lcts2_with_degradation' # for rxn in model.translation_reactions: # rxn.subsystem = 'Translation' # for rxn in model.transcription_reactions: # rxn.subsystem = 'Transcription' exchanges = ['EX_glc__D_e', 'EX_ac_e', 'EX_o2_e', 'EX_lcts_e'] concentrations = ['X'] + ['S_' + x for x in exchanges]
from tqdm import tqdm import time solver = 'optlang-gurobi' # # ecoli_fba = cobra.io.json.load_json_model('models/iJO1366_T0E0N0__20180606_121758.json') # ecoli_fba.solver = solver # ecoli_tfa = pytfa.io.json.load_json_model('models/iJO1366_T1E0N0__20180606_121751.json') # ecoli_tfa.solver = solver # ecoli = load_json_model('models/RelaxedModel iJO1366_vETFL_431_enz_128_bins__20190108_181346.json') # ecoli = load_json_model('models/SlackModel iJO1366_vETFL_431_enz_128_bins__20190122_155755.json') # ecoli = load_json_model('models/SlackModel iJO1366_vETFL_1783_enz_128_bins__20190221_185154.json') ecoli = load_json_model( 'models/SlackModel iJO1366_vETFL_2084_enz_128_bins__20190122_170118.json') ecoli.solver = solver standard_solver_config(ecoli) ecoli.optimize() max_growth = ecoli.solution.objective_value print('Growth : {}'.format(ecoli.solution.objective_value)) print(' - Ribosomes produced: {}'.format(ecoli.solution.raw.EZ_rib)) print(' - RNAP produced: {}'.format(ecoli.solution.raw.EZ_rnap)) # -- def ko_gene(model, gene_id): try:
import numpy as np import bokeh.plotting as bp from bokeh.models import Whisker, ColumnDataSource from etfl.io.json import load_json_model import cobra from bokeh.io import export_svgs bp.curdoc().clear() ec_cobra = cobra.io.load_json_model('iJO1366_with_xrefs.json') # ec_cobra.reactions.ATPM.lower_bound = 0 growth_reaction_id = 'BIOMASS_Ec_iJO1366_WT_53p95M' ecoli = load_json_model( 'models/RelaxedModel iJO1366_T1E1N1_350_enz_256_bins__20180830_121200.json' ) uptake_range = pd.Series(list(range(100))) def simulate(uptake, model): model.reactions.EX_glc__D_e.lower_bound = -1 * uptake model.reactions.EX_glc__D_e.upper_bound = 0 model.objective = growth_reaction_id model.objective.direction = 'max' try: sol = model.optimize() except Exception: return pd.Series([np.nan, np.nan]) return pd.Series([sol.f, model.reactions.EX_glc__D_e.flux * -1])
from math import exp import pandas as pd # # model = create_etfl_model( 0,0, # n_mu_bins = 128, # ) # # model.reactions.ATPM.lower_bound = 4 # model.reactions.EX_glc__D_e.lower_bound = -1 # model.optimize() # model.objective = model.growth_reaction.forward_variable + \ # model.reactions.EX_glc__D_e.reverse_variable from etfl.io.json import load_json_model model = load_json_model('models/SlackModel iJO1366_vETFL_440_enz_128_bins__20190227_141232.json') # model = load_json_model('models/SlackModel iJO1366_vETFL_2084_enz_128_bins__20190122_170118.json') # model = load_json_model('models/iJO1366_vEFL_431_enz_128_bins__20190121_090316.json') # model = load_json_model('models/SlackModel iJO1366_vETFL_431_enz_128_bins__20190122_145700.json') # model = load_json_model('models/iJO1366_T0E1N1_431_enz_128_bins__20180926_135704.json') # model = load_json_model('models/RelaxedModel iJO1366_T1E1N1_431_enz_128_bins__20180926_124941.json') model_tag = 'dvETFL_deg_glc_lcts_alldelta_noexpc' # for rxn in model.translation_reactions: # rxn.subsystem = 'Translation' # for rxn in model.transcription_reactions: # rxn.subsystem = 'Transcription' exchanges = [
import time solver = 'optlang-gurobi' USE_GPR = False # # ecoli_fba = cobra.io.json.load_json_model('models/iJO1366_T0E0N0__20180606_121758.json') # ecoli_fba.solver = solver # ecoli_tfa = pytfa.io.json.load_json_model('models/iJO1366_T1E0N0__20180606_121751.json') # ecoli_tfa.solver = solver # vETFL # ecoli = load_json_model('models/SlackModel iJO1366_vETFL_v_0.12_431_enz_128_bins__20200605_083556.json') # ecoli = load_json_model('models/SlackModel iJO1366_vETFL_mean_kcat_431_enz_128_bins__20200605_090017.json') # vETFL_infer: ecoli = load_json_model('models/SlackModel iJO1366_vETFL_infer_infer_2084_enz_128_bins__20200605_102233.json') ecoli.solver = solver standard_solver_config(ecoli) ecoli.optimize() max_growth = ecoli.solution.objective_value print('Growth : {}'.format(ecoli.solution.objective_value)) print(' - Ribosomes produced: {}'.format(ecoli.solution.raw.EZ_rib)) print(' - RNAP produced: {}'.format(ecoli.solution.raw.EZ_rnap)) # -- def safe_optim(model):
etfl_classif = y_true.copy() etfl_classif[etfl_tp.index] = 'tp' etfl_classif[etfl_tn.index] = 'tn' etfl_classif[etfl_fp.index] = 'fp' etfl_classif[etfl_fn.index] = 'fn' ijo_classif = y_true.copy() ijo_classif[ijo_tp['genes']] = 'tp' ijo_classif[ijo_tn['genes']] = 'tn' ijo_classif[ijo_fp['genes']] = 'fp' ijo_classif[ijo_fn['genes']] = 'fn' from etfl.io.json import load_json_model from etfl.core.reactions import EnzymaticReaction m = load_json_model('models/SlackModel ' 'iJO1366_vETFL_431_enz_128_bins__20190701_082518.json', solver='cplex') def enzrxn_to_gpr(rxn): return ' OR '.join([' AND '.join(['{}*{}'.format(v,k) for v,k in isozyme.composition.items()]) for isozyme in rxn.enzymes]) def enzrxn_to_iso(rxn): return ' OR '.join([isozyme.id for isozyme in rxn.enzymes]) list_of_offenders = list() for gene_id in etfl_classif.index: if etfl_classif[gene_id] != ijo_classif[gene_id]: rxns = [x for x in m.reactions if any(gene_id == g.id for g in x.genes)] for rxn in rxns: ijo_GPR = rxn.gene_reaction_rule
from etfl.io.json import load_json_model from etfl.optim.variables import mRNAVariable, EnzymeVariable from etfl.optim.utils import fix_integers from pytfa.analysis import variability_analysis, \ apply_reaction_variability, \ apply_generic_variability, \ apply_directionality from etfl.analysis.utils import enzymes_to_peptides_conc import pandas as pd ecoli = load_json_model('models/RelaxedModel iJO1366_T1E1N1_431_enz_128_bins__20180926_124941.json') ecoli.optimize() def print_sol(model): print('Objective : {}'.format(model.solution.f)) print(' - Glucose uptake : {}'.format(model.solution.x_dict.EX_glc__D_e)) print(' - Growth : {}'.format(model.solution.x_dict[model.growth_reaction.id])) print(' - Ribosomes produced: {}'.format(model.solution.raw.EZ_rib)) print(' - RNAP produced: {}'.format(model.solution.raw.EZ_rnap)) try: print(' - DNA produced: {}'.format(model.solution.raw.DN_DNA)) except AttributeError: pass # ID 109686 # Property Glucose uptake rate of strain C-3000 in minimal M9 media
from etfl.io.json import load_json_model from etfl.optim.variables import mRNAVariable, EnzymeVariable from etfl.optim.utils import fix_integers from pytfa.analysis import variability_analysis, \ apply_reaction_variability, \ apply_generic_variability, \ apply_directionality from etfl.analysis.utils import enzymes_to_peptides_conc import pandas as pd ecoli = load_json_model( 'models/SlackModel iJO1366_vETFL_431_enz_128_bins__20190122_145700.json') ecoli.optimize() def print_sol(model): print('Objective : {}'.format(model.solution.objective_value)) print(' - Glucose uptake : {}'.format( model.solution.raw.loc['EX_glc__D_e'])) print(' - Growth : {}'.format( model.solution.raw.loc[model.growth_reaction.id])) print(' - Ribosomes produced: {}'.format(model.solution.raw.loc['EZ_rib'])) print(' - RNAP produced: {}'.format(model.solution.raw.loc['EZ_rnap'])) try: print(' - DNA produced: {}'.format(model.solution.raw.DN_DNA)) except AttributeError: pass
model_files = { # 'EFL':'iJO1366_EFL_1783_enz_128_bins__20190221_165945.json', # 'ETFL':'SlackModel iJO1366_ETFL_1783_enz_128_bins__20190221_172509.json', # 'vEFL':'iJO1366_vEFL_1783_enz_128_bins__20190221_182321.json', # 'vETFL':'SlackModel iJO1366_vETFL_1783_enz_128_bins__20190221_185154.json', # 'vETFL65':'SlackModel iJO1366_vETFL_1783_enz_128_bins__20190221_194424.json', # 'vETFL_infer':'SlackModel iJO1366_vETFL_infer_2088_enz_128_bins__20190221_204202.json', # 'vETFL65_infer': 'SlackModel iJO1366_vETFL_infer_2088_enz_128_bins__20190221_220847.json', # 'EFL':'iJO1366_EFL_431_enz_128_bins__20190121_080047.json', 'ETFL':'SlackModel iJO1366_ETFL_431_enz_128_bins__20190121_110027.json', 'vEFL':'iJO1366_vEFL_431_enz_128_bins__20190121_090316.json', 'vETFL':'SlackModel iJO1366_vETFL_431_enz_128_bins__20190122_145700.json', 'vETFL65':'SlackModel iJO1366_vETFL_431_enz_128_bins__20190122_155755.json', 'vETFL_infer':'SlackModel iJO1366_vETFL_2084_enz_128_bins__20190122_170118.json', 'vETFL65_infer':'SlackModel iJO1366_vETFL_2084_enz_128_bins__20190124_082824.json', } models = {k:load_json_model('models/'+v,solver=solver) for k,v in model_files.items()} data = {} for name,model in models.items(): growth_uptake_config(model) model.warm_start = None model.logger.info('Simulating ...') start = time() data[name] = uptake_range.apply(simulate, args=[model,variables]) stop = time() print('Elapsed time: {}'.format(stop - start)) data[name].to_csv('outputs/benchmark_{}.csv'.format(name))
from collections import OrderedDict from bokeh.palettes import Category10 from bokeh.io import export_svgs from bokeh.layouts import row from os.path import join as pjoin bp.curdoc().clear() data_dir = '../organism_data/info_ecoli' from etfl.io.json import load_json_model # scaling_model = load_json_model('models/RelaxedModel iJO1366_T1E1N1_431_enz_128_bins__20180926_124941.json') scaling_model = load_json_model( 'models/iJO1366_EFL_431_enz_128_bins__20190121_080047.json') def make_polygon(x, ymin, ymax): lx = x.tolist() lymin = ymin.tolist() lymax = ymax.tolist() return lx + lx[::-1], lymin + lymax[::-1] def make_bars(x, ymin, ymax, width=None): data = pd.DataFrame([x, ymin, ymax]).T data.columns = ['x', 'bottom', 'top'] data.dropna(how='any', inplace=True)
'iJO1366_EFL_431_enz_128_bins__20190620_080807.json', 'ETFL': 'SlackModel iJO1366_ETFL_431_enz_128_bins__20190701_122635.json', 'vEFL': 'iJO1366_vEFL_431_enz_128_bins__20190620_084052.json', 'vETFL': 'SlackModel iJO1366_vETFL_431_enz_128_bins__20190701_082518.json', 'vETFLmean': 'SlackModel iJO1366_vETFL_mean_kcat_431_enz_128_bins__20190701_070448.json', 'vETFL_infer': 'SlackModel iJO1366_vETFL_infer_2084_enz_128_bins__20190624_095428.json', 'vETFLmean_infer': 'SlackModel iJO1366_vETFL_infer_mean_kcat_infer_2084_enz_128_bins__20190701_070427.json', } models = { k: load_json_model('models/' + v, solver=solver) for k, v in model_files.items() } data = {} for name, model in models.items(): growth_uptake_config(model) model.warm_start = None model.logger.info('Simulating ...') start = time() data[name] = uptake_range.apply(simulate, args=[model, variables]) stop = time() print('Elapsed time: {}'.format(stop - start)) data[name].to_csv('outputs/benchmark_{}.csv'.format(name))
def test_read(): m = load_json_model(savepath) m.optimize()