Usage Guide

This page walks through common package workflows.

Quick Start

from opendose_poppk import PKModel, PDModel, PopulationSimulator

pk = PKModel(F=0.80, ka=1.80, ke=0.28, Vd=65.0)
pd = PDModel(EC50=10.0, Emax=100.0, n=1.5)

sim = PopulationSimulator(pk=pk, pd=pd, dose=1000.0)
result = sim.run(n_subjects=1000, t_max=12.0, n_points=200, seed=42)
print(result["percentiles_pk"][50].max())

Single-Subject PK

import numpy as np
from opendose_poppk import PKModel

pk = PKModel(F=0.80, ka=1.80, ke=0.28, Vd=65.0)
times = np.linspace(0, 24, 200)
conc = pk.concentration(times, D=1000.0)

Multiple-Dose Regimen

import numpy as np
from opendose_poppk import PKModel

pk = PKModel(F=0.80, ka=1.80, ke=0.28, Vd=65.0)
times = np.linspace(0, 48, 400)
conc = pk.concentration_multiple_dose(times, D=1000.0, interval_h=12.0, n_doses=4)

CLI Regimen Simulation

opendose simulate-regimen \
  --drug Paracetamol \
  --interval-h 12 \
  --n-doses 4 \
  --output-csv output/tables/paracetamol_regimen.csv \
  --plot-png output/figures/paracetamol_regimen.png

CLI IV Simulation

opendose simulate-iv \
  --drug Paracetamol \
  --mode bolus \
  --dose 1000 \
  --output-csv output/tables/paracetamol_iv_bolus.csv
opendose simulate-iv \
  --drug Paracetamol \
  --mode infusion \
  --infusion-rate 200 \
  --infusion-duration-h 2 \
  --infusion-start-h 0 \
  --output-csv output/tables/paracetamol_iv_infusion.csv

CLI Steady-State Metrics

opendose steady-state \
  --drug Paracetamol \
  --interval-h 12 \
  --n-doses 20 \
  --output-csv output/tables/paracetamol_steady_state.csv

CLI Nonlinear PK Simulation

opendose simulate-nonlinear \
  --drug Paracetamol \
  --dose 1000 \
  --vmax 200 \
  --km 15 \
  --output-csv output/tables/paracetamol_nonlinear.csv

CLI Cohort Simulation

opendose simulate-cohort \
  --drug Paracetamol \
  --input data/cohort.csv \
  --output-csv output/tables/cohort_simulation.csv

CLI Cohort Template

opendose init-cohort-template \
  --output data/cohort_template.csv

CLI Sensitivity Analysis

opendose sensitivity \
  --drug Paracetamol \
  --dose 1000 \
  --rel-step 0.1 \
  --output-csv output/tables/sensitivity_paracetamol.csv

CLI Dose Sweep

opendose dose-sweep \
  --drug Paracetamol \
  --doses 250,500,750,1000 \
  --output-csv output/tables/dose_sweep_paracetamol.csv

CLI Multi-Drug Regimen Benchmark

opendose benchmark-regimen \
  --drugs Paracetamol,Ibuprofen,Diazepam \
  --interval-h 12 \
  --n-doses 4 \
  --output-csv output/tables/regimen_benchmark.csv

CLI Environment Check

Note

If cloud CI/CD billing/credits are unavailable, local checks/tests are the primary validation path.

opendose doctor --strict

CLI Project Report

opendose project-report \
  --drug Paracetamol \
  --output-md output/reports/project_report.md

CLI Drug Dataset Validation

opendose validate-dataset \
  --dataset datasets/drugs_parameters.csv \
  --output-clean output/tables/drugs_parameters_clean.csv

CLI TDM Validation

opendose validate-tdm \
  --input data/tdm.csv \
  --output-clean output/tables/tdm_clean.csv
opendose validate-tdm \
  --input data/tdm_raw.csv \
  --time-unit min \
  --conc-unit ng/mL \
  --dose-unit g \
  --output-clean output/tables/tdm_clean.csv

CLI TDM Templates

opendose init-tdm-template --output data/tdm_template.csv
opendose init-tdm-template --format clinical --output data/tdm_template_clinical.csv

CLI Population Mixed-Effects Fit

opendose fit-population-mixed \
  --drug Paracetamol \
  --input data/tdm.csv \
  --maxiter 1200 \
  --eta-csv output/tables/pop_mixed_eta.csv \
  --output-json output/reports/pop_mixed_fit.json

CLI External Validation

Note

Direct one-to-one benchmarking against licensed software (NONMEM/Monolix/Pumas) requires paid licenses. Without licenses, external validation is limited to public datasets and/or precomputed ref_conc.

opendose init-external-template --output data/external_validation_template.csv
opendose validate-external \
  --drug Paracetamol \
  --input data/external_validation.csv \
  --predictions-csv output/tables/external_predictions.csv \
  --output-json output/reports/external_validation.json

CLI Web App Baseline

# Dry-run mode (testable): generates HTML and exits.
opendose web-app \
  --drug Paracetamol \
  --dose 750 \
  --t-end 12 \
  --output-html output/web/web_app.html \
  --dry-run
# Local server mode:
opendose web-app --drug Paracetamol --host 127.0.0.1 --port 8000

CLI Validation Report

opendose validation-report \
  --drug Paracetamol \
  --output-md output/reports/validation_report.md \
  --output-json output/reports/validation_report.json

CLI Release Readiness

opendose release-readiness \
  --repo-root . \
  --output-md output/reports/release_readiness.md \
  --strict

CLI Dose Recommendation

opendose recommend-dose \
  --drug Paracetamol \
  --target-cmax 10 \
  --weight 80 \
  --crcl 70 \
  --age 55 \
  --output-json output/reports/dose_recommendation.json

CLI Regimen Dose Recommendation

opendose recommend-regimen-dose \
  --drug Paracetamol \
  --target-trough 1.0 \
  --interval-h 12 \
  --n-doses 4 \
  --output-json output/reports/regimen_dose_recommendation.json

CLI Regimen Window Recommendation

opendose recommend-regimen-window \
  --drug Paracetamol \
  --target-trough-min 0.05 \
  --target-cmax-max 12.0 \
  --interval-h 12 \
  --n-doses 4 \
  --strategy midpoint \
  --output-json output/reports/regimen_window_recommendation.json

Covariate Modelling

from opendose_poppk import PKModel, CovariateModel

pk = PKModel(F=0.80, ka=1.80, ke=0.28, Vd=65.0)
cov = CovariateModel(pk)
individual_params = cov.individualize({"weight": 90.0, "crcl": 40.0, "age": 65.0}, sex="M")
print(individual_params)

MAP (Bayesian) Individual Estimation

import numpy as np
from opendose_poppk import PKModel, CovariateModel, MAPEstimator

pk = PKModel()
cov = CovariateModel(pk)
est = MAPEstimator(pk, covariate_model=cov, sigma_obs=0.8)

times_obs = np.array([1.0, 2.0, 4.0, 8.0])
conc_obs = np.array([6.8, 7.5, 5.9, 4.1])

result = est.fit(
    times=times_obs,
    obs=conc_obs,
    patient_covariates={"weight": 90.0, "crcl": 50.0, "age": 60.0},
    dose=1000.0,
)
print(result["params_map"])

Drug Database

from opendose_poppk import DrugDatabase, PKModel

db = DrugDatabase("datasets/drugs_parameters.csv")
drug = db.get_drug("Paracetamol")
pk = PKModel(**drug.pk_kwargs)
print(drug.dose)