From 93d85517f4f9d207c4557de9fbdae4eaf1aabe73 Mon Sep 17 00:00:00 2001 From: Daniel Weindl Date: Mon, 4 Apr 2022 21:54:02 +0200 Subject: [PATCH] Fix SBML Rule handling logic (#120) Rules other than assignment rules were ignored so far --- petab/parameter_mapping.py | 4 +++- petab/sbml.py | 13 ++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/petab/parameter_mapping.py b/petab/parameter_mapping.py index 07225d71..19f69d83 100644 --- a/petab/parameter_mapping.py +++ b/petab/parameter_mapping.py @@ -399,11 +399,13 @@ def _apply_condition_parameters(par_mapping: ParMappingDict, if overridee_id == CONDITION_NAME: continue - # Species and compartments are handled elsewhere + # Species, compartments, and rule targets are handled elsewhere if sbml_model.getSpecies(overridee_id) is not None: continue if sbml_model.getCompartment(overridee_id) is not None: continue + if sbml_model.getRuleByVariable(overridee_id) is not None: + continue par_mapping[overridee_id] = core.to_float_if_float( condition_df.loc[condition_id, overridee_id]) diff --git a/petab/sbml.py b/petab/sbml.py index 9f4dc968..88dedd15 100644 --- a/petab/sbml.py +++ b/petab/sbml.py @@ -399,24 +399,23 @@ def get_sigmas(sbml_model: libsbml.Model, remove: bool = False) -> dict: def get_model_parameters(sbml_model: libsbml.Model, with_values=False ) -> Union[List[str], Dict[str, float]]: - """Return SBML model parameters which are not AssignmentRule - targets for observables or sigmas + """Return SBML model parameters which are not Rule targets Arguments: sbml_model: SBML model with_values: If False, returns list of SBML model parameter IDs which - are not AssignmentRule targets for observables or sigmas. If True, - returns a dictionary with those parameter IDs as keys and parameter - values from the SBML model as values. + are not Rule targets. If True, returns a dictionary with those + parameter IDs as keys and parameter values from the SBML model as + values. """ if not with_values: return [p.getId() for p in sbml_model.getListOfParameters() - if sbml_model.getAssignmentRuleByVariable(p.getId()) is None] + if sbml_model.getRuleByVariable(p.getId()) is None] return {p.getId(): p.getValue() for p in sbml_model.getListOfParameters() - if sbml_model.getAssignmentRuleByVariable(p.getId()) is None} + if sbml_model.getRuleByVariable(p.getId()) is None} def write_sbml(