Source code for sbmlsim.examples.experiments.midazolam.experiments.kupferschmidt1995
from typing import Dict, List
from sbmlsim.data import DataSet, load_pkdb_dataframes_by_substance
from sbmlsim.fit import FitData, FitMapping
from sbmlsim.plot import Axis, Figure
from sbmlsim.simulation import Timecourse, TimecourseSim
from . import MidazolamSimulationExperiment
[docs]class Kupferschmidt1995(MidazolamSimulationExperiment):
[docs] def datasets(self) -> Dict[str, DataSet]:
dsets = {}
for fig_id in ["Fig1", "Fig2"]:
dframes = load_pkdb_dataframes_by_substance(
f"{self.sid}_{fig_id}", data_path=self.data_path
)
for substance, df in dframes.items():
dset = DataSet.from_df(df, self.ureg)
if substance == "midazolam":
dset.unit_conversion("mean", 1 / self.Mr.mid)
elif substance == "1-hydroxymidazolam":
dset.unit_conversion("mean", 1 / self.Mr.mid1oh)
else:
raise ValueError
for intervention in df.intervention.unique():
# tag route
if "po" in intervention:
route = "po"
elif "iv" in intervention:
route = "iv"
else:
raise ValueError
# tag intervention type
if "GRAP1" in intervention:
continue
else:
type = "control"
dsets[f"{fig_id}_{substance}_{route}_{type}"] = dset[
dset.intervention == intervention
]
return dsets
[docs] def simulations(self) -> Dict[str, TimecourseSim]:
return super(Kupferschmidt1995, self).simulations(
simulations={**self.simulations_mid()}
)
[docs] def simulations_mid(self) -> Dict[str, TimecourseSim]:
"""Kupferschmidt1995
- midazolam, iv, 5 [mg]
- midazolam, po, 15 [mg]
- grapefruit juice, po, 200 [mg], -60min and -15min
"""
Q_ = self.Q_
bodyweight = Q_(70, "kg") # avg. bodyweight of 8 individuals. (se=1kg)
mid_iv = Q_(5, "mg")
mid_po = Q_(15, "mg")
sim_def = {
"mid_iv_c": {
"end": 1500,
"steps": 3000,
"dose": {"IVDOSE_mid": mid_iv},
},
"mid_po_c": {
"end": 1500,
"steps": 3000,
"dose": {"PODOSE_mid": mid_po},
},
}
tcsims = {}
for key, value in sim_def.items():
tcsims[key] = TimecourseSim(
[
Timecourse(
start=0,
end=value["end"],
steps=value["steps"],
changes={**value["dose"], "BW": bodyweight},
)
]
)
return tcsims
[docs] def fit_mappings(self) -> Dict[str, FitMapping]:
# fit mapping: which data maps on which simulation
fit_dict = {
"fm_mid_iv": {
"ref": "Fig1_midazolam_iv_control",
"obs": "task_mid_iv_c",
"yid": "[Cve_mid]",
},
"fm_mid1oh_iv": {
"ref": "Fig2_1-hydroxymidazolam_iv_control",
"obs": "task_mid_iv_c",
"yid": "[Cve_mid1oh]",
},
"fm_mid_po": {
"ref": "Fig1_midazolam_po_control",
"obs": "task_mid_po_c",
"yid": "[Cve_mid]",
},
"fm_mid1oh_po": {
"ref": "Fig2_1-hydroxymidazolam_po_control",
"obs": "task_mid_po_c",
"yid": "[Cve_mid1oh]",
},
}
mappings = {}
for key, values in fit_dict.items():
mappings[key] = FitMapping(
self,
reference=FitData(
self,
dataset=values["ref"],
xid="time",
yid="mean",
yid_sd="mean_sd",
),
observable=FitData(
self, task=values["obs"], xid="time", yid=values["yid"]
),
)
return mappings
[docs] def figure_mid(self):
unit_time = "min"
unit_mid = "nmol/ml"
unit_mid1oh = "nmol/ml"
self.add_selections_data(selections=["time", "[Cve_mid]", "[Cve_mid1oh]"])
fig = Figure(self, sid="Fig1", num_rows=2, num_cols=2, name=self.sid)
plots = fig.create_plots(Axis("time", unit=unit_time), legend=True)
# set titles and labs
plots[0].set_title("midazolam iv, 5 [mg]")
plots[1].set_title("midazolam iv, 5 [mg] + Grapefruit Juice")
plots[2].set_title("midazolam po, 15 [mg]")
plots[3].set_title("midazolam po, 15 [mg] + Grapefruit Juice")
for k in (0, 1):
plots[k].set_yaxis("midazolam", unit_mid)
plots[k].xaxis.label_visible = False
for k in (2, 3):
plots[k].set_yaxis("1-hydroxymidazolam", unit_mid1oh)
# simulation
plot_dict = {
"mid_iv_c": {
"plot": (0, 1),
"label": "mid (ve blood; control)",
"color": "black",
},
"mid_po_c": {
"plot": (2, 3),
"label": "mid (ve blood; control)",
"color": "black",
},
}
for key, value in plot_dict.items():
for suffix in [""]: # ["_sensitivity", ""]:
task_id = f"task_{key}{suffix}"
# plot midazolam
p = plots[value["plot"][0]]
p.add_data(
task=task_id,
xid="time",
yid="[Cve_mid]",
label=value["label"],
color=value["color"],
linewidth=2,
)
# plot 1-hydroxymidazolam
p = plots[value["plot"][1]]
p.add_data(
task=task_id,
xid="time",
yid="[Cve_mid1oh]",
label=value["label"],
color=value["color"],
linewidth=2,
)
# plot data
data_def = {
"Fig1_midazolam_iv_control": {
"plot": 0,
"key": "control",
"color": "black",
},
"Fig1_midazolam_po_control": {
"plot": 1,
"key": "control",
"color": "black",
},
"Fig2_1-hydroxymidazolam_iv_control": {
"plot": 2,
"key": "control",
"color": "black",
},
"Fig2_1-hydroxymidazolam_po_control": {
"plot": 3,
"key": "control",
"color": "black",
},
}
for dset_key, dset_info in data_def.items():
p = plots[dset_info["plot"]]
p.add_data(
dataset=dset_key,
xid="time",
yid="mean",
yid_sd="mean_sd",
count=None,
color=dset_info["color"],
label=dset_info["key"],
)
return {"fig1": fig}