For developers¶
Programatically run simulations¶
An example is provided in manual_script.py on how programatically defined scenarios can be simulated.
How to add a model?¶
Defining the model
Define the state variables, inputs, constants, parameters, and model equations in the VirtualPatient/Models folder
- In the Parameters file:
Define all model parameters and their vectorization function (
as_array).Define
generatefunction that either loads patient files or draws random samples from distributions.
- In the Inputs file:
Define all model inputs and their vectorization function (
as_array).
- In the Model file:
Define a unique name in the Model class, same name should be given to the folder.
Diff. equations should be defined in the
modelfunction.Initial conditions should be defined in the
preprocessingfunction.A
from_scenariofunction has to be defined which passes the inputs, parameters, etc. from the scenario to the model. Unit conversions from the default units to the model specific ones is convenient to do in this function.
Define virtual patient parameters in
JSONfiles in the Patients folder.
Add model to the generate functions
Add functions that generate the necessary inputs of the model in
generate_inputs_mainfunction in the generate_inputs file.Add model parameter generation in
generate_virtual_subjects_mainfunction in the generate_subjects file.
Note
If the added model is just an auixiliary model, it can be readily used for simulation. An example is the physical activity -> heart rate model, and the implementation can be found in pymgipsim/InputGeneration/heart_rate_settings.py. If the added model represents the patient, the following steps are needed.
Update VirtualCohort
Add the defined model to the virtual patient class in VirtualPatient/VirtualPatient.
Update plots
Update plotting function with specifics of the defined model.
Optional: Controller compatibility *
How to add a controller?¶
Define controller class
Define the class similarly to already existing ones in the
pymgipsim/Controllersfolder.The controller has to have a unique name, same as the folder name.
runfunction of the controller will be called in every sampling time of the simulation with the available data up to that point. The function has to modify inplace the current sample of the input array.
Adding it to the solver
Add the controller to the
set_controllerfunction inpymgipsim/ModelSolver/singlescale.py.
Update plots
Update plotting function with specifics of the defined controller.