IVRT 累计释放计算 (Logan 918-12) v1.2.0 — 专业版
何时使用
- 用户说"算 IVRT 累计释放""IVRT 数据处理""Logan 918-12 释放曲线""体外释放累计量"
- 需要一份满足法规/评审要求的专业 IVRT 报告
- 需要释放速率(线性拟合斜率)、多吸收池对比、%释放率、残差诊断、速率对比柱状图
设备与固定参数
- 设备:Logan 918-12 干式 (dry cell) 系统,支持 6 / 12 组吸收池
- 吸收池体积 V = 12 mL(默认,可在参数表覆盖)
- 样品面积 A = 1.76625 cm²(默认,可在参数表覆盖)
计算口径(标准 IVRT)
透过量(t) = C(t) × V [μg] C = 药物浓度(μg/mL)
累计透过量(t) = Σ_{τ≤t} 透过量 [μg]
单位面积累计(t) = 累计透过量(t) / A [μg/cm²]
%释放(t) = 单位面积累计(t) / 含量 × 100% 含量 = 成品单位面积含量(μg/cm²)
线性拟合以 √时间 为自变量:
单位面积累计 = 释放速率 × √时间 + 截距
释放速率单位: μg/cm²/√h
可选 USP<1724> 取样体积替换校正:当取样体积 Vs > 0 时,
累计透过量(t) = C(t)·V + Σ_{τ<t} C(τ)·Vs(即每次取样移走并补空白的修正)。
输入 Excel 格式
工作簿两种布局均可自动识别(由列数判断):
① 宽矩阵(第 1 列=时间,其余列=各吸收池浓度 μg/mL)** | 时间(h) | 吸收池1 | 吸收池2 | … | 吸收池12 | |---|---|---|---|---| | 0.5 | 12.3 | 11.9 | … | 13.0 | | 1 | 22.1 | … | … | … |
② 长格式(三列:时间 / 编号 / 浓度,如 时间 编号 樟脑浓度(μg)/ml)**
| 时间 | 编号 | 樟脑浓度(μg)/ml |
|---|---|---|
| 1h | 1 | 39.28 |
| 1h | 2 | 37.19 |
- 时间列支持数值(
1)或带单位文本(1h、0.5h),自动提取小时数。 - 长格式自动透视成 时间×吸收池 矩阵。
- 6 组 / 12 组由吸收池列数自动识别,按数字升序排列。
(可选)参数表(默认 sheet 名 参数,两列 key/value,仅"含量"必填)
| 项目 | 数值 | 说明 |
|---|---|---|
| 吸收池体积(ml) | 12 | 受体池体积 |
| 样品面积(cm2) | 1.76625 | 有效扩散面积 |
| 成品单位面积含量(μg/cm2) | (填) | 用于 %释放,也可 --content 覆盖 |
| 取样体积(ml) | 0 | 0=直接累加;>0 启用 USP<1724> 替换校正 |
若未提供参数表/含量,可用
--content 3328在命令行直接给含量。
运行方式
脚本:scripts/ivrt_calc.py(Python 3.11+,依赖 pandas / openpyxl / numpy / matplotlib / pillow / scipy;无需 plotly Python 包)
# 0) 生成模板
python scripts/ivrt_calc.py --make-template template.xlsx --n-cells 12
# 1) 正常计算
python scripts/ivrt_calc.py --input 你的数据.xlsx --content 3328 --output-dir ./out
# 2) 指定设备名
python scripts/ivrt_calc.py --input data.xlsx --content 1500 --output-dir ./out
# 3) 启用取样体积校正(参数表设 Vs>0)
输出
报告结构 (ivrt_report.html)
报告采用现代化 UI 设计,共 7 个部分组成:
| # | 模块 | 内容 | 法规意义 | |---|------|------|----------| | — | 计算公式卡片 | 完整公式链(透过量→累计→单位面积→释放率→拟合) | 方法学透明度 | | — | 拟合汇总表 | 每池释放速率/截距/R² + 拟合方程列 + 终点累计/释放 + 均值行 | NMPA/FDA 核心要求 | | ① | √时间 线性拟合图 | 各池数据点+拟合线,含悬停看方程 | EMA IVRT 要件 | | ② | 各吸收池对比 | 折线+标记对比,√时间横轴 | 批内变异性评估 | | ③ | %释放率对比 | 提供含量时显示 | 释放曲线完整性 | | ④ | 释放速率柱状图 | 各池速率柱状 + 均值参考线 + 95% CI | 速率一致性审评 | | ⑤ | 残差分析图 | 各池拟合残差 vs √时间 + 零线 | 线性假设诊断 | | ⑥ | 汇总仪表盘 | 平均速率 / 平均 R² / 平均释放 / 池数/时间点 | 快速解读 | | — | 释放仿真动图 | Logan 918-12 细胞示意 GIF | 直观辅助 | | — | 明细数据表 | 每时间点各池累计+%释放(可滚动) | 数据可审计性 |
动图文件
ivrt_simulation.gif— Logan 918-12 释放仿真 GIF 动图(深色背景,液面恒定满,35 粒子阈值点亮,fps=10,中文标签显示真实 %释放值)ivrt_simulation.png— 动图最后一帧静态封面
可用
--no-gif跳过 GIF,--no-png跳过静态封面。注意(动图显示):报告 HTML 默认以相对路径引用
ivrt_simulation.gif,仅当 HTML 与 GIF 同目录时(本地双击打开)可显示。若将报告放到静态托管/预览环境(仅 HTML 被加载),动图会 404 显示空白。此时请加--embed-gif,将 GIF 以 base64 内嵌进 HTML(单文件自包含,报告体积约 +2.5MB)。
新增图表详解
图④ 释放速率对比柱状图
各池释放速率以柱状图显示,叠加 均值参考线(红色虚线)。Hover 可查看具体速率值。用于评估各吸收池之间释放速率的一致性,是 NMPA IVRT 审评中对批内变异性的关键可视化。
图⑤ 残差分析图
各池拟合残差(实测值 - 拟合值)对 √时间 的散点图。若残差随机分布在零线附近、无明显趋势,则证明 线性拟合假设成立。这是 EMA/FDA IVRT 指南中对线性模型适用性的核心诊断手段。
图⑥ 汇总仪表盘
以卡片形式展示关键统计量:平均释放速率、平均 R²、平均终点 %释放、吸收池数、时间点数、设备信息,便于快速报告解读。
补充说明
%释放需要"成品单位面积含量",必须在参数表或--content提供- 单位一致性由用户保证:浓度 μg/mL、V mL、A cm²、含量 μg/cm²
- 交互报告用 Plotly.js CDN 渲染(数据内嵌),首次打开需联网;GIF/PNG 始终离线可用
- 与
tibetan-topical-ivrt(研究设计)互补,本技能只做实测数据→累计释放与作图
版本变更记录
| 版本 | 日期 | 变更 |
|------|------|------|
| 1.0.0 | 2026-07-20 | 初版:静态仿真 PNG,基于时间 t 线性拟合,Plotly 交互报告 |
| 1.1.0 | 2026-07-21 | 静态 PNG → GIF 动图;中文字体注册;--no-gif/--no-png 参数 |
| 1.1.1 | 2026-07-21 | 液面固定满;粒子按阈值点亮表示累计释放(35 粒子/池) |
| 1.1.2 | 2026-07-21 | 三个图 X 轴改为 √时间,拟合重做,表头改 μg/cm²/√h;动图从 t=0h 开始 |
| 1.1.3 | 2026-07-21 | 汇总表前新增计算公式展示;X 轴 range:[1,null];动图 fps 15→10 |
| 1.1.4 | 2026-07-21 | 动图标签改为真实 %释放值,与拟合汇总表一致 |
| 1.1.5 | 2026-07-21 | 吸收池按数字升序排序,明细表与动图顺序一致 |
| 1.2.0 | 2026-07-22 | 专业版报告升级:现代 CSS 卡片布局 + 拟合方程列 + 3 张辅助诊断图(速率柱状/残差分析/仪表盘)+ 95% CI 统计 + 法规审评策略说明 |
| 1.2.1 | 2026-08-16 | 修复 read_params 关键词匹配冲突:"成品单位面积含量"含"面积"、取样体积含"体积",导致 V=0/A=含量/含量读不到;改为 含量→取样→体积→面积 的优先级顺序;verify_ivrt.py 解释器路径由硬编码 Windows 路径改为 sys.executable。新增 --embed-gif 参数:将仿真 GIF base64 内嵌进 HTML,解决静态托管/预览环境相对路径 404 导致动图空白的问题。修复 GIF 中文字体注册(原仅 Windows 路径,现跨平台候选:HarmonyOS /system/fonts/NotoSansCJK/FZHeiT → Windows → macOS → Linux),避免中文显示为方块。图表图例布局优化:图①②③⑤横向图例(y=1.12)与标题重叠,改为垂直靠右图内(x:1.02,y:1,margin r=150),图④柱状图底部边距 80→120 防 x 轴标签与标题重叠。 |
验证
python verify_ivrt.py
# RESULT: PASS (产物在 verify_out/run_6 与 verify_out/run_12)
真实数据示例:
python scripts/ivrt_calc.py --input 工作簿1.xlsx --content 3328 --output-dir ./out
Scan to join WeChat group