Source code for metquest.fetch_reactions

# -*- coding: utf-8 -*-

from __future__ import absolute_import

import os
import glob
import cobra
from metquest.get_reaction_types import find_different_reaction_types


[docs]def segregate_reactions_from_models(path_name): """ This function gets the data pertaining to the reactions and the metabolites from the models of multiple organisms. This requires as input the pathname where the '.xml' files are located. From this path, this function reads all the files using the functions in the COBRA toolbox and generates the stoichiometric model for these SBML models. Parameters ---------- path_name : str full path name where the model files are Returns ------- all_organisms_info : dict Dictionary of all model data (reaction information about all the organisms) namemap : dict Dictionary mapping the adhoc reaction names to reaction names in the model """ all_organisms_info = {} namemap = {} os.chdir(path_name) file_names = glob.glob('*.xml') if not file_names: print("There are no .xml files. Please check the path") print("Filenames", file_names) for model_names in file_names: model = cobra.io.read_sbml_model(model_names) stoi = cobra.util.array.create_stoichiometric_matrix(model) if model.id: current_model_name = model.id else: print("Model ID not found; using file name instead") current_model_name = model_names.split('.')[0] current_organisms_info = {current_model_name: {'exchange_metab_nodes': [], 'irreversible_lhs_nodes': [], 'irreversible_rhs_nodes': [], 'reversible_rhs_nodes': [], 'reversible_lhs_nodes': [], 'irreversible_rxn_no': [], 'reversible_rxn_no': [], 'total_nodes': [], 'model_rxns': [], 'metabolites': [], 'exch_rxn_name': [], 'irrev_rxn_name': [], 'rev_rxn_name': []}} rxns_in_model = [] mets_in_model = [] for metab in model.metabolites: mets_in_model.append(metab.id) for reac in model.reactions: rxns_in_model.append(reac.id) stoi_matrix = stoi.T exchange_nodes, irrev_lhs_nodes, irrev_rhs_nodes, rev_lhs_nodes, rev_rhs_nodes, \ exc_name, irrev_rxn_name, rev_rxn_name = find_different_reaction_types( stoi_matrix, model, current_model_name) current_organisms_info[current_model_name][ 'exchange_metab_nodes'] = exchange_nodes current_organisms_info[current_model_name][ 'irreversible_lhs_nodes'] = irrev_lhs_nodes current_organisms_info[current_model_name][ 'irreversible_rhs_nodes'] = irrev_rhs_nodes current_organisms_info[current_model_name][ 'reversible_lhs_nodes'] = rev_lhs_nodes current_organisms_info[current_model_name][ 'reversible_rhs_nodes'] = rev_rhs_nodes current_organisms_info[current_model_name]['exch_rxn_name'] = exc_name current_organisms_info[current_model_name][ 'irrev_rxn_name'] = irrev_rxn_name current_organisms_info[current_model_name][ 'rev_rxn_name'] = rev_rxn_name irrev_rxn_number = [] for num in range(len(irrev_lhs_nodes)): modified_name_irrev = 'Org_%s IR' % current_model_name + str(num + 1) irrev_rxn_number.append(modified_name_irrev) namemap[modified_name_irrev] = irrev_rxn_name[num] rev_rxn_number = [] for num in range(len(rev_lhs_nodes)): modified_name_rev = 'Org_%s RR' % current_model_name + str(num + 1) rev_rxn_number.append(modified_name_rev) namemap[modified_name_rev] = rev_rxn_name[num] rev_back_rxn_number = [] for num in range(len(rev_lhs_nodes)): modified_name_back_rev = 'Org_%s RevBR' % current_model_name + \ str(num + 1) rev_back_rxn_number.append(modified_name_back_rev) namemap[modified_name_back_rev] = rev_rxn_name[num] current_organisms_info[current_model_name][ 'reversible_rxn_no'] = rev_rxn_number current_organisms_info[current_model_name][ 'irreversible_rxn_no'] = irrev_rxn_number current_organisms_info[current_model_name]['total_nodes'] = len( exchange_nodes) + len(irrev_lhs_nodes) + len(rev_lhs_nodes) current_organisms_info[current_model_name]['model_rxns'] = rxns_in_model current_organisms_info[current_model_name][ 'reversible_back_rxn_no'] = rev_back_rxn_number current_organisms_info[current_model_name]['metabolites'] = mets_in_model all_organisms_info.update(current_organisms_info) return all_organisms_info, namemap