From 12d5e8d650b7f5cc96782430a063f3f28a43a7ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Fr=C3=B6hlich?= Date: Mon, 1 Dec 2025 11:17:29 +0000 Subject: [PATCH 1/9] rename edata members --- .../ExampleEquilibrationLogic.ipynb | 6 +- .../GettingStartedExtended.ipynb | 2 +- include/amici/edata.h | 110 ++++---- .../amici/importers/petab/_petab_importer.py | 4 +- .../amici/importers/petab/v1/conditions.py | 4 +- python/sdist/amici/sim/sundials/_numpy.py | 24 +- python/sdist/amici/sim/sundials/_pandas.py | 8 +- .../test_compare_conservation_laws_sbml.py | 6 +- python/tests/test_jax.py | 2 +- python/tests/test_preequilibration.py | 40 +-- python/tests/test_sbml_import.py | 12 +- .../test_sbml_import_special_functions.py | 12 +- python/tests/test_swig_interface.py | 4 +- src/edata.cpp | 240 +++++++++--------- src/hdf5.cpp | 24 +- src/model.cpp | 56 ++-- src/rdata.cpp | 14 +- swig/edata.i | 20 +- tests/cpp/jakstat_adjoint/tests1.cpp | 16 +- tests/cpp/unittests/testExpData.cpp | 116 ++++----- tests/performance/test.py | 4 +- 21 files changed, 358 insertions(+), 366 deletions(-) diff --git a/doc/examples/example_steady_states/ExampleEquilibrationLogic.ipynb b/doc/examples/example_steady_states/ExampleEquilibrationLogic.ipynb index e84146c6b8..ce8c03c49d 100644 --- a/doc/examples/example_steady_states/ExampleEquilibrationLogic.ipynb +++ b/doc/examples/example_steady_states/ExampleEquilibrationLogic.ipynb @@ -470,7 +470,7 @@ "source": [ "# create edata, with 3 timepoints and 2 observables:\n", "edata = ExpData(2, 0, 0, np.array([0.0, 0.1, 1.0]))\n", - "edata.set_observed_data([1.8] * 6)\n", + "edata.set_measurements([1.8] * 6)\n", "edata.fixed_parameters = np.array([3.0, 5.0])\n", "# set parameters for pre-equilibration\n", "edata.fixed_parameters_pre_equilibration = np.array([0.0, 2.0])\n", @@ -765,7 +765,7 @@ "# by setting an infinity timepoint\n", "# and creatíng an edata object, which is needed for adjoint computation\n", "edata = ExpData(2, 0, 0, np.array([float(\"inf\")]))\n", - "edata.set_observed_data([1.8] * 2)\n", + "edata.set_measurements([1.8] * 2)\n", "edata.fixed_parameters = np.array([3.0, 5.0])\n", "\n", "model_reduced.set_steady_state_sensitivity_mode(\n", @@ -853,7 +853,7 @@ "# No post-equilibration this time.\n", "# create edata, with 3 timepoints and 2 observables:\n", "edata = ExpData(2, 0, 0, np.array([0.0, 0.1, 1.0]))\n", - "edata.set_observed_data([1.8] * 6)\n", + "edata.set_measurements([1.8] * 6)\n", "edata.fixed_parameters = np.array([3.0, 5.0])\n", "# set parameters for pre-equilibration\n", "edata.fixed_parameters_pre_equilibration = np.array([0.0, 2.0])\n", diff --git a/doc/examples/getting_started_extended/GettingStartedExtended.ipynb b/doc/examples/getting_started_extended/GettingStartedExtended.ipynb index fa192e24bc..3592dc47b5 100644 --- a/doc/examples/getting_started_extended/GettingStartedExtended.ipynb +++ b/doc/examples/getting_started_extended/GettingStartedExtended.ipynb @@ -1135,7 +1135,7 @@ "edata.fixed_parameters = model.get_fixed_parameters()\n", "# set sigma to 1.0 except for observable 5, so that p[7] is used instead\n", "# (if we have sigma parameterized, the corresponding ExpData entries must NaN, otherwise they will override the parameter)\n", - "edata.set_observed_data_std_dev(\n", + "edata.set_measurement_error(\n", " rdata[\"t\"] * 0 + np.nan,\n", " list(model.get_observable_ids()).index(\"observable_x1withsigma\"),\n", ")\n", diff --git a/include/amici/edata.h b/include/amici/edata.h index 9382d12899..432bca7804 100644 --- a/include/amici/edata.h +++ b/include/amici/edata.h @@ -73,20 +73,20 @@ class ExpData : public SimulationParameters { * @param nztrue Number of event outputs * @param nmaxevent Maximal number of events to track * @param ts Timepoints (dimension: nt) - * @param observed_data observed data (dimension: nt x nytrue, row-major) - * @param observed_data_std_dev standard deviation of observed data + * @param my measurements (dimension: nt x nytrue, row-major) + * @param sigma_y standard deviation of measurements * (dimension: nt x nytrue, row-major) - * @param observed_events observed events + * @param mz event measurements + * (dimension: nmaxevents x nztrue, row-major) + * @param sigmaz standard deviation of event measurements * (dimension: nmaxevents x nztrue, row-major) - * @param observed_events_std_dev standard deviation of observed - * events/roots (dimension: nmaxevents x nztrue, row-major) */ ExpData( int nytrue, int nztrue, int nmaxevent, std::vector ts, - std::vector const& observed_data, - std::vector const& observed_data_std_dev, - std::vector const& observed_events, - std::vector const& observed_events_std_dev + std::vector const& my, + std::vector const& sigma_y, + std::vector const& mz, + std::vector const& sigma_z ); /** @@ -196,17 +196,17 @@ class ExpData : public SimulationParameters { /** * @brief Set all measurements. * - * @param observed_data observed data (dimension: nt x nytrue, row-major) + * @param measurements observed data (dimension: nt x nytrue, row-major) */ - void set_observed_data(std::vector const& observed_data); + void set_measurements(std::vector const& measurements); /** * @brief Set measurements for a given observable index * - * @param observed_data observed data (dimension: nt) + * @param measurements observed data (dimension: nt) * @param iy observed data index */ - void set_observed_data(std::vector const& observed_data, int iy); + void set_measurements(std::vector const& measurements, int iy); /** * @brief Whether there is a measurement for the given time- and observable- @@ -217,14 +217,14 @@ class ExpData : public SimulationParameters { * * @return boolean specifying if data was set */ - bool is_set_observed_data(int it, int iy) const; + bool is_set_measurements(int it, int iy) const; /** * @brief Get all measurements. * * @return observed data (dimension: nt x nytrue, row-major) */ - std::vector const& get_observed_data() const; + std::vector const& get_measurements() const; /** * @brief Get measurements for a given timepoint index. @@ -233,45 +233,41 @@ class ExpData : public SimulationParameters { * * @return pointer to observed data at index (dimension: nytrue) */ - realtype const* get_observed_data_ptr(int it) const; + realtype const* get_measurements_ptr(int it) const; /** * @brief Set standard deviations for measurements. * - * @param observed_data_std_dev standard deviation of observed data + * @param measurement_error standard deviation of observed data * (dimension: nt x nytrue, row-major) */ - void set_observed_data_std_dev( - std::vector const& observed_data_std_dev - ); + void set_measurement_error(std::vector const& measurement_error); /** * @brief Set identical standard deviation for all measurements. * - * @param stdDev standard deviation (dimension: scalar) + * @param sigma standard deviation (dimension: scalar) */ - void set_observed_data_std_dev(realtype stdDev); + void set_measurement_error(realtype sigma); /** * @brief Set standard deviations of observed data for a * specific observable index. * - * @param observedDataStdDev standard deviation of observed data (dimension: + * @param sigma standard deviation of observed data (dimension: * nt) * @param iy observed data index */ - void set_observed_data_std_dev( - std::vector const& observedDataStdDev, int iy - ); + void set_measurement_error(std::vector const& sigma, int iy); /** * @brief Set all standard deviation for a given observable index to the * input value. * - * @param stdDev standard deviation (dimension: scalar) + * @param sigma standard deviation (dimension: scalar) * @param iy observed data index */ - void set_observed_data_std_dev(realtype stdDev, int iy); + void set_measurement_error(realtype sigma, int iy); /** * @brief Whether standard deviation for a measurement at @@ -281,14 +277,14 @@ class ExpData : public SimulationParameters { * @param iy observable index * @return boolean specifying if standard deviation of data was set */ - bool is_set_observed_data_std_dev(int it, int iy) const; + bool is_set_measurement_error(int it, int iy) const; /** * @brief Get measurement standard deviations. * * @return standard deviation of observed data */ - std::vector const& get_observed_data_std_dev() const; + std::vector const& get_measurement_error() const; /** * @brief Get pointer to measurement standard deviations. @@ -296,7 +292,7 @@ class ExpData : public SimulationParameters { * @param it timepoint index * @return pointer to standard deviation of observed data at index */ - realtype const* get_observed_data_std_dev_ptr(int it) const; + realtype const* get_measurement_error_ptr(int it) const; /** * @brief Set observed event data. @@ -304,7 +300,7 @@ class ExpData : public SimulationParameters { * @param observedEvents observed data (dimension: nmaxevent x nztrue, * row-major) */ - void set_observed_events(std::vector const& observedEvents); + void set_event_measurements(std::vector const& observedEvents); /** * @brief Set observed event data for specific event observable. @@ -313,7 +309,7 @@ class ExpData : public SimulationParameters { * @param iz observed event data index */ void - set_observed_events(std::vector const& observedEvents, int iz); + set_event_measurements(std::vector const& observedEvents, int iz); /** * @brief Check whether event data at specified indices has been set. @@ -322,14 +318,14 @@ class ExpData : public SimulationParameters { * @param iz event observable index * @return boolean specifying if data was set */ - bool is_set_observed_events(int ie, int iz) const; + bool is_set_event_measurements(int ie, int iz) const; /** * @brief Get observed event data. * * @return observed event data */ - std::vector const& get_observed_events() const; + std::vector const& get_event_measurements() const; /** * @brief Get pointer to observed data at ie-th occurrence. @@ -338,42 +334,38 @@ class ExpData : public SimulationParameters { * * @return pointer to observed event data at ie-th occurrence */ - realtype const* get_observed_events_ptr(int ie) const; + realtype const* get_event_measurements_ptr(int ie) const; /** * @brief Set standard deviation of observed event data. * - * @param observedEventsStdDev standard deviation of observed event data + * @param sigma standard deviation of observed event data */ - void set_observed_events_std_dev( - std::vector const& observedEventsStdDev - ); + void set_event_measurement_error(std::vector const& sigma); /** * @brief Set standard deviation of observed event data. * - * @param stdDev standard deviation (dimension: scalar) + * @param sigma standard deviation (dimension: scalar) */ - void set_observed_events_std_dev(realtype stdDev); + void set_event_measurement_error(realtype sigma); /** * @brief Set standard deviation of observed data for a specific observable. * - * @param observedEventsStdDev standard deviation of observed data + * @param sigma standard deviation of observed data * (dimension: nmaxevent) * @param iz observed data index */ - void set_observed_events_std_dev( - std::vector const& observedEventsStdDev, int iz - ); + void set_event_measurement_error(std::vector const& sigma, int iz); /** * @brief Set all standard deviations of a specific event-observable. * - * @param stdDev standard deviation (dimension: scalar) + * @param sigma standard deviation (dimension: scalar) * @param iz observed data index */ - void set_observed_events_std_dev(realtype stdDev, int iz); + void set_event_measurement_error(realtype sigma, int iz); /** * @brief Check whether standard deviation of event data @@ -383,14 +375,14 @@ class ExpData : public SimulationParameters { * @param iz event observable index * @return boolean specifying if standard deviation of event data was set */ - bool is_set_observed_events_std_dev(int ie, int iz) const; + bool is_set_event_measurement_error(int ie, int iz) const; /** * @brief Get standard deviation of observed event data. * * @return standard deviation of observed event data */ - std::vector const& get_observed_events_std_dev() const; + std::vector const& get_event_measurement_error() const; /** * @brief Get pointer to standard deviation of @@ -401,7 +393,7 @@ class ExpData : public SimulationParameters { * @return pointer to standard deviation of observed event data at ie-th * occurrence */ - realtype const* get_observed_events_std_dev_ptr(int ie) const; + realtype const* get_event_measurement_error_ptr(int ie) const; /** * @brief Set all observations and their standard deviations to NaN. @@ -463,24 +455,24 @@ class ExpData : public SimulationParameters { int nmaxevent_{0}; /** @brief observed data (dimension: nt x nytrue, row-major) */ - std::vector observed_data_; + std::vector measurements_; /** * @brief standard deviation of observed data (dimension: nt x nytrue, * row-major) */ - std::vector observed_data_std_dev_; + std::vector measurement_error_; /** * @brief observed events (dimension: nmaxevents x nztrue, row-major) */ - std::vector observed_events_; + std::vector event_measurements_; /** * @brief standard deviation of observed events/roots * (dimension: nmaxevents x nztrue, row-major) */ - std::vector observed_events_std_dev_; + std::vector event_measurement_error_; }; /** @@ -494,11 +486,11 @@ inline bool operator==(ExpData const& lhs, ExpData const& rhs) { == *dynamic_cast(&rhs) && lhs.id == rhs.id && lhs.nytrue_ == rhs.nytrue_ && lhs.nztrue_ == rhs.nztrue_ && lhs.nmaxevent_ == rhs.nmaxevent_ - && is_equal(lhs.observed_data_, rhs.observed_data_) - && is_equal(lhs.observed_data_std_dev_, rhs.observed_data_std_dev_) - && is_equal(lhs.observed_events_, rhs.observed_events_) + && is_equal(lhs.measurements_, rhs.measurements_) + && is_equal(lhs.measurement_error_, rhs.measurement_error_) + && is_equal(lhs.event_measurements_, rhs.event_measurements_) && is_equal( - lhs.observed_events_std_dev_, rhs.observed_events_std_dev_ + lhs.event_measurement_error_, rhs.event_measurement_error_ ); } diff --git a/python/sdist/amici/importers/petab/_petab_importer.py b/python/sdist/amici/importers/petab/_petab_importer.py index b050a21e47..b2954c7436 100644 --- a/python/sdist/amici/importers/petab/_petab_importer.py +++ b/python/sdist/amici/importers/petab/_petab_importer.py @@ -809,8 +809,8 @@ def _set_timepoints_and_measurements( timepoints_w_reps=timepoints_w_reps, observable_ids=self._model.get_observable_ids(), ) - edata.set_observed_data(y.flatten()) - edata.set_observed_data_std_dev(sigma_y.flatten()) + edata.set_measurements(y.flatten()) + edata.set_measurement_error(sigma_y.flatten()) def _get_measurements_and_sigmas( self, diff --git a/python/sdist/amici/importers/petab/v1/conditions.py b/python/sdist/amici/importers/petab/v1/conditions.py index efc77e64bb..84dcc2d9ea 100644 --- a/python/sdist/amici/importers/petab/v1/conditions.py +++ b/python/sdist/amici/importers/petab/v1/conditions.py @@ -389,8 +389,8 @@ def create_edata_for_condition( timepoints_w_reps=timepoints_w_reps, observable_ids=observable_ids, ) - edata.set_observed_data(y.flatten()) - edata.set_observed_data_std_dev(sigma_y.flatten()) + edata.set_measurements(y.flatten()) + edata.set_measurement_error(sigma_y.flatten()) return edata diff --git a/python/sdist/amici/sim/sundials/_numpy.py b/python/sdist/amici/sim/sundials/_numpy.py index 50a9c5de92..7f2c73aa91 100644 --- a/python/sdist/amici/sim/sundials/_numpy.py +++ b/python/sdist/amici/sim/sundials/_numpy.py @@ -540,10 +540,10 @@ class ExpDataView(SwigPtrView): _field_names = [ "ts", - "observed_data", - "observed_data_std_dev", - "observed_events", - "observed_events_std_dev", + "measurements", + "measurement_error", + "event_measurements", + "event_measurement_error", "fixed_parameters", "fixed_parameters_pre_equilibration", "fixed_parameters_presimulation", @@ -562,11 +562,11 @@ def __init__(self, edata: ExpDataPtr | ExpData): self._field_dimensions = { "ts": [edata.nt()], # observables - "observed_data": [edata.nt(), edata.nytrue()], - "observed_data_std_dev": [edata.nt(), edata.nytrue()], + "measurements": [edata.nt(), edata.nytrue()], + "measurement_error": [edata.nt(), edata.nytrue()], # event observables - "observed_events": [edata.nmaxevent(), edata.nztrue()], - "observed_events_std_dev": [edata.nmaxevent(), edata.nztrue()], + "event_measurements": [edata.nmaxevent(), edata.nztrue()], + "event_measurement_error": [edata.nmaxevent(), edata.nztrue()], # fixed parameters "fixed_parameters": [len(edata.fixed_parameters)], "fixed_parameters_pre_equilibration": [ @@ -577,10 +577,10 @@ def __init__(self, edata: ExpDataPtr | ExpData): ], } edata.ts = edata.timepoints - edata.observed_data = edata.get_observed_data() - edata.observed_data_std_dev = edata.get_observed_data_std_dev() - edata.observed_events = edata.get_observed_events() - edata.observed_events_std_dev = edata.get_observed_events_std_dev() + edata.measurements = edata.get_measurements() + edata.measurement_error = edata.get_measurement_error() + edata.event_measurements = edata.get_event_measurements() + edata.event_measurement_error = edata.get_event_measurement_error() super().__init__(edata) diff --git a/python/sdist/amici/sim/sundials/_pandas.py b/python/sdist/amici/sim/sundials/_pandas.py index b2ef8aec4f..84799b7ca2 100644 --- a/python/sdist/amici/sim/sundials/_pandas.py +++ b/python/sdist/amici/sim/sundials/_pandas.py @@ -112,8 +112,8 @@ def get_data_observables_as_data_frame( for i_obs, obs in enumerate( _get_names_or_ids(model, "observable", by_id=by_id) ): - datadict[obs] = npdata["observed_data"][i_time, i_obs] - datadict[obs + "_std"] = npdata["observed_data_std_dev"][ + datadict[obs] = npdata["measurements"][i_time, i_obs] + datadict[obs + "_std"] = npdata["measurement_error"][ i_time, i_obs ] @@ -795,9 +795,9 @@ def construct_edata_from_data_frame( _get_names_or_ids(model, "observable", by_id=by_id) ): if obs in df.keys(): - edata.set_observed_data(df[obs].values.astype(float), obs_index) + edata.set_measurements(df[obs].values.astype(float), obs_index) if obs + "_std" in df.keys(): - edata.set_observed_data_std_dev( + edata.set_measurement_error( df[obs + "_std"].values.astype(float), obs_index ) diff --git a/python/tests/test_compare_conservation_laws_sbml.py b/python/tests/test_compare_conservation_laws_sbml.py index b92bfb6314..5f32caeda1 100644 --- a/python/tests/test_compare_conservation_laws_sbml.py +++ b/python/tests/test_compare_conservation_laws_sbml.py @@ -27,14 +27,14 @@ def edata_fixture(): edata_pre = ExpData( 2, 0, 0, np.array([0.0, 0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0]) ) - edata_pre.set_observed_data([1.5] * 16) + edata_pre.set_measurements([1.5] * 16) edata_pre.fixed_parameters = np.array([5.0, 20.0]) edata_pre.fixed_parameters_pre_equilibration = np.array([0.0, 10.0]) edata_pre.reinitialize_fixed_parameter_initial_states = True # edata for postequilibration edata_post = ExpData(2, 0, 0, np.array([float("inf")] * 3)) - edata_post.set_observed_data([0.75] * 6) + edata_post.set_measurements([0.75] * 6) edata_post.fixed_parameters = np.array([7.5, 30.0]) # edata with both equilibrations @@ -46,7 +46,7 @@ def edata_fixture(): [0.0, 0.0, 0.0, 1.0, 2.0, 2.0, 4.0, float("inf"), float("inf")] ), ) - edata_full.set_observed_data([3.14] * 18) + edata_full.set_measurements([3.14] * 18) edata_full.fixed_parameters = np.array([1.0, 2.0]) edata_full.fixed_parameters_pre_equilibration = np.array([3.0, 4.0]) edata_full.reinitialize_fixed_parameter_initial_states = True diff --git a/python/tests/test_jax.py b/python/tests/test_jax.py index a74a3c0865..ae12bcfe9c 100644 --- a/python/tests/test_jax.py +++ b/python/tests/test_jax.py @@ -177,7 +177,7 @@ def check_fields_jax( ): r_jax = dict() ts = np.array(edata.get_timepoints()) - my = np.array(edata.get_observed_data()).reshape(len(ts), -1) + my = np.array(edata.get_measurements()).reshape(len(ts), -1) ts = np.repeat(ts.reshape(-1, 1), my.shape[1], axis=1) iys = np.repeat(np.arange(my.shape[1]).reshape(1, -1), len(ts), axis=0) my = my.flatten() diff --git a/python/tests/test_preequilibration.py b/python/tests/test_preequilibration.py index 28bfe89489..711faff96f 100644 --- a/python/tests/test_preequilibration.py +++ b/python/tests/test_preequilibration.py @@ -231,22 +231,22 @@ def test_data_replicates(preeq_fixture): solver.set_sensitivity_method(sensi_meth) # add infty timepoint - y = edata.get_observed_data() - stdy = edata.get_observed_data_std_dev() + y = edata.get_measurements() + stdy = edata.get_measurement_error() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) - edata.set_observed_data(np.hstack([y, y[0]])) - edata.set_observed_data_std_dev(np.hstack([stdy, stdy[0]])) + edata.set_measurements(np.hstack([y, y[0]])) + edata.set_measurement_error(np.hstack([stdy, stdy[0]])) rdata_single = run_simulation(model, solver, edata) # duplicate data and timepoints - y = edata.get_observed_data() - stdy = edata.get_observed_data_std_dev() + y = edata.get_measurements() + stdy = edata.get_measurement_error() ts = np.hstack([*edata.get_timepoints(), *edata.get_timepoints()]) idx = np.argsort(ts) edata.set_timepoints(sorted(ts)) - edata.set_observed_data(np.hstack([y, y])[idx]) - edata.set_observed_data_std_dev(np.hstack([stdy, stdy])[idx]) + edata.set_measurements(np.hstack([y, y])[idx]) + edata.set_measurement_error(np.hstack([stdy, stdy])[idx]) rdata_double = run_simulation(model, solver, edata) @@ -346,12 +346,12 @@ def test_equilibration_methods_with_adjoints(preeq_fixture): edata.fixed_parameters_presimulation = () # add infty timepoint - y = edata.get_observed_data() - stdy = edata.get_observed_data_std_dev() + y = edata.get_measurements() + stdy = edata.get_measurement_error() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) - edata.set_observed_data(np.hstack([y, y[0]])) - edata.set_observed_data_std_dev(np.hstack([stdy, stdy[0]])) + edata.set_measurements(np.hstack([y, y[0]])) + edata.set_measurement_error(np.hstack([stdy, stdy[0]])) rdatas = {} equil_meths = [ @@ -413,12 +413,12 @@ def test_newton_solver_equilibration(preeq_fixture): edata.fixed_parameters_presimulation = () # add infty timepoint - y = edata.get_observed_data() - stdy = edata.get_observed_data_std_dev() + y = edata.get_measurements() + stdy = edata.get_measurement_error() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) - edata.set_observed_data(np.hstack([y, y[0]])) - edata.set_observed_data_std_dev(np.hstack([stdy, stdy[0]])) + edata.set_measurements(np.hstack([y, y[0]])) + edata.set_measurement_error(np.hstack([stdy, stdy[0]])) rdatas = {} settings = [ @@ -473,12 +473,12 @@ def test_newton_steadystate_check(preeq_fixture): edata.fixed_parameters_presimulation = () # add infty timepoint - y = edata.get_observed_data() - stdy = edata.get_observed_data_std_dev() + y = edata.get_measurements() + stdy = edata.get_measurement_error() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) - edata.set_observed_data(np.hstack([y, y[0]])) - edata.set_observed_data_std_dev(np.hstack([stdy, stdy[0]])) + edata.set_measurements(np.hstack([y, y[0]])) + edata.set_measurement_error(np.hstack([stdy, stdy[0]])) # set sensi method sensi_meth = SensitivityMethod.forward diff --git a/python/tests/test_sbml_import.py b/python/tests/test_sbml_import.py index 0959236398..88e2fe17f0 100644 --- a/python/tests/test_sbml_import.py +++ b/python/tests/test_sbml_import.py @@ -202,7 +202,7 @@ def test_sbml2amici_observable_dependent_error( rdata.sigmay[:, 1], 0.02 * rdata.y[:, 1], rtol=1.0e-5, atol=1.0e-8 ) edata = ExpData(rdata, 1.0, 0.0) - edata.set_observed_data_std_dev(np.nan) + edata.set_measurement_error(np.nan) # check sensitivities solver.set_sensitivity_order(SensitivityOrder.first) @@ -337,8 +337,8 @@ def test_presimulation_events(tempdir): rdata = run_simulation(model, solver, edata) edata_tmp = ExpData(rdata, 1, 0) edata.set_timepoints(np.array(edata_tmp.get_timepoints()) + 0.1) - edata.set_observed_data(edata_tmp.get_observed_data()) - edata.set_observed_data_std_dev(edata_tmp.get_observed_data_std_dev()) + edata.set_measurements(edata_tmp.get_measurements()) + edata.set_measurement_error(edata_tmp.get_measurement_error()) # sensitivities w.r.t. t_initial_presim (trigger time of an initial event) # are not supported @@ -418,8 +418,8 @@ def test_presimulation_events_and_sensitivities(tempdir): rdata = run_simulation(model, solver, edata) edata_tmp = ExpData(rdata, 1, 0) edata.set_timepoints(np.array(edata_tmp.get_timepoints()) + 0.1) - edata.set_observed_data(edata_tmp.get_observed_data()) - edata.set_observed_data_std_dev(edata_tmp.get_observed_data_std_dev()) + edata.set_measurements(edata_tmp.get_measurements()) + edata.set_measurement_error(edata_tmp.get_measurement_error()) solver.set_sensitivity_order(SensitivityOrder.first) @@ -555,7 +555,7 @@ def test_likelihoods(model_test_likelihoods): sigmas = rdata["y"].max(axis=0) * 0.05 edata = ExpData(rdata, sigmas, []) # just make all observables positive since some are logarithmic - while min(edata.get_observed_data()) < 0: + while min(edata.get_measurements()) < 0: edata = ExpData(rdata, sigmas, []) # and now run for real and also compute likelihood values diff --git a/python/tests/test_sbml_import_special_functions.py b/python/tests/test_sbml_import_special_functions.py index 6f83be38a8..ec6622cf5f 100644 --- a/python/tests/test_sbml_import_special_functions.py +++ b/python/tests/test_sbml_import_special_functions.py @@ -72,14 +72,14 @@ def test_special_likelihoods(model_special_likelihoods): edata = ExpData(rdata, 0.001, 0) # make sure measurements are smaller for non-degenerate probability - y = edata.get_observed_data() + y = edata.get_measurements() y = tuple(val * np.random.uniform(0, 1) for val in y) - edata.set_observed_data(y) + edata.set_measurements(y) # set sigmas sigma = 0.2 sigmas = sigma * np.ones(len(y)) - edata.set_observed_data_std_dev(sigmas) + edata.set_measurement_error(sigmas) # and now run for real and also compute likelihood values rdata = run_simulations(model, solver, [edata])[0] @@ -126,10 +126,10 @@ def test_special_likelihoods(model_special_likelihoods): edata = ExpData(rdata, 0.001, 0) # make sure measurements are smaller for non-degenerate probability - y = edata.get_observed_data() + y = edata.get_measurements() y = tuple(val * np.random.uniform(0.5, 3) for val in y) - edata.set_observed_data(y) - edata.set_observed_data_std_dev(sigmas) + edata.set_measurements(y) + edata.set_measurement_error(sigmas) # and now run for real and also compute likelihood values rdata = run_simulations(model, solver, [edata])[0] diff --git a/python/tests/test_swig_interface.py b/python/tests/test_swig_interface.py index 370f82d9fa..1cf4a638f1 100644 --- a/python/tests/test_swig_interface.py +++ b/python/tests/test_swig_interface.py @@ -513,7 +513,7 @@ def test_edata_equality_operator(): def test_expdata_and_expdataview_are_deepcopyable(): edata1 = ExpData(3, 2, 3, range(4)) - edata1.set_observed_data(np.zeros((3, 4)).flatten()) + edata1.set_measurements(np.zeros((3, 4)).flatten()) # ExpData edata2 = copy.deepcopy(edata1) @@ -735,7 +735,7 @@ def test_pickle_edata(): ne = 4 nt = 5 edata = ExpData(ny, nz, ne, range(nt)) - edata.set_observed_data(list(np.arange(ny * nt, dtype=float))) + edata.set_measurements(list(np.arange(ny * nt, dtype=float))) edata.pscale = parameter_scaling_from_int_vector( [ParameterScaling.log10] * 5 ) diff --git a/src/edata.cpp b/src/edata.cpp index a5364a3251..582d539786 100644 --- a/src/edata.cpp +++ b/src/edata.cpp @@ -44,20 +44,20 @@ ExpData::ExpData( ExpData::ExpData( int const nytrue, int const nztrue, int const nmaxevent, - std::vector ts, std::vector const& observedData, - std::vector const& observedDataStdDev, - std::vector const& observedEvents, - std::vector const& observedEventsStdDev + std::vector ts, std::vector const& my, + std::vector const& sigma_y, + std::vector const& mz, + std::vector const& sigma_z ) : SimulationParameters(ts) , nytrue_(nytrue) , nztrue_(nztrue) , nmaxevent_(nmaxevent) { apply_dimensions(); - set_observed_data(observedData); - set_observed_data_std_dev(observedDataStdDev); - set_observed_events(observedEvents); - set_observed_events_std_dev(observedEventsStdDev); + set_measurements(my); + set_measurement_error(sigma_y); + set_event_measurements(mz); + set_event_measurement_error(sigma_z); } ExpData::ExpData(Model const& model) @@ -112,9 +112,9 @@ ExpData::ExpData( ? sigma_y.at(iy) : sigma_y.at(iy + nytrue_ * it); std::normal_distribution<> e{0, sigma}; - observed_data_.at(iy + nytrue_ * it) + measurements_.at(iy + nytrue_ * it) = rdata.y.at(iy + rdata.ny * it) + e(gen); - observed_data_std_dev_.at(iy + nytrue_ * it) = sigma; + measurement_error_.at(iy + nytrue_ * it) = sigma; } } @@ -124,9 +124,9 @@ ExpData::ExpData( ? sigma_z.at(iz) : sigma_z.at(iz + nztrue_ * ie); std::normal_distribution<> e{0, sigma}; - observed_events_.at(iz + rdata.nztrue * ie) + event_measurements.at(iz + rdata.nztrue * ie) = rdata.z.at(iz + rdata.nz * ie) + e(gen); - observed_events_std_dev_.at(iz + rdata.nztrue * ie) = sigma; + event_measurementserror_.at(iz + rdata.nztrue * ie) = sigma; } } @@ -153,201 +153,201 @@ realtype ExpData::get_timepoint(int const it) const { return timepoints.at(it); } -void ExpData::set_observed_data(std::vector const& observedData) { - check_data_dimension(observedData, "observedData"); +void ExpData::set_measurements(std::vector const& measurements) { + check_data_dimension(measurements, "measurements"); - if (observedData.size() == static_cast(nt()) * nytrue_) - observed_data_ = observedData; - else if (observedData.empty()) - observed_data_.clear(); + if (measurements.size() == static_cast(nt()) * nytrue_) + measurements_ = measurements; + else if (measurements.empty()) + measurements_.clear(); } -void ExpData::set_observed_data( - std::vector const& observedData, int iy +void ExpData::set_measurements( + std::vector const& measurements, int iy ) { - if (observedData.size() != static_cast(nt())) + if (measurements.size() != static_cast(nt())) throw AmiException( - "Input observedData did not match dimensions nt (%i), was %i", nt(), - observedData.size() + "Input measurements did not match dimensions nt (%i), was %i", nt(), + measurements.size() ); for (int it = 0; it < nt(); ++it) - observed_data_.at(iy + it * nytrue_) = observedData.at(it); + measurements_.at(iy + it * nytrue_) = measurements.at(it); } -bool ExpData::is_set_observed_data(int const it, int const iy) const { - return !observed_data_.empty() - && !isnan(observed_data_.at(it * nytrue_ + iy)); +bool ExpData::is_set_measurements(int const it, int const iy) const { + return !measurements_.empty() + && !isnan(measurements_.at(it * nytrue_ + iy)); } -std::vector const& ExpData::get_observed_data() const { - return observed_data_; +std::vector const& ExpData::get_measurements() const { + return measurements_; } -realtype const* ExpData::get_observed_data_ptr(int const it) const { - if (!observed_data_.empty()) - return &observed_data_.at(it * nytrue_); +realtype const* ExpData::get_measurements_ptr(int const it) const { + if (!measurements_.empty()) + return &measurements_.at(it * nytrue_); return nullptr; } -void ExpData::set_observed_data_std_dev( - std::vector const& observedDataStdDev +void ExpData::set_measurement_error( + std::vector const& sigma_y ) { - check_data_dimension(observedDataStdDev, "observedDataStdDev"); - check_sigma_positivity(observedDataStdDev, "observedDataStdDev"); + check_data_dimension(sigma_y, "sigma_y"); + check_sigma_positivity(sigma_y, "sigma_y"); - if (observedDataStdDev.size() == static_cast(nt()) * nytrue_) - observed_data_std_dev_ = observedDataStdDev; - else if (observedDataStdDev.empty()) - observed_data_std_dev_.clear(); + if (sigma_y.size() == static_cast(nt()) * nytrue_) + measurement_error_ = sigma_y; + else if (sigma_y.empty()) + measurement_error_.clear(); } -void ExpData::set_observed_data_std_dev(realtype const stdDev) { - check_sigma_positivity(stdDev, "stdDev"); - std::ranges::fill(observed_data_std_dev_, stdDev); +void ExpData::set_measurement_error(realtype const sigma) { + check_sigma_positivity(sigma, "sigma"); + std::ranges::fill(measurement_error_, sigma); } -void ExpData::set_observed_data_std_dev( - std::vector const& observedDataStdDev, int const iy +void ExpData::set_measurement_error( + std::vector const& sigma_y, int const iy ) { - if (observedDataStdDev.size() != static_cast(nt())) + if (sigma_y.size() != static_cast(nt())) throw AmiException( - "Input observedDataStdDev did not match dimensions nt (%i), was %i", - nt(), observedDataStdDev.size() + "Input sigma_y did not match dimensions nt (%i), was %i", + nt(), sigma_y.size() ); - check_sigma_positivity(observedDataStdDev, "observedDataStdDev"); + check_sigma_positivity(sigma_y, "sigma_y"); for (int it = 0; it < nt(); ++it) - observed_data_std_dev_.at(iy + it * nytrue_) - = observedDataStdDev.at(it); + measurement_error_.at(iy + it * nytrue_) + = sigma_y.at(it); } -void ExpData::set_observed_data_std_dev(realtype const stdDev, int const iy) { - check_sigma_positivity(stdDev, "stdDev"); +void ExpData::set_measurement_error(realtype const sigma, int const iy) { + check_sigma_positivity(sigma, "sigma"); for (int it = 0; it < nt(); ++it) - observed_data_std_dev_.at(iy + it * nytrue_) = stdDev; + measurement_error_.at(iy + it * nytrue_) = sigma; } -bool ExpData::is_set_observed_data_std_dev(int const it, int const iy) const { - return !observed_data_std_dev_.empty() - && !isnan(observed_data_std_dev_.at(it * nytrue_ + iy)); +bool ExpData::is_set_measurement_error(int const it, int const iy) const { + return !measurement_error_.empty() + && !isnan(measurement_error_.at(it * nytrue_ + iy)); } -std::vector const& ExpData::get_observed_data_std_dev() const { - return observed_data_std_dev_; +std::vector const& ExpData::get_measurement_error() const { + return measurement_error_; } -realtype const* ExpData::get_observed_data_std_dev_ptr(int const it) const { - if (!observed_data_std_dev_.empty()) - return &observed_data_std_dev_.at(it * nytrue_); +realtype const* ExpData::get_measurement_error_ptr(int const it) const { + if (!measurement_error_.empty()) + return &measurement_error_.at(it * nytrue_); return nullptr; } -void ExpData::set_observed_events(std::vector const& observedEvents) { - check_events_dimension(observedEvents, "observedEvents"); +void ExpData::set_event_measurements(std::vector const& event_measurements) { + check_events_dimension(event_measurements, "event_measurements"); - if (observedEvents.size() == static_cast(nmaxevent_) * nztrue_) - observed_events_ = observedEvents; - else if (observedEvents.empty()) - observed_events_.clear(); + if (event_measurements.size() == static_cast(nmaxevent_) * nztrue_) + event_measurements_ = event_measurements; + else if (event_measurements.empty()) + event_measurements_.clear(); } -void ExpData::set_observed_events( - std::vector const& observedEvents, int const iz +void ExpData::set_event_measurements( + std::vector const& event_measurements, int const iz ) { - if (observedEvents.size() != static_cast(nmaxevent_)) { + if (event_measurements.size() != static_cast(nmaxevent_)) { throw AmiException( - "Input observedEvents did not match dimensions nmaxevent (%i), was " + "Input event_measurements did not match dimensions nmaxevent (%i), was " "%i", - nmaxevent_, observedEvents.size() + nmaxevent_, event_measurements.size() ); } for (int ie = 0; ie < nmaxevent_; ++ie) - observed_events_.at(iz + ie * nztrue_) = observedEvents.at(ie); + event_measurements_.at(iz + ie * nztrue_) = event_measurements.at(ie); } -bool ExpData::is_set_observed_events(int const ie, int const iz) const { - return !observed_events_.empty() - && !isnan(observed_events_.at(ie * nztrue_ + iz)); +bool ExpData::is_set_event_measurements(int const ie, int const iz) const { + return !event_measurements_.empty() + && !isnan(event_measurements_.at(ie * nztrue_ + iz)); } -std::vector const& ExpData::get_observed_events() const { - return observed_events_; +std::vector const& ExpData::get_event_measurements() const { + return event_measurements_; } -realtype const* ExpData::get_observed_events_ptr(int const ie) const { - if (!observed_events_.empty()) - return &observed_events_.at(ie * nztrue_); +realtype const* ExpData::get_event_measurements_ptr(int const ie) const { + if (!event_measurements_.empty()) + return &event_measurements_.at(ie * nztrue_); return nullptr; } -void ExpData::set_observed_events_std_dev( - std::vector const& observedEventsStdDev +void ExpData::set_event_measurement_error( + std::vector const& sigma_z ) { - check_events_dimension(observedEventsStdDev, "observedEventsStdDev"); - check_sigma_positivity(observedEventsStdDev, "observedEventsStdDev"); + check_events_dimension(sigma_z, "sigma_z"); + check_sigma_positivity(sigma_z, "sigma_z"); - if (observedEventsStdDev.size() == (unsigned)nmaxevent_ * nztrue_) - observed_events_std_dev_ = observedEventsStdDev; - else if (observedEventsStdDev.empty()) - observed_events_std_dev_.clear(); + if (sigma_z.size() == (unsigned)nmaxevent_ * nztrue_) + event_measurement_error_ = sigma_z; + else if (sigma_z.empty()) + event_measurement_error_.clear(); } -void ExpData::set_observed_events_std_dev(realtype const stdDev) { - check_sigma_positivity(stdDev, "stdDev"); - std::ranges::fill(observed_events_std_dev_, stdDev); +void ExpData::set_event_measurement_error(realtype const sigma) { + check_sigma_positivity(sigma, "sigma"); + std::ranges::fill(event_measurement_error_, sigma); } -void ExpData::set_observed_events_std_dev( - std::vector const& observedEventsStdDev, int const iz +void ExpData::set_event_measurement_error( + std::vector const& sigma_z, int const iz ) { - if (observedEventsStdDev.size() != (unsigned)nmaxevent_) + if (sigma_z.size() != (unsigned)nmaxevent_) throw AmiException( - "Input observedEventsStdDev did not match dimensions nmaxevent " + "Input sigma_z did not match dimensions nmaxevent " "(%i), was %i", - nmaxevent_, observedEventsStdDev.size() + nmaxevent_, sigma_z.size() ); - check_sigma_positivity(observedEventsStdDev, "observedEventsStdDev"); + check_sigma_positivity(sigma_z, "sigma_z"); for (int ie = 0; ie < nmaxevent_; ++ie) - observed_events_std_dev_.at(iz + ie * nztrue_) - = observedEventsStdDev.at(ie); + event_measurement_error_.at(iz + ie * nztrue_) + = sigma_z.at(ie); } -void ExpData::set_observed_events_std_dev(realtype const stdDev, int const iz) { - check_sigma_positivity(stdDev, "stdDev"); +void ExpData::set_event_measurement_error(realtype const sigma, int const iz) { + check_sigma_positivity(sigma, "sigma"); for (int ie = 0; ie < nmaxevent_; ++ie) - observed_events_std_dev_.at(iz + ie * nztrue_) = stdDev; + event_measurement_error_.at(iz + ie * nztrue_) = sigma; } -bool ExpData::is_set_observed_events_std_dev(int const ie, int const iz) const { - if (!observed_events_std_dev_.empty()) // avoid out of bound memory access - return !isnan(observed_events_std_dev_.at(ie * nztrue_ + iz)); +bool ExpData::is_set_event_measurement_error(int const ie, int const iz) const { + if (!event_measurement_error_.empty()) // avoid out of bound memory access + return !isnan(event_measurement_error_.at(ie * nztrue_ + iz)); return false; } -std::vector const& ExpData::get_observed_events_std_dev() const { - return observed_events_std_dev_; +std::vector const& ExpData::get_event_measurement_error() const { + return event_measurement_error_; } -realtype const* ExpData::get_observed_events_std_dev_ptr(int const ie) const { - if (!observed_events_std_dev_.empty()) - return &observed_events_std_dev_.at(ie * nztrue_); +realtype const* ExpData::get_event_measurement_error_ptr(int const ie) const { + if (!event_measurement_error_.empty()) + return &event_measurement_error_.at(ie * nztrue_); return nullptr; } void ExpData::clear_observations() { - std::ranges::fill(observed_data_, get_nan()); - std::ranges::fill(observed_data_std_dev_, get_nan()); - std::ranges::fill(observed_events_, get_nan()); - std::ranges::fill(observed_events_std_dev_, get_nan()); + std::ranges::fill(measurements_, get_nan()); + std::ranges::fill(measurement_error_, get_nan()); + std::ranges::fill(event_measurements_, get_nan()); + std::ranges::fill(event_measurement_error_, get_nan()); } void ExpData::apply_dimensions() { @@ -356,13 +356,13 @@ void ExpData::apply_dimensions() { } void ExpData::apply_data_dimension() { - observed_data_.resize(nt() * nytrue_, get_nan()); - observed_data_std_dev_.resize(nt() * nytrue_, get_nan()); + measurements_.resize(nt() * nytrue_, get_nan()); + measurement_error_.resize(nt() * nytrue_, get_nan()); } void ExpData::apply_event_dimension() { - observed_events_.resize(nmaxevent_ * nztrue_, get_nan()); - observed_events_std_dev_.resize(nmaxevent_ * nztrue_, get_nan()); + event_measurements.resize(nmaxevent_ * nztrue_, get_nan()); + event_measurement_error_.resize(nmaxevent_ * nztrue_, get_nan()); } void ExpData::check_data_dimension( diff --git a/src/hdf5.cpp b/src/hdf5.cpp index 0c7d2eece1..5377e72fd4 100644 --- a/src/hdf5.cpp +++ b/src/hdf5.cpp @@ -127,7 +127,7 @@ std::unique_ptr read_exp_data_from_hdf5( if (location_exists(file, hdf5Root + "/Y")) { auto const my = get_double_2d_dataset(file, hdf5Root + "/Y", m, n); check_measurement_dimensions_compatible(m, n, model); - edata->set_observed_data(my); + edata->set_measurements(my); } else { throw AmiException( "Missing %s/Y in %s", hdf5Root.c_str(), hdf5Filename.c_str() @@ -138,7 +138,7 @@ std::unique_ptr read_exp_data_from_hdf5( auto const sigmay = get_double_2d_dataset(file, hdf5Root + "/Sigma_Y", m, n); check_measurement_dimensions_compatible(m, n, model); - edata->set_observed_data_std_dev(sigmay); + edata->set_measurement_error(sigmay); } else { throw AmiException( "Missing %s/Sigma_Y in %s", hdf5Root.c_str(), @@ -151,7 +151,7 @@ std::unique_ptr read_exp_data_from_hdf5( if (location_exists(file, hdf5Root + "/Z")) { auto const mz = get_double_2d_dataset(file, hdf5Root + "/Z", m, n); check_event_dimensions_compatible(m, n, model); - edata->set_observed_events(mz); + edata->set_event_measurements(mz); } else { throw AmiException( "Missing %s/Z in %s", hdf5Root.c_str(), hdf5Filename.c_str() @@ -162,7 +162,7 @@ std::unique_ptr read_exp_data_from_hdf5( auto sigmaz = get_double_2d_dataset(file, hdf5Root + "/Sigma_Z", m, n); check_event_dimensions_compatible(m, n, model); - edata->set_observed_events_std_dev(sigmaz); + edata->set_event_measurement_error(sigmaz); } else { throw AmiException( "Missing %s/Sigma_Z in %s", hdf5Root.c_str(), @@ -293,25 +293,25 @@ void write_exp_data_to_hdf5( file.getId(), hdf5Location.c_str(), "t_presim", &edata.t_presim, 1 ); - if (!edata.get_observed_data().empty()) + if (!edata.get_measurements().empty()) create_and_write_double_2d_dataset( - file, hdf5Location + "/Y", edata.get_observed_data(), edata.nt(), + file, hdf5Location + "/Y", edata.get_measurements(), edata.nt(), edata.nytrue() ); - if (!edata.get_observed_data_std_dev().empty()) + if (!edata.get_measurement_error().empty()) create_and_write_double_2d_dataset( - file, hdf5Location + "/Sigma_Y", edata.get_observed_data_std_dev(), + file, hdf5Location + "/Sigma_Y", edata.get_measurement_error(), edata.nt(), edata.nytrue() ); - if (!edata.get_observed_events().empty()) + if (!edata.get_event_measurements().empty()) create_and_write_double_2d_dataset( - file, hdf5Location + "/Z", edata.get_observed_events(), + file, hdf5Location + "/Z", edata.get_event_measurements(), edata.nmaxevent(), edata.nztrue() ); - if (!edata.get_observed_events_std_dev().empty()) + if (!edata.get_event_measurement_error().empty()) create_and_write_double_2d_dataset( file, hdf5Location + "/Sigma_Z", - edata.get_observed_events_std_dev(), edata.nmaxevent(), + edata.get_event_measurement_error(), edata.nmaxevent(), edata.nztrue() ); diff --git a/src/model.cpp b/src/model.cpp index b8844bf6fe..ae22773ad8 100644 --- a/src/model.cpp +++ b/src/model.cpp @@ -1177,11 +1177,11 @@ void Model::add_observable_objective( std::vector nllh(nJ, 0.0); for (int iyt = 0; iyt < nytrue; iyt++) { - if (edata.is_set_observed_data(it, iyt)) { + if (edata.is_set_measurements(it, iyt)) { std::ranges::fill(nllh, 0.0); fJy(nllh.data(), iyt, state_.unscaled_parameters.data(), state_.fixed_parameters.data(), derived_state_.y_.data(), - derived_state_.sigmay_.data(), edata.get_observed_data_ptr(it)); + derived_state_.sigmay_.data(), edata.get_measurements_ptr(it)); Jy -= nllh.at(0); } } @@ -1351,12 +1351,12 @@ void Model::add_event_objective( std::vector nllh(nJ, 0.0); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_observed_events(nroots, iztrue)) { + if (edata.is_set_event_measurements(nroots, iztrue)) { std::ranges::fill(nllh, 0.0); fJz(nllh.data(), iztrue, state_.unscaled_parameters.data(), state_.fixed_parameters.data(), derived_state_.z_.data(), derived_state_.sigmaz_.data(), - edata.get_observed_events_ptr(nroots)); + edata.get_event_measurements_ptr(nroots)); Jz -= nllh.at(0); } } @@ -1371,7 +1371,7 @@ void Model::add_event_objective_regularization( std::vector nllh(nJ, 0.0); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_observed_events(nroots, iztrue)) { + if (edata.is_set_event_measurements(nroots, iztrue)) { std::ranges::fill(nllh, 0.0); fJrz( nllh.data(), iztrue, state_.unscaled_parameters.data(), @@ -2128,11 +2128,11 @@ void Model::fsigmay(int const it, ExpData const* edata) { ); if (edata) { - auto sigmay_edata = edata->get_observed_data_std_dev_ptr(it); + auto sigmay_edata = edata->get_measurement_error_ptr(it); /* extract the value for the standard deviation from ExpData, * if the data value is NaN, use the parameter value */ for (int iytrue = 0; iytrue < nytrue; iytrue++) { - if (edata->is_set_observed_data_std_dev(it, iytrue)) + if (edata->is_set_measurement_error(it, iytrue)) derived_state_.sigmay_.at(iytrue) = sigmay_edata[iytrue]; /* TODO: when moving second order code to cpp, verify @@ -2141,7 +2141,7 @@ void Model::fsigmay(int const it, ExpData const* edata) { for (int iJ = 1; iJ < nJ; iJ++) derived_state_.sigmay_.at(iytrue + iJ * nytrue) = 0; - if (edata->is_set_observed_data(it, iytrue)) { + if (edata->is_set_measurements(it, iytrue)) { std::string obs_id = has_observable_ids() ? get_observable_ids().at(iytrue) : std::to_string(iytrue); @@ -2174,7 +2174,7 @@ void Model::fdsigmaydp(int const it, ExpData const* edata) { // to zero if (edata) { for (int iy = 0; iy < nytrue; iy++) { - if (!edata->is_set_observed_data_std_dev(it, iy)) + if (!edata->is_set_measurement_error(it, iy)) continue; for (int ip = 0; ip < nplist(); ip++) { derived_state_.dsigmaydp_.at(ip * ny + iy) = 0.0; @@ -2206,7 +2206,7 @@ void Model::fdsigmaydy(int const it, ExpData const* edata) { // to zero if (edata) { for (int isigmay = 0; isigmay < nytrue; ++isigmay) { - if (!edata->is_set_observed_data_std_dev(it, isigmay)) + if (!edata->is_set_measurement_error(it, isigmay)) continue; for (int iy = 0; iy < nytrue; ++iy) { derived_state_.dsigmaydy_.at(isigmay * ny + iy) = 0.0; @@ -2238,7 +2238,7 @@ void Model::fdJydy(int const it, AmiVector const& x, ExpData const& edata) { fdJydy_colptrs(derived_state_.dJydy_.at(iyt), iyt); fdJydy_rowvals(derived_state_.dJydy_.at(iyt), iyt); - if (!edata.is_set_observed_data(it, iyt)) + if (!edata.is_set_measurements(it, iyt)) continue; // get dJydy slice (ny) for current timepoint and observable @@ -2246,7 +2246,7 @@ void Model::fdJydy(int const it, AmiVector const& x, ExpData const& edata) { derived_state_.dJydy_.at(iyt).data(), iyt, state_.unscaled_parameters.data(), state_.fixed_parameters.data(), derived_state_.y_.data(), derived_state_.sigmay_.data(), - edata.get_observed_data_ptr(it) + edata.get_measurements_ptr(it) ); // dJydy += dJydsigma * dsigmaydy @@ -2291,13 +2291,13 @@ void Model::fdJydsigma(int const it, AmiVector const& x, ExpData const& edata) { fsigmay(it, &edata); for (int iyt = 0; iyt < nytrue; iyt++) { - if (edata.is_set_observed_data(it, iyt)) { + if (edata.is_set_measurements(it, iyt)) { // get dJydsigma slice (ny) for current timepoint and observable fdJydsigma( &derived_state_.dJydsigma_.at(iyt * ny * nJ), iyt, state_.unscaled_parameters.data(), state_.fixed_parameters.data(), derived_state_.y_.data(), - derived_state_.sigmay_.data(), edata.get_observed_data_ptr(it) + derived_state_.sigmay_.data(), edata.get_measurements_ptr(it) ); if (always_check_finite_) { check_finite( @@ -2329,7 +2329,7 @@ void Model::fdJydp(int const it, AmiVector const& x, ExpData const& edata) { set_nan_to_zero(derived_state_.dJydsigma_); set_nan_to_zero(derived_state_.dsigmaydp_); for (int iyt = 0; iyt < nytrue; ++iyt) { - if (!edata.is_set_observed_data(it, iyt)) + if (!edata.is_set_measurements(it, iyt)) continue; // dJydp = 1.0 * dJydp + 1.0 * dJydy * dydp @@ -2366,7 +2366,7 @@ void Model::fdJydx(int const it, AmiVector const& x, ExpData const& edata) { // dydx : ny x nx_solver // dJydx: nJ x nx_solver x nt for (int iyt = 0; iyt < nytrue; ++iyt) { - if (!edata.is_set_observed_data(it, iyt)) + if (!edata.is_set_measurements(it, iyt)) continue; // dJydy A[nyt,nJ,ny] * dydx B[ny,nx_solver] = dJydx C[it,nJ,nx_solver] // slice slice @@ -2491,9 +2491,9 @@ void Model::fsigmaz( if (edata) { for (int iztrue = 0; iztrue < nztrue; iztrue++) { if (z2event_.at(iztrue) == ie) { - if (edata->is_set_observed_events_std_dev(nroots, iztrue)) { + if (edata->is_set_event_measurement_error(nroots, iztrue)) { auto sigmaz_edata - = edata->get_observed_events_std_dev_ptr(nroots); + = edata->get_event_measurement_error_ptr(nroots); derived_state_.sigmaz_.at(iztrue) = sigmaz_edata[iztrue]; } @@ -2503,7 +2503,7 @@ void Model::fsigmaz( for (int iJ = 1; iJ < nJ; iJ++) derived_state_.sigmaz_.at(iztrue + iJ * nztrue) = 0; - if (edata->is_set_observed_events(nroots, iztrue)) + if (edata->is_set_event_measurements(nroots, iztrue)) check_sigma_positivity( derived_state_.sigmaz_.at(iztrue), "sigmaz" ); @@ -2534,7 +2534,7 @@ void Model::fdsigmazdp( if (edata) { for (int iz = 0; iz < nztrue; iz++) { if (z2event_.at(iz) == ie - && !edata->is_set_observed_events_std_dev(nroots, iz)) { + && !edata->is_set_event_measurement_error(nroots, iz)) { for (int ip = 0; ip < nplist(); ip++) derived_state_.dsigmazdp_.at(iz + nz * ip) = 0; } @@ -2561,13 +2561,13 @@ void Model::fdJzdz( fsigmaz(ie, nroots, t, &edata); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_observed_events(nroots, iztrue)) { + if (edata.is_set_event_measurements(nroots, iztrue)) { fdJzdz( &derived_state_.dJzdz_.at(iztrue * nz * nJ), iztrue, state_.unscaled_parameters.data(), state_.fixed_parameters.data(), derived_state_.z_.data(), derived_state_.sigmaz_.data(), - edata.get_observed_events_ptr(nroots) + edata.get_event_measurements_ptr(nroots) ); if (always_check_finite_) { check_finite( @@ -2594,13 +2594,13 @@ void Model::fdJzdsigma( fsigmaz(ie, nroots, t, &edata); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_observed_events(nroots, iztrue)) { + if (edata.is_set_event_measurements(nroots, iztrue)) { fdJzdsigma( &derived_state_.dJzdsigma_.at(iztrue * nz * nJ), iztrue, state_.unscaled_parameters.data(), state_.fixed_parameters.data(), derived_state_.z_.data(), derived_state_.sigmaz_.data(), - edata.get_observed_events_ptr(nroots) + edata.get_event_measurements_ptr(nroots) ); if (always_check_finite_) { check_finite( @@ -2641,7 +2641,7 @@ void Model::fdJzdp( set_nan_to_zero(derived_state_.dJzdsigma_); set_nan_to_zero(derived_state_.dJrzdsigma_); for (int izt = 0; izt < nztrue; ++izt) { - if (!edata.is_set_observed_events(nroots, izt)) + if (!edata.is_set_event_measurements(nroots, izt)) continue; if (t < edata.get_timepoint(edata.nt() - 1)) { @@ -2705,7 +2705,7 @@ void Model::fdJzdx( set_nan_to_zero(derived_state_.drzdx_); for (int izt = 0; izt < nztrue; ++izt) { - if (!edata.is_set_observed_events(nroots, izt)) + if (!edata.is_set_event_measurements(nroots, izt)) continue; if (t < edata.get_timepoint(edata.nt() - 1)) { @@ -2743,7 +2743,7 @@ void Model::fdJrzdz( fsigmaz(ie, nroots, t, &edata); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_observed_events(nroots, iztrue)) { + if (edata.is_set_event_measurements(nroots, iztrue)) { fdJrzdz( &derived_state_.dJrzdz_.at(iztrue * nz * nJ), iztrue, state_.unscaled_parameters.data(), @@ -2775,7 +2775,7 @@ void Model::fdJrzdsigma( fsigmaz(ie, nroots, t, &edata); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_observed_events(nroots, iztrue)) { + if (edata.is_set_event_measurements(nroots, iztrue)) { fdJrzdsigma( &derived_state_.dJrzdsigma_.at(iztrue * nz * nJ), iztrue, state_.unscaled_parameters.data(), diff --git a/src/rdata.cpp b/src/rdata.cpp index 27450c1448..4cbc8c3107 100644 --- a/src/rdata.cpp +++ b/src/rdata.cpp @@ -950,10 +950,10 @@ void ReturnData::fres( std::vector sigmay_it(ny, 0.0); model.get_observable_sigma(sigmay_it, it, &edata); - auto observedData = edata.get_observed_data_ptr(it); + auto observedData = edata.get_measurements_ptr(it); for (int iy = 0; iy < nytrue; ++iy) { int iyt = iy + it * edata.nytrue(); - if (!edata.is_set_observed_data(it, iy)) + if (!edata.is_set_measurements(it, iy)) continue; res.at(iyt) = amici::fres( @@ -974,7 +974,7 @@ void ReturnData::fchi2(int const it, ExpData const& edata) { for (int iy = 0; iy < nytrue; ++iy) { int iyt_true = iy + it * nytrue; chi2 += pow(res.at(iyt_true), 2); - if (sigma_res && edata.is_set_observed_data(it, iy)) + if (sigma_res && edata.is_set_measurements(it, iy)) chi2 += pow(res.at(iyt_true + nt * nytrue), 2) - sigma_offset; } } @@ -1016,9 +1016,9 @@ void ReturnData::fsres( std::vector ssigmay_it(ny * nplist, 0.0); model.get_observable_sigma_sensitivity(ssigmay_it, sy_it, it, &edata); - auto observedData = edata.get_observed_data_ptr(it); + auto observedData = edata.get_measurements_ptr(it); for (int iy = 0; iy < nytrue; ++iy) { - if (!edata.is_set_observed_data(it, iy)) + if (!edata.is_set_measurements(it, iy)) continue; for (int ip = 0; ip < nplist; ++ip) { int idx = (iy + it * edata.nytrue()) * nplist + ip; @@ -1111,10 +1111,10 @@ void ReturnData::fFIM( * on the Boehm2014 Benchmark example. */ - auto observedData = edata.get_observed_data_ptr(it); + auto observedData = edata.get_measurements_ptr(it); for (int iy = 0; iy < nytrue; ++iy) { - if (!edata.is_set_observed_data(it, iy)) + if (!edata.is_set_measurements(it, iy)) continue; auto y = y_it.at(iy); auto m = observedData[iy]; diff --git a/swig/edata.i b/swig/edata.i index 78cf2913bc..1f6f775a9c 100644 --- a/swig/edata.i +++ b/swig/edata.i @@ -7,8 +7,8 @@ using namespace amici; %} %ignore ConditionContext; -%ignore get_observed_data_ptr; -%ignore get_observed_data_std_dev_ptr; +%ignore get_measurements_ptr; +%ignore get_measurement_error_ptr; %feature("pythonprepend") amici::ExpData::ExpData %{ """ @@ -32,22 +32,22 @@ using namespace amici; %pythoncode %{ def _edata_repr(self: "ExpData"): n_data_y = sum( - self.is_set_observed_data(it, iy) + self.is_set_measurements(it, iy) for it in range(self.nt()) for iy in range(self.nytrue()) ) n_sigma_y = sum( - self.is_set_observed_data_std_dev(it, iy) + self.is_set_measurement_error(it, iy) for it in range(self.nt()) for iy in range(self.nytrue()) ) n_data_z = sum( - self.is_set_observed_events(ie, iz) + self.is_set_event_measurements(ie, iz) for ie in range(self.nmaxevent()) for iz in range(self.nztrue()) ) n_sigma_z = sum( - self.is_set_observed_events_std_dev(ie, iz) + self.is_set_event_measurement_error(ie, iz) for ie in range(self.nmaxevent()) for iz in range(self.nztrue()) ) @@ -114,10 +114,10 @@ def __reduce__(self): self.nztrue(), self.nmaxevent(), self.get_timepoints(), - self.get_observed_data(), - self.get_observed_data_std_dev(), - self.get_observed_events(), - self.get_observed_events_std_dev(), + self.get_measurements(), + self.get_measurement_error(), + self.get_event_measurements(), + self.get_event_measurement_error(), ), dict(self) ), diff --git a/tests/cpp/jakstat_adjoint/tests1.cpp b/tests/cpp/jakstat_adjoint/tests1.cpp index 4dded0f4f7..8ae95b7d0f 100644 --- a/tests/cpp/jakstat_adjoint/tests1.cpp +++ b/tests/cpp/jakstat_adjoint/tests1.cpp @@ -58,11 +58,11 @@ TEST(ExampleJakstatAdjoint, SensitivityAdjointUnusedNanOutputs) auto iy = 1; Expects(model->get_observable_ids()[iy] == "obs_tSTAT"); - auto d = edata->get_observed_data(); + auto d = edata->get_measurements(); for (int it = 0; it < edata->nt(); ++it) { d[it * edata->nytrue() + iy] = NAN; } - edata->set_observed_data(d); + edata->set_measurements(d); auto rdata = run_simulation(*solver, edata.get(), *model); @@ -84,7 +84,7 @@ TEST(ExampleJakstatAdjoint, SensitivityReplicates) // No replicate, no sensi edata.set_timepoints({ 10.0 }); - auto d = edata.get_observed_data(); + auto d = edata.get_measurements(); for (int it = 0; it < edata.nt(); ++it) { for (int iy = 0; iy < edata.nytrue(); ++iy) { if (iy == 0) { @@ -94,8 +94,8 @@ TEST(ExampleJakstatAdjoint, SensitivityReplicates) } } } - edata.set_observed_data(d); - edata.set_observed_data_std_dev(1.0); + edata.set_measurements(d); + edata.set_measurement_error(1.0); solver->set_sensitivity_order(amici::SensitivityOrder::none); auto rdata1 = run_simulation(*solver, &edata, *model); @@ -103,7 +103,7 @@ TEST(ExampleJakstatAdjoint, SensitivityReplicates) // forward + replicates edata.set_timepoints({ 10.0, 10.0 }); - d = edata.get_observed_data(); + d = edata.get_measurements(); for (int it = 0; it < edata.nt(); ++it) { for (int iy = 0; iy < edata.nytrue(); ++iy) { if (iy == 0) { @@ -113,8 +113,8 @@ TEST(ExampleJakstatAdjoint, SensitivityReplicates) } } } - edata.set_observed_data(d); - edata.set_observed_data_std_dev(1.0); + edata.set_measurements(d); + edata.set_measurement_error(1.0); solver->set_sensitivity_order(amici::SensitivityOrder::first); solver->set_sensitivity_method(amici::SensitivityMethod::forward); diff --git a/tests/cpp/unittests/testExpData.cpp b/tests/cpp/unittests/testExpData.cpp index 5f484662e4..4dacaed207 100644 --- a/tests/cpp/unittests/testExpData.cpp +++ b/tests/cpp/unittests/testExpData.cpp @@ -122,17 +122,17 @@ TEST_F(ExpDataTest, MeasurementCtor) { timepoints, edata.get_timepoints(), TEST_ATOL, TEST_RTOL, "ts" ); checkEqualArray( - y, edata.get_observed_data(), TEST_ATOL, TEST_RTOL, "observedData" + y, edata.get_measurements(), TEST_ATOL, TEST_RTOL, "observedData" ); checkEqualArray( - y_std, edata.get_observed_data_std_dev(), TEST_ATOL, TEST_RTOL, + y_std, edata.get_measurements_error(), TEST_ATOL, TEST_RTOL, "observedDataStdDev" ); checkEqualArray( - z, edata.get_observed_events(), TEST_ATOL, TEST_RTOL, "observedEvents" + z, edata.get_event_measurements(), TEST_ATOL, TEST_RTOL, "observedEvents" ); checkEqualArray( - z_std, edata.get_observed_events_std_dev(), TEST_ATOL, TEST_RTOL, + z_std, edata.get_event_measurement_error(), TEST_ATOL, TEST_RTOL, "observedEventsStdDev" ); @@ -146,21 +146,21 @@ TEST_F(ExpDataTest, MeasurementCtor) { TEST_RTOL, "ts" ); checkEqualArray( - edata_copy.get_observed_data(), edata.get_observed_data(), TEST_ATOL, + edata_copy.get_measurements(), edata.get_measurements(), TEST_ATOL, TEST_RTOL, "observedData" ); checkEqualArray( - edata_copy.get_observed_data_std_dev(), - edata.get_observed_data_std_dev(), TEST_ATOL, TEST_RTOL, + edata_copy.get_measurement_error(), + edata.get_measurement_error(), TEST_ATOL, TEST_RTOL, "observedDataStdDev" ); checkEqualArray( - edata_copy.get_observed_events(), edata.get_observed_events(), + edata_copy.get_event_measurements(), edata.get_event_measurements(), TEST_ATOL, TEST_RTOL, "observedEvents" ); checkEqualArray( - edata_copy.get_observed_events_std_dev(), - edata.get_observed_events_std_dev(), TEST_ATOL, TEST_RTOL, + edata_copy.get_event_measurement_error(), + edata.get_event_measurement_error(), TEST_ATOL, TEST_RTOL, "observedEventsStdDev" ); } @@ -217,23 +217,23 @@ TEST_F(ExpDataTest, DimensionChecks) { std::vector bad_z(nz * nmaxevent + 1, 0.0); std::vector bad_z_std(nz * nmaxevent + 1, 0.1); - ASSERT_THROW(edata.set_observed_data(bad_y), AmiException); - ASSERT_THROW(edata.set_observed_data_std_dev(bad_y_std), AmiException); - ASSERT_THROW(edata.set_observed_events(bad_z), AmiException); - ASSERT_THROW(edata.set_observed_events_std_dev(bad_y_std), AmiException); + ASSERT_THROW(edata.set_measurements(bad_y), AmiException); + ASSERT_THROW(edata.set_measurement_error(bad_y_std), AmiException); + ASSERT_THROW(edata.set_event_measurements(bad_z), AmiException); + ASSERT_THROW(edata.set_event_measurement_error(bad_y_std), AmiException); std::vector bad_single_y(edata.nt() + 1, 0.0); std::vector bad_single_y_std(edata.nt() + 1, 0.1); std::vector bad_single_z(edata.nmaxevent() + 1, 0.0); std::vector bad_single_z_std(edata.nmaxevent() + 1, 0.1); - ASSERT_THROW(edata.set_observed_data(bad_single_y, 0), AmiException); + ASSERT_THROW(edata.set_measurements(bad_single_y, 0), AmiException); ASSERT_THROW( - edata.set_observed_data_std_dev(bad_single_y_std, 0), AmiException + edata.set_measurement_error(bad_single_y_std, 0), AmiException ); - ASSERT_THROW(edata.set_observed_events(bad_single_z, 0), AmiException); + ASSERT_THROW(edata.set_event_measurements(bad_single_z, 0), AmiException); ASSERT_THROW( - edata.set_observed_events_std_dev(bad_single_y_std, 0), AmiException + edata.set_event_measurement_error(bad_single_y_std, 0), AmiException ); ASSERT_THROW( @@ -249,22 +249,22 @@ TEST_F(ExpDataTest, SettersGetters) { std::vector z(nz * nmaxevent, 0.0); std::vector z_std(nz * nmaxevent, 0.1); - edata.set_observed_data(y); + edata.set_measurements(y); checkEqualArray( - edata.get_observed_data(), y, TEST_ATOL, TEST_RTOL, "ObservedData" + edata.get_measurements(), y, TEST_ATOL, TEST_RTOL, "ObservedData" ); - edata.set_observed_data_std_dev(y_std); + edata.set_measurement_error(y_std); checkEqualArray( - edata.get_observed_data_std_dev(), y_std, TEST_ATOL, TEST_RTOL, + edata.get_measurement_error(), y_std, TEST_ATOL, TEST_RTOL, "ObservedDataStdDev" ); - edata.set_observed_events(z); + edata.set_event_measurements(z); checkEqualArray( - edata.get_observed_events(), z, TEST_ATOL, TEST_RTOL, "ObservedEvents" + edata.get_event_measurements(), z, TEST_ATOL, TEST_RTOL, "ObservedEvents" ); - edata.set_observed_events_std_dev(z_std); + edata.set_event_measurement_error(z_std); checkEqualArray( - edata.get_observed_events_std_dev(), z_std, TEST_ATOL, TEST_RTOL, + edata.get_event_measurement_error(), z_std, TEST_ATOL, TEST_RTOL, "ObservedEventsStdDev" ); @@ -272,65 +272,65 @@ TEST_F(ExpDataTest, SettersGetters) { std::vector single_y_std(edata.nt(), 0.1); for (int iy = 0; iy < ny; ++iy) { - edata.set_observed_data(single_y, iy); - edata.set_observed_data_std_dev(single_y_std, iy); + edata.set_measurements(single_y, iy); + edata.set_measurement_error(single_y_std, iy); } - ASSERT_THROW(edata.set_observed_data(single_y, ny), std::exception); - ASSERT_THROW(edata.set_observed_data(single_y, -1), std::exception); + ASSERT_THROW(edata.set_measurements(single_y, ny), std::exception); + ASSERT_THROW(edata.set_measurements(single_y, -1), std::exception); ASSERT_THROW( - edata.set_observed_data_std_dev(single_y_std, ny), std::exception + edata.set_measurement_error(single_y_std, ny), std::exception ); ASSERT_THROW( - edata.set_observed_data_std_dev(single_y_std, -1), std::exception + edata.set_measurement_error(single_y_std, -1), std::exception ); std::vector single_z(edata.nmaxevent(), 0.0); std::vector single_z_std(edata.nmaxevent(), 0.1); for (int iz = 0; iz < nz; ++iz) { - edata.set_observed_events(single_z, iz); - edata.set_observed_events_std_dev(single_z_std, iz); + edata.set_event_measurements(single_z, iz); + edata.set_event_measurement_error(single_z_std, iz); } - ASSERT_THROW(edata.set_observed_events(single_z, nz), std::exception); - ASSERT_THROW(edata.set_observed_events(single_z, -1), std::exception); + ASSERT_THROW(edata.set_event_measurements(single_z, nz), std::exception); + ASSERT_THROW(edata.set_event_measurements(single_z, -1), std::exception); ASSERT_THROW( - edata.set_observed_events_std_dev(single_z_std, nz), std::exception + edata.set_event_measurement_error(single_z_std, nz), std::exception ); ASSERT_THROW( - edata.set_observed_events_std_dev(single_z_std, -1), std::exception + edata.set_event_measurement_error(single_z_std, -1), std::exception ); - ASSERT_TRUE(edata.get_observed_data_ptr(0)); - ASSERT_TRUE(edata.get_observed_data_std_dev_ptr(0)); - ASSERT_TRUE(edata.get_observed_events_ptr(0)); - ASSERT_TRUE(edata.get_observed_events_std_dev_ptr(0)); + ASSERT_TRUE(edata.get_measurements_ptr(0)); + ASSERT_TRUE(edata.get_measurement_error_ptr(0)); + ASSERT_TRUE(edata.get_event_measurements_ptr(0)); + ASSERT_TRUE(edata.get_event_measurement_error_ptr(0)); std::vector empty(0, 0.0); - edata.set_observed_data(empty); - edata.set_observed_data_std_dev(empty); - edata.set_observed_events(empty); - edata.set_observed_events_std_dev(empty); + edata.set_measurements(empty); + edata.set_measurement_error(empty); + edata.set_event_measurements(empty); + edata.set_event_measurement_error(empty); - ASSERT_TRUE(!edata.get_observed_data_ptr(0)); - ASSERT_TRUE(!edata.get_observed_data_std_dev_ptr(0)); - ASSERT_TRUE(!edata.get_observed_events_ptr(0)); - ASSERT_TRUE(!edata.get_observed_events_std_dev_ptr(0)); + ASSERT_TRUE(!edata.get_measurements_ptr(0)); + ASSERT_TRUE(!edata.get_measurement_error_ptr(0)); + ASSERT_TRUE(!edata.get_event_measurements_ptr(0)); + ASSERT_TRUE(!edata.get_event_measurement_error_ptr(0)); checkEqualArray( - edata.get_observed_data(), empty, TEST_ATOL, TEST_RTOL, "ObservedData" + edata.get_measurements(), empty, TEST_ATOL, TEST_RTOL, "ObservedData" ); checkEqualArray( - edata.get_observed_data_std_dev(), empty, TEST_ATOL, TEST_RTOL, + edata.get_measurement_error(), empty, TEST_ATOL, TEST_RTOL, "ObservedDataStdDev" ); checkEqualArray( - edata.get_observed_events(), empty, TEST_ATOL, TEST_RTOL, + edata.get_event_measurements(), empty, TEST_ATOL, TEST_RTOL, "ObservedEvents" ); checkEqualArray( - edata.get_observed_events_std_dev(), empty, TEST_ATOL, TEST_RTOL, + edata.get_event_measurement_error(), empty, TEST_ATOL, TEST_RTOL, "ObservedEventsStdDev" ); } @@ -343,16 +343,16 @@ TEST_F(ExpDataTest, RngSeed) { // random RNG seed ExpData edata1(rdata, 1, 1, -1); - ASSERT_TRUE(edata1.get_observed_data() != rdata.y); + ASSERT_TRUE(edata1.get_measurements() != rdata.y); // fixed RNG seed ExpData edata2(rdata, 1, 1, 1); - ASSERT_TRUE(edata2.get_observed_data() != rdata.y); - ASSERT_TRUE(edata2.get_observed_data() != edata1.get_observed_data()); + ASSERT_TRUE(edata2.get_measurements() != rdata.y); + ASSERT_TRUE(edata2.get_measurements() != edata1.get_measurements()); ExpData edata3(rdata, 1, 1, 1); - ASSERT_TRUE(edata3.get_observed_data() == edata2.get_observed_data()); + ASSERT_TRUE(edata3.get_measurements() == edata2.get_measurements()); } } // namespace diff --git a/tests/performance/test.py b/tests/performance/test.py index 370a9f1788..701b02e367 100755 --- a/tests/performance/test.py +++ b/tests/performance/test.py @@ -168,8 +168,8 @@ def main(): # TODO edata = ExpData(model) edata.set_timepoints([1e8]) - edata.set_observed_data([1.0]) - edata.set_observed_data_std_dev([1.0]) + edata.set_measurements([1.0]) + edata.set_measurement_error([1.0]) prepare_simulation(arg, model, solver, edata) From b2e460ec28538bdb1ae3a1fa9f5cb91dcde09cec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Fr=C3=B6hlich?= Date: Mon, 1 Dec 2025 11:33:45 +0000 Subject: [PATCH 2/9] fixup --- src/edata.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/edata.cpp b/src/edata.cpp index 582d539786..3bbc0a14f7 100644 --- a/src/edata.cpp +++ b/src/edata.cpp @@ -124,9 +124,9 @@ ExpData::ExpData( ? sigma_z.at(iz) : sigma_z.at(iz + nztrue_ * ie); std::normal_distribution<> e{0, sigma}; - event_measurements.at(iz + rdata.nztrue * ie) + event_measurements_.at(iz + rdata.nztrue * ie) = rdata.z.at(iz + rdata.nz * ie) + e(gen); - event_measurementserror_.at(iz + rdata.nztrue * ie) = sigma; + event_measurement_error_.at(iz + rdata.nztrue * ie) = sigma; } } @@ -361,7 +361,7 @@ void ExpData::apply_data_dimension() { } void ExpData::apply_event_dimension() { - event_measurements.resize(nmaxevent_ * nztrue_, get_nan()); + event_measurements_.resize(nmaxevent_ * nztrue_, get_nan()); event_measurement_error_.resize(nmaxevent_ * nztrue_, get_nan()); } From 7f8a77fad2f978833b3130694878d950562e8ec4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Fr=C3=B6hlich?= Date: Mon, 1 Dec 2025 12:19:26 +0000 Subject: [PATCH 3/9] fixup --- tests/cpp/unittests/testExpData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cpp/unittests/testExpData.cpp b/tests/cpp/unittests/testExpData.cpp index 4dacaed207..7e42934eb9 100644 --- a/tests/cpp/unittests/testExpData.cpp +++ b/tests/cpp/unittests/testExpData.cpp @@ -125,7 +125,7 @@ TEST_F(ExpDataTest, MeasurementCtor) { y, edata.get_measurements(), TEST_ATOL, TEST_RTOL, "observedData" ); checkEqualArray( - y_std, edata.get_measurements_error(), TEST_ATOL, TEST_RTOL, + y_std, edata.get_measurement_error(), TEST_ATOL, TEST_RTOL, "observedDataStdDev" ); checkEqualArray( From 924f69e51b6ad7c350dea08a3c2e0d66cbc4f97c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Fr=C3=B6hlich?= Date: Mon, 1 Dec 2025 12:20:37 +0000 Subject: [PATCH 4/9] fixup doc --- include/amici/edata.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/amici/edata.h b/include/amici/edata.h index 432bca7804..7272fd0309 100644 --- a/include/amici/edata.h +++ b/include/amici/edata.h @@ -78,7 +78,7 @@ class ExpData : public SimulationParameters { * (dimension: nt x nytrue, row-major) * @param mz event measurements * (dimension: nmaxevents x nztrue, row-major) - * @param sigmaz standard deviation of event measurements + * @param sigma_z standard deviation of event measurements * (dimension: nmaxevents x nztrue, row-major) */ ExpData( From 60e35f7eb046d20aeca1e59bc0738d1e3998c327 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Fr=C3=B6hlich?= Date: Mon, 1 Dec 2025 12:34:20 +0000 Subject: [PATCH 5/9] rename measurement error to noise scale --- .../GettingStartedExtended.ipynb | 2 +- include/amici/edata.h | 110 +++++++++--------- .../amici/importers/petab/_petab_importer.py | 2 +- .../amici/importers/petab/v1/conditions.py | 2 +- python/sdist/amici/sim/sundials/_numpy.py | 12 +- python/sdist/amici/sim/sundials/_pandas.py | 6 +- python/tests/test_preequilibration.py | 20 ++-- python/tests/test_sbml_import.py | 6 +- .../test_sbml_import_special_functions.py | 4 +- src/edata.cpp | 84 ++++++------- src/hdf5.cpp | 12 +- src/model.cpp | 14 +-- swig/edata.i | 10 +- tests/cpp/jakstat_adjoint/tests1.cpp | 4 +- tests/cpp/unittests/testExpData.cpp | 56 ++++----- tests/performance/test.py | 2 +- 16 files changed, 172 insertions(+), 174 deletions(-) diff --git a/doc/examples/getting_started_extended/GettingStartedExtended.ipynb b/doc/examples/getting_started_extended/GettingStartedExtended.ipynb index 3592dc47b5..a497ef1f7e 100644 --- a/doc/examples/getting_started_extended/GettingStartedExtended.ipynb +++ b/doc/examples/getting_started_extended/GettingStartedExtended.ipynb @@ -1135,7 +1135,7 @@ "edata.fixed_parameters = model.get_fixed_parameters()\n", "# set sigma to 1.0 except for observable 5, so that p[7] is used instead\n", "# (if we have sigma parameterized, the corresponding ExpData entries must NaN, otherwise they will override the parameter)\n", - "edata.set_measurement_error(\n", + "edata.set_noise_scale(\n", " rdata[\"t\"] * 0 + np.nan,\n", " list(model.get_observable_ids()).index(\"observable_x1withsigma\"),\n", ")\n", diff --git a/include/amici/edata.h b/include/amici/edata.h index 7272fd0309..7f66436029 100644 --- a/include/amici/edata.h +++ b/include/amici/edata.h @@ -74,11 +74,11 @@ class ExpData : public SimulationParameters { * @param nmaxevent Maximal number of events to track * @param ts Timepoints (dimension: nt) * @param my measurements (dimension: nt x nytrue, row-major) - * @param sigma_y standard deviation of measurements + * @param sigma_y noise scale of measurements * (dimension: nt x nytrue, row-major) * @param mz event measurements * (dimension: nmaxevents x nztrue, row-major) - * @param sigma_z standard deviation of event measurements + * @param sigma_z noise scale of event measurements * (dimension: nmaxevents x nztrue, row-major) */ ExpData( @@ -101,8 +101,8 @@ class ExpData : public SimulationParameters { * distributed noise according to specified sigmas. * * @param rdata return data pointer with stored simulation results - * @param sigma_y scalar standard deviations for all observables - * @param sigma_z scalar standard deviations for all event observables + * @param sigma_y scalar noise scales for all observables + * @param sigma_z scalar noise scales for all event observables * @param seed Seed for the random number generator. If a negative number * is passed, a random seed is used. */ @@ -116,9 +116,9 @@ class ExpData : public SimulationParameters { * distributed noise according to specified sigmas. * * @param rdata return data pointer with stored simulation results - * @param sigma_y vector of standard deviations for observables + * @param sigma_y vector of noise scales for observables * (dimension: nytrue or nt x nytrue, row-major) - * @param sigma_z vector of standard deviations for event observables + * @param sigma_z vector of noise scales for event observables * (dimension: nztrue or nmaxevent x nztrue, row-major) * @param seed Seed for the random number generator. If a negative number * is passed, a random seed is used. @@ -236,63 +236,63 @@ class ExpData : public SimulationParameters { realtype const* get_measurements_ptr(int it) const; /** - * @brief Set standard deviations for measurements. + * @brief Set noise scales for measurements. * - * @param measurement_error standard deviation of observed data + * @param noise_scale noise scale of observed data * (dimension: nt x nytrue, row-major) */ - void set_measurement_error(std::vector const& measurement_error); + void set_noise_scale(std::vector const& noise_scale); /** - * @brief Set identical standard deviation for all measurements. + * @brief Set identical noise scale for all measurements. * - * @param sigma standard deviation (dimension: scalar) + * @param sigma noise scale (dimension: scalar) */ - void set_measurement_error(realtype sigma); + void set_noise_scale(realtype sigma); /** - * @brief Set standard deviations of observed data for a + * @brief Set noise scales of observed data for a * specific observable index. * - * @param sigma standard deviation of observed data (dimension: + * @param sigma noise scale of observed data (dimension: * nt) * @param iy observed data index */ - void set_measurement_error(std::vector const& sigma, int iy); + void set_noise_scale(std::vector const& sigma, int iy); /** - * @brief Set all standard deviation for a given observable index to the + * @brief Set all noise scale for a given observable index to the * input value. * - * @param sigma standard deviation (dimension: scalar) + * @param sigma noise scale (dimension: scalar) * @param iy observed data index */ - void set_measurement_error(realtype sigma, int iy); + void set_noise_scale(realtype sigma, int iy); /** - * @brief Whether standard deviation for a measurement at + * @brief Whether noise scale for a measurement at * specified timepoint- and observable index has been set. * * @param it time index * @param iy observable index - * @return boolean specifying if standard deviation of data was set + * @return boolean specifying if noise scale of data was set */ - bool is_set_measurement_error(int it, int iy) const; + bool is_set_noise_scale(int it, int iy) const; /** - * @brief Get measurement standard deviations. + * @brief Get measurement noise scales. * - * @return standard deviation of observed data + * @return noise scale of observed data */ - std::vector const& get_measurement_error() const; + std::vector const& get_noise_scale() const; /** - * @brief Get pointer to measurement standard deviations. + * @brief Get pointer to measurement noise scales. * * @param it timepoint index - * @return pointer to standard deviation of observed data at index + * @return pointer to noise scale of observed data at index */ - realtype const* get_measurement_error_ptr(int it) const; + realtype const* get_noise_scale_ptr(int it) const; /** * @brief Set observed event data. @@ -337,66 +337,66 @@ class ExpData : public SimulationParameters { realtype const* get_event_measurements_ptr(int ie) const; /** - * @brief Set standard deviation of observed event data. + * @brief Set noise scale of observed event data. * - * @param sigma standard deviation of observed event data + * @param sigma noise scale of observed event data */ - void set_event_measurement_error(std::vector const& sigma); + void set_event_noise_scale(std::vector const& sigma); /** - * @brief Set standard deviation of observed event data. + * @brief Set noise scale of observed event data. * - * @param sigma standard deviation (dimension: scalar) + * @param sigma noise scale (dimension: scalar) */ - void set_event_measurement_error(realtype sigma); + void set_event_noise_scale(realtype sigma); /** - * @brief Set standard deviation of observed data for a specific observable. + * @brief Set noise scale of observed data for a specific observable. * - * @param sigma standard deviation of observed data + * @param sigma noise scale of observed data * (dimension: nmaxevent) * @param iz observed data index */ - void set_event_measurement_error(std::vector const& sigma, int iz); + void set_event_noise_scale(std::vector const& sigma, int iz); /** - * @brief Set all standard deviations of a specific event-observable. + * @brief Set all noise scales of a specific event-observable. * - * @param sigma standard deviation (dimension: scalar) + * @param sigma noise scale (dimension: scalar) * @param iz observed data index */ - void set_event_measurement_error(realtype sigma, int iz); + void set_event_noise_scale(realtype sigma, int iz); /** - * @brief Check whether standard deviation of event data + * @brief Check whether noise scale of event data * at specified indices has been set. * * @param ie event index * @param iz event observable index - * @return boolean specifying if standard deviation of event data was set + * @return boolean specifying if noise scale of event data was set */ - bool is_set_event_measurement_error(int ie, int iz) const; + bool is_set_event_noise_scale(int ie, int iz) const; /** - * @brief Get standard deviation of observed event data. + * @brief Get noise scale of observed event data. * - * @return standard deviation of observed event data + * @return noise scale of observed event data */ - std::vector const& get_event_measurement_error() const; + std::vector const& get_event_noise_scale() const; /** - * @brief Get pointer to standard deviation of + * @brief Get pointer to noise scale of * observed event data at ie-th occurrence. * * @param ie event occurrence * - * @return pointer to standard deviation of observed event data at ie-th + * @return pointer to noise scale of observed event data at ie-th * occurrence */ - realtype const* get_event_measurement_error_ptr(int ie) const; + realtype const* get_event_noise_scale_ptr(int ie) const; /** - * @brief Set all observations and their standard deviations to NaN. + * @brief Set all observations and their noise scales to NaN. * * Useful, e.g., after calling ExpData::setTimepoints. */ @@ -458,10 +458,10 @@ class ExpData : public SimulationParameters { std::vector measurements_; /** - * @brief standard deviation of observed data (dimension: nt x nytrue, + * @brief noise scale of observed data (dimension: nt x nytrue, * row-major) */ - std::vector measurement_error_; + std::vector noise_scale_; /** * @brief observed events (dimension: nmaxevents x nztrue, row-major) @@ -469,10 +469,10 @@ class ExpData : public SimulationParameters { std::vector event_measurements_; /** - * @brief standard deviation of observed events/roots + * @brief noise scale of observed events/roots * (dimension: nmaxevents x nztrue, row-major) */ - std::vector event_measurement_error_; + std::vector event_noise_scale_; }; /** @@ -487,10 +487,10 @@ inline bool operator==(ExpData const& lhs, ExpData const& rhs) { && lhs.id == rhs.id && lhs.nytrue_ == rhs.nytrue_ && lhs.nztrue_ == rhs.nztrue_ && lhs.nmaxevent_ == rhs.nmaxevent_ && is_equal(lhs.measurements_, rhs.measurements_) - && is_equal(lhs.measurement_error_, rhs.measurement_error_) + && is_equal(lhs.noise_scale_, rhs.noise_scale_) && is_equal(lhs.event_measurements_, rhs.event_measurements_) && is_equal( - lhs.event_measurement_error_, rhs.event_measurement_error_ + lhs.event_noise_scale_, rhs.event_noise_scale_ ); } diff --git a/python/sdist/amici/importers/petab/_petab_importer.py b/python/sdist/amici/importers/petab/_petab_importer.py index b2954c7436..0416cf394a 100644 --- a/python/sdist/amici/importers/petab/_petab_importer.py +++ b/python/sdist/amici/importers/petab/_petab_importer.py @@ -810,7 +810,7 @@ def _set_timepoints_and_measurements( observable_ids=self._model.get_observable_ids(), ) edata.set_measurements(y.flatten()) - edata.set_measurement_error(sigma_y.flatten()) + edata.set_noise_scale(sigma_y.flatten()) def _get_measurements_and_sigmas( self, diff --git a/python/sdist/amici/importers/petab/v1/conditions.py b/python/sdist/amici/importers/petab/v1/conditions.py index 84dcc2d9ea..7fcf8f6bb6 100644 --- a/python/sdist/amici/importers/petab/v1/conditions.py +++ b/python/sdist/amici/importers/petab/v1/conditions.py @@ -390,7 +390,7 @@ def create_edata_for_condition( observable_ids=observable_ids, ) edata.set_measurements(y.flatten()) - edata.set_measurement_error(sigma_y.flatten()) + edata.set_noise_scale(sigma_y.flatten()) return edata diff --git a/python/sdist/amici/sim/sundials/_numpy.py b/python/sdist/amici/sim/sundials/_numpy.py index 7f2c73aa91..f8349222fc 100644 --- a/python/sdist/amici/sim/sundials/_numpy.py +++ b/python/sdist/amici/sim/sundials/_numpy.py @@ -541,9 +541,9 @@ class ExpDataView(SwigPtrView): _field_names = [ "ts", "measurements", - "measurement_error", + "noise_scale", "event_measurements", - "event_measurement_error", + "event_noise_scale", "fixed_parameters", "fixed_parameters_pre_equilibration", "fixed_parameters_presimulation", @@ -563,10 +563,10 @@ def __init__(self, edata: ExpDataPtr | ExpData): "ts": [edata.nt()], # observables "measurements": [edata.nt(), edata.nytrue()], - "measurement_error": [edata.nt(), edata.nytrue()], + "noise_scale": [edata.nt(), edata.nytrue()], # event observables "event_measurements": [edata.nmaxevent(), edata.nztrue()], - "event_measurement_error": [edata.nmaxevent(), edata.nztrue()], + "event_noise_scale": [edata.nmaxevent(), edata.nztrue()], # fixed parameters "fixed_parameters": [len(edata.fixed_parameters)], "fixed_parameters_pre_equilibration": [ @@ -578,9 +578,9 @@ def __init__(self, edata: ExpDataPtr | ExpData): } edata.ts = edata.timepoints edata.measurements = edata.get_measurements() - edata.measurement_error = edata.get_measurement_error() + edata.noise_scale = edata.get_noise_scale() edata.event_measurements = edata.get_event_measurements() - edata.event_measurement_error = edata.get_event_measurement_error() + edata.event_noise_scale = edata.get_event_noise_scale() super().__init__(edata) diff --git a/python/sdist/amici/sim/sundials/_pandas.py b/python/sdist/amici/sim/sundials/_pandas.py index 84799b7ca2..f75954c90f 100644 --- a/python/sdist/amici/sim/sundials/_pandas.py +++ b/python/sdist/amici/sim/sundials/_pandas.py @@ -113,9 +113,7 @@ def get_data_observables_as_data_frame( _get_names_or_ids(model, "observable", by_id=by_id) ): datadict[obs] = npdata["measurements"][i_time, i_obs] - datadict[obs + "_std"] = npdata["measurement_error"][ - i_time, i_obs - ] + datadict[obs + "_std"] = npdata["noise_scale"][i_time, i_obs] # add conditions _fill_conditions_dict(datadict, model, edata, by_id=by_id) @@ -797,7 +795,7 @@ def construct_edata_from_data_frame( if obs in df.keys(): edata.set_measurements(df[obs].values.astype(float), obs_index) if obs + "_std" in df.keys(): - edata.set_measurement_error( + edata.set_noise_scale( df[obs + "_std"].values.astype(float), obs_index ) diff --git a/python/tests/test_preequilibration.py b/python/tests/test_preequilibration.py index 711faff96f..0378304feb 100644 --- a/python/tests/test_preequilibration.py +++ b/python/tests/test_preequilibration.py @@ -232,21 +232,21 @@ def test_data_replicates(preeq_fixture): # add infty timepoint y = edata.get_measurements() - stdy = edata.get_measurement_error() + stdy = edata.get_noise_scale() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) edata.set_measurements(np.hstack([y, y[0]])) - edata.set_measurement_error(np.hstack([stdy, stdy[0]])) + edata.set_noise_scale(np.hstack([stdy, stdy[0]])) rdata_single = run_simulation(model, solver, edata) # duplicate data and timepoints y = edata.get_measurements() - stdy = edata.get_measurement_error() + stdy = edata.get_noise_scale() ts = np.hstack([*edata.get_timepoints(), *edata.get_timepoints()]) idx = np.argsort(ts) edata.set_timepoints(sorted(ts)) edata.set_measurements(np.hstack([y, y])[idx]) - edata.set_measurement_error(np.hstack([stdy, stdy])[idx]) + edata.set_noise_scale(np.hstack([stdy, stdy])[idx]) rdata_double = run_simulation(model, solver, edata) @@ -347,11 +347,11 @@ def test_equilibration_methods_with_adjoints(preeq_fixture): # add infty timepoint y = edata.get_measurements() - stdy = edata.get_measurement_error() + stdy = edata.get_noise_scale() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) edata.set_measurements(np.hstack([y, y[0]])) - edata.set_measurement_error(np.hstack([stdy, stdy[0]])) + edata.set_noise_scale(np.hstack([stdy, stdy[0]])) rdatas = {} equil_meths = [ @@ -414,11 +414,11 @@ def test_newton_solver_equilibration(preeq_fixture): # add infty timepoint y = edata.get_measurements() - stdy = edata.get_measurement_error() + stdy = edata.get_noise_scale() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) edata.set_measurements(np.hstack([y, y[0]])) - edata.set_measurement_error(np.hstack([stdy, stdy[0]])) + edata.set_noise_scale(np.hstack([stdy, stdy[0]])) rdatas = {} settings = [ @@ -474,11 +474,11 @@ def test_newton_steadystate_check(preeq_fixture): # add infty timepoint y = edata.get_measurements() - stdy = edata.get_measurement_error() + stdy = edata.get_noise_scale() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) edata.set_measurements(np.hstack([y, y[0]])) - edata.set_measurement_error(np.hstack([stdy, stdy[0]])) + edata.set_noise_scale(np.hstack([stdy, stdy[0]])) # set sensi method sensi_meth = SensitivityMethod.forward diff --git a/python/tests/test_sbml_import.py b/python/tests/test_sbml_import.py index 88e2fe17f0..b1e2c593db 100644 --- a/python/tests/test_sbml_import.py +++ b/python/tests/test_sbml_import.py @@ -202,7 +202,7 @@ def test_sbml2amici_observable_dependent_error( rdata.sigmay[:, 1], 0.02 * rdata.y[:, 1], rtol=1.0e-5, atol=1.0e-8 ) edata = ExpData(rdata, 1.0, 0.0) - edata.set_measurement_error(np.nan) + edata.set_noise_scale(np.nan) # check sensitivities solver.set_sensitivity_order(SensitivityOrder.first) @@ -338,7 +338,7 @@ def test_presimulation_events(tempdir): edata_tmp = ExpData(rdata, 1, 0) edata.set_timepoints(np.array(edata_tmp.get_timepoints()) + 0.1) edata.set_measurements(edata_tmp.get_measurements()) - edata.set_measurement_error(edata_tmp.get_measurement_error()) + edata.set_noise_scale(edata_tmp.get_noise_scale()) # sensitivities w.r.t. t_initial_presim (trigger time of an initial event) # are not supported @@ -419,7 +419,7 @@ def test_presimulation_events_and_sensitivities(tempdir): edata_tmp = ExpData(rdata, 1, 0) edata.set_timepoints(np.array(edata_tmp.get_timepoints()) + 0.1) edata.set_measurements(edata_tmp.get_measurements()) - edata.set_measurement_error(edata_tmp.get_measurement_error()) + edata.set_noise_scale(edata_tmp.get_noise_scale()) solver.set_sensitivity_order(SensitivityOrder.first) diff --git a/python/tests/test_sbml_import_special_functions.py b/python/tests/test_sbml_import_special_functions.py index ec6622cf5f..577946036c 100644 --- a/python/tests/test_sbml_import_special_functions.py +++ b/python/tests/test_sbml_import_special_functions.py @@ -79,7 +79,7 @@ def test_special_likelihoods(model_special_likelihoods): # set sigmas sigma = 0.2 sigmas = sigma * np.ones(len(y)) - edata.set_measurement_error(sigmas) + edata.set_noise_scale(sigmas) # and now run for real and also compute likelihood values rdata = run_simulations(model, solver, [edata])[0] @@ -129,7 +129,7 @@ def test_special_likelihoods(model_special_likelihoods): y = edata.get_measurements() y = tuple(val * np.random.uniform(0.5, 3) for val in y) edata.set_measurements(y) - edata.set_measurement_error(sigmas) + edata.set_noise_scale(sigmas) # and now run for real and also compute likelihood values rdata = run_simulations(model, solver, [edata])[0] diff --git a/src/edata.cpp b/src/edata.cpp index 3bbc0a14f7..105d5279af 100644 --- a/src/edata.cpp +++ b/src/edata.cpp @@ -55,9 +55,9 @@ ExpData::ExpData( , nmaxevent_(nmaxevent) { apply_dimensions(); set_measurements(my); - set_measurement_error(sigma_y); + set_noise_scale(sigma_y); set_event_measurements(mz); - set_event_measurement_error(sigma_z); + set_event_noise_scale(sigma_z); } ExpData::ExpData(Model const& model) @@ -114,7 +114,7 @@ ExpData::ExpData( std::normal_distribution<> e{0, sigma}; measurements_.at(iy + nytrue_ * it) = rdata.y.at(iy + rdata.ny * it) + e(gen); - measurement_error_.at(iy + nytrue_ * it) = sigma; + noise_scale_.at(iy + nytrue_ * it) = sigma; } } @@ -126,7 +126,7 @@ ExpData::ExpData( std::normal_distribution<> e{0, sigma}; event_measurements_.at(iz + rdata.nztrue * ie) = rdata.z.at(iz + rdata.nz * ie) + e(gen); - event_measurement_error_.at(iz + rdata.nztrue * ie) = sigma; + event_noise_scale_.at(iz + rdata.nztrue * ie) = sigma; } } @@ -191,24 +191,24 @@ realtype const* ExpData::get_measurements_ptr(int const it) const { return nullptr; } -void ExpData::set_measurement_error( +void ExpData::set_noise_scale( std::vector const& sigma_y ) { check_data_dimension(sigma_y, "sigma_y"); check_sigma_positivity(sigma_y, "sigma_y"); if (sigma_y.size() == static_cast(nt()) * nytrue_) - measurement_error_ = sigma_y; + noise_scale_ = sigma_y; else if (sigma_y.empty()) - measurement_error_.clear(); + noise_scale_.clear(); } -void ExpData::set_measurement_error(realtype const sigma) { +void ExpData::set_noise_scale(realtype const sigma) { check_sigma_positivity(sigma, "sigma"); - std::ranges::fill(measurement_error_, sigma); + std::ranges::fill(noise_scale_, sigma); } -void ExpData::set_measurement_error( +void ExpData::set_noise_scale( std::vector const& sigma_y, int const iy ) { if (sigma_y.size() != static_cast(nt())) @@ -219,28 +219,28 @@ void ExpData::set_measurement_error( check_sigma_positivity(sigma_y, "sigma_y"); for (int it = 0; it < nt(); ++it) - measurement_error_.at(iy + it * nytrue_) + noise_scale_.at(iy + it * nytrue_) = sigma_y.at(it); } -void ExpData::set_measurement_error(realtype const sigma, int const iy) { +void ExpData::set_noise_scale(realtype const sigma, int const iy) { check_sigma_positivity(sigma, "sigma"); for (int it = 0; it < nt(); ++it) - measurement_error_.at(iy + it * nytrue_) = sigma; + noise_scale_.at(iy + it * nytrue_) = sigma; } -bool ExpData::is_set_measurement_error(int const it, int const iy) const { - return !measurement_error_.empty() - && !isnan(measurement_error_.at(it * nytrue_ + iy)); +bool ExpData::is_set_noise_scale(int const it, int const iy) const { + return !noise_scale_.empty() + && !isnan(noise_scale_.at(it * nytrue_ + iy)); } -std::vector const& ExpData::get_measurement_error() const { - return measurement_error_; +std::vector const& ExpData::get_noise_scale() const { + return noise_scale_; } -realtype const* ExpData::get_measurement_error_ptr(int const it) const { - if (!measurement_error_.empty()) - return &measurement_error_.at(it * nytrue_); +realtype const* ExpData::get_noise_scale_ptr(int const it) const { + if (!noise_scale_.empty()) + return &noise_scale_.at(it * nytrue_); return nullptr; } @@ -285,24 +285,24 @@ realtype const* ExpData::get_event_measurements_ptr(int const ie) const { return nullptr; } -void ExpData::set_event_measurement_error( +void ExpData::set_event_noise_scale( std::vector const& sigma_z ) { check_events_dimension(sigma_z, "sigma_z"); check_sigma_positivity(sigma_z, "sigma_z"); if (sigma_z.size() == (unsigned)nmaxevent_ * nztrue_) - event_measurement_error_ = sigma_z; + event_noise_scale_ = sigma_z; else if (sigma_z.empty()) - event_measurement_error_.clear(); + event_noise_scale_.clear(); } -void ExpData::set_event_measurement_error(realtype const sigma) { +void ExpData::set_event_noise_scale(realtype const sigma) { check_sigma_positivity(sigma, "sigma"); - std::ranges::fill(event_measurement_error_, sigma); + std::ranges::fill(event_noise_scale_, sigma); } -void ExpData::set_event_measurement_error( +void ExpData::set_event_noise_scale( std::vector const& sigma_z, int const iz ) { if (sigma_z.size() != (unsigned)nmaxevent_) @@ -314,40 +314,40 @@ void ExpData::set_event_measurement_error( check_sigma_positivity(sigma_z, "sigma_z"); for (int ie = 0; ie < nmaxevent_; ++ie) - event_measurement_error_.at(iz + ie * nztrue_) + event_noise_scale_.at(iz + ie * nztrue_) = sigma_z.at(ie); } -void ExpData::set_event_measurement_error(realtype const sigma, int const iz) { +void ExpData::set_event_noise_scale(realtype const sigma, int const iz) { check_sigma_positivity(sigma, "sigma"); for (int ie = 0; ie < nmaxevent_; ++ie) - event_measurement_error_.at(iz + ie * nztrue_) = sigma; + event_noise_scale_.at(iz + ie * nztrue_) = sigma; } -bool ExpData::is_set_event_measurement_error(int const ie, int const iz) const { - if (!event_measurement_error_.empty()) // avoid out of bound memory access - return !isnan(event_measurement_error_.at(ie * nztrue_ + iz)); +bool ExpData::is_set_event_noise_scale(int const ie, int const iz) const { + if (!event_noise_scale_.empty()) // avoid out of bound memory access + return !isnan(event_noise_scale_.at(ie * nztrue_ + iz)); return false; } -std::vector const& ExpData::get_event_measurement_error() const { - return event_measurement_error_; +std::vector const& ExpData::get_event_noise_scale() const { + return event_noise_scale_; } -realtype const* ExpData::get_event_measurement_error_ptr(int const ie) const { - if (!event_measurement_error_.empty()) - return &event_measurement_error_.at(ie * nztrue_); +realtype const* ExpData::get_event_noise_scale_ptr(int const ie) const { + if (!event_noise_scale_.empty()) + return &event_noise_scale_.at(ie * nztrue_); return nullptr; } void ExpData::clear_observations() { std::ranges::fill(measurements_, get_nan()); - std::ranges::fill(measurement_error_, get_nan()); + std::ranges::fill(noise_scale_, get_nan()); std::ranges::fill(event_measurements_, get_nan()); - std::ranges::fill(event_measurement_error_, get_nan()); + std::ranges::fill(event_noise_scale_, get_nan()); } void ExpData::apply_dimensions() { @@ -357,12 +357,12 @@ void ExpData::apply_dimensions() { void ExpData::apply_data_dimension() { measurements_.resize(nt() * nytrue_, get_nan()); - measurement_error_.resize(nt() * nytrue_, get_nan()); + noise_scale_.resize(nt() * nytrue_, get_nan()); } void ExpData::apply_event_dimension() { event_measurements_.resize(nmaxevent_ * nztrue_, get_nan()); - event_measurement_error_.resize(nmaxevent_ * nztrue_, get_nan()); + event_noise_scale_.resize(nmaxevent_ * nztrue_, get_nan()); } void ExpData::check_data_dimension( diff --git a/src/hdf5.cpp b/src/hdf5.cpp index 5377e72fd4..21f69b37fd 100644 --- a/src/hdf5.cpp +++ b/src/hdf5.cpp @@ -138,7 +138,7 @@ std::unique_ptr read_exp_data_from_hdf5( auto const sigmay = get_double_2d_dataset(file, hdf5Root + "/Sigma_Y", m, n); check_measurement_dimensions_compatible(m, n, model); - edata->set_measurement_error(sigmay); + edata->set_noise_scale(sigmay); } else { throw AmiException( "Missing %s/Sigma_Y in %s", hdf5Root.c_str(), @@ -162,7 +162,7 @@ std::unique_ptr read_exp_data_from_hdf5( auto sigmaz = get_double_2d_dataset(file, hdf5Root + "/Sigma_Z", m, n); check_event_dimensions_compatible(m, n, model); - edata->set_event_measurement_error(sigmaz); + edata->set_event_noise_scale(sigmaz); } else { throw AmiException( "Missing %s/Sigma_Z in %s", hdf5Root.c_str(), @@ -298,9 +298,9 @@ void write_exp_data_to_hdf5( file, hdf5Location + "/Y", edata.get_measurements(), edata.nt(), edata.nytrue() ); - if (!edata.get_measurement_error().empty()) + if (!edata.get_noise_scale().empty()) create_and_write_double_2d_dataset( - file, hdf5Location + "/Sigma_Y", edata.get_measurement_error(), + file, hdf5Location + "/Sigma_Y", edata.get_noise_scale(), edata.nt(), edata.nytrue() ); if (!edata.get_event_measurements().empty()) @@ -308,10 +308,10 @@ void write_exp_data_to_hdf5( file, hdf5Location + "/Z", edata.get_event_measurements(), edata.nmaxevent(), edata.nztrue() ); - if (!edata.get_event_measurement_error().empty()) + if (!edata.get_event_noise_scale().empty()) create_and_write_double_2d_dataset( file, hdf5Location + "/Sigma_Z", - edata.get_event_measurement_error(), edata.nmaxevent(), + edata.get_event_noise_scale(), edata.nmaxevent(), edata.nztrue() ); diff --git a/src/model.cpp b/src/model.cpp index ae22773ad8..8b44e425fe 100644 --- a/src/model.cpp +++ b/src/model.cpp @@ -2128,11 +2128,11 @@ void Model::fsigmay(int const it, ExpData const* edata) { ); if (edata) { - auto sigmay_edata = edata->get_measurement_error_ptr(it); + auto sigmay_edata = edata->get_noise_scale_ptr(it); /* extract the value for the standard deviation from ExpData, * if the data value is NaN, use the parameter value */ for (int iytrue = 0; iytrue < nytrue; iytrue++) { - if (edata->is_set_measurement_error(it, iytrue)) + if (edata->is_set_noise_scale(it, iytrue)) derived_state_.sigmay_.at(iytrue) = sigmay_edata[iytrue]; /* TODO: when moving second order code to cpp, verify @@ -2174,7 +2174,7 @@ void Model::fdsigmaydp(int const it, ExpData const* edata) { // to zero if (edata) { for (int iy = 0; iy < nytrue; iy++) { - if (!edata->is_set_measurement_error(it, iy)) + if (!edata->is_set_noise_scale(it, iy)) continue; for (int ip = 0; ip < nplist(); ip++) { derived_state_.dsigmaydp_.at(ip * ny + iy) = 0.0; @@ -2206,7 +2206,7 @@ void Model::fdsigmaydy(int const it, ExpData const* edata) { // to zero if (edata) { for (int isigmay = 0; isigmay < nytrue; ++isigmay) { - if (!edata->is_set_measurement_error(it, isigmay)) + if (!edata->is_set_noise_scale(it, isigmay)) continue; for (int iy = 0; iy < nytrue; ++iy) { derived_state_.dsigmaydy_.at(isigmay * ny + iy) = 0.0; @@ -2491,9 +2491,9 @@ void Model::fsigmaz( if (edata) { for (int iztrue = 0; iztrue < nztrue; iztrue++) { if (z2event_.at(iztrue) == ie) { - if (edata->is_set_event_measurement_error(nroots, iztrue)) { + if (edata->is_set_event_noise_scale(nroots, iztrue)) { auto sigmaz_edata - = edata->get_event_measurement_error_ptr(nroots); + = edata->get_event_noise_scale_ptr(nroots); derived_state_.sigmaz_.at(iztrue) = sigmaz_edata[iztrue]; } @@ -2534,7 +2534,7 @@ void Model::fdsigmazdp( if (edata) { for (int iz = 0; iz < nztrue; iz++) { if (z2event_.at(iz) == ie - && !edata->is_set_event_measurement_error(nroots, iz)) { + && !edata->is_set_event_noise_scale(nroots, iz)) { for (int ip = 0; ip < nplist(); ip++) derived_state_.dsigmazdp_.at(iz + nz * ip) = 0; } diff --git a/swig/edata.i b/swig/edata.i index 1f6f775a9c..57d8cf8b16 100644 --- a/swig/edata.i +++ b/swig/edata.i @@ -8,7 +8,7 @@ using namespace amici; %ignore ConditionContext; %ignore get_measurements_ptr; -%ignore get_measurement_error_ptr; +%ignore get_noise_scale_ptr; %feature("pythonprepend") amici::ExpData::ExpData %{ """ @@ -37,7 +37,7 @@ def _edata_repr(self: "ExpData"): iy in range(self.nytrue()) ) n_sigma_y = sum( - self.is_set_measurement_error(it, iy) + self.is_set_noise_scale(it, iy) for it in range(self.nt()) for iy in range(self.nytrue()) ) @@ -47,7 +47,7 @@ def _edata_repr(self: "ExpData"): for iz in range(self.nztrue()) ) n_sigma_z = sum( - self.is_set_event_measurement_error(ie, iz) + self.is_set_event_noise_scale(ie, iz) for ie in range(self.nmaxevent()) for iz in range(self.nztrue()) ) @@ -115,9 +115,9 @@ def __reduce__(self): self.nmaxevent(), self.get_timepoints(), self.get_measurements(), - self.get_measurement_error(), + self.get_noise_scale(), self.get_event_measurements(), - self.get_event_measurement_error(), + self.get_event_noise_scale(), ), dict(self) ), diff --git a/tests/cpp/jakstat_adjoint/tests1.cpp b/tests/cpp/jakstat_adjoint/tests1.cpp index 8ae95b7d0f..5699b68ce3 100644 --- a/tests/cpp/jakstat_adjoint/tests1.cpp +++ b/tests/cpp/jakstat_adjoint/tests1.cpp @@ -95,7 +95,7 @@ TEST(ExampleJakstatAdjoint, SensitivityReplicates) } } edata.set_measurements(d); - edata.set_measurement_error(1.0); + edata.set_noise_scale(1.0); solver->set_sensitivity_order(amici::SensitivityOrder::none); auto rdata1 = run_simulation(*solver, &edata, *model); @@ -114,7 +114,7 @@ TEST(ExampleJakstatAdjoint, SensitivityReplicates) } } edata.set_measurements(d); - edata.set_measurement_error(1.0); + edata.set_noise_scale(1.0); solver->set_sensitivity_order(amici::SensitivityOrder::first); solver->set_sensitivity_method(amici::SensitivityMethod::forward); diff --git a/tests/cpp/unittests/testExpData.cpp b/tests/cpp/unittests/testExpData.cpp index 7e42934eb9..5108e99f26 100644 --- a/tests/cpp/unittests/testExpData.cpp +++ b/tests/cpp/unittests/testExpData.cpp @@ -125,14 +125,14 @@ TEST_F(ExpDataTest, MeasurementCtor) { y, edata.get_measurements(), TEST_ATOL, TEST_RTOL, "observedData" ); checkEqualArray( - y_std, edata.get_measurement_error(), TEST_ATOL, TEST_RTOL, + y_std, edata.get_noise_scale(), TEST_ATOL, TEST_RTOL, "observedDataStdDev" ); checkEqualArray( z, edata.get_event_measurements(), TEST_ATOL, TEST_RTOL, "observedEvents" ); checkEqualArray( - z_std, edata.get_event_measurement_error(), TEST_ATOL, TEST_RTOL, + z_std, edata.get_event_noise_scale(), TEST_ATOL, TEST_RTOL, "observedEventsStdDev" ); @@ -150,8 +150,8 @@ TEST_F(ExpDataTest, MeasurementCtor) { TEST_RTOL, "observedData" ); checkEqualArray( - edata_copy.get_measurement_error(), - edata.get_measurement_error(), TEST_ATOL, TEST_RTOL, + edata_copy.get_noise_scale(), + edata.get_noise_scale(), TEST_ATOL, TEST_RTOL, "observedDataStdDev" ); checkEqualArray( @@ -159,8 +159,8 @@ TEST_F(ExpDataTest, MeasurementCtor) { TEST_ATOL, TEST_RTOL, "observedEvents" ); checkEqualArray( - edata_copy.get_event_measurement_error(), - edata.get_event_measurement_error(), TEST_ATOL, TEST_RTOL, + edata_copy.get_event_noise_scale(), + edata.get_event_noise_scale(), TEST_ATOL, TEST_RTOL, "observedEventsStdDev" ); } @@ -218,9 +218,9 @@ TEST_F(ExpDataTest, DimensionChecks) { std::vector bad_z_std(nz * nmaxevent + 1, 0.1); ASSERT_THROW(edata.set_measurements(bad_y), AmiException); - ASSERT_THROW(edata.set_measurement_error(bad_y_std), AmiException); + ASSERT_THROW(edata.set_noise_scale(bad_y_std), AmiException); ASSERT_THROW(edata.set_event_measurements(bad_z), AmiException); - ASSERT_THROW(edata.set_event_measurement_error(bad_y_std), AmiException); + ASSERT_THROW(edata.set_event_noise_scale(bad_y_std), AmiException); std::vector bad_single_y(edata.nt() + 1, 0.0); std::vector bad_single_y_std(edata.nt() + 1, 0.1); @@ -229,11 +229,11 @@ TEST_F(ExpDataTest, DimensionChecks) { ASSERT_THROW(edata.set_measurements(bad_single_y, 0), AmiException); ASSERT_THROW( - edata.set_measurement_error(bad_single_y_std, 0), AmiException + edata.set_noise_scale(bad_single_y_std, 0), AmiException ); ASSERT_THROW(edata.set_event_measurements(bad_single_z, 0), AmiException); ASSERT_THROW( - edata.set_event_measurement_error(bad_single_y_std, 0), AmiException + edata.set_event_noise_scale(bad_single_y_std, 0), AmiException ); ASSERT_THROW( @@ -253,18 +253,18 @@ TEST_F(ExpDataTest, SettersGetters) { checkEqualArray( edata.get_measurements(), y, TEST_ATOL, TEST_RTOL, "ObservedData" ); - edata.set_measurement_error(y_std); + edata.set_noise_scale(y_std); checkEqualArray( - edata.get_measurement_error(), y_std, TEST_ATOL, TEST_RTOL, + edata.get_noise_scale(), y_std, TEST_ATOL, TEST_RTOL, "ObservedDataStdDev" ); edata.set_event_measurements(z); checkEqualArray( edata.get_event_measurements(), z, TEST_ATOL, TEST_RTOL, "ObservedEvents" ); - edata.set_event_measurement_error(z_std); + edata.set_event_noise_scale(z_std); checkEqualArray( - edata.get_event_measurement_error(), z_std, TEST_ATOL, TEST_RTOL, + edata.get_event_noise_scale(), z_std, TEST_ATOL, TEST_RTOL, "ObservedEventsStdDev" ); @@ -273,15 +273,15 @@ TEST_F(ExpDataTest, SettersGetters) { for (int iy = 0; iy < ny; ++iy) { edata.set_measurements(single_y, iy); - edata.set_measurement_error(single_y_std, iy); + edata.set_noise_scale(single_y_std, iy); } ASSERT_THROW(edata.set_measurements(single_y, ny), std::exception); ASSERT_THROW(edata.set_measurements(single_y, -1), std::exception); ASSERT_THROW( - edata.set_measurement_error(single_y_std, ny), std::exception + edata.set_noise_scale(single_y_std, ny), std::exception ); ASSERT_THROW( - edata.set_measurement_error(single_y_std, -1), std::exception + edata.set_noise_scale(single_y_std, -1), std::exception ); std::vector single_z(edata.nmaxevent(), 0.0); @@ -289,40 +289,40 @@ TEST_F(ExpDataTest, SettersGetters) { for (int iz = 0; iz < nz; ++iz) { edata.set_event_measurements(single_z, iz); - edata.set_event_measurement_error(single_z_std, iz); + edata.set_event_noise_scale(single_z_std, iz); } ASSERT_THROW(edata.set_event_measurements(single_z, nz), std::exception); ASSERT_THROW(edata.set_event_measurements(single_z, -1), std::exception); ASSERT_THROW( - edata.set_event_measurement_error(single_z_std, nz), std::exception + edata.set_event_noise_scale(single_z_std, nz), std::exception ); ASSERT_THROW( - edata.set_event_measurement_error(single_z_std, -1), std::exception + edata.set_event_noise_scale(single_z_std, -1), std::exception ); ASSERT_TRUE(edata.get_measurements_ptr(0)); - ASSERT_TRUE(edata.get_measurement_error_ptr(0)); + ASSERT_TRUE(edata.get_noise_scale_ptr(0)); ASSERT_TRUE(edata.get_event_measurements_ptr(0)); - ASSERT_TRUE(edata.get_event_measurement_error_ptr(0)); + ASSERT_TRUE(edata.get_event_noise_scale_ptr(0)); std::vector empty(0, 0.0); edata.set_measurements(empty); - edata.set_measurement_error(empty); + edata.set_noise_scale(empty); edata.set_event_measurements(empty); - edata.set_event_measurement_error(empty); + edata.set_event_noise_scale(empty); ASSERT_TRUE(!edata.get_measurements_ptr(0)); - ASSERT_TRUE(!edata.get_measurement_error_ptr(0)); + ASSERT_TRUE(!edata.get_noise_scale_ptr(0)); ASSERT_TRUE(!edata.get_event_measurements_ptr(0)); - ASSERT_TRUE(!edata.get_event_measurement_error_ptr(0)); + ASSERT_TRUE(!edata.get_event_noise_scale_ptr(0)); checkEqualArray( edata.get_measurements(), empty, TEST_ATOL, TEST_RTOL, "ObservedData" ); checkEqualArray( - edata.get_measurement_error(), empty, TEST_ATOL, TEST_RTOL, + edata.get_noise_scale(), empty, TEST_ATOL, TEST_RTOL, "ObservedDataStdDev" ); checkEqualArray( @@ -330,7 +330,7 @@ TEST_F(ExpDataTest, SettersGetters) { "ObservedEvents" ); checkEqualArray( - edata.get_event_measurement_error(), empty, TEST_ATOL, TEST_RTOL, + edata.get_event_noise_scale(), empty, TEST_ATOL, TEST_RTOL, "ObservedEventsStdDev" ); } diff --git a/tests/performance/test.py b/tests/performance/test.py index 701b02e367..6b6869c2a4 100755 --- a/tests/performance/test.py +++ b/tests/performance/test.py @@ -169,7 +169,7 @@ def main(): edata = ExpData(model) edata.set_timepoints([1e8]) edata.set_measurements([1.0]) - edata.set_measurement_error([1.0]) + edata.set_noise_scale([1.0]) prepare_simulation(arg, model, solver, edata) From d779ec1784b38ec77e882ed062a99fbc7e457ec8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Fr=C3=B6hlich?= Date: Mon, 1 Dec 2025 12:35:19 +0000 Subject: [PATCH 6/9] fixup plotting --- python/sdist/amici/sim/sundials/plotting.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/sdist/amici/sim/sundials/plotting.py b/python/sdist/amici/sim/sundials/plotting.py index f38549c974..b8ea14fdb9 100644 --- a/python/sdist/amici/sim/sundials/plotting.py +++ b/python/sdist/amici/sim/sundials/plotting.py @@ -152,14 +152,14 @@ def plot_observable_trajectories( if edata is not None: ax.plot( edata.ts, - edata.observed_data[:, iy], + edata.measurements[:, iy], "x", label=f"exp. {label}", color=l.get_color(), ) ax.errorbar( edata.ts, - edata.observed_data[:, iy], + edata.measurements[:, iy], yerr=rdata.sigmay[:, iy], fmt="none", color=l.get_color(), From fac00399fc1eb6f612ec4cc9582137cf04c0598c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Fr=C3=B6hlich?= Date: Mon, 1 Dec 2025 16:54:36 +0000 Subject: [PATCH 7/9] fixup plural --- .../GettingStartedExtended.ipynb | 2 +- include/amici/edata.h | 60 ++++++------- .../amici/importers/petab/_petab_importer.py | 2 +- .../amici/importers/petab/v1/conditions.py | 2 +- python/sdist/amici/sim/sundials/_numpy.py | 12 +-- python/sdist/amici/sim/sundials/_pandas.py | 4 +- python/tests/test_preequilibration.py | 20 ++--- python/tests/test_sbml_import.py | 6 +- .../test_sbml_import_special_functions.py | 4 +- src/edata.cpp | 84 +++++++++---------- src/hdf5.cpp | 12 +-- src/model.cpp | 32 +++---- src/rdata.cpp | 8 +- swig/edata.i | 10 +-- tests/cpp/jakstat_adjoint/tests1.cpp | 4 +- tests/cpp/unittests/testExpData.cpp | 56 ++++++------- tests/performance/test.py | 2 +- 17 files changed, 160 insertions(+), 160 deletions(-) diff --git a/doc/examples/getting_started_extended/GettingStartedExtended.ipynb b/doc/examples/getting_started_extended/GettingStartedExtended.ipynb index a497ef1f7e..c1672d3dc8 100644 --- a/doc/examples/getting_started_extended/GettingStartedExtended.ipynb +++ b/doc/examples/getting_started_extended/GettingStartedExtended.ipynb @@ -1135,7 +1135,7 @@ "edata.fixed_parameters = model.get_fixed_parameters()\n", "# set sigma to 1.0 except for observable 5, so that p[7] is used instead\n", "# (if we have sigma parameterized, the corresponding ExpData entries must NaN, otherwise they will override the parameter)\n", - "edata.set_noise_scale(\n", + "edata.set_noise_scales(\n", " rdata[\"t\"] * 0 + np.nan,\n", " list(model.get_observable_ids()).index(\"observable_x1withsigma\"),\n", ")\n", diff --git a/include/amici/edata.h b/include/amici/edata.h index 7f66436029..79f8dfe674 100644 --- a/include/amici/edata.h +++ b/include/amici/edata.h @@ -217,7 +217,7 @@ class ExpData : public SimulationParameters { * * @return boolean specifying if data was set */ - bool is_set_measurements(int it, int iy) const; + bool is_set_measurement(int it, int iy) const; /** * @brief Get all measurements. @@ -238,17 +238,17 @@ class ExpData : public SimulationParameters { /** * @brief Set noise scales for measurements. * - * @param noise_scale noise scale of observed data + * @param sigma noise scales of observed data * (dimension: nt x nytrue, row-major) */ - void set_noise_scale(std::vector const& noise_scale); + void set_noise_scales(std::vector const& sigma); /** * @brief Set identical noise scale for all measurements. * * @param sigma noise scale (dimension: scalar) */ - void set_noise_scale(realtype sigma); + void set_noise_scales(realtype sigma); /** * @brief Set noise scales of observed data for a @@ -258,7 +258,7 @@ class ExpData : public SimulationParameters { * nt) * @param iy observed data index */ - void set_noise_scale(std::vector const& sigma, int iy); + void set_noise_scales(std::vector const& sigma, int iy); /** * @brief Set all noise scale for a given observable index to the @@ -267,7 +267,7 @@ class ExpData : public SimulationParameters { * @param sigma noise scale (dimension: scalar) * @param iy observed data index */ - void set_noise_scale(realtype sigma, int iy); + void set_noise_scales(realtype sigma, int iy); /** * @brief Whether noise scale for a measurement at @@ -284,7 +284,7 @@ class ExpData : public SimulationParameters { * * @return noise scale of observed data */ - std::vector const& get_noise_scale() const; + std::vector const& get_noise_scales() const; /** * @brief Get pointer to measurement noise scales. @@ -292,7 +292,7 @@ class ExpData : public SimulationParameters { * @param it timepoint index * @return pointer to noise scale of observed data at index */ - realtype const* get_noise_scale_ptr(int it) const; + realtype const* get_noise_scales_ptr(int it) const; /** * @brief Set observed event data. @@ -318,7 +318,7 @@ class ExpData : public SimulationParameters { * @param iz event observable index * @return boolean specifying if data was set */ - bool is_set_event_measurements(int ie, int iz) const; + bool is_set_event_measurement(int ie, int iz) const; /** * @brief Get observed event data. @@ -337,27 +337,27 @@ class ExpData : public SimulationParameters { realtype const* get_event_measurements_ptr(int ie) const; /** - * @brief Set noise scale of observed event data. + * @brief Set noise scales of observed event data. * - * @param sigma noise scale of observed event data + * @param sigma noise scales of observed event data */ - void set_event_noise_scale(std::vector const& sigma); + void set_event_noise_scales(std::vector const& sigma); /** - * @brief Set noise scale of observed event data. + * @brief Set noise scales of observed event data. * * @param sigma noise scale (dimension: scalar) */ void set_event_noise_scale(realtype sigma); /** - * @brief Set noise scale of observed data for a specific observable. + * @brief Set noise scales of observed data for a specific observable. * - * @param sigma noise scale of observed data + * @param sigma noise scales of observed data * (dimension: nmaxevent) * @param iz observed data index */ - void set_event_noise_scale(std::vector const& sigma, int iz); + void set_event_noise_scales(std::vector const& sigma, int iz); /** * @brief Set all noise scales of a specific event-observable. @@ -365,7 +365,7 @@ class ExpData : public SimulationParameters { * @param sigma noise scale (dimension: scalar) * @param iz observed data index */ - void set_event_noise_scale(realtype sigma, int iz); + void set_event_noise_scales(realtype sigma, int iz); /** * @brief Check whether noise scale of event data @@ -382,7 +382,7 @@ class ExpData : public SimulationParameters { * * @return noise scale of observed event data */ - std::vector const& get_event_noise_scale() const; + std::vector const& get_event_noise_scales() const; /** * @brief Get pointer to noise scale of @@ -393,7 +393,7 @@ class ExpData : public SimulationParameters { * @return pointer to noise scale of observed event data at ie-th * occurrence */ - realtype const* get_event_noise_scale_ptr(int ie) const; + realtype const* get_event_noise_scales_ptr(int ie) const; /** * @brief Set all observations and their noise scales to NaN. @@ -409,23 +409,23 @@ class ExpData : public SimulationParameters { protected: /** - * @brief resizes observedData, observedDataStdDev, observedEvents and - * observedEventsStdDev + * @brief resizes measurements_, noise_scales_, event_measurements_ and + * event_noise_scales_ */ void apply_dimensions(); /** - * @brief resizes observedData and observedDataStdDev + * @brief resizes measurements_ and noise_scales_ */ void apply_data_dimension(); /** - * @brief resizes observedEvents and observedEventsStdDev + * @brief resizes event_measurements_ and event_noise_scales_ */ void apply_event_dimension(); /** - * @brief checker for dimensions of input observedData or observedDataStdDev + * @brief checker for dimensions of input measurements_ or noise_scales_ * * @param input vector input to be checked * @param fieldname name of the input @@ -435,8 +435,8 @@ class ExpData : public SimulationParameters { ) const; /** - * @brief checker for dimensions of input observedEvents or - * observedEventsStdDev + * @brief checker for dimensions of input event_measurements_ or + * event_noise_scales_ * * @param input vector input to be checked * @param fieldname name of the input @@ -461,7 +461,7 @@ class ExpData : public SimulationParameters { * @brief noise scale of observed data (dimension: nt x nytrue, * row-major) */ - std::vector noise_scale_; + std::vector noise_scales_; /** * @brief observed events (dimension: nmaxevents x nztrue, row-major) @@ -472,7 +472,7 @@ class ExpData : public SimulationParameters { * @brief noise scale of observed events/roots * (dimension: nmaxevents x nztrue, row-major) */ - std::vector event_noise_scale_; + std::vector event_noise_scales_; }; /** @@ -487,10 +487,10 @@ inline bool operator==(ExpData const& lhs, ExpData const& rhs) { && lhs.id == rhs.id && lhs.nytrue_ == rhs.nytrue_ && lhs.nztrue_ == rhs.nztrue_ && lhs.nmaxevent_ == rhs.nmaxevent_ && is_equal(lhs.measurements_, rhs.measurements_) - && is_equal(lhs.noise_scale_, rhs.noise_scale_) + && is_equal(lhs.noise_scales_, rhs.noise_scales_) && is_equal(lhs.event_measurements_, rhs.event_measurements_) && is_equal( - lhs.event_noise_scale_, rhs.event_noise_scale_ + lhs.event_noise_scales_, rhs.event_noise_scales_ ); } diff --git a/python/sdist/amici/importers/petab/_petab_importer.py b/python/sdist/amici/importers/petab/_petab_importer.py index 0416cf394a..4adf0708d3 100644 --- a/python/sdist/amici/importers/petab/_petab_importer.py +++ b/python/sdist/amici/importers/petab/_petab_importer.py @@ -810,7 +810,7 @@ def _set_timepoints_and_measurements( observable_ids=self._model.get_observable_ids(), ) edata.set_measurements(y.flatten()) - edata.set_noise_scale(sigma_y.flatten()) + edata.set_noise_scales(sigma_y.flatten()) def _get_measurements_and_sigmas( self, diff --git a/python/sdist/amici/importers/petab/v1/conditions.py b/python/sdist/amici/importers/petab/v1/conditions.py index 7fcf8f6bb6..911a36cad0 100644 --- a/python/sdist/amici/importers/petab/v1/conditions.py +++ b/python/sdist/amici/importers/petab/v1/conditions.py @@ -390,7 +390,7 @@ def create_edata_for_condition( observable_ids=observable_ids, ) edata.set_measurements(y.flatten()) - edata.set_noise_scale(sigma_y.flatten()) + edata.set_noise_scales(sigma_y.flatten()) return edata diff --git a/python/sdist/amici/sim/sundials/_numpy.py b/python/sdist/amici/sim/sundials/_numpy.py index f8349222fc..b44c21614f 100644 --- a/python/sdist/amici/sim/sundials/_numpy.py +++ b/python/sdist/amici/sim/sundials/_numpy.py @@ -541,9 +541,9 @@ class ExpDataView(SwigPtrView): _field_names = [ "ts", "measurements", - "noise_scale", + "noise_scales", "event_measurements", - "event_noise_scale", + "event_noise_scales", "fixed_parameters", "fixed_parameters_pre_equilibration", "fixed_parameters_presimulation", @@ -563,10 +563,10 @@ def __init__(self, edata: ExpDataPtr | ExpData): "ts": [edata.nt()], # observables "measurements": [edata.nt(), edata.nytrue()], - "noise_scale": [edata.nt(), edata.nytrue()], + "noise_scales": [edata.nt(), edata.nytrue()], # event observables "event_measurements": [edata.nmaxevent(), edata.nztrue()], - "event_noise_scale": [edata.nmaxevent(), edata.nztrue()], + "event_noise_scales": [edata.nmaxevent(), edata.nztrue()], # fixed parameters "fixed_parameters": [len(edata.fixed_parameters)], "fixed_parameters_pre_equilibration": [ @@ -578,9 +578,9 @@ def __init__(self, edata: ExpDataPtr | ExpData): } edata.ts = edata.timepoints edata.measurements = edata.get_measurements() - edata.noise_scale = edata.get_noise_scale() + edata.noise_scales = edata.get_noise_scales() edata.event_measurements = edata.get_event_measurements() - edata.event_noise_scale = edata.get_event_noise_scale() + edata.event_noise_scales = edata.get_event_noise_scales() super().__init__(edata) diff --git a/python/sdist/amici/sim/sundials/_pandas.py b/python/sdist/amici/sim/sundials/_pandas.py index f75954c90f..6ab59728fb 100644 --- a/python/sdist/amici/sim/sundials/_pandas.py +++ b/python/sdist/amici/sim/sundials/_pandas.py @@ -113,7 +113,7 @@ def get_data_observables_as_data_frame( _get_names_or_ids(model, "observable", by_id=by_id) ): datadict[obs] = npdata["measurements"][i_time, i_obs] - datadict[obs + "_std"] = npdata["noise_scale"][i_time, i_obs] + datadict[obs + "_std"] = npdata["noise_scales"][i_time, i_obs] # add conditions _fill_conditions_dict(datadict, model, edata, by_id=by_id) @@ -795,7 +795,7 @@ def construct_edata_from_data_frame( if obs in df.keys(): edata.set_measurements(df[obs].values.astype(float), obs_index) if obs + "_std" in df.keys(): - edata.set_noise_scale( + edata.set_noise_scales( df[obs + "_std"].values.astype(float), obs_index ) diff --git a/python/tests/test_preequilibration.py b/python/tests/test_preequilibration.py index 0378304feb..af73f5749b 100644 --- a/python/tests/test_preequilibration.py +++ b/python/tests/test_preequilibration.py @@ -232,21 +232,21 @@ def test_data_replicates(preeq_fixture): # add infty timepoint y = edata.get_measurements() - stdy = edata.get_noise_scale() + stdy = edata.get_noise_scales() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) edata.set_measurements(np.hstack([y, y[0]])) - edata.set_noise_scale(np.hstack([stdy, stdy[0]])) + edata.set_noise_scales(np.hstack([stdy, stdy[0]])) rdata_single = run_simulation(model, solver, edata) # duplicate data and timepoints y = edata.get_measurements() - stdy = edata.get_noise_scale() + stdy = edata.get_noise_scales() ts = np.hstack([*edata.get_timepoints(), *edata.get_timepoints()]) idx = np.argsort(ts) edata.set_timepoints(sorted(ts)) edata.set_measurements(np.hstack([y, y])[idx]) - edata.set_noise_scale(np.hstack([stdy, stdy])[idx]) + edata.set_noise_scales(np.hstack([stdy, stdy])[idx]) rdata_double = run_simulation(model, solver, edata) @@ -347,11 +347,11 @@ def test_equilibration_methods_with_adjoints(preeq_fixture): # add infty timepoint y = edata.get_measurements() - stdy = edata.get_noise_scale() + stdy = edata.get_noise_scales() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) edata.set_measurements(np.hstack([y, y[0]])) - edata.set_noise_scale(np.hstack([stdy, stdy[0]])) + edata.set_noise_scales(np.hstack([stdy, stdy[0]])) rdatas = {} equil_meths = [ @@ -414,11 +414,11 @@ def test_newton_solver_equilibration(preeq_fixture): # add infty timepoint y = edata.get_measurements() - stdy = edata.get_noise_scale() + stdy = edata.get_noise_scales() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) edata.set_measurements(np.hstack([y, y[0]])) - edata.set_noise_scale(np.hstack([stdy, stdy[0]])) + edata.set_noise_scales(np.hstack([stdy, stdy[0]])) rdatas = {} settings = [ @@ -474,11 +474,11 @@ def test_newton_steadystate_check(preeq_fixture): # add infty timepoint y = edata.get_measurements() - stdy = edata.get_noise_scale() + stdy = edata.get_noise_scales() ts = np.hstack([*edata.get_timepoints(), np.inf]) edata.set_timepoints(sorted(ts)) edata.set_measurements(np.hstack([y, y[0]])) - edata.set_noise_scale(np.hstack([stdy, stdy[0]])) + edata.set_noise_scales(np.hstack([stdy, stdy[0]])) # set sensi method sensi_meth = SensitivityMethod.forward diff --git a/python/tests/test_sbml_import.py b/python/tests/test_sbml_import.py index b1e2c593db..e48a6d9a4c 100644 --- a/python/tests/test_sbml_import.py +++ b/python/tests/test_sbml_import.py @@ -202,7 +202,7 @@ def test_sbml2amici_observable_dependent_error( rdata.sigmay[:, 1], 0.02 * rdata.y[:, 1], rtol=1.0e-5, atol=1.0e-8 ) edata = ExpData(rdata, 1.0, 0.0) - edata.set_noise_scale(np.nan) + edata.set_noise_scales(np.nan) # check sensitivities solver.set_sensitivity_order(SensitivityOrder.first) @@ -338,7 +338,7 @@ def test_presimulation_events(tempdir): edata_tmp = ExpData(rdata, 1, 0) edata.set_timepoints(np.array(edata_tmp.get_timepoints()) + 0.1) edata.set_measurements(edata_tmp.get_measurements()) - edata.set_noise_scale(edata_tmp.get_noise_scale()) + edata.set_noise_scales(edata_tmp.get_noise_scales()) # sensitivities w.r.t. t_initial_presim (trigger time of an initial event) # are not supported @@ -419,7 +419,7 @@ def test_presimulation_events_and_sensitivities(tempdir): edata_tmp = ExpData(rdata, 1, 0) edata.set_timepoints(np.array(edata_tmp.get_timepoints()) + 0.1) edata.set_measurements(edata_tmp.get_measurements()) - edata.set_noise_scale(edata_tmp.get_noise_scale()) + edata.set_noise_scales(edata_tmp.get_noise_scales()) solver.set_sensitivity_order(SensitivityOrder.first) diff --git a/python/tests/test_sbml_import_special_functions.py b/python/tests/test_sbml_import_special_functions.py index 577946036c..7962357dc4 100644 --- a/python/tests/test_sbml_import_special_functions.py +++ b/python/tests/test_sbml_import_special_functions.py @@ -79,7 +79,7 @@ def test_special_likelihoods(model_special_likelihoods): # set sigmas sigma = 0.2 sigmas = sigma * np.ones(len(y)) - edata.set_noise_scale(sigmas) + edata.set_noise_scales(sigmas) # and now run for real and also compute likelihood values rdata = run_simulations(model, solver, [edata])[0] @@ -129,7 +129,7 @@ def test_special_likelihoods(model_special_likelihoods): y = edata.get_measurements() y = tuple(val * np.random.uniform(0.5, 3) for val in y) edata.set_measurements(y) - edata.set_noise_scale(sigmas) + edata.set_noise_scales(sigmas) # and now run for real and also compute likelihood values rdata = run_simulations(model, solver, [edata])[0] diff --git a/src/edata.cpp b/src/edata.cpp index 105d5279af..3ed6a31216 100644 --- a/src/edata.cpp +++ b/src/edata.cpp @@ -55,9 +55,9 @@ ExpData::ExpData( , nmaxevent_(nmaxevent) { apply_dimensions(); set_measurements(my); - set_noise_scale(sigma_y); + set_noise_scales(sigma_y); set_event_measurements(mz); - set_event_noise_scale(sigma_z); + set_event_noise_scales(sigma_z); } ExpData::ExpData(Model const& model) @@ -114,7 +114,7 @@ ExpData::ExpData( std::normal_distribution<> e{0, sigma}; measurements_.at(iy + nytrue_ * it) = rdata.y.at(iy + rdata.ny * it) + e(gen); - noise_scale_.at(iy + nytrue_ * it) = sigma; + noise_scales_.at(iy + nytrue_ * it) = sigma; } } @@ -126,7 +126,7 @@ ExpData::ExpData( std::normal_distribution<> e{0, sigma}; event_measurements_.at(iz + rdata.nztrue * ie) = rdata.z.at(iz + rdata.nz * ie) + e(gen); - event_noise_scale_.at(iz + rdata.nztrue * ie) = sigma; + event_noise_scales_.at(iz + rdata.nztrue * ie) = sigma; } } @@ -175,7 +175,7 @@ void ExpData::set_measurements( measurements_.at(iy + it * nytrue_) = measurements.at(it); } -bool ExpData::is_set_measurements(int const it, int const iy) const { +bool ExpData::is_set_measurement(int const it, int const iy) const { return !measurements_.empty() && !isnan(measurements_.at(it * nytrue_ + iy)); } @@ -191,24 +191,24 @@ realtype const* ExpData::get_measurements_ptr(int const it) const { return nullptr; } -void ExpData::set_noise_scale( +void ExpData::set_noise_scales( std::vector const& sigma_y ) { check_data_dimension(sigma_y, "sigma_y"); check_sigma_positivity(sigma_y, "sigma_y"); if (sigma_y.size() == static_cast(nt()) * nytrue_) - noise_scale_ = sigma_y; + noise_scales_ = sigma_y; else if (sigma_y.empty()) - noise_scale_.clear(); + noise_scales_.clear(); } -void ExpData::set_noise_scale(realtype const sigma) { +void ExpData::set_noise_scales(realtype const sigma) { check_sigma_positivity(sigma, "sigma"); - std::ranges::fill(noise_scale_, sigma); + std::ranges::fill(noise_scales_, sigma); } -void ExpData::set_noise_scale( +void ExpData::set_noise_scales( std::vector const& sigma_y, int const iy ) { if (sigma_y.size() != static_cast(nt())) @@ -219,28 +219,28 @@ void ExpData::set_noise_scale( check_sigma_positivity(sigma_y, "sigma_y"); for (int it = 0; it < nt(); ++it) - noise_scale_.at(iy + it * nytrue_) + noise_scales_.at(iy + it * nytrue_) = sigma_y.at(it); } -void ExpData::set_noise_scale(realtype const sigma, int const iy) { +void ExpData::set_noise_scales(realtype const sigma, int const iy) { check_sigma_positivity(sigma, "sigma"); for (int it = 0; it < nt(); ++it) - noise_scale_.at(iy + it * nytrue_) = sigma; + noise_scales_.at(iy + it * nytrue_) = sigma; } bool ExpData::is_set_noise_scale(int const it, int const iy) const { - return !noise_scale_.empty() - && !isnan(noise_scale_.at(it * nytrue_ + iy)); + return !noise_scales_.empty() + && !isnan(noise_scales_.at(it * nytrue_ + iy)); } -std::vector const& ExpData::get_noise_scale() const { - return noise_scale_; +std::vector const& ExpData::get_noise_scales() const { + return noise_scales_; } -realtype const* ExpData::get_noise_scale_ptr(int const it) const { - if (!noise_scale_.empty()) - return &noise_scale_.at(it * nytrue_); +realtype const* ExpData::get_noise_scales_ptr(int const it) const { + if (!noise_scales_.empty()) + return &noise_scales_.at(it * nytrue_); return nullptr; } @@ -269,7 +269,7 @@ void ExpData::set_event_measurements( event_measurements_.at(iz + ie * nztrue_) = event_measurements.at(ie); } -bool ExpData::is_set_event_measurements(int const ie, int const iz) const { +bool ExpData::is_set_event_measurement(int const ie, int const iz) const { return !event_measurements_.empty() && !isnan(event_measurements_.at(ie * nztrue_ + iz)); } @@ -285,24 +285,24 @@ realtype const* ExpData::get_event_measurements_ptr(int const ie) const { return nullptr; } -void ExpData::set_event_noise_scale( +void ExpData::set_event_noise_scales( std::vector const& sigma_z ) { check_events_dimension(sigma_z, "sigma_z"); check_sigma_positivity(sigma_z, "sigma_z"); if (sigma_z.size() == (unsigned)nmaxevent_ * nztrue_) - event_noise_scale_ = sigma_z; + event_noise_scales_ = sigma_z; else if (sigma_z.empty()) - event_noise_scale_.clear(); + event_noise_scales_.clear(); } -void ExpData::set_event_noise_scale(realtype const sigma) { +void ExpData::set_event_noise_scales(realtype const sigma) { check_sigma_positivity(sigma, "sigma"); - std::ranges::fill(event_noise_scale_, sigma); + std::ranges::fill(event_noise_scales_, sigma); } -void ExpData::set_event_noise_scale( +void ExpData::set_event_noise_scales( std::vector const& sigma_z, int const iz ) { if (sigma_z.size() != (unsigned)nmaxevent_) @@ -314,40 +314,40 @@ void ExpData::set_event_noise_scale( check_sigma_positivity(sigma_z, "sigma_z"); for (int ie = 0; ie < nmaxevent_; ++ie) - event_noise_scale_.at(iz + ie * nztrue_) + event_noise_scales_.at(iz + ie * nztrue_) = sigma_z.at(ie); } -void ExpData::set_event_noise_scale(realtype const sigma, int const iz) { +void ExpData::set_event_noise_scales(realtype const sigma, int const iz) { check_sigma_positivity(sigma, "sigma"); for (int ie = 0; ie < nmaxevent_; ++ie) - event_noise_scale_.at(iz + ie * nztrue_) = sigma; + event_noise_scales_.at(iz + ie * nztrue_) = sigma; } bool ExpData::is_set_event_noise_scale(int const ie, int const iz) const { - if (!event_noise_scale_.empty()) // avoid out of bound memory access - return !isnan(event_noise_scale_.at(ie * nztrue_ + iz)); + if (!event_noise_scales_.empty()) // avoid out of bound memory access + return !isnan(event_noise_scales_.at(ie * nztrue_ + iz)); return false; } -std::vector const& ExpData::get_event_noise_scale() const { - return event_noise_scale_; +std::vector const& ExpData::get_event_noise_scales() const { + return event_noise_scales_; } -realtype const* ExpData::get_event_noise_scale_ptr(int const ie) const { - if (!event_noise_scale_.empty()) - return &event_noise_scale_.at(ie * nztrue_); +realtype const* ExpData::get_event_noise_scales_ptr(int const ie) const { + if (!event_noise_scales_.empty()) + return &event_noise_scales_.at(ie * nztrue_); return nullptr; } void ExpData::clear_observations() { std::ranges::fill(measurements_, get_nan()); - std::ranges::fill(noise_scale_, get_nan()); + std::ranges::fill(noise_scales_, get_nan()); std::ranges::fill(event_measurements_, get_nan()); - std::ranges::fill(event_noise_scale_, get_nan()); + std::ranges::fill(event_noise_scales_, get_nan()); } void ExpData::apply_dimensions() { @@ -357,12 +357,12 @@ void ExpData::apply_dimensions() { void ExpData::apply_data_dimension() { measurements_.resize(nt() * nytrue_, get_nan()); - noise_scale_.resize(nt() * nytrue_, get_nan()); + noise_scales_.resize(nt() * nytrue_, get_nan()); } void ExpData::apply_event_dimension() { event_measurements_.resize(nmaxevent_ * nztrue_, get_nan()); - event_noise_scale_.resize(nmaxevent_ * nztrue_, get_nan()); + event_noise_scales_.resize(nmaxevent_ * nztrue_, get_nan()); } void ExpData::check_data_dimension( diff --git a/src/hdf5.cpp b/src/hdf5.cpp index 21f69b37fd..6d9a956c57 100644 --- a/src/hdf5.cpp +++ b/src/hdf5.cpp @@ -138,7 +138,7 @@ std::unique_ptr read_exp_data_from_hdf5( auto const sigmay = get_double_2d_dataset(file, hdf5Root + "/Sigma_Y", m, n); check_measurement_dimensions_compatible(m, n, model); - edata->set_noise_scale(sigmay); + edata->set_noise_scales(sigmay); } else { throw AmiException( "Missing %s/Sigma_Y in %s", hdf5Root.c_str(), @@ -162,7 +162,7 @@ std::unique_ptr read_exp_data_from_hdf5( auto sigmaz = get_double_2d_dataset(file, hdf5Root + "/Sigma_Z", m, n); check_event_dimensions_compatible(m, n, model); - edata->set_event_noise_scale(sigmaz); + edata->set_event_noise_scales(sigmaz); } else { throw AmiException( "Missing %s/Sigma_Z in %s", hdf5Root.c_str(), @@ -298,9 +298,9 @@ void write_exp_data_to_hdf5( file, hdf5Location + "/Y", edata.get_measurements(), edata.nt(), edata.nytrue() ); - if (!edata.get_noise_scale().empty()) + if (!edata.get_noise_scales().empty()) create_and_write_double_2d_dataset( - file, hdf5Location + "/Sigma_Y", edata.get_noise_scale(), + file, hdf5Location + "/Sigma_Y", edata.get_noise_scales(), edata.nt(), edata.nytrue() ); if (!edata.get_event_measurements().empty()) @@ -308,10 +308,10 @@ void write_exp_data_to_hdf5( file, hdf5Location + "/Z", edata.get_event_measurements(), edata.nmaxevent(), edata.nztrue() ); - if (!edata.get_event_noise_scale().empty()) + if (!edata.get_event_noise_scales().empty()) create_and_write_double_2d_dataset( file, hdf5Location + "/Sigma_Z", - edata.get_event_noise_scale(), edata.nmaxevent(), + edata.get_event_noise_scales(), edata.nmaxevent(), edata.nztrue() ); diff --git a/src/model.cpp b/src/model.cpp index 8b44e425fe..2afc1394ec 100644 --- a/src/model.cpp +++ b/src/model.cpp @@ -1351,7 +1351,7 @@ void Model::add_event_objective( std::vector nllh(nJ, 0.0); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_event_measurements(nroots, iztrue)) { + if (edata.is_set_event_measurement(nroots, iztrue)) { std::ranges::fill(nllh, 0.0); fJz(nllh.data(), iztrue, state_.unscaled_parameters.data(), state_.fixed_parameters.data(), derived_state_.z_.data(), @@ -1371,7 +1371,7 @@ void Model::add_event_objective_regularization( std::vector nllh(nJ, 0.0); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_event_measurements(nroots, iztrue)) { + if (edata.is_set_event_measurement(nroots, iztrue)) { std::ranges::fill(nllh, 0.0); fJrz( nllh.data(), iztrue, state_.unscaled_parameters.data(), @@ -2128,7 +2128,7 @@ void Model::fsigmay(int const it, ExpData const* edata) { ); if (edata) { - auto sigmay_edata = edata->get_noise_scale_ptr(it); + auto sigmay_edata = edata->get_noise_scales_ptr(it); /* extract the value for the standard deviation from ExpData, * if the data value is NaN, use the parameter value */ for (int iytrue = 0; iytrue < nytrue; iytrue++) { @@ -2141,7 +2141,7 @@ void Model::fsigmay(int const it, ExpData const* edata) { for (int iJ = 1; iJ < nJ; iJ++) derived_state_.sigmay_.at(iytrue + iJ * nytrue) = 0; - if (edata->is_set_measurements(it, iytrue)) { + if (edata->is_set_measurement(it, iytrue)) { std::string obs_id = has_observable_ids() ? get_observable_ids().at(iytrue) : std::to_string(iytrue); @@ -2238,7 +2238,7 @@ void Model::fdJydy(int const it, AmiVector const& x, ExpData const& edata) { fdJydy_colptrs(derived_state_.dJydy_.at(iyt), iyt); fdJydy_rowvals(derived_state_.dJydy_.at(iyt), iyt); - if (!edata.is_set_measurements(it, iyt)) + if (!edata.is_set_measurement(it, iyt)) continue; // get dJydy slice (ny) for current timepoint and observable @@ -2291,7 +2291,7 @@ void Model::fdJydsigma(int const it, AmiVector const& x, ExpData const& edata) { fsigmay(it, &edata); for (int iyt = 0; iyt < nytrue; iyt++) { - if (edata.is_set_measurements(it, iyt)) { + if (edata.is_set_measurement(it, iyt)) { // get dJydsigma slice (ny) for current timepoint and observable fdJydsigma( &derived_state_.dJydsigma_.at(iyt * ny * nJ), iyt, @@ -2329,7 +2329,7 @@ void Model::fdJydp(int const it, AmiVector const& x, ExpData const& edata) { set_nan_to_zero(derived_state_.dJydsigma_); set_nan_to_zero(derived_state_.dsigmaydp_); for (int iyt = 0; iyt < nytrue; ++iyt) { - if (!edata.is_set_measurements(it, iyt)) + if (!edata.is_set_measurement(it, iyt)) continue; // dJydp = 1.0 * dJydp + 1.0 * dJydy * dydp @@ -2366,7 +2366,7 @@ void Model::fdJydx(int const it, AmiVector const& x, ExpData const& edata) { // dydx : ny x nx_solver // dJydx: nJ x nx_solver x nt for (int iyt = 0; iyt < nytrue; ++iyt) { - if (!edata.is_set_measurements(it, iyt)) + if (!edata.is_set_measurement(it, iyt)) continue; // dJydy A[nyt,nJ,ny] * dydx B[ny,nx_solver] = dJydx C[it,nJ,nx_solver] // slice slice @@ -2493,7 +2493,7 @@ void Model::fsigmaz( if (z2event_.at(iztrue) == ie) { if (edata->is_set_event_noise_scale(nroots, iztrue)) { auto sigmaz_edata - = edata->get_event_noise_scale_ptr(nroots); + = edata->get_event_noise_scales_ptr(nroots); derived_state_.sigmaz_.at(iztrue) = sigmaz_edata[iztrue]; } @@ -2503,7 +2503,7 @@ void Model::fsigmaz( for (int iJ = 1; iJ < nJ; iJ++) derived_state_.sigmaz_.at(iztrue + iJ * nztrue) = 0; - if (edata->is_set_event_measurements(nroots, iztrue)) + if (edata->is_set_event_measurement(nroots, iztrue)) check_sigma_positivity( derived_state_.sigmaz_.at(iztrue), "sigmaz" ); @@ -2561,7 +2561,7 @@ void Model::fdJzdz( fsigmaz(ie, nroots, t, &edata); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_event_measurements(nroots, iztrue)) { + if (edata.is_set_event_measurement(nroots, iztrue)) { fdJzdz( &derived_state_.dJzdz_.at(iztrue * nz * nJ), iztrue, state_.unscaled_parameters.data(), @@ -2594,7 +2594,7 @@ void Model::fdJzdsigma( fsigmaz(ie, nroots, t, &edata); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_event_measurements(nroots, iztrue)) { + if (edata.is_set_event_measurement(nroots, iztrue)) { fdJzdsigma( &derived_state_.dJzdsigma_.at(iztrue * nz * nJ), iztrue, state_.unscaled_parameters.data(), @@ -2641,7 +2641,7 @@ void Model::fdJzdp( set_nan_to_zero(derived_state_.dJzdsigma_); set_nan_to_zero(derived_state_.dJrzdsigma_); for (int izt = 0; izt < nztrue; ++izt) { - if (!edata.is_set_event_measurements(nroots, izt)) + if (!edata.is_set_event_measurement(nroots, izt)) continue; if (t < edata.get_timepoint(edata.nt() - 1)) { @@ -2705,7 +2705,7 @@ void Model::fdJzdx( set_nan_to_zero(derived_state_.drzdx_); for (int izt = 0; izt < nztrue; ++izt) { - if (!edata.is_set_event_measurements(nroots, izt)) + if (!edata.is_set_event_measurement(nroots, izt)) continue; if (t < edata.get_timepoint(edata.nt() - 1)) { @@ -2743,7 +2743,7 @@ void Model::fdJrzdz( fsigmaz(ie, nroots, t, &edata); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_event_measurements(nroots, iztrue)) { + if (edata.is_set_event_measurement(nroots, iztrue)) { fdJrzdz( &derived_state_.dJrzdz_.at(iztrue * nz * nJ), iztrue, state_.unscaled_parameters.data(), @@ -2775,7 +2775,7 @@ void Model::fdJrzdsigma( fsigmaz(ie, nroots, t, &edata); for (int iztrue = 0; iztrue < nztrue; iztrue++) { - if (edata.is_set_event_measurements(nroots, iztrue)) { + if (edata.is_set_event_measurement(nroots, iztrue)) { fdJrzdsigma( &derived_state_.dJrzdsigma_.at(iztrue * nz * nJ), iztrue, state_.unscaled_parameters.data(), diff --git a/src/rdata.cpp b/src/rdata.cpp index 4cbc8c3107..dd9eef0756 100644 --- a/src/rdata.cpp +++ b/src/rdata.cpp @@ -953,7 +953,7 @@ void ReturnData::fres( auto observedData = edata.get_measurements_ptr(it); for (int iy = 0; iy < nytrue; ++iy) { int iyt = iy + it * edata.nytrue(); - if (!edata.is_set_measurements(it, iy)) + if (!edata.is_set_measurement(it, iy)) continue; res.at(iyt) = amici::fres( @@ -974,7 +974,7 @@ void ReturnData::fchi2(int const it, ExpData const& edata) { for (int iy = 0; iy < nytrue; ++iy) { int iyt_true = iy + it * nytrue; chi2 += pow(res.at(iyt_true), 2); - if (sigma_res && edata.is_set_measurements(it, iy)) + if (sigma_res && edata.is_set_measurement(it, iy)) chi2 += pow(res.at(iyt_true + nt * nytrue), 2) - sigma_offset; } } @@ -1018,7 +1018,7 @@ void ReturnData::fsres( auto observedData = edata.get_measurements_ptr(it); for (int iy = 0; iy < nytrue; ++iy) { - if (!edata.is_set_measurements(it, iy)) + if (!edata.is_set_measurement(it, iy)) continue; for (int ip = 0; ip < nplist; ++ip) { int idx = (iy + it * edata.nytrue()) * nplist + ip; @@ -1114,7 +1114,7 @@ void ReturnData::fFIM( auto observedData = edata.get_measurements_ptr(it); for (int iy = 0; iy < nytrue; ++iy) { - if (!edata.is_set_measurements(it, iy)) + if (!edata.is_set_measurement(it, iy)) continue; auto y = y_it.at(iy); auto m = observedData[iy]; diff --git a/swig/edata.i b/swig/edata.i index 57d8cf8b16..62a8611a9c 100644 --- a/swig/edata.i +++ b/swig/edata.i @@ -8,7 +8,7 @@ using namespace amici; %ignore ConditionContext; %ignore get_measurements_ptr; -%ignore get_noise_scale_ptr; +%ignore get_noise_scales_ptr; %feature("pythonprepend") amici::ExpData::ExpData %{ """ @@ -32,7 +32,7 @@ using namespace amici; %pythoncode %{ def _edata_repr(self: "ExpData"): n_data_y = sum( - self.is_set_measurements(it, iy) + self.is_set_measurement(it, iy) for it in range(self.nt()) for iy in range(self.nytrue()) ) @@ -42,7 +42,7 @@ def _edata_repr(self: "ExpData"): for iy in range(self.nytrue()) ) n_data_z = sum( - self.is_set_event_measurements(ie, iz) + self.is_set_event_measurement(ie, iz) for ie in range(self.nmaxevent()) for iz in range(self.nztrue()) ) @@ -115,9 +115,9 @@ def __reduce__(self): self.nmaxevent(), self.get_timepoints(), self.get_measurements(), - self.get_noise_scale(), + self.get_noise_scales(), self.get_event_measurements(), - self.get_event_noise_scale(), + self.get_event_noise_scales(), ), dict(self) ), diff --git a/tests/cpp/jakstat_adjoint/tests1.cpp b/tests/cpp/jakstat_adjoint/tests1.cpp index 5699b68ce3..d35f20477f 100644 --- a/tests/cpp/jakstat_adjoint/tests1.cpp +++ b/tests/cpp/jakstat_adjoint/tests1.cpp @@ -95,7 +95,7 @@ TEST(ExampleJakstatAdjoint, SensitivityReplicates) } } edata.set_measurements(d); - edata.set_noise_scale(1.0); + edata.set_noise_scales(1.0); solver->set_sensitivity_order(amici::SensitivityOrder::none); auto rdata1 = run_simulation(*solver, &edata, *model); @@ -114,7 +114,7 @@ TEST(ExampleJakstatAdjoint, SensitivityReplicates) } } edata.set_measurements(d); - edata.set_noise_scale(1.0); + edata.set_noise_scales(1.0); solver->set_sensitivity_order(amici::SensitivityOrder::first); solver->set_sensitivity_method(amici::SensitivityMethod::forward); diff --git a/tests/cpp/unittests/testExpData.cpp b/tests/cpp/unittests/testExpData.cpp index 5108e99f26..687ff69ba1 100644 --- a/tests/cpp/unittests/testExpData.cpp +++ b/tests/cpp/unittests/testExpData.cpp @@ -125,14 +125,14 @@ TEST_F(ExpDataTest, MeasurementCtor) { y, edata.get_measurements(), TEST_ATOL, TEST_RTOL, "observedData" ); checkEqualArray( - y_std, edata.get_noise_scale(), TEST_ATOL, TEST_RTOL, + y_std, edata.get_noise_scales(), TEST_ATOL, TEST_RTOL, "observedDataStdDev" ); checkEqualArray( z, edata.get_event_measurements(), TEST_ATOL, TEST_RTOL, "observedEvents" ); checkEqualArray( - z_std, edata.get_event_noise_scale(), TEST_ATOL, TEST_RTOL, + z_std, edata.get_event_noise_scales(), TEST_ATOL, TEST_RTOL, "observedEventsStdDev" ); @@ -150,8 +150,8 @@ TEST_F(ExpDataTest, MeasurementCtor) { TEST_RTOL, "observedData" ); checkEqualArray( - edata_copy.get_noise_scale(), - edata.get_noise_scale(), TEST_ATOL, TEST_RTOL, + edata_copy.get_noise_scales(), + edata.get_noise_scales(), TEST_ATOL, TEST_RTOL, "observedDataStdDev" ); checkEqualArray( @@ -159,8 +159,8 @@ TEST_F(ExpDataTest, MeasurementCtor) { TEST_ATOL, TEST_RTOL, "observedEvents" ); checkEqualArray( - edata_copy.get_event_noise_scale(), - edata.get_event_noise_scale(), TEST_ATOL, TEST_RTOL, + edata_copy.get_event_noise_scales(), + edata.get_event_noise_scales(), TEST_ATOL, TEST_RTOL, "observedEventsStdDev" ); } @@ -218,9 +218,9 @@ TEST_F(ExpDataTest, DimensionChecks) { std::vector bad_z_std(nz * nmaxevent + 1, 0.1); ASSERT_THROW(edata.set_measurements(bad_y), AmiException); - ASSERT_THROW(edata.set_noise_scale(bad_y_std), AmiException); + ASSERT_THROW(edata.set_noise_scales(bad_y_std), AmiException); ASSERT_THROW(edata.set_event_measurements(bad_z), AmiException); - ASSERT_THROW(edata.set_event_noise_scale(bad_y_std), AmiException); + ASSERT_THROW(edata.set_event_noise_scales(bad_y_std), AmiException); std::vector bad_single_y(edata.nt() + 1, 0.0); std::vector bad_single_y_std(edata.nt() + 1, 0.1); @@ -229,11 +229,11 @@ TEST_F(ExpDataTest, DimensionChecks) { ASSERT_THROW(edata.set_measurements(bad_single_y, 0), AmiException); ASSERT_THROW( - edata.set_noise_scale(bad_single_y_std, 0), AmiException + edata.set_noise_scales(bad_single_y_std, 0), AmiException ); ASSERT_THROW(edata.set_event_measurements(bad_single_z, 0), AmiException); ASSERT_THROW( - edata.set_event_noise_scale(bad_single_y_std, 0), AmiException + edata.set_event_noise_scales(bad_single_y_std, 0), AmiException ); ASSERT_THROW( @@ -253,18 +253,18 @@ TEST_F(ExpDataTest, SettersGetters) { checkEqualArray( edata.get_measurements(), y, TEST_ATOL, TEST_RTOL, "ObservedData" ); - edata.set_noise_scale(y_std); + edata.set_noise_scales(y_std); checkEqualArray( - edata.get_noise_scale(), y_std, TEST_ATOL, TEST_RTOL, + edata.get_noise_scales(), y_std, TEST_ATOL, TEST_RTOL, "ObservedDataStdDev" ); edata.set_event_measurements(z); checkEqualArray( edata.get_event_measurements(), z, TEST_ATOL, TEST_RTOL, "ObservedEvents" ); - edata.set_event_noise_scale(z_std); + edata.set_event_noise_scales(z_std); checkEqualArray( - edata.get_event_noise_scale(), z_std, TEST_ATOL, TEST_RTOL, + edata.get_event_noise_scales(), z_std, TEST_ATOL, TEST_RTOL, "ObservedEventsStdDev" ); @@ -273,15 +273,15 @@ TEST_F(ExpDataTest, SettersGetters) { for (int iy = 0; iy < ny; ++iy) { edata.set_measurements(single_y, iy); - edata.set_noise_scale(single_y_std, iy); + edata.set_noise_scales(single_y_std, iy); } ASSERT_THROW(edata.set_measurements(single_y, ny), std::exception); ASSERT_THROW(edata.set_measurements(single_y, -1), std::exception); ASSERT_THROW( - edata.set_noise_scale(single_y_std, ny), std::exception + edata.set_noise_scales(single_y_std, ny), std::exception ); ASSERT_THROW( - edata.set_noise_scale(single_y_std, -1), std::exception + edata.set_noise_scales(single_y_std, -1), std::exception ); std::vector single_z(edata.nmaxevent(), 0.0); @@ -289,40 +289,40 @@ TEST_F(ExpDataTest, SettersGetters) { for (int iz = 0; iz < nz; ++iz) { edata.set_event_measurements(single_z, iz); - edata.set_event_noise_scale(single_z_std, iz); + edata.set_event_noise_scales(single_z_std, iz); } ASSERT_THROW(edata.set_event_measurements(single_z, nz), std::exception); ASSERT_THROW(edata.set_event_measurements(single_z, -1), std::exception); ASSERT_THROW( - edata.set_event_noise_scale(single_z_std, nz), std::exception + edata.set_event_noise_scales(single_z_std, nz), std::exception ); ASSERT_THROW( - edata.set_event_noise_scale(single_z_std, -1), std::exception + edata.set_event_noise_scales(single_z_std, -1), std::exception ); ASSERT_TRUE(edata.get_measurements_ptr(0)); - ASSERT_TRUE(edata.get_noise_scale_ptr(0)); + ASSERT_TRUE(edata.get_noise_scales_ptr(0)); ASSERT_TRUE(edata.get_event_measurements_ptr(0)); - ASSERT_TRUE(edata.get_event_noise_scale_ptr(0)); + ASSERT_TRUE(edata.get_event_noise_scales_ptr(0)); std::vector empty(0, 0.0); edata.set_measurements(empty); - edata.set_noise_scale(empty); + edata.set_noise_scales(empty); edata.set_event_measurements(empty); - edata.set_event_noise_scale(empty); + edata.set_event_noise_scales(empty); ASSERT_TRUE(!edata.get_measurements_ptr(0)); - ASSERT_TRUE(!edata.get_noise_scale_ptr(0)); + ASSERT_TRUE(!edata.get_noise_scales_ptr(0)); ASSERT_TRUE(!edata.get_event_measurements_ptr(0)); - ASSERT_TRUE(!edata.get_event_noise_scale_ptr(0)); + ASSERT_TRUE(!edata.get_event_noise_scales_ptr(0)); checkEqualArray( edata.get_measurements(), empty, TEST_ATOL, TEST_RTOL, "ObservedData" ); checkEqualArray( - edata.get_noise_scale(), empty, TEST_ATOL, TEST_RTOL, + edata.get_noise_scales(), empty, TEST_ATOL, TEST_RTOL, "ObservedDataStdDev" ); checkEqualArray( @@ -330,7 +330,7 @@ TEST_F(ExpDataTest, SettersGetters) { "ObservedEvents" ); checkEqualArray( - edata.get_event_noise_scale(), empty, TEST_ATOL, TEST_RTOL, + edata.get_event_noise_scales(), empty, TEST_ATOL, TEST_RTOL, "ObservedEventsStdDev" ); } diff --git a/tests/performance/test.py b/tests/performance/test.py index 6b6869c2a4..fb52444c1e 100755 --- a/tests/performance/test.py +++ b/tests/performance/test.py @@ -169,7 +169,7 @@ def main(): edata = ExpData(model) edata.set_timepoints([1e8]) edata.set_measurements([1.0]) - edata.set_noise_scale([1.0]) + edata.set_noise_scales([1.0]) prepare_simulation(arg, model, solver, edata) From f742727bda0a429779c729203c817ddcd423fd72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Fr=C3=B6hlich?= Date: Mon, 1 Dec 2025 17:25:31 +0000 Subject: [PATCH 8/9] fixup + update doc --- include/amici/edata.h | 102 ++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 54 deletions(-) diff --git a/include/amici/edata.h b/include/amici/edata.h index 79f8dfe674..98f4030e48 100644 --- a/include/amici/edata.h +++ b/include/amici/edata.h @@ -185,7 +185,7 @@ class ExpData : public SimulationParameters { std::vector const& get_timepoints() const; /** - * @brief Get timepoint for the given index + * @brief Get timepoint for a specific index. * * @param it timepoint index * @@ -196,93 +196,88 @@ class ExpData : public SimulationParameters { /** * @brief Set all measurements. * - * @param measurements observed data (dimension: nt x nytrue, row-major) + * @param my measurements (dimension: nt x nytrue, row-major) */ - void set_measurements(std::vector const& measurements); + void set_measurements(std::vector const& my); /** - * @brief Set measurements for a given observable index + * @brief Set measurements for a specific observable. * - * @param measurements observed data (dimension: nt) - * @param iy observed data index + * @param my measurements (dimension: nt) + * @param iy observable index */ - void set_measurements(std::vector const& measurements, int iy); + void set_measurements(std::vector const& my, int iy); /** - * @brief Whether there is a measurement for the given time- and observable- - * index. + * @brief Check whether a measurement is defined at the given indices. * * @param it time index * @param iy observable index * - * @return boolean specifying if data was set + * @return true if a value is set for the specified indices; otherwise false */ bool is_set_measurement(int it, int iy) const; /** * @brief Get all measurements. * - * @return observed data (dimension: nt x nytrue, row-major) + * @return measurements (dimension: nt x nytrue, row-major) */ std::vector const& get_measurements() const; /** - * @brief Get measurements for a given timepoint index. + * @brief Get measurements for a specific timepoint. * * @param it timepoint index * - * @return pointer to observed data at index (dimension: nytrue) + * @return pointer to measurements at index (dimension: nytrue) */ realtype const* get_measurements_ptr(int it) const; /** - * @brief Set noise scales for measurements. + * @brief Set noise scales for all measurements. * - * @param sigma noise scales of observed data - * (dimension: nt x nytrue, row-major) + * @param sigma noise scales (dimension: nt x nytrue, row-major) */ void set_noise_scales(std::vector const& sigma); /** - * @brief Set identical noise scale for all measurements. + * @brief Set identical noise scales for all measurements. * * @param sigma noise scale (dimension: scalar) */ void set_noise_scales(realtype sigma); /** - * @brief Set noise scales of observed data for a - * specific observable index. + * @brief Set measurement noise scales of for a observable. * - * @param sigma noise scale of observed data (dimension: - * nt) - * @param iy observed data index + * @param sigma noise scales (dimension: nt) + * @param iy observable index */ void set_noise_scales(std::vector const& sigma, int iy); /** - * @brief Set all noise scale for a given observable index to the + * @brief Set all noise scales for a specific observable to the * input value. * * @param sigma noise scale (dimension: scalar) - * @param iy observed data index + * @param iy observable index */ void set_noise_scales(realtype sigma, int iy); /** - * @brief Whether noise scale for a measurement at - * specified timepoint- and observable index has been set. + * @brief Check whether a noise scale is defined at the given indices. * * @param it time index * @param iy observable index - * @return boolean specifying if noise scale of data was set + * @return true if a value is set for the specified indices; otherwise false */ bool is_set_noise_scale(int it, int iy) const; /** * @brief Get measurement noise scales. * - * @return noise scale of observed data + * @return noise scales of measurements */ std::vector const& get_noise_scales() const; @@ -290,90 +285,89 @@ class ExpData : public SimulationParameters { * @brief Get pointer to measurement noise scales. * * @param it timepoint index - * @return pointer to noise scale of observed data at index + * @return pointer to noise scales of measurements at index */ realtype const* get_noise_scales_ptr(int it) const; /** - * @brief Set observed event data. + * @brief Set event measurements. * - * @param observedEvents observed data (dimension: nmaxevent x nztrue, + * @param mz event measurements (dimension: nmaxevent x nztrue, * row-major) */ - void set_event_measurements(std::vector const& observedEvents); + void set_event_measurements(std::vector const& mz); /** - * @brief Set observed event data for specific event observable. + * @brief Set event measurements for a specific event observable. * - * @param observedEvents observed data (dimension: nmaxevent) - * @param iz observed event data index + * @param mz event measurements (dimension: nmaxevent) + * @param iz event observable index */ void - set_event_measurements(std::vector const& observedEvents, int iz); + set_event_measurements(std::vector const& mz, int iz); /** - * @brief Check whether event data at specified indices has been set. + * @brief Check whether an event measurement is defined at the given indices. * * @param ie event index * @param iz event observable index - * @return boolean specifying if data was set + * @return true if a value is set for the specified indices; otherwise false */ bool is_set_event_measurement(int ie, int iz) const; /** - * @brief Get observed event data. + * @brief Get all event measurements. * - * @return observed event data + * @return event measurements */ std::vector const& get_event_measurements() const; /** - * @brief Get pointer to observed data at ie-th occurrence. + * @brief Get pointer to event measurements at ie-th occurrence. * * @param ie event occurrence * - * @return pointer to observed event data at ie-th occurrence + * @return pointer to event measurements at ie-th occurrence */ realtype const* get_event_measurements_ptr(int ie) const; /** - * @brief Set noise scales of observed event data. + * @brief Set noise scales of event measurements. * - * @param sigma noise scales of observed event data + * @param sigma noise scales of event measurements */ void set_event_noise_scales(std::vector const& sigma); /** - * @brief Set noise scales of observed event data. + * @brief Set noise scales of all event measurements. * * @param sigma noise scale (dimension: scalar) */ - void set_event_noise_scale(realtype sigma); + void set_event_noise_scales(realtype sigma); /** - * @brief Set noise scales of observed data for a specific observable. + * @brief Set noise scales for a specific event observable. * * @param sigma noise scales of observed data * (dimension: nmaxevent) - * @param iz observed data index + * @param iz event observable index */ void set_event_noise_scales(std::vector const& sigma, int iz); /** - * @brief Set all noise scales of a specific event-observable. + * @brief Set all noise scales for a specific event observable. * * @param sigma noise scale (dimension: scalar) - * @param iz observed data index + * @param iz event observable index */ void set_event_noise_scales(realtype sigma, int iz); /** - * @brief Check whether noise scale of event data - * at specified indices has been set. + * @brief Check whether an event noise scale is defined at the given indices. * - * @param ie event index + * @param ie event occurence * @param iz event observable index - * @return boolean specifying if noise scale of event data was set + * @return true if a value is set for the specified indices; otherwise false */ bool is_set_event_noise_scale(int ie, int iz) const; From 6bbcbf2456210928e833b6d5379f0d62a7fdad19 Mon Sep 17 00:00:00 2001 From: Daniel Weindl Date: Mon, 1 Dec 2025 18:33:25 +0100 Subject: [PATCH 9/9] Update src/model.cpp --- src/model.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model.cpp b/src/model.cpp index 2afc1394ec..bf56f966dc 100644 --- a/src/model.cpp +++ b/src/model.cpp @@ -1177,7 +1177,7 @@ void Model::add_observable_objective( std::vector nllh(nJ, 0.0); for (int iyt = 0; iyt < nytrue; iyt++) { - if (edata.is_set_measurements(it, iyt)) { + if (edata.is_set_measurement(it, iyt)) { std::ranges::fill(nllh, 0.0); fJy(nllh.data(), iyt, state_.unscaled_parameters.data(), state_.fixed_parameters.data(), derived_state_.y_.data(),