def test_parameterized_condition_table(minimal_sbml_model): condition_df = pd.DataFrame( data={ CONDITION_ID: ['condition1', 'condition2', 'condition3'], CONDITION_NAME: ['', 'Condition 2', ''], 'dynamicParameter1': ['dynamicOverride1_1', 'dynamicOverride1_2', 0] }) condition_df.set_index(CONDITION_ID, inplace=True) measurement_df = pd.DataFrame( data={ SIMULATION_CONDITION_ID: ['condition1', 'condition2', 'condition3'], OBSERVABLE_ID: ['obs1', 'obs2', 'obs1'], OBSERVABLE_PARAMETERS: '', NOISE_PARAMETERS: '', }) parameter_df = pd.DataFrame( data={ PARAMETER_ID: ['dynamicOverride1_1', 'dynamicOverride1_2'], PARAMETER_NAME: ['', '...'], ESTIMATE: [1, 1] }) parameter_df.set_index(PARAMETER_ID, inplace=True) document, model = minimal_sbml_model model.createParameter().setId('dynamicParameter1') assert petab.get_model_parameters(model) == ['dynamicParameter1'] actual = petab.get_optimization_to_simulation_parameter_mapping( measurement_df=measurement_df, condition_df=condition_df, parameter_df=parameter_df, sbml_model=model) expected = [({}, { 'dynamicParameter1': 'dynamicOverride1_1' }, {}, { 'dynamicParameter1': LIN }), ({}, { 'dynamicParameter1': 'dynamicOverride1_2' }, {}, { 'dynamicParameter1': LIN }), ({}, { 'dynamicParameter1': 0 }, {}, { 'dynamicParameter1': LIN })] assert actual == expected
def test_parameterized_condition_table(minimal_sbml_model): condition_df = pd.DataFrame( data={ 'conditionId': ['condition1', 'condition2', 'condition3'], 'conditionName': ['', 'Condition 2', ''], 'dynamicParameter1': ['dynamicOverride1_1', 'dynamicOverride1_2', 0] }) condition_df.set_index('conditionId', inplace=True) measurement_df = pd.DataFrame( data={ 'simulationConditionId': ['condition1', 'condition2', 'condition3'], 'observableId': ['obs1', 'obs2', 'obs1'], 'observableParameters': '', 'noiseParameters': '', }) parameter_df = pd.DataFrame( data={ 'parameterId': ['dynamicOverride1_1', 'dynamicOverride1_2'], 'parameterName': ['', '...'], # ... }) parameter_df.set_index('parameterId', inplace=True) document, model = minimal_sbml_model model.createParameter().setId('dynamicParameter1') assert petab.get_model_parameters(model) == ['dynamicParameter1'] actual = petab.get_optimization_to_simulation_parameter_mapping( measurement_df=measurement_df, condition_df=condition_df, parameter_df=parameter_df, sbml_model=model) expected = [({}, { 'dynamicParameter1': 'dynamicOverride1_1' }), ({}, { 'dynamicParameter1': 'dynamicOverride1_2' }), ({}, { 'dynamicParameter1': 0 })] assert actual == expected
def test_parameterized_condition_table_changed_scale( minimal_sbml_model): """Test overriding a dynamic parameter `overridee` with - a log10 parameter to be estimated (condition 1) - lin parameter not estimated (condition2) - log10 parameter not estimated (condition 3) - constant override (condition 4)""" # overridden parameter overridee_id = "overridee" # set up model document, model = minimal_sbml_model p = model.createParameter() p.setId(overridee_id) p.setValue(2.0) assert petab.get_model_parameters(model) == [overridee_id] assert petab.get_model_parameters(model, with_values=True) \ == {overridee_id: 2.0} # set up condition table condition_df = pd.DataFrame(data={ CONDITION_ID: ['condition1', 'condition2', 'condition3', 'condition4'], overridee_id: ['dynamicOverrideLog10', 'fixedOverrideLin', 'fixedOverrideLog10', 10.0] }) condition_df.set_index('conditionId', inplace=True) # set up measurement table measurement_df = pd.DataFrame(data={ SIMULATION_CONDITION_ID: ['condition1', 'condition2', 'condition3', 'condition4'], OBSERVABLE_ID: ['obs1', 'obs2', 'obs1', 'obs2'], OBSERVABLE_PARAMETERS: '', NOISE_PARAMETERS: '', }) # set up parameter table parameter_df = pd.DataFrame(data={ PARAMETER_ID: ['dynamicOverrideLog10', 'fixedOverrideLin', 'fixedOverrideLog10'], ESTIMATE: [1, 0, 0], NOMINAL_VALUE: [np.nan, -2, 1000], PARAMETER_SCALE: [LOG10, LIN, LOG10] }) parameter_df.set_index(PARAMETER_ID, inplace=True) # test without preequilibration condition; unscaled known parameters actual = petab.get_optimization_to_simulation_parameter_mapping( measurement_df=measurement_df, condition_df=condition_df, parameter_df=parameter_df, sbml_model=model ) expected = [ ({}, {overridee_id: 'dynamicOverrideLog10'}, {}, {overridee_id: LOG10}), ({}, {overridee_id: -2.0}, {}, {overridee_id: LIN}), # not scaled: ({}, {overridee_id: 1000.0}, {}, {overridee_id: LIN}), ({}, {overridee_id: 10.0}, {}, {overridee_id: LIN}) ] assert actual == expected # test without preequilibration condition; scaled known parameters actual = petab.get_optimization_to_simulation_parameter_mapping( measurement_df=measurement_df, condition_df=condition_df, parameter_df=parameter_df, sbml_model=model, scaled_parameters=True ) expected = [ ({}, {overridee_id: 'dynamicOverrideLog10'}, {}, {overridee_id: LOG10}), ({}, {overridee_id: -2.0}, {}, {overridee_id: LIN}), # scaled fixedOverrideLog10: ({}, {overridee_id: 3.0}, {}, {overridee_id: LOG10}), ({}, {overridee_id: 10.0}, {}, {overridee_id: LIN}) ] assert actual == expected # Add preeq condition measurement_df[PREEQUILIBRATION_CONDITION_ID] = \ ['condition1', 'condition1', 'condition3', 'condition3'] actual = petab.get_optimization_to_simulation_parameter_mapping( measurement_df=measurement_df, condition_df=condition_df, parameter_df=parameter_df, sbml_model=model) expected = [ ({overridee_id: 'dynamicOverrideLog10'}, {overridee_id: 'dynamicOverrideLog10'}, {overridee_id: LOG10}, {overridee_id: LOG10}), ({overridee_id: 'dynamicOverrideLog10'}, {overridee_id: -2.0}, {overridee_id: LOG10}, {overridee_id: LIN}), # not rescaled: ({overridee_id: 1000.0}, {overridee_id: 1000.0}, {overridee_id: LIN}, {overridee_id: LIN}), ({overridee_id: 1000.0}, {overridee_id: 10.0}, {overridee_id: LIN}, {overridee_id: LIN})] assert actual == expected
def test_parameterized_condition_table_changed_scale(minimal_sbml_model): """Test overriding a dynamic parameter `overridee` with - a log10 parameter to be estimated (condition 1) - lin parameter not estimated (condition2) - log10 parameter not estimated (condition 3) - constant override (condition 4)""" document, model = minimal_sbml_model model.createParameter().setId('overridee') assert petab.get_model_parameters(model) == ['overridee'] condition_df = pd.DataFrame( data={ 'conditionId': ['condition1', 'condition2', 'condition3', 'condition4'], 'conditionName': '', 'overridee': [ 'dynamicOverrideLog10', 'fixedOverrideLin', 'fixedOverrideLog10', 10.0 ] }) condition_df.set_index('conditionId', inplace=True) measurement_df = pd.DataFrame( data={ 'simulationConditionId': ['condition1', 'condition2', 'condition3', 'condition4'], 'observableId': ['obs1', 'obs2', 'obs1', 'obs2'], 'observableParameters': '', 'noiseParameters': '', }) parameter_df = pd.DataFrame( data={ 'parameterId': [ 'dynamicOverrideLog10', 'fixedOverrideLin', 'fixedOverrideLog10' ], 'parameterName': '', 'estimate': [1, 0, 0], 'nominalValue': [np.nan, 2, -2], 'parameterScale': ['log10', 'lin', 'log10'] }) parameter_df.set_index('parameterId', inplace=True) actual_par_map = \ petab.get_optimization_to_simulation_parameter_mapping( measurement_df=measurement_df, condition_df=condition_df, parameter_df=parameter_df, sbml_model=model ) actual_scale_map = petab.get_optimization_to_simulation_scale_mapping( parameter_df=parameter_df, measurement_df=measurement_df, mapping_par_opt_to_par_sim=actual_par_map) expected_par_map = [ ({}, { 'overridee': 'dynamicOverrideLog10' }), ({}, { 'overridee': 2.0 }), # rescaled: ({}, { 'overridee': 0.01 }), ({}, { 'overridee': 10.0 }) ] expected_scale_map = [({}, { 'overridee': 'log10' }), ({}, { 'overridee': 'lin' }), ({}, { 'overridee': 'lin' }), ({}, { 'overridee': 'lin' })] assert actual_par_map == expected_par_map assert actual_scale_map == expected_scale_map # Add preeq condition measurement_df['preequilibrationConditionId'] = \ ['condition1', 'condition1', 'condition3', 'condition3'] actual_par_map = \ petab.get_optimization_to_simulation_parameter_mapping( measurement_df=measurement_df, condition_df=condition_df, parameter_df=parameter_df, sbml_model=model ) actual_scale_map = petab.get_optimization_to_simulation_scale_mapping( parameter_df=parameter_df, measurement_df=measurement_df, mapping_par_opt_to_par_sim=actual_par_map) expected_par_map = [ ({ 'overridee': 'dynamicOverrideLog10' }, { 'overridee': 'dynamicOverrideLog10' }), ({ 'overridee': 'dynamicOverrideLog10' }, { 'overridee': 2.0 }), # rescaled: ({ 'overridee': 0.01 }, { 'overridee': 0.01 }), ({ 'overridee': 0.01 }, { 'overridee': 10.0 }) ] expected_scale_map = [({ 'overridee': 'log10' }, { 'overridee': 'log10' }), ({ 'overridee': 'log10' }, { 'overridee': 'lin' }), ({ 'overridee': 'lin' }, { 'overridee': 'lin' }), ({ 'overridee': 'lin' }, { 'overridee': 'lin' })] assert actual_par_map == expected_par_map assert actual_scale_map == expected_scale_map