コード例 #1
0
ファイル: metabolite.py プロジェクト: hongzhonglu/GEMEditor
def parse_metabolites(metabolites_node,
                      model=None,
                      progress=None,
                      use_fbc=True):

    species_node = metabolites_node.find(sbml3_listOfSpecies)

    if species_node is None:
        return
    elif progress is None:
        pass
    elif not progress.wasCanceled():
        progress.setLabelText("Reading metabolites...")
        progress.setRange(0, len(species_node))
    else:
        return

    metabolites = []
    for i, xml_element in enumerate(species_node.iterfind(sbml3_species)):

        if progress is None:
            pass
        elif not progress.wasCanceled():
            progress.setValue(i)
            QApplication.processEvents()
        else:
            return

        new_metabolite = Metabolite(id=clip(xml_element.get("id"), "M_"),
                                    name=xml_element.get("name"),
                                    compartment=xml_element.get("compartment"))

        if use_fbc:
            formula = xml_element.get(fbc_chemicalFormula)
            if formula:
                if re.match(formula_validator, formula):
                    new_metabolite.formula = formula
                else:
                    # Todo: Implement logging of errors
                    print("Formula '{}' for {} is invalid!".format(
                        formula, new_metabolite.id))

            charge = xml_element.get(fbc_charge)
            if charge is not None:
                new_metabolite.charge = int(charge)
            # Defaults to the standard value of 0 if charge not set in file

        annotate_element_from_xml(xml_element, new_metabolite)

        metabolites.append(new_metabolite)

    if model is not None:
        model.add_metabolites(metabolites)

    return metabolites
コード例 #2
0
ファイル: test_cobra.py プロジェクト: hongzhonglu/GEMEditor
    def test_updating(self):
        model = Model()
        met1 = Metabolite(id="met1", formula="H2O", name="Water", charge=0., compartment="c")
        react1 = Reaction(id="react1", name="test2", subsystem="test2", lower_bound=0., upper_bound=1000.)
        react1.add_metabolites({met1: -1})

        model.add_metabolites([met1])
        model.add_reactions([react1])
        model.setup_tables()

        assert model.QtReactionTable.rowCount() == 1
        assert model.QtMetaboliteTable.rowCount() == 1

        # Check that content is right
        for i, element in enumerate(model.QtMetaboliteTable.header):
            assert str(getattr(met1, element.lower())) == model.QtMetaboliteTable.item(0, i).text()

        # Check that metabolite id is in table
        assert met1.id in model.QtReactionTable.item(0, 2).text()

        # Change metabolite
        met1.id = "new_id"
        met1.name = "new_name"
        met1.formula = "H2O2"
        met1.name = "None"
        met1.charge = 1.
        met1.compartment = "e"

        # Tables are out of sync
        for i, element in enumerate(model.QtMetaboliteTable.header):
            assert str(getattr(met1, element.lower())) != model.QtMetaboliteTable.item(0, i).text()

        # Check reaction table out of sync
        assert react1.id not in model.QtReactionTable.item(0, 2).text()

        model.gem_update_metabolites([met1])

        # Metabolite table updated
        for i, element in enumerate(model.QtMetaboliteTable.header):
            assert str(getattr(met1, element.lower())) == model.QtMetaboliteTable.item(0, i).text()

        # Reaction table updated
        assert met1.id in model.QtReactionTable.item(0, 2).text()