Ejemplo n.º 1
0
    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
Ejemplo n.º 3
0
    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