Skip to content

Commit 0512753

Browse files
Fabian Fröhlichdweindl
andauthored
omit measurement processing if not relevant for parameter mapping (#117)
* omit measurement processing if not relevant * Update petab/parameter_mapping.py Co-authored-by: Daniel Weindl <dweindl@users.noreply.github.com> * remove whitespace Co-authored-by: Daniel Weindl <dweindl@users.noreply.github.com>
1 parent 9d534f2 commit 0512753

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

petab/parameter_mapping.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,15 @@ def _map_condition(packed_args):
179179
fill_fixed_parameters,
180180
allow_timepoint_specific_numeric_noise_parameters) = packed_args
181181

182-
cur_measurement_df = measurements.get_rows_for_condition(
183-
measurement_df, condition)
182+
cur_measurement_df = None
183+
# Get the condition specific measurements for the current condition, but
184+
# only if relevant for parameter mapping
185+
if (OBSERVABLE_PARAMETERS in measurement_df
186+
and measurement_df[OBSERVABLE_PARAMETERS].notna().any()) \
187+
or (NOISE_PARAMETERS in measurement_df
188+
and measurement_df[NOISE_PARAMETERS].notna().any()):
189+
cur_measurement_df = measurements.get_rows_for_condition(
190+
measurement_df, condition)
184191

185192
if PREEQUILIBRATION_CONDITION_ID not in condition \
186193
or not isinstance(condition[PREEQUILIBRATION_CONDITION_ID], str) \
@@ -224,7 +231,7 @@ def _map_condition(packed_args):
224231
def get_parameter_mapping_for_condition(
225232
condition_id: str,
226233
is_preeq: bool,
227-
cur_measurement_df: pd.DataFrame,
234+
cur_measurement_df: Optional[pd.DataFrame],
228235
sbml_model: libsbml.Model,
229236
condition_df: pd.DataFrame,
230237
parameter_df: pd.DataFrame = None,
@@ -244,7 +251,8 @@ def get_parameter_mapping_for_condition(
244251
is_preeq:
245252
If ``True``, output parameters will not be mapped
246253
cur_measurement_df:
247-
Measurement sub-table for current condition
254+
Measurement sub-table for current condition, can be ``None`` if
255+
not relevant for parameter mapping
248256
condition_df:
249257
PEtab condition DataFrame
250258
parameter_df:
@@ -278,10 +286,11 @@ def get_parameter_mapping_for_condition(
278286
Second dictionary mapping model parameter IDs to their scale.
279287
``NaN`` is used where no mapping exists.
280288
"""
281-
_perform_mapping_checks(
282-
cur_measurement_df,
283-
allow_timepoint_specific_numeric_noise_parameters= # noqa: E251,E501
284-
allow_timepoint_specific_numeric_noise_parameters)
289+
if cur_measurement_df is not None:
290+
_perform_mapping_checks(
291+
cur_measurement_df,
292+
allow_timepoint_specific_numeric_noise_parameters= # noqa: E251,E501
293+
allow_timepoint_specific_numeric_noise_parameters)
285294

286295
if simulation_parameters is None:
287296
simulation_parameters = sbml.get_model_parameters(sbml_model,
@@ -298,7 +307,8 @@ def get_parameter_mapping_for_condition(
298307

299308
# not strictly necessary for preequilibration, be we do it to have
300309
# same length of parameter vectors
301-
_apply_output_parameter_overrides(par_mapping, cur_measurement_df)
310+
if cur_measurement_df is not None:
311+
_apply_output_parameter_overrides(par_mapping, cur_measurement_df)
302312

303313
if not is_preeq:
304314
handle_missing_overrides(par_mapping, warn=warn_unmapped)

0 commit comments

Comments
 (0)