☰
虚拟器官插件开发教程(5):CiPA 合规的多电流阻滞层——7 电流面板、Hill 方程与 hERG 的动力学特殊化
2026/10/12 3:43:32 网站建设 项目流程

虚拟器官插件开发教程(5):CiPA 合规的多电流阻滞层——7 电流面板、Hill 方程与 hERG 的例外

版本声明块

  • 工具/软件:github.com/FDA/CiPA(R+C,GPL-3.0)、github.com/FDA/cipated(TED 格式 Python 包,CC0-1.0)、Chaste/ApPredict(BSD 生态,--model 6=ORd、--model 8=ORd-CiPA v1)
  • 语言/环境:Python 3.10+(dataclass/enum,纯标准库)、YAML、R 4.x(仅作子进程调用)
  • 本文目标:把第 4 篇的单电流阻滞扩成 CiPA 的 7 靶点面板,并给出一套不会被单位与靶点缺项坑到的配置层

一句话结论:CiPA 的药理学层就是七个靶点各自的阻滞曲线b(C)=C^nH/(IC50^nH+C^nH)配上电导缩放g_eff=g_max*(1-b),外加一个例外——hERG(I_Kr,基因 KCNH2)在 FDA/CiPA 参考实现里不用稳态 Hill,而用结合动力学 Markov 亚模型:仓库分工是hERG_fitting/拟合 hERG、Hill_fitting/拟合其余 6 电流,并对 IC50/Hill 做2000 组参数抽样(官方 README 逐字:Rscript AP_simulation.R -d dofetilide -x "1-10,15,20,25" -i "1-2000");面板从 2016 论文的"六个离子通道"演进为现行7 靶点,其中I_K1 的基因是 KCNJ2(通道蛋白 K_ir2.1)——ApPredict 页面把它写成 KCNN4 是笔误,申报文档里不要照抄。

〇、本篇要解决的认知问题

  • 问题 1:CiPA 的"7 电流面板"具体是哪七个?每个靶点的基因/通道怎么对应,为什么 I_K1 常被写错?
  • 问题 2:Hill 阻滞与 conductance block(电导阻滞)合起来在数学上到底改了什么?
  • 问题 3:hERG 为什么不能和其他 6 个电流一样处理?"virtual hERG"这个说法可信吗?
  • 问题 4:FDA/CiPA 仓库的"6+1"分工与 2000 组抽样,对插件实现意味着什么?
  • 问题 5:浓度单位、游离/总浓度、Cmax 倍数这些约定该写在哪一层?

一、机制解析

1.1 七靶点面板(含方向性直觉)

电流通道蛋白基因(核实值)FDA/CiPA 拟合方式阻滞后对复极的方向
I_KrhERG / K_v11.1KCNH2Markov 结合动力学(hERG_fitting/)复极变慢 → APD/QT延长(经典高危信号)
I_KsK_v7.1KCNQ1Hill(Hill_fitting/)延长(但被复极储备部分兜住)
I_CaLCa_v1.2CACNA1CHill内向钙流减少 → APD缩短(可对冲 hERG)
I_NaNa_v1.5SCN5AHill主要影响 0 期上升支与传导
I_NaLNa_v1.5 持续(晚)电流SCN5A(同一基因的晚电流分量)Hill内向晚流减少 → APD缩短(可对冲)
I_to瞬时外向钾电流本素材未核实基因符号 →以官方文档为准Hill影响相位 1 与穹窿形态,间接影响跨壁离散
I_K1K_ir2.1KCNJ2(ApPredict 页面误作 KCNN4)Hill影响静息电位与末期复极,与复极储备直接相关

演进史要写清:2016 年的方法学论文写的是 “panel consisting ofsix ion channels”(Crumb/Johannesen/Strauss,J Pharmacol Toxicol Methods2016),落地到官方代码与数据时是7 靶点+hERG 亚模型的形态。只交 6 项面板(尤其漏 I_K1)是常见的实现缺陷。

为什么这对你重要:面板缺项在申报里不是"少一个字段",而是被质疑"你的对冲机制没建模"。评审问的第一个问题往往是:I_CaL 和 I_NaL 的阻滞怎么进来的?

1.2 数学只有一行,工程有五行

b_i(C) = C^n_i / (IC50_i^n_i + C^n_i) # 第 i 个靶点的阻滞率,0<=b<=1 g_i,eff = g_i,max * (1 - b_i(C)) # conductance block:只缩最大电导,不动门控 I_i,drug = g_i,eff * O_i(V,t) * (V - E_i) # 门控 O_i 与驱动力不变 -> 电流线性缩小

五行工程指的是:单位换算、C=0 短路、n的上下界、b与 Markov 分流、以及缺测靶点的表示法(缺测 ≠ IC50=∞,缺测要写measured: false并降证据等级)。

为什么这对你重要:公式一行就能抄,边界处理才是插件的差别。同一段 Hill 代码,别人跑出来能申报、你跑出来被质疑,差距往往就在这五行上——它们决定了"数值是否可追溯"。

1.3 hERG 的两个例外,以及"virtual hERG"的甄别

例外一:温度。湿测 hERG 常在室温做,而阻滞动力学 strongly 依赖温度。CiPA 路线里对应的是温度依赖的 in silico hERG 模型:Li Z 等,J Pharmacol Toxicol Methods2016;81:233-239,doi:10.1016/j.vascn.2016.05.005,用途就是把室温测得的 hERG 数据外推到生理温度。

例外二:时间。hERG 阻滞是状态依赖且结合/解离有限速的过程,稳态 Hill 只描述"平衡时阻了多少",无法描述"这一拍里阻滞如何随电压与时间演化"。CiPA 参考实现因此用Markov 药动-药效亚模型:Li Z 等,Circ Arrhythm Electrophysiol2017;10:e004628,doi:10.1161/CIRCEP.116.004628;配套的阻滞效力评价策略见 Ridder/Li 2020, doi:10.1016/j.taap.2020.114961。

为什么这对你重要:把 hERG 当稳态 Hill 实现,插件照样出曲线、评审照样能看到"APD 延长"——但你会在验证集上被"低浓度不延长、高浓度陡增"这类时间依赖形态打穿。留一个block_model字段,就是给这个坑留一块补丁板。

术语甄别:“virtual hERG” 不是 CiPA 的正式术语。检索到这个词时,先问对方指的是哪一件具体工作——是 Li 2016 的温度依赖模型、Li 2017 的结合动力学 Markov 模型,还是某家厂商的商业模块。同理,CiPA 语境里的 “core lab” 主体是FDA CDER(OCP + Division of Applied Regulatory Science + Division of Cardiology and Nephrology),网上流传的"NCATS-IPD / NCATS in silico core lab"说法未获证实;而 “CuteCell” 是 Regenlab 的 PRP 医疗器械,与 CiPA 无关;“BECF” 这一缩写在本系列素材里无法证实,不要写进方案。

1.4 FDA/CiPA 仓库的"6+1"与 2000 组抽样

github.com/FDA/CiPA (R 67% / C 25%, GPL-3.0, 作者 Kelly Chang、Zhihua Li) ├── models/ newordherg_qNet.c -> R CMD SHLIB 编译成 .so 供 R 调用 ├── AP_simulation/ AP_simulation.R # 逐化合物、逐浓度、逐参数样本跑 AP 并算 qNet ├── Hill_fitting/ # 6 个电流的 IC50 / Hill 系数拟合 └── hERG_fitting/ # hERG 的 Markov 结合动力学拟合(1 个 -> "6+1" 的由来)

官方 README 的命令行(逐字,注意-i "1-2000"才是开启不确定度样本):

cdmodels&&R CMD SHLIB newordherg_qNet.c Rscript AP_simulation.R-ddofetilide-x"1-10,15,20,25"# 最优拟合参数Rscript AP_simulation.R-ddofetilide-x"1-10,15,20,25"-i"1-2000"# 2000 个不确定度样本Rscript compute_qNet_CI.R;Rscript compute_TdP_error.R--uncertainty

对你的三条约束:(1)参考实现的"参数"是2000 组而非一组点估计,你的插件输出必须有不确定度通道;(2)它是GPL-3.0,跨语言调用要走子进程;(3)模型版本要写清CiPAORdv1.0(Dutta 2017, doi:10.3389/fphys.2017.00616)而不是笼统写"ORd"(原版 ORd 是 PLoS Comput Biol 2011, doi:10.1371/journal.pcbi.1002061,参数不同)。

为什么这对你重要:2000 组抽样不是学术摆设,它是接口约束——你的插件必须能"同一条件跑 N 个参数样本"。这意味着执行器要支持参数注入与种子管理(第 14 篇的批量调度、第 19 篇的审计字段都在此埋下)。没有这条通道,将来任何"模型置信度"的提问你都无法回答。

1.5 ApPredict:把"哪个变量是电导"变成模型元数据

ApPredict(Chaste 官方 user project)在 7 电流阻滞下预测 AP,做法是要求 CellML 模型给相关量打 oxmeta 本体标签,再用--model 6(ORd)/--model 8(ORd-CiPA v1)选择模型;Web 门户是https://cardiac.nottingham.ac.uk/ActionPotentialPortal/。两个值得抄的工程点:(a)本体标签解耦"物理量"与"变量名"(治第 4 篇 1.6 的病);(b)APD 评估失败时返回专用错误码而不是抛异常字符串——第 4 篇的failure_reason就是照此设计。

1.6 面板之外:湿测方案、TED 数据与回归集

面板只是"合同模板",合同里要填的是数据。CiPA 侧可供对标的三类官方资产:

  1. 标准化湿测方案:FDA 发布的离子通道标准化方案覆盖hERG / Ca_v1.2 / Na_v1.5(fda.gov/media/131157),它决定你拿到的 IC50 是什么温度、什么电压协议、什么细胞系下测的——这三项没记录,阻滞参数就没有可比性。
  2. TED 格式实验数据:github.com/FDA/cipated提供 TED(Tabulated Experimental Data)的 Python 包,许可 CC0-1.0,是目前最适合直接进插件 CI 的数据容器(对比:R 仓库是 GPL-3.0)。
  3. 回归集:CiPA 28 化合物集(data/CiPA_training_drugs.csv,TdP 风险类别 0/1/2)。第 15 篇的验证报告就以它为主战场:灵敏度/特异度/错分率三件套按 Li 2020 通用原则(CPT2020;107(2):322-332, doi:10.1002/cpt.1647)报告。

面板该配到哪一步:7 靶点是 CiPA 的选择,不是生理学的终点(例如 I_CaL 的钙释放与钙转运相关电流、晚电流的分隔方式在不同细胞模型里处理不同)。工程上的判断标准只有一条:你引入的每个靶点,是否有可追溯的湿测常数来源;有则进面板,无则写measured: false并在限制声明里说清。ApPredict 的--model 6(ORd)与--model 8(ORd-CiPA v1)也是同一逻辑——模型编号变了,面板的解释就变了。

为什么这对你重要:面板不是越全越好,而是每一项都要能追溯到一张湿测记录单。你的插件之所以能被审计,靠的就是这条链路,而不是电流数量。

1.7 与第 4 篇的接缝

第 4 篇的插件契约里那个blocks: Dict[str, ChannelBlock]字段,本篇给了它三件必需的东西:靶点枚举(防缺项)、单位(防平移)、block_model(防把 hERG 当稳态 Hill)。接缝处的实现原则是:配置层不知道模型层存在——面板只输出"每个电流的缩放系数(或 Markov 亚模型的结合/解离输入)“,由模型适配器决定这个系数乘到哪个变量上(回到第 2 篇 1.6 的"变量名跨模型不一致”)。这条分界线画好,插件才能同时挂 Myokit、ApPredict 与自研内核。

为什么这对你重要:把"药理学"与"模型变量映射"解耦,是这套代码能活过模型换代(ORd → CiPAORdv1.0 → ToR-ORd)的唯一办法。


二、完整代码与逐行剖析

2.1 7 电流 Hill 配置层(纯标准库,完整可跑)

"""CiPA 7 靶点阻滞配置层:枚举锁靶点、dataclass 锁参数、单位在入口处换算。"""fromdataclassesimportdataclass,fieldfromenumimportEnumfromtypingimportDict,OptionalclassCurrentName(str,Enum):# 枚举即"字典":拼写漂移与缺项在构造期就暴露I_Kr="I_Kr";I_Ks="I_Ks";I_CaL="I_CaL";I_Na="I_Na"I_NaL="I_NaL";I_to="I_to";I_K1="I_K1"GENE={CurrentName.I_Kr:"KCNH2",CurrentName.I_Ks:"KCNQ1",CurrentName.I_CaL:"CACNA1C",CurrentName.I_Na:"SCN5A",CurrentName.I_NaL:"SCN5A(晚电流分量)",CurrentName.I_to:None,# 本素材未核实 -> 输出"待核",绝不用记忆填空CurrentName.I_K1:"KCNJ2"}# 不是 KCNN4(ApPredict 页面笔误)@dataclass(frozen=True)classHillBlock:ic50_uM:floathill_n:float=1.0model:str="hill"# hill | markov:hERG 在这里被分流出去measured:bool=True# 缺测要显式标 False,而不是编一个巨大的 IC50def__post_init__(self):ifself.ic50_uM<=0:raiseValueError("IC50 必须为正(单位锁 µM)")ifself.hill_n<=0:raiseValueError("Hill 系数必须为正")defblock(self,c_uM:float)->float:ifc_uM<0:raiseValueError("浓度不得为负")ifc_uM==0:return0.0# 0**n 与浮点噪声的短路returnc_uM**self.hill_n/(self.ic50_uM**self.hill_n+c_uM**self.hill_n)@dataclassclassPanel:blocks:Dict[CurrentName,HillBlock]=field(default_factory=dict)def__post_init__(self):missing=[k.valueforkinCurrentNameifknotinself.blocks]ifmissing:raiseValueError(f"7 电流面板缺项:{missing}")# 第 4 篇崩溃点的直接对策:不许单靶点defscale(self,name:CurrentName,c_uM:float)->float:b=self.blocks[name]ifnotb.measured:raiseRuntimeError(f"{name.value}缺测,禁止当作'无阻滞'参与计算")ifb.model!="hill":raiseRuntimeError(f"{name.value}标记为{b.model}亚模型(hERG),不能用稳态 Hill 缩电导;"f"需结合动力学 ODE(Li 2017 doi:10.1161/CIRCEP.116.004628)")return1.0-b.block(c_uM)deffrom_nM(v:float)->float:# 单位换算是入口职责,不是调用方口头约定returnv*1.0e-3panel=Panel({# 以下 7 组 IC50/Hill 全是"演示占位值",不对应任何真实化合物;实盘值来自湿测或 Hill_fitting/hERG_fittingCurrentName.I_Kr:HillBlock(ic50_uM=0.02,model="markov"),CurrentName.I_Ks:HillBlock(ic50_uM=3.0),CurrentName.I_CaL:HillBlock(ic50_uM=2.0),CurrentName.I_Na:HillBlock(ic50_uM=1.5,hill_n=1.4),CurrentName.I_NaL:HillBlock(ic50_uM=1.5,hill_n=1.4),CurrentName.I_to:HillBlock(ic50_uM=8.0),CurrentName.I_K1:HillBlock(ic50_uM=12.0),})forkinCurrentName:# 打印面板清单(基因未核实的显式打"待核")print(f"{k.value:6s}gene={GENE[k]or'待核':24s}model={panel.blocks[k].model}")print("单位自检:100 nM ->",from_nM(100.0),"uM ;Cmax=0.5 uM 时 1.5 uM =",1.5/0.5,"倍 Cmax")forcin[0.0,0.5,1.0,2.0,5.0,20.0]:# 只有 Hill 靶点给缩放系数,hERG 留空待 Markovprint(f"C={c:5.2f}uM 电导缩放 ->",{k.value:(Noneifpanel.blocks[k].model!="hill"elseround(panel.scale(k,c),4))forkinCurrentName})assertabs(HillBlock(2.0,1.0).block(2.0)-0.5)<1e-12# 半阻点性质:C=IC50 -> b=0.5assertHillBlock(2.0,2.0).block(4.0)>HillBlock(2.0,1.0).block(4.0)# n 越大高浓度段越陡forname,whyin[(CurrentName.I_Kr,"稳态 Hill 用在 hERG"),(CurrentName.I_to,"靶点缺测")]:ifnameisCurrentName.I_to:panel.blocks[name]=HillBlock(ic50_uM=8.0,measured=False)# 原地替换成"缺测"状态try:panel.scale(name,1.0)print("!! 未拦截:",why)exceptRuntimeErrorase:print(f"拦截{why}:{e}")print("面板性质断言通过")

本机实跑(Python 3.10.11,纯标准库):

I_Kr gene=KCNH2 model=markov I_Ks gene=KCNQ1 model=hill I_CaL gene=CACNA1C model=hill I_Na gene=SCN5A model=hill I_NaL gene=SCN5A(晚电流分量) model=hill I_to gene=待核 model=hill I_K1 gene=KCNJ2 model=hill 单位自检:100 nM -> 0.1 uM ;Cmax=0.5 uM 时 1.5 uM = 3.0 倍 Cmax C= 0.00 uM 电导缩放 -> {'I_Kr': None, 'I_Ks': 1.0, 'I_CaL': 1.0, 'I_Na': 1.0, 'I_NaL': 1.0, 'I_to': 1.0, 'I_K1': 1.0} C= 0.50 uM 电导缩放 -> {'I_Kr': None, 'I_Ks': 0.8571,'I_CaL': 0.8, 'I_Na': 0.8232,'I_NaL': 0.8232,'I_to': 0.9412, 'I_K1': 0.96} C= 2.00 uM 电导缩放 -> {'I_Kr': None, 'I_Ks': 0.6, 'I_CaL': 0.5, 'I_Na': 0.4007,'I_NaL': 0.4007,'I_to': 0.8, 'I_K1': 0.8571} C=20.00 uM 电导缩放 -> {'I_Kr': None, 'I_Ks': 0.1304,'I_CaL': 0.0909,'I_Na': 0.0259,'I_NaL': 0.0259,'I_to': 0.2857, 'I_K1': 0.375} 拦截 稳态 Hill 用在 hERG: I_Kr 标记为 markov 亚模型(hERG),不能用稳态 Hill 缩电导;需结合动力学 ODE(Li 2017 doi:10.1161/CIRCEP.116.004628) 拦截 靶点缺测: I_to 缺测,禁止当作'无阻滞'参与计算 面板性质断言通过

剖析:注意I_CaL在C=2 µM(恰为其 IC50)时缩放系数是0.5,而I_Na/I_NaL因n=1.4在同浓度已降到0.4007——Hill 系数不是装饰,它决定多靶点曲线在生理浓度窗里的相对斜率;把 7 个n全设成 1 等于悄悄改了药理学假设。

2.2 面板配置文件(YAML,可 diff、可进申报附录)

# contracts/panel/ciPA7.yaml —— 7 电流阻滞面板的"实验定义"(演示值,非实测)conc_units:"uM"# 面板唯一单位;nM 由采集端换算后写入concentration_basis:"free"# 游离浓度口径;用 Cmax 倍率时改成 "cmax_multiple" 并补 cmax_uMtargets:I_Kr:{gene:"KCNH2",ic50_uM:0.02,hill_n:1.0,block_model:"markov"}# FDA/CiPA: hERG_fitting/I_Ks:{gene:"KCNQ1",ic50_uM:3.0,hill_n:1.0,block_model:"hill"}I_CaL:{gene:"CACNA1C",ic50_uM:2.0,hill_n:1.0,block_model:"hill"}I_Na:{gene:"SCN5A",ic50_uM:1.5,hill_n:1.4,block_model:"hill"}I_NaL:{gene:"SCN5A",ic50_uM:1.5,hill_n:1.4,block_model:"hill",note:"晚电流分量"}I_to:{gene:null,ic50_uM:8.0,hill_n:1.0,block_model:"hill",note:"基因待核,以官方文档为准"}I_K1:{gene:"KCNJ2",ic50_uM:12.0,hill_n:1.0,block_model:"hill"}# 不是 KCNN4uncertainty:param_samples:2000# 对齐 FDA/CiPA 的 -i 1-2000 抽样范式report:["APD90_CI","qNet_CI"]model_binding:cell_model:"CiPAORdv1.0"doi:"10.3389/fphys.2017.00616"

2.3 与 GPL-3.0 参考实现的安全对接(bash)

# 对表官方结果:R 进程隔离,只交换 CSV,绝不 import 进闭源插件gitclone https://github.com/FDA/CiPA&&cdCiPA# GPL-3.0:单独目录、单独许可证清单cdmodels&&R CMD SHLIB newordherg_qNet.c# C 加速核:qNet 的编译入口cd..Rscript AP_simulation.R-ddofetilide-x"1-10,15,20,25"-i"1-2000"\>runs/fda_ref_dofetilide.csv2>runs/fda_ref.stderr# stdout 留数据、stderr 留日志,便于审计Rscript compute_qNet_CI.R;Rscript compute_TdP_error.R--uncertainty# 把上面产物当"金标准回归集":你的 Python 面板在同一批浓度上对表,误差写进验证报告(第 15 篇)

三、常见报错与排查

  1. hERG 用稳态 Hill 也能跑出曲线,为什么不行?——因为它假定"瞬时平衡阻滞",而真实 hERG 阻滞随膜电位历史与时间演化(Li 2017 Markov 模型的存在理由);另外湿测多在室温,需按 Li 2016(doi:10.1016/j.vascn.2016.05.005)思路外推到生理温度。解法:面板里block_model: markov,让配置层强制分流。
  2. 浓度-反应曲线整体平移 3 个数量级——根因:nM 与 µM 混用。解法:面板只接受uM,采集端调用from_nM()换算并在报告里同时打印原始值。
  3. ValueError: 7 电流面板缺项:['I_K1']——根因:照抄了 2016 论文的"六电流面板"。解法:补齐 7 靶点;确实缺测的靶点用measured: false表达,而不是编一个极大 IC50。
  4. I_K1 的基因写成 KCNN4——这是 ApPredict 页面自身的笔误;I_K1 的通道蛋白是 K_ir2.1,基因KCNJ2。解法:在配置里集中维护GENE表,文档/图表都从它渲染,改一处即可。
  5. “我看别人用 virtual hERG 模型”——该词不是正式术语。解法:追问具体出处(Li 2016 温度依赖 / Li 2017 结合动力学 / 商业模块),把它写进依赖清单而不是留在口头。
  6. R 参考实现报缺编译工具——R CMD SHLIB newordherg_qNet.c需要本机 C 工具链;具体版本要求以官方 README 为准,工具链问题不要在 Python 侧绕。

四、动手练习

  1. 面板完整性:删掉 YAML 里的I_to与I_K1两行,重跑 2.1。判定标准:构造Panel时抛ValueError并列出恰好这两个缺项名。
  2. 对冲实验:把I_CaL的ic50_uM改成0.3(强阻滞)再对比I_Kr单独强阻滞,接回第 4 篇的 APD90 读数函数。判定标准:前者 APD 延长显著小于后者,理解"多通道共阻滞对冲"与 J-Tpeak 的机制关系。
  3. 不确定度通道:给HillBlock加ic50_uM_ci: Optional[tuple],并在扫描时按区间端点各跑一遍。判定标准:每个浓度输出 APD90 的区间(上界/下界),且区间宽度随浓度单调不减。

五、小结与下一篇预告

本篇把药理学层从"一条 hERG"升级成可审计的 7 靶点面板:枚举与 dataclass 锁住靶点与单位、block_model把 hERG 分流到 Markov 结合动力学、2000 组抽样把不确定度变成一等公民,同时对 I_K1 基因(KCNJ2)、“virtual hERG”、NCATS 归属、CuteCell/BECF 这几处常见讹用作了纠正。第 4 篇给的是读数协议,本篇给的是给药协议,下一篇(第 6 篇)把两者接到 CiPA 的核心指标qNet(Dutta 2017 的 CiPAORdv1.0 与净电荷读数,并用 Python 复算)上,第 8 篇再把细胞读数放大到 J-Tpeak 与 TdP 分档 0/1/2。


本篇认知问题回显(FAQ)

Q1:CiPA 的 7 电流面板具体是哪七个,基因怎么对应?
A:I_Kr(hERG/K_v11.1,KCNH2)、I_Ks(KCNQ1)、I_CaL(Ca_v1.2,CACNA1C)、I_Na(Na_v1.5,SCN5A)、I_NaL(SCN5A 晚电流分量)、I_to(瞬时外向钾,基因符号以官方文档为准)、I_K1(K_ir2.1,KCNJ2)。I_K1 写成 KCNN4 是 ApPredict 页面的笔误;2016 论文表述为"六个离子通道",落地面板是 7 靶点。

Q2:Hill 阻滞加 conductance block 在模型里到底改了什么?
A:只改最大电导:b(C)=C^nH/(IC50^nH+C^nH),g_eff=g_max*(1-b),电流I=g_eff*O(V,t)*(V-E)。门控变量与驱动力不变,因此只需两个可湿测参数(IC50、nH);代价是隐含"快速可逆且电压无关"的假设,hERG 不满足该假设。

Q3:hERG 为什么要特殊处理?有没有温度依赖和结合动力学两条不同的路线?
A:有两条且互补:温度依赖的 hERG 计算模型(Li 2016,J Pharmacol Toxicol Methods81:233-239, doi:10.1016/j.vascn.2016.05.005)用于把室温数据外推到生理温度;结合动力学 Markov 亚模型(Li 2017,Circ Arrhythm Electrophysiol10:e004628, doi:10.1161/CIRCEP.116.004628)描述阻滞随时间/状态演化,FDA/CiPA 的hERG_fitting/走的就是这条;“virtual hERG” 不是正式术语,需追问所指工作。

Q4:FDA/CiPA 仓库的"6+1"分工与 2000 组参数抽样怎么理解?
A:hERG_fitting/单独拟合 hERG(1),Hill_fitting/拟合其余 6 个电流的 IC50/Hill 系数(6),共"6+1";AP_simulation.R用-i "1-2000"对拟合参数做 2000 组抽样传播不确定度(Rscript AP_simulation.R -d dofetilide -x "1-10,15,20,25" -i "1-2000"),再用compute_qNet_CI.R、compute_TdP_error.R --uncertainty出置信区间与错分率。该仓库 GPL-3.0,须用子进程调用。

Q5:浓度单位与游离/总浓度这类约定应该写在哪一层?
A:写进面板配置与校验代码:conc_units: "uM"由Panel/HillBlock强制,from_nM()在采集端完成换算;口径字段concentration_basis取free(游离)或cmax_multiple(配cmax_uM)。蛋白结合率、游离分数修正等实验侧做法本素材未核实,以官方方案(FDA 离子通道标准化方案 fda.gov/media/131157)与文献为准,插件只负责把口径记录成元数据。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询