Example #1
0
def parse_group_sbml(groups_sbml, chebi):
    doc = libsbml.SBMLReader().readSBMLFromFile(groups_sbml)
    groups_model = doc.getModel()
    groups_plugin = groups_model.getPlugin("groups")
    r_id2g_id, s_id2gr_id, ub_sps = {}, {}, set()
    if groups_plugin:
        for group in groups_plugin.getListOfGroups():
            gr_members = [it.getIdRef() for it in group.getListOfMembers()]
            gr_id, gr_name = group.getId(), group.getName()
            gr_sbo = group.getSBOTermID()
            gr_type = next(get_annotations(group, libsbml.BQB_IS_DESCRIBED_BY), None)
            if not gr_type:
                continue
            if SBO_BIOCHEMICAL_REACTION == gr_sbo:
                if GROUP_TYPE_EQUIV == gr_type:
                    for r_id in gr_members:
                        r_id2g_id[r_id] = gr_id, gr_name, len(gr_members)
            elif SBO_CHEMICAL_MACROMOLECULE == gr_sbo:
                if GROUP_TYPE_UBIQUITOUS == gr_type:
                    ub_sps = set(gr_members)
                elif GROUP_TYPE_EQUIV == gr_type:
                    for s_id in gr_members:
                        term = get_chebi_term_by_annotation(group, chebi)
                        s_id2gr_id[s_id] = gr_id, term if term else gr_name, len(gr_members)
    else:
        raise GrPlError()
    return r_id2g_id, s_id2gr_id, ub_sps
Example #2
0
def parse_group_sbml(groups_sbml, chebi):
    doc = libsbml.SBMLReader().readSBMLFromFile(groups_sbml)
    groups_model = doc.getModel()
    groups_plugin = groups_model.getPlugin("groups")
    r_id2g_id, s_id2gr_id, ub_sps = {}, {}, set()
    if groups_plugin:
        for group in groups_plugin.getListOfGroups():
            gr_members = [it.getIdRef() for it in group.getListOfMembers()]
            gr_id, gr_name = group.getId(), group.getName()
            gr_sbo = group.getSBOTermID()
            gr_type = next(get_annotations(group, libsbml.BQB_IS_DESCRIBED_BY), None)
            if not gr_type:
                continue
            if SBO_BIOCHEMICAL_REACTION == gr_sbo:
                if GROUP_TYPE_EQUIV == gr_type:
                    for r_id in gr_members:
                        r_id2g_id[r_id] = gr_id, gr_name, len(gr_members)
            elif SBO_CHEMICAL_MACROMOLECULE == gr_sbo:
                if GROUP_TYPE_UBIQUITOUS == gr_type:
                    ub_sps = set(gr_members)
                elif GROUP_TYPE_EQUIV == gr_type:
                    for s_id in gr_members:
                        term = get_chebi_term_by_annotation(group, chebi)
                        s_id2gr_id[s_id] = gr_id, term if term else gr_name, len(gr_members)
    else:
        raise GrPlError()
    return r_id2g_id, s_id2gr_id, ub_sps
Example #3
0
def serialize_generalization(r_id2clu, s_id2clu, sbml, chebi, path):
    doc = libsbml.SBMLReader().readSBML(sbml)
    model = doc.getModel()
    groups_plugin = model.getPlugin("groups")
    clu2r_ids, clu2s_ids = invert_map(r_id2clu), invert_map(s_id2clu)
    wb = openpyxl.Workbook()
    ws = wb.create_sheet(0, "Metabolite Groups")
    row = 1
    add_values(ws, row, 1, ["Group Id", "Group Name", "Group CHEBI", "Id", "Name", "Compartment", "CHEBI"], HEADER_STYLE)
    row += 1
    processed_s_ids = set()
    for (g_id, ch_term), s_ids in sorted(clu2s_ids.items(), key=lambda ((g_id, _), s_ids): g_id):
        group = groups_plugin.getGroup(g_id)
        add_values(ws, row, 1, [g_id, group.getName(), ch_term.get_id() if ch_term else ''])
        for s_id in sorted(s_ids, key=lambda s_id: s_id[s_id.find('__'):]):
            species = model.getSpecies(s_id)
            ch_term = get_chebi_term_by_annotation(species, chebi)
            add_values(ws, row, 4, [s_id, species.getName(), model.getCompartment(species.getCompartment()).getName(),
                                    ch_term.get_id() if ch_term else ''])
            row += 1
        processed_s_ids |= s_ids
Example #4
0
        add_values(ws, row, 1, [g_id, group.getName(), ch_term.get_id() if ch_term else ''])
        for s_id in sorted(s_ids, key=lambda s_id: s_id[s_id.find('__'):]):
            species = model.getSpecies(s_id)
            ch_term = get_chebi_term_by_annotation(species, chebi)
            add_values(ws, row, 4, [s_id, species.getName(), model.getCompartment(species.getCompartment()).getName(),
                                    ch_term.get_id() if ch_term else ''])
            row += 1
        processed_s_ids |= s_ids
    ws = wb.create_sheet(1, "Ungrouped metabolites")
    row = 1
    add_values(ws, row, 1, ["Id", "Name", "Compartment", "CHEBI"], HEADER_STYLE)
    row += 1
    unm_l = 0
    for species in sorted(model.getListOfSpecies(), key=lambda s: s.getId()[s.getId().find('__'):]):
        if species.getId() not in processed_s_ids:
            ch_term = get_chebi_term_by_annotation(species, chebi)
            add_values(ws, row, 1, [species.getId(), species.getName(),
                                    model.getCompartment(species.getCompartment()).getName(),
                                    ch_term.get_id() if ch_term else ''])
            row += 1
            unm_l += 1
    print unm_l

    ws = wb.create_sheet(2, "Reaction Groups")
    row = 1
    add_values(ws, row, 1, ["Group Id", "Id", "Name", "Formula", "Gene Association"], HEADER_STYLE)
    row += 1
    processed_r_ids = set()
    for (g_id, g_name), r_ids in sorted(clu2r_ids.items(), key=lambda ((g_id, g_name), _): g_id):
        add_values(ws, row, 1, [g_id])
        for r_id in sorted(r_ids, key=lambda r_id: r_id[r_id.find('__'):]):