Source code for dexom_python.model_functions


import pandas as pd
import numpy as np
from pathlib import Path
from cobra.io import load_json_model, read_sbml_model, load_matlab_model
import optlang


[docs]def read_model(modelfile, solver='cplex'): fileformat = Path(modelfile).suffix model = None if fileformat == ".sbml" or fileformat == ".xml": model = read_sbml_model(modelfile) elif fileformat == '.json': model = load_json_model(modelfile) elif fileformat == ".mat": model = load_matlab_model(modelfile) elif fileformat == "": print("Wrong model path") else: print("Only SBML, JSON, and Matlab formats are supported for the models") try: model.solver = solver except: print("The solver: %s is not available or not properly installed" % solver) return model
[docs]def check_model_options(model, timelimit=None, feasibility=1e-6, mipgaptol=1e-3, verbosity=1): model.solver.configuration.timeout = timelimit model.tolerance = feasibility model.solver.configuration.verbosity = verbosity model.solver.configuration.presolve = True if type(model.solver) == optlang.cplex_interface.Model: model.solver.problem.parameters.mip.tolerances.mipgap.set(mipgaptol) else: print('setting the MIP gap tolerance is only available with the cplex solver') return model
[docs]def get_all_reactions_from_model(model, save=True, shuffle=True, out_path=""): """ Parameters ---------- model: cobra.Model save: bool by default, exports the reactions in a csv format shuffle: bool set to True to shuffle the order of the reactions out_path: str output path Returns ------- rxn_list: A list of all reactions in the model """ rxn_list = [r.id for r in model.reactions] if save: pd.Series(rxn_list).to_csv(out_path + model.id + "_reactions.csv", header=False, index=False) if shuffle: np.random.shuffle(rxn_list) if save: pd.Series(rxn_list).to_csv(out_path + model.id + "_reactions_shuffled.csv", header=False, index=False) return rxn_list
[docs]def get_subsystems_from_model(model, save=True, out_path=""): """ Creates a list of all subsystems of a model and their associated reactions Parameters ---------- model: cobra.Model save: bool out_path: str Returns ------- rxn_sub: pandas.DataFrame a DataFrame with reaction names as index and subsystem name as column sub_list: list a list of subsystems """ rxn_sub = {} sub_list = [] i = 0 for rxn in model.reactions: rxn_sub[i] = (rxn.id, rxn.subsystem) i += 1 if rxn.subsystem not in sub_list: sub_list.append(rxn.subsystem) if sub_list[-1] == "": sub_list.pop() rxn_sub = pd.DataFrame.from_dict(rxn_sub, orient="index", columns=["ID", "subsystem"]) if save: rxn_sub.to_csv(out_path+model.id+"_reactions_subsystems.csv") with open(out_path+model.id+"_subsystems_list.txt", "w+") as file: file.write(";".join(sub_list)) return rxn_sub, sub_list
[docs]def save_reaction_weights(reaction_weights, filename): """ Parameters ---------- reaction_weights: dict a dictionary where keys = reaction IDs and values = weights filename: str Returns ------- reaction_weights: pandas.DataFrame """ df = pd.DataFrame(reaction_weights.items(), columns=["reactions", "weights"]) df.to_csv(filename) df.index = df["reactions"] return df["weights"]
[docs]def load_reaction_weights(filename, rxn_names="reactions", weight_names="weights"): """ loads reaction weights from a .csv file Parameters ---------- filename: str the path + name of a .csv file containing reaction weights rxn_names: str the name of the column containing the reaction names weight_names: str the name of the column containing the weights Returns ------- reaction_weights: dict """ df = pd.read_csv(filename) df.index = df[rxn_names] reaction_weights = df[weight_names].to_dict() return {k: float(v) for k, v in reaction_weights.items() if float(v) == float(v)}