Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: allow for multiple Myokit simulations #366

Merged
merged 5 commits into from
Mar 15, 2024

Conversation

eatyourgreens
Copy link
Collaborator

@eatyourgreens eatyourgreens commented Mar 12, 2024

Refactor the Myokit model mixin to allow multiple simulations to be run. Each simulation has its own subject group, with subject dosing protocols and dosing events.

@eatyourgreens eatyourgreens force-pushed the data-simulations branch 2 times, most recently from f11d0da to e32e1da Compare March 12, 2024 16:32
Copy link

codecov bot commented Mar 12, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 76.78%. Comparing base (317e646) to head (d030a9b).

Additional details and impacted files
@@               Coverage Diff               @@
##           data-upload     #366      +/-   ##
===============================================
+ Coverage        76.69%   76.78%   +0.09%     
===============================================
  Files              101      101              
  Lines             5458     5480      +22     
===============================================
+ Hits              4186     4208      +22     
  Misses            1272     1272              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link
Contributor

@martinjrobins martinjrobins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hi @eatyourgreens, this mostly looks right, but the number of simulations is not quite right:

You should perform 1 simulation for each distinct subject group. Each group of subjects will have 1 or more protocols associated with them (each dosing into a different variable). For each of those groups you want to gather the protocols for that group then run a simulation using all of the protocols for that group (you wont get an error since they will all be dosing into separate variables)

@eatyourgreens eatyourgreens force-pushed the data-simulations branch 3 times, most recently from d5e1c2a to fd817f5 Compare March 13, 2024 10:31
@eatyourgreens eatyourgreens changed the title refactor: allow for multiple Myokit simulations feat allow for multiple Myokit simulations Mar 13, 2024
@eatyourgreens eatyourgreens changed the title feat allow for multiple Myokit simulations feat: allow for multiple Myokit simulations Mar 13, 2024
@eatyourgreens eatyourgreens force-pushed the data-simulations branch 8 times, most recently from aa7a322 to 7bca337 Compare March 13, 2024 17:03
@eatyourgreens eatyourgreens marked this pull request as ready for review March 13, 2024 19:53
Refactor the Myokit model mixin to allow multiple simulations to be run.
Each simulation has its own dosing protocols and dosing events.

Update the simulate API to return multiple simulations.
@eatyourgreens eatyourgreens force-pushed the data-simulations branch 4 times, most recently from 5a27538 to 32d6e31 Compare March 15, 2024 17:04
Copy link

Copy link

Quality Gate Failed Quality Gate failed for 'pkpdapp-team_pkpdapp_frontend'

Failed conditions
C Reliability Rating on New Code (required ≥ A)

See analysis details on SonarCloud

Catch issues before they fail your Quality Gate with our IDE extension SonarLint

@eatyourgreens eatyourgreens merged commit d431437 into data-upload Mar 15, 2024
8 of 9 checks passed
@eatyourgreens eatyourgreens deleted the data-simulations branch March 15, 2024 17:36
eatyourgreens added a commit that referenced this pull request Mar 19, 2024
Refactor the Myokit model mixin to allow multiple simulations to be run.
Each dataset subject group has its own simulation, with subject dosing protocols and dosing events.

Update the simulate API to return multiple simulations.

Show multiple plots in the Simulations tab

Test simulations with a project  and dataset
eatyourgreens added a commit that referenced this pull request Mar 24, 2024
Upload a CSV dataset, set units (time, amount and observation), map CSV columns to model variables (dosing compartments and outputs), then run simulations and compare observation data with simulations in the Simulations tab.

* Map data to model variables

Show a table of dose amount data (and units), with select menus
to map these to model inputs.
Show a table of observation variables (and units), with select menus
to map those to model outputs.

* Add a mapped qname to biomarkers

Store the mapped variable qname on biomarker types. Read it from
OBSERVATION_VARIABLE in a dataset.

* Allow for multiple variable mappings

Map each Administration ID to a dosing compartment.
Map each Observation ID to a model output.
Add new columns to the CSV data, with mappings and optional units.

* Save modified dataset to backend

- load or create a dataset when we start an upload.
- save the dataset when we finish an upload.
- modify the `/datasets/:dataset_id:/csv` endpoint to accept a JSON string.

* Allow for a single unit column

- When there's a single unit column, use that column for both dosing and observations.
- Split the CSV data into dosing rows and observation rows.
- Add administration route to the Map Dosing screen.
- Allow for dimensionless observation units.
- Filter mapped observation variables for compatibility with the observation unit value.

* feat: data stratification (#361)

- Replace the tabbed interface for data uploads with a stepper.
- Add utilities to group subjects by protocol.
- Add stratification to the stepper.
- Stratify by dose protocols for the time being.
- Display each protocol group as a MUI data grid.
- Display protocol groups as tabs in the trial design view.
- Add the dosing compartment qname to the protocol model.
- Add a 'cohort' field to the CSV.

* refactor: optional simulation dosing protocols (#367)

- break `create_myokit_simulator` up into smaller methods.
- break `simulate` up into smaller methods.
- add optional `dosing_protocols` to `create_myokit_simulator`. If set, it
overrides the default dosing variable protocols.

* feat: subject groups

Add a subject group model to the Django app and the API. Subject groups
have a list of subjects and a list of protocols associated with those
subjects. Datasets have a list of subject groups in `dataset.groups`.

Refactor the Data and Trial Design views to use `dataset.groups` for
tabbed views.

* feat: allow for multiple Myokit simulations (#366)

Refactor the Myokit model mixin to allow multiple simulations to be run.
Each dataset subject group has its own simulation, with subject dosing protocols and dosing events.

Update the simulate API to return multiple simulations.

Show multiple plots in the Simulations tab

Test simulations with a project  and dataset

* feat: plot biomarker data in Simulation tab (#371)

- add biomarker data to the dataset serialiser.
- add biomarker data to the `useDataset` hook.
- display the dataset as data grids in the Data tab.
- show biomarkers as scatter plots on simulation plots.

* fix: handle missing observation units in the CSV (#372)

When the uploaded CSV doesn't have an observation unit column, allow
the user to pick a unit from a list of units, then pick a compatible
variable for the selected unit.

* refactor: handle missing units in CSV (#373)

Better handling of missing unit columns in the CSV.
- When time units are missing, prompt to choose a time unit.
- Change the column headings in the submitted CSV to match
headings that are expected by the Python data parser utility.
- Add a preclinical flag to the dosing step during uploads.

* fix: validate observation unit symbols

Makes sure that observation units are valid symbols. Symbols loaded
from a CSV sometimes have encoding issues.

If the symbol isn't valid, show the unit menu instead, so that we can
pick a valid unit and correct the uploading error.

* fix: set Group ID when selected cohort changes

Update the Group ID column when the selected cohort changes.
Use the group column values as the group ID for each row
eg. (1, 2, 3) or (Male, Female.)

* fix: 'map observations' with no selected unit

When there's no selected unit yet, the observation variables menu
should show all possible model variables.

* feat: handle additional doses from a data row (#374)

Map ADDL and II columns, in the CSV, to repeat doses in the model
and simulations.

* feat: filter displayed data by groups (#375)

Add checkboxes to control which subject groups are displayed in the
simulations view.

---------

Co-authored-by: martinjrobins <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants