#models #ode #observation #simulation #profiles #pharmacometric #analytical

pharmsol

Rust库,用于求解分析和ODE定义的药代动力学模型

22个版本

新版本 0.3.2 2024年8月6日
0.3.1 2024年7月28日
0.2.4 2024年6月26日
0.1.15 2024年6月7日
0.1.12 2024年5月31日

#3 in #ode

Download history 346/week @ 2024-05-13 180/week @ 2024-05-20 1161/week @ 2024-05-27 340/week @ 2024-06-03 44/week @ 2024-06-10 398/week @ 2024-06-17 336/week @ 2024-06-24 11/week @ 2024-07-01 15/week @ 2024-07-08 126/week @ 2024-07-22 53/week @ 2024-07-29

195 每月下载量
pmcore中使用

GPL-3.0许可证

115KB
2.5K SLoC

Pharmsol

Build Documentation crates.io

使用ODE和解析模型模拟PK/PD轮廓。

示例

基于ODE的模型。

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:#?}");

基于解析的模型。

...
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:#?}");

支持的解析模型

我们正在努力支持所有标准解析模型。

  • 一室模型,静脉注射
  • 一室模型,静脉注射和口服吸收
  • 双室模型,静脉注射
  • 双室模型,静脉注射和口服吸收
  • 三室模型

依赖项

~28MB
~465K SLoC