eDPM#

eDPM (Experimental Design for Predictive Microbiology) is designed to analyze the informational content of systems of Ordinary Differential Equations (see Concepts and Background). Naturally, the first step is to chose one such system and define it via a function.

def ode_fun(t, y, inputs, parameters, ode_args):
   ...
   return [ ... ]

We also require additional information in the form of derivatives with respect to the state variables y and parameters.

def ode_dfdx(t, y, inputs, parameters, ode_args):
   ...
   return [[ ... ], ...]

def ode_dfdp(t, y, inputs, parameters, ode_args):
   ...
   return [[ ... ], ...]

We then define the variables times, inputs, parameters and optional ode_args. The Model module gathers all information to fully define a valid model. It does this by creating a FisherModel

fsm = FisherModel(
   ode_fun,
   ode_dfdx,
   ode_dfdp,
   ode_x0,
   ode_t0,
   times,
   inputs,
   parameters,
)

which can afterwards be used by the Solving module to calculate the information content of the model. The user can decide to no explicitly specify certain variables and leave them mutable for optimization. It is thus necessary to transform the FisherModel it into a fully parametrized model FisherModelParametrized by using an initial guess for these mutable variables.

fsmp = FisherModelParametrized.init_from(fsm)
calculate_fisher_criterion(fsmp)

In addition to solving a model, we can also optimize previously defined mutable variables such that the information content given by one of the chosen criteria is maximized. This procedure is handled by the Optimization module and yields FisherResults.

fsr = find_optimal(fsm)

After the optimization routine has come to an end, the Plotting module visualizes the obtained results.

plot_all_solutions(fsr, outdir="out")

The Database module dumps information in json format to a file or string.

json_dump(fsr, "model.json")