@@ -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):
224231def 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