def save_yaml_model(model, filename, sort=False, **kwargs): """ Write the cobra model to a file in YAML format. ``kwargs`` are passed on to ``yaml.dump``. Parameters ---------- model : cobra.Model The cobra model to represent. filename : str or file-like File path or descriptor that the YAML representation should be written to. sort : bool, optional Whether to sort the metabolites, reactions, and genes or maintain the order defined in the model. See Also -------- to_yaml : Return a string representation. ruamel.yaml.dump : Base function. """ obj = model_to_dict(model, sort=sort) obj["version"] = YAML_SPEC if isinstance(filename, string_types): with io.open(filename, "w") as file_handle: yaml.dump(obj, file_handle, **kwargs) else: yaml.dump(obj, filename, **kwargs)
def to_yaml(model, sort=False, **kwargs): """ Return the model as a YAML document. ``kwargs`` are passed on to ``yaml.dump``. Parameters ---------- model : cobra.Model The cobra model to represent. sort : bool, optional Whether to sort the metabolites, reactions, and genes or maintain the order defined in the model. Returns ------- str String representation of the cobra model as a YAML document. See Also -------- save_yaml_model : Write directly to a file. ruamel.yaml.dump : Base function. """ obj = model_to_dict(model, sort=sort) obj["version"] = YAML_SPEC return yaml.dump(obj, **kwargs)
def to_json(model, sort=False, **kwargs): """ Return the model as a JSON document. ``kwargs`` are passed on to ``json.dumps``. Parameters ---------- model : cobra.Model The cobra model to represent. sort : bool, optional Whether to sort the metabolites, reactions, and genes or maintain the order defined in the model. Returns ------- str String representation of the cobra model as a JSON document. See Also -------- save_json_model : Write directly to a file. json.dumps : Base function. """ obj = model_to_dict(model, sort=sort) obj[u"version"] = JSON_SPEC return json.dumps(obj, allow_nan=False, **kwargs)
def save_yaml_model(model, filename, **kwargs): """ Write the cobra model to a file in YAML format. ``kwargs`` are passed on to ``yaml.dump``. Parameters ---------- model : cobra.Model The cobra model to represent. filename : str or file-like File path or descriptor that the YAML representation should be written to. See Also -------- to_yaml : Return a string representation. ruamel.yaml.dump : Base function. """ obj = model_to_dict(model) obj["version"] = YAML_SPEC if isinstance(filename, string_types): with io.open(filename, "w") as file_handle: yaml.dump(obj, file_handle, Dumper=yaml.RoundTripDumper, **kwargs) else: yaml.dump(obj, filename, Dumper=yaml.RoundTripDumper, **kwargs)
def model_to_dict(model): """ :param model: :return: """ # Take advantage of cobra's dict serialization for metabolites and # reactions obj = cbd.model_to_dict(model) obj['solver'] = get_solver_string(model) obj['objective'] = obj_to_dict(model) # Copy variables, constraints # obj['var_dict'] = archive_variables(model._var_kinds) # obj['cons_dict'] = archive_constraints(model._cons_kinds) obj['variables'] = list(map(var_to_dict, model._var_dict.values())) obj['constraints'] = list(map(cons_to_dict, model._cons_dict.values())) is_thermo = False if isinstance(model, ThermoModel): obj['kind'] = 'ThermoModel' obj['thermo_data'] = model.thermo_data #it's a dict obj['name'] = model.name obj['temperature'] = model.TEMPERATURE obj['min_ph'] = model.MIN_pH obj['max_ph'] = model.MAX_pH is_thermo = True # Metabolite and Reaction-level cleanup for rxn_dict in obj['reactions']: rxn = model.reactions.get_by_id(rxn_dict['id']) if is_thermo: _add_thermo_reaction_info(rxn, rxn_dict) # Peptides and Thermo for met_dict in obj['metabolites']: the_met_id = met_dict['id'] is_peptide = False if is_thermo and not is_peptide: # peptides have no thermo the_met = model.metabolites.get_by_id(the_met_id) _add_thermo_metabolite_info(the_met, met_dict) met_dict['kind'] = 'Metabolite' # Relaxation info try: obj['relaxation'] = model.relaxation except AttributeError: pass return obj
def save_json_model(model, filename, sort=False, pretty=False, **kwargs): """ Write the cobra model to a file in JSON format. ``kwargs`` are passed on to ``json.dump``. Parameters ---------- model : cobra.Model The cobra model to represent. filename : str or file-like File path or descriptor that the JSON representation should be written to. sort : bool, optional Whether to sort the metabolites, reactions, and genes or maintain the order defined in the model. pretty : bool, optional Whether to format the JSON more compactly (default) or in a more verbose but easier to read fashion. Can be partially overwritten by the ``kwargs``. See Also -------- to_json : Return a string representation. json.dump : Base function. """ obj = model_to_dict(model, sort=sort) obj[u"version"] = JSON_SPEC if pretty: dump_opts = { "indent": 4, "separators": (",", ": "), "sort_keys": True, "allow_nan": False, } else: dump_opts = { "indent": 0, "separators": (",", ":"), "sort_keys": False, "allow_nan": False, } dump_opts.update(**kwargs) if isinstance(filename, str): with open(filename, "w") as file_handle: json.dump(obj, file_handle, **dump_opts) else: json.dump(obj, filename, **dump_opts)
def get_genes_and_gpr(model, gene_outfile, gpr_outfile): """Retrieving genes and gene_reaction_rule from GEM. Arguments ---------- * model: cobra.Model ~ A genome scale metabolic network model for constructing the enzyme-constrained model. :return: all genes and gpr in model. """ model_dict = model_to_dict(model, sort=False) genes = pd.DataFrame(model_dict['genes']).set_index(['id']) genes.to_csv(gene_outfile) all_gpr = pd.DataFrame(model_dict['reactions']).set_index(['id']) all_gpr.to_csv(gpr_outfile) return [genes, all_gpr]
def model_excel(model, output): from cobra.io.dict import model_to_dict, model_from_dict, metabolite_from_dict, gene_from_dict, reaction_from_dict from cobra.core import Model from cobra.io import read_sbml_model, write_sbml_model import pandas as pd a = model_to_dict(model, sort=False) writer = pd.ExcelWriter(output) #pd.DataFrame(a['compartments']).to_excel(writer,'Sheet1',index=False) pd.DataFrame(a['metabolites']).to_excel(writer, 'metabolites', index=False) pd.DataFrame(a['genes']).to_excel(writer, 'genes', index=False) df_r = pd.DataFrame(a['reactions']) df_r['reaction_eq'] = df_r.id.apply(lambda x: model.reactions.get_by_id( x).build_reaction_string(use_metabolite_names=False)) #del df_r['metabolites'] #生成反应方程列后将代谢物列删除,可保留以方便再次读取 df_r.to_excel(writer, 'reactions', index=False) #df_r.to_excel(writer,'reactions',columns=["id","name","reaction","lower_bound","upper_bound","gene_reaction_rule"],index=False) writer.save()
def get_genes_and_GPR(model,ID_kcat_file): GPR = pd.DataFrame() model_news = model_to_dict(model,sort=False) df_ID_kcat = pd.read_csv(ID_kcat_file,index_col=0) genes = pd.DataFrame(model_news['genes']) genes.drop(['name','annotation'],axis=1,inplace=True) genes = genes[~genes['id'].isin(['s0001'])] genes.set_index('id',inplace=True) genes.to_csv("./genes_file.csv", sep=',') all_GPR = pd.DataFrame(model_news['reactions']) all_GPR.drop(['name','metabolites','lower_bound','upper_bound','annotation','objective_coefficient','notes'],axis=1,inplace=True) all_GPR.to_csv("./all_GPR.csv", sep=',',index=False) df_all_GPR = pd.read_csv("./all_GPR.csv",index_col=0) for reaction_id in df_ID_kcat.index: GPR.loc[reaction_id,'GPR'] = df_all_GPR.loc[reaction_id,'gene_reaction_rule'] GPR.to_csv("./ID_GPR_file.csv", sep=',') return(genes)
def save_json_model(model, filename, sort=False, pretty=False, **kwargs): """ Write the cobra model to a file in JSON format. ``kwargs`` are passed on to ``json.dump``. Parameters ---------- model : cobra.Model The cobra model to represent. filename : str or file-like File path or descriptor that the JSON representation should be written to. sort : bool, optional Whether to sort the metabolites, reactions, and genes or maintain the order defined in the model. pretty : bool, optional Whether to format the JSON more compactly (default) or in a more verbose but easier to read fashion. Can be partially overwritten by the ``kwargs``. See Also -------- to_json : Return a string representation. json.dump : Base function. """ obj = model_to_dict(model, sort=sort) obj[u"version"] = JSON_SPEC if pretty: dump_opts = { "indent": 4, "separators": (",", ": "), "sort_keys": True, "allow_nan": False} else: dump_opts = { "indent": 0, "separators": (",", ":"), "sort_keys": False, "allow_nan": False} dump_opts.update(**kwargs) if isinstance(filename, string_types): with open(filename, "w") as file_handle: json.dump(obj, file_handle, **dump_opts) else: json.dump(obj, filename, **dump_opts)
def to_json(model, **kwargs): """ Return the model as a JSON document. ``kwargs`` are passed on to ``json.dumps``. Parameters ---------- model : cobra.Model The cobra model to represent. Returns ------- str String representation of the cobra model as a JSON document. See Also -------- save_json_model : Write directly to a file. json.dumps : Base function. """ obj = model_to_dict(model) obj[u"version"] = JSON_SPEC return json.dumps(obj, allow_nan=False, **kwargs)
def to_yaml(model, **kwargs): """ Return the model as a YAML document. ``kwargs`` are passed on to ``yaml.dump``. Parameters ---------- model : cobra.Model The cobra model to represent. Returns ------- str String representation of the cobra model as a YAML document. See Also -------- save_yaml_model : Write directly to a file. ruamel.yaml.dump : Base function. """ obj = model_to_dict(model) obj["version"] = YAML_SPEC return yaml.dump(obj, Dumper=yaml.RoundTripDumper, **kwargs)
def model_to_dict(model): """ :param model: :return: """ # Take advantage of cobra's dict serialization for metabolites and # reactions obj = cbd.model_to_dict(model) obj['solver'] = get_solver_string(model) obj['objective'] = obj_to_dict(model) # Copy variables, constraints # obj['var_dict'] = archive_variables(model._var_kinds) # obj['cons_dict'] = archive_constraints(model._cons_kinds) obj['variables'] = list(map(var_to_dict, model._var_dict.values())) obj['constraints'] = list(map(cons_to_dict, model._cons_dict.values())) is_thermo = False is_me = False if isinstance(model, ThermoModel): obj['kind'] = 'ThermoModel' obj['thermo_data'] = model.thermo_data #it's a dict obj['name'] = model.name obj['temperature'] = model.TEMPERATURE obj['min_ph'] = model.MIN_pH obj['max_ph'] = model.MAX_pH is_thermo = True # Relaxation info try: obj['relaxation'] = model.relaxation except AttributeError: pass if isinstance(model, MEModel): # Convenience attributes # obj['_mu'] = model.mu.name # obj['compositions'] = archive_compositions(model.compositions) # obj['coupling_dict'] = archive_coupling_dict(model.coupling_dict) obj['mu_bins'] = model.mu_bins obj['essentials'] = model.essentials obj['rna_nucleotides'] = model.rna_nucleotides obj['rna_nucleotides_mp'] = model.rna_nucleotides_mp try: obj['dna_nucleotides'] = model.dna_nucleotides except AttributeError: # DNA has not been added pass obj['aa_dict'] = model.aa_dict # Growth obj['growth_reaction'] = model.growth_reaction.id # Genes obj['expressed_genes'] = list( map(expressed_gene_to_dict, [g for g in model.genes if isinstance(g, ExpressedGene)])) # Enzymes obj['enzymes'] = list(map(enzyme_to_dict, model.enzymes)) # mRNAs obj['mrnas'] = list(map(mrna_to_dict, model.mrnas)) # tRNAs obj['trna_dict'] = archive_trna_dict(model) # Ribosome obj['ribosome'] = ribosome_to_dict(model.ribosome) # RNAP obj['rnap'] = rnap_to_dict(model.rnap) try: obj['dna'] = dna_to_dict(model.dna) except AttributeError: # DNA has not been added pass obj['kind'] = 'MEModel' is_me = True if isinstance(model, ThermoMEModel): obj['kind'] = 'ThermoMEModel' is_me = True # Metabolite and Reaction-level cleanup for rxn_dict in obj['reactions']: rxn = model.reactions.get_by_id(rxn_dict['id']) if is_me: _add_me_reaction_info(rxn, rxn_dict) if is_thermo: _add_thermo_reaction_info(rxn, rxn_dict) # Peptides and Thermo for met_dict in obj['metabolites']: the_met_id = met_dict['id'] met_dict['kind'] = 'Metabolite' the_met = model.metabolites.get_by_id(the_met_id) is_me_met = False if is_me: if the_met_id in model.peptides: met_dict['kind'] = 'Peptide' met_dict['gene_id'] = the_met._gene_id if the_met._molecular_weight_override: met_dict['molecular_weight_override'] = \ the_met._molecular_weight_override is_me_met = True if the_met_id in model.rrnas: met_dict['kind'] = 'rRNA' is_me_met = True if is_thermo and not is_me_met: # peptides have no thermo _add_thermo_metabolite_info(the_met, rxn_dict) find_genes_from_dict(model, obj) return obj