diff --git a/xbanalysis/model/fbc_gene_product.py b/xbanalysis/model/fbc_gene_product.py index efd547704b0f24e93b972cd059221cafac9b9614..2551c33eda299145c215bf22e9473020e2ad2277 100644 --- a/xbanalysis/model/fbc_gene_product.py +++ b/xbanalysis/model/fbc_gene_product.py @@ -8,5 +8,8 @@ class FbcGeneProduct: def __init__(self, s_fbc_gene_product): self.id = s_fbc_gene_product.name - self.name = s_fbc_gene_product.get('name', '') + if ('name' in s_fbc_gene_product) and (type(s_fbc_gene_product['name']) == str): + self.name = s_fbc_gene_product['name'] + else: + self.name = self.id self.label = s_fbc_gene_product['label'] diff --git a/xbanalysis/model/fbc_objective.py b/xbanalysis/model/fbc_objective.py index 4db5d45c8f4918c9ce01f69dd7b053ac60c57bc4..a0a8bd0d8b81b54eac6478ffb487cbf39910d113 100644 --- a/xbanalysis/model/fbc_objective.py +++ b/xbanalysis/model/fbc_objective.py @@ -10,10 +10,13 @@ class FbcObjective: def __init__(self, s_fbc_objective): self.id = s_fbc_objective.name - self.name = s_fbc_objective.get('name', '') + if ('name' in s_fbc_objective) and (type(s_fbc_objective['name']) == str): + self.name = s_fbc_objective['name'] + else: + self.name = self.id self.direction = s_fbc_objective['type'] self.active = s_fbc_objective['active'] - self.coefficiants = {} + self.coefficients = {} for reac_ref in sbmlxdf.record_generator(s_fbc_objective['fluxObjectives']): params = sbmlxdf.extract_params(reac_ref) - self.coefficiants[params['reac']] = float(params['coef']) + self.coefficients[params['reac']] = float(params['coef']) diff --git a/xbanalysis/model/xba_compartment.py b/xbanalysis/model/xba_compartment.py index d243910390f842acb803df27ad14c07e5be9896e..6fabc0e718a91bb182d2122c54bf8dc26ee75db4 100644 --- a/xbanalysis/model/xba_compartment.py +++ b/xbanalysis/model/xba_compartment.py @@ -13,6 +13,10 @@ class XbaCompartment: def __init__(self, s_compartment): self.id = s_compartment.name + if ('name' in s_compartment) and (type(s_compartment['name']) == str): + self.name = s_compartment['name'] + else: + self.name = self.id self.name = s_compartment.get('name', self.id) if 'size' in s_compartment: self.size = s_compartment['size'] diff --git a/xbanalysis/model/xba_function.py b/xbanalysis/model/xba_function.py index 950bea166abd45635b76c06676256a3f7a8d208d..ba93f1f3a5b93929a0a0d8284af421430a1a430d 100644 --- a/xbanalysis/model/xba_function.py +++ b/xbanalysis/model/xba_function.py @@ -11,6 +11,10 @@ class XbaFunction: def __init__(self, s_function): self.id = s_function.name + if ('name' in s_function) and (type(s_function['name']) == str): + self.name = s_function['name'] + else: + self.name = self.id self.name = s_function.get('name', self.id) self.math = s_function['math'] diff --git a/xbanalysis/model/xba_model.py b/xbanalysis/model/xba_model.py index f4b3c5441114537d3cf198dbdc45d4f32fc3c601..f065b9c2d7ef7c30d1cce6301c4ca2cd5c150afe 100644 --- a/xbanalysis/model/xba_model.py +++ b/xbanalysis/model/xba_model.py @@ -33,18 +33,18 @@ class XbaModel: print(f'{sbml_file} seems not to be a valid SBML model') return model_dict = sbml_model.to_df() + self.id = model_dict['modelAttrs'].id + self.name = model_dict['modelAttrs'].get('name', self.id) self.unit_defs = {udid: XbaUnitDef(row) for udid, row in model_dict['unitDefs'].iterrows()} self.compartments = {cid: XbaCompartment(row) for cid, row in model_dict['compartments'].iterrows()} self.parameters = {pid: XbaParameter(row) for pid, row in model_dict['parameters'].iterrows()} + self.functions = {} if 'funcDefs' in model_dict: self.functions = {fid: XbaFunction(row) for fid, row in model_dict['funcDefs'].iterrows()} - else: - self.functions = {} - self.species = {sid: XbaSpecies(row) for sid, row in model_dict['species'].iterrows()} self.reactions = {rid: XbaReaction(row, self.species, self.functions, self.compartments) diff --git a/xbanalysis/model/xba_parameter.py b/xbanalysis/model/xba_parameter.py index b86a0c38fc2d8932c164cad181a636a1a0075475..b73c077fed3c372949c475b8638b0fb36cfe8e30 100644 --- a/xbanalysis/model/xba_parameter.py +++ b/xbanalysis/model/xba_parameter.py @@ -9,7 +9,10 @@ class XbaParameter: def __init__(self, s_parameter): self.id = s_parameter.name - self.name = s_parameter.get('name', self.id) + if ('name' in s_parameter) and (type(s_parameter['name']) == str): + self.name = s_parameter['name'] + else: + self.name = self.id self.value = s_parameter['value'] self.constant = s_parameter['constant'] self.units = s_parameter['units'] diff --git a/xbanalysis/model/xba_reaction.py b/xbanalysis/model/xba_reaction.py index 619520b1e09a0f3dafddf5e6bb5d2c90267b0d95..20cb42cade069cca7127560ae0e79c64f8faac06 100644 --- a/xbanalysis/model/xba_reaction.py +++ b/xbanalysis/model/xba_reaction.py @@ -14,7 +14,10 @@ class XbaReaction: def __init__(self, s_reaction, species, functions, compartments): self.id = s_reaction.name - self.name = s_reaction.get('name', self.id) + if ('name' in s_reaction) and (type(s_reaction['name']) == str): + self.name = s_reaction['name'] + else: + self.name = self.id if ('sboterm' in s_reaction) and (type(s_reaction['sboterm']) is str): self.sboterm = SboTerm(s_reaction['sboterm']) self.reaction_string = s_reaction['reactionString'] diff --git a/xbanalysis/model/xba_species.py b/xbanalysis/model/xba_species.py index 71706e7cd7f43d3da3d8dd9201a765ce19fe7f34..f8f9449eb626275a111f3af7390c6f05e864091a 100644 --- a/xbanalysis/model/xba_species.py +++ b/xbanalysis/model/xba_species.py @@ -12,7 +12,10 @@ class XbaSpecies: def __init__(self, s_species): self.id = s_species.name - self.name = s_species.get('name', self.id) + if ('name' in s_species) and (type(s_species['name']) == str): + self.name = s_species['name'] + else: + self.name = self.id # set sboterm to 000247 to support Flux Balance Analysis self.sboterm = SboTerm(s_species.get('sboterm', 'SBO:0000247')) self.compartment = s_species['compartment'] @@ -20,8 +23,12 @@ class XbaSpecies: self.boundary = s_species['boundaryCondition'] if 'initialConcentration' in s_species: self.initial_conc = s_species['initialConcentration'] - if 'units' in s_species: + if 'substanceUnits' in s_species: self.units = s_species['substanceUnits'] + if 'fbcCharge' in s_species: + self.charge = s_species['fbcCharge'] + if 'fbcChemicalFormula' in s_species: + self.formula = s_species['fbcChemicalFormula'] if 'xmlAnnotation' in s_species: attrs = sbmlxdf.extract_xml_attrs(s_species['xmlAnnotation'], ns=xml_gba_ns, token='molecule') if 'weight_Da' in attrs: diff --git a/xbanalysis/model/xba_unit_def.py b/xbanalysis/model/xba_unit_def.py index 5cd13264b0ddc70d79a89a86231c4b4b69926dda..72a118006cb59fc9138940a4dd408b1688fa654e 100644 --- a/xbanalysis/model/xba_unit_def.py +++ b/xbanalysis/model/xba_unit_def.py @@ -11,7 +11,10 @@ class XbaUnitDef: def __init__(self, s_unit_def): self.id = s_unit_def.name - self.name = s_unit_def.get('name', self.id) + if ('name' in s_unit_def) and (type(s_unit_def['name']) == str): + self.name = s_unit_def['name'] + else: + self.name = self.id self.units = [XbaUnit(sbmlxdf.extract_params(u)) for u in sbmlxdf.record_generator(s_unit_def['units'])] diff --git a/xbanalysis/problems/fba_problem.py b/xbanalysis/problems/fba_problem.py index bebc68bf899fad87c14fbe219fd8a5611a7b93db..7c328c610cf8386e1f28129e4d33bc903d2f9942 100644 --- a/xbanalysis/problems/fba_problem.py +++ b/xbanalysis/problems/fba_problem.py @@ -1,3 +1,7 @@ +"""Implementation of FbaProblem Class. + +Peter Schubert, HHU Duesseldorf, September 2022 +""" import numpy as np import math from scipy import sparse @@ -70,7 +74,7 @@ class FbaProblem: if fbc_obj.active is True: # self.obj_id = fbc_obj.id self.obj_dir = fbc_obj.direction - self.objective = fbc_obj.coefficiants + self.objective = fbc_obj.coefficients break # lp problem will only be created once required.