15 releases
new 0.1.15 | Jun 7, 2024 |
---|---|
0.1.14 | Jun 3, 2024 |
0.1.12 | May 31, 2024 |
#243 in Parser implementations
1,814 downloads per month
Used in pmcore
80KB
2K
SLoC
Pharmsol
Simulate PK/PD profiles using ODE and analytical models.
Example
ODE based model.
use pharmsol::*;
let subject = data::Subject::builder("id1")
.bolus(0.0, 100.0, 0)
.repeat(2, 0.5)
.observation(0.5, 0.1, 0)
.observation(1.0, 0.4, 0)
.observation(2.0, 1.0, 0)
.observation(2.5, 1.1, 0)
.build();
println!("{subject:#?}");
let ode = simulator::Equation::new_ode(
//Difussion Equations
|x, p, _t, dx, _rateiv, _cov| {
fetch_cov!(cov, t,);
fetch_params!(p, ka, ke, _tlag, _v);
dx[0] = -ka * x[0];
dx[1] = ka * x[0] - ke * x[1];
},
// Lag definition (In this case boluses on dx[0] will be delayed by `tlag`)
|p| {
fetch_params!(p, _ka, _ke, tlag, _v);
lag! {0=>tlag}
},
// No bio-availability
|_p| fa! {},
// Default initial conditions (0.0,0.0)
|_p, _t, _cov, _x| {},
// Output Equations
|x, p, _t, _cov, y| {
fetch_params!(p, _ka, _ke, _tlag, v);
y[0] = x[1] / v;
},
(2, 1),
);
let op = ode.simulate_subject(&subject, &vec![0.3, 0.5, 0.1, 70.0]);
println!("{op:#?}");
Analytic based model.
...
let analytical = simulator::Equation::new_analytical(
one_compartment_with_absorption,
|_p, _cov| {},
|p| {
fetch_params!(p, _ka, _ke, tlag, _v);
lag! {0=>tlag}
},
|_p| fa! {},
|_p, _t, _cov, _x| {},
|x, p, _t, _cov, y| {
fetch_params!(p, _ka, _ke, _tlag, v);
y[0] = x[1] / v;
},
(2, 1),
);
let op = analytical.simulate_subject(&subject, &vec![0.3, 0.5, 0.1, 70.0]);
println!("{op:#?}");
Supported analytical models
We are working to support all the standard analytical models.
- One-compartment with IV infusion
- One-compartment with IV infusion and oral absorption
- Two-compartment with IV infusion
- Two-compartment with IV infusion and oral absorption
- Three-compartmental models
Dependencies
~20–26MB
~423K SLoC