Source code for padmet.utils.connection.padmet_to_matrix

# -*- coding: utf-8 -*-
"""
Description:
    Create a stoichiometry matrix from a padmet file.

    The columns represent the reactions and rows represent metabolites.

    S[i,j] contains the quantity of metabolite 'i' produced (negative for consumed)
    by reaction 'j'.

::

    usage:
        padmet padmet_to_matrix --padmet=FILE --output=FILE

    option:
        -h --help    Show help.
        --padmet=FILE    path to the padmet file to convert.
        --output=FILE    path to the output file, col: rxn, row: metabo, sep = "\t".
"""

import docopt

from padmet.classes import PadmetSpec


[docs] def command_help(): """ Show help for analysis command. """ print(docopt.docopt(__doc__))
[docs] def padmet_to_matrix_cli(command_args): args = docopt.docopt(__doc__, argv=command_args) padmet_file = args["--padmet"] output = args["--output"] padmet = PadmetSpec(padmet_file) padmet_to_matrix(padmet, output)
[docs] def padmet_to_matrix(padmet, output): """ Create a stoichiometry matrix from a padmet file. The columns represent the reactions and rows represent metabolites. S[i,j] contains the quantity of metabolite 'i' produced (negative for consumed) by reaction 'j'. Parameters ---------- padmet: padmet.PadmetSpec padmet instance output: path to the output file, col: rxn, row: metabo, sep = "\t" """ all_metabolites = sorted(set([rlt.id_out for rlt in padmet.getAllRelation() if rlt.type in ["consumes","produces"]])) all_reactions = sorted([node.id for node in list(padmet.dicOfNode.values()) if node.type == "reaction"]) #col = reactions, row = metabolites matrix_dict = {} for met in all_metabolites: matrix_dict[met] = {} all_cp_rlts = [rlt for rlt in padmet.dicOfRelationOut[met] if rlt.type in ["consumes","produces"]] for rlt in all_cp_rlts: try: stoich = int(rlt.misc["STOICHIOMETRY"][0]) except ValueError: stoich = 1 if rlt.type == "consumes": stoich = stoich * -1 matrix_dict[met][rlt.id_in] = stoich with open(output, 'w') as f: header = ["metabolites-reactions"] + all_reactions f.write("\t".join(header)+"\n") for met_id in all_metabolites: line = [met_id] for rxn_id in all_reactions: try: line.append(str(matrix_dict[met_id][rxn_id])) except KeyError: line.append("0") f.write("\t".join(line)+"\n")