关于 tooluniverse-computational-biophysics
这是一个用于定量生物学和计算生物物理问题的 ToolUniverse 技能,帮助学习者和研究人员识别物理过程、选择计算或查询方法,并用 Python 检查数值推理。
主要功能
- 01将问题映射到物理过程
- 02常见定量模型的解题指导
- 03选择计算、估算或查询方法
- 04Python 计算模板
- 05系统化选择题分析
适用场景
- 01计算药物衰减或清除
- 02分析结合与稀释问题
- 03估算流行病阈值
- 04检查定量生物学答案
MCP 相关
该技能列出用于查询分子、药物、结合、遗传和文献数据的 ToolUniverse 工具。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mims-harvard/ tooluniverse --skill tooluniverse-computational-biophysics安装后在 Claude Code 中输入/tooluniverse-computational-biophysics确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
scripts/burn_fluids.pyenv_risk_assessment.pyenzyme_kinetics.pyepidemiology.pyfluid_calculations.pyherd_immunity.pyiv_drip_rate.pymc_analyzer.pyradioactive_decay.py详细介绍
计算生物物理学与定量生物学技能
1. 识别物理过程
最重要的一步:识别问题描述的是哪种物理过程。在定量生物学中,几乎所有问题都可以归入以下某一类:
- 药物进入人体 → 分布 → 被清除:药代动力学。关键量:剂量、生物利用度、分布容积、清除率、半衰期。人体可视为一个室模型。
- 放射性示踪剂随时间衰变:核医学。数学形式与药物清除相同(指数衰减),但速率常数是同位素的物理属性,而非患者变量。
- 病原体在人群中传播:流行病学。R₀ 决定疫情会扩大还是消退。群体免疫阈值 = 1 - 1/R₀。所有流行病模型都从这里开始。
- 配体与受体结合:结合平衡。在 [配体] 较低时,结合呈线性;达到饱和时,所有位点都被占据。Kd = 达到最大结合量一半时的浓度。酶动力学、药物-受体占有率和表面吸附都遵循同一条曲线。
- 污染物进入环境:稀释 + 持续性。需要回答两个问题:混合后的浓度是多少(质量守恒),以及会持续多久(按环境半衰期指数衰减)?
- 两个种群在遗传上存在差异:群体遗传学。Fst 用于衡量分化程度。HWE 用于检验交配是否随机。基因流会抵消遗传漂变。
- 神经元在网络中通信:计算神经科学。积分发放模型、突触动力学、兴奋与抑制的平衡。平均放电率取决于输入电流相对于阈值的大小。
确定过程后,数学结构便会随之明确。先用代数求解,再代入数值,并始终检查单位是否正确约去,以及结果的量级在物理上是否合理。
2. 按问题类型选择推理模式
这些不是公式,而是思考物理过程的方式。
守恒 / 稀释问题
某种物质被分散到更大的体积中,或两股流体混合。物质总量守恒。可以这样理解:混合前的量 = 混合后的量,其中量 = 浓度 x 体积。这适用于连续稀释、流体混合、储备液配制,以及污染物排入河流等情况。
指数衰减 / 增长问题
某种物质正在消失(或增长),其变化速率与当前的量成正比。典型提示是题目中出现“半衰期”或“倍增时间”。药物清除、放射性衰变、环境持久性、细菌生长和疫情倍增都属于这一模式。不同应用之间唯一变化的是速率常数和发生衰减的对象。
饱和 / 结合问题
某种物质与数量有限的位点结合。浓度较低时,结合量与浓度成正比;浓度较高时,位点逐渐被占满,继续增加浓度的效果会减弱。这适用于受体-配体结合、酶动力学、表面吸附和氧-血红蛋白曲线。其形状始终是双曲线:响应 = 最大响应 x [物质] / ([物质] + 半最大常数)。
阈值 / 交叉点问题
“X 在什么点等于 Y?”或“浓度何时会降至治疗水平以下?”将两个表达式设为相等并求解即可。例如:达到目标药物水平所需的时间、环境浓度超过安全限值的时刻、群体免疫阈值(有效 R 降至 1 时)。
比值 / 速率问题
输出 = 输入 x 时间,或输出 = 浓度 x 流速。清除率、通量、给药速率和滴注速率的计算都只是量纲分析:排列已知量,使单位能够正确匹配。
群体比较问题
正在比较两个群体。你需要一个差异度量(Fst、优势比、相对风险)以及一个判断差异是否真实的度量(p 值、置信区间)。思考:效应量是多少?它能否与噪声区分开来?
3. 何时计算、估算或查找
仔细计算,当:
- 答案会影响患者(药物剂量、诊断解读)
- 问题给出了精确数字,并要求精确答案
- 你需要对数据拟合曲线(使用 scipy)
估算并说明不确定性,当:
- 答案只需要数量级(环境风险、群体层面的情况)
- 输入值本身存在不确定性(R0 估算值、通过 log Kow 回归得出的 BCF)
- 请说明:“该值约为 X,主要不确定性来自 Y”
通过 ToolUniverse 查找,当:
- 你需要物理常数:半衰期、分子量、Kd、log Kow、等位基因频率
- 用户指定了某种药物、化合物、基因或变异
- 你想根据已知案例验证计算结果
| 所需数据 | 使用的工具 |
|---|---|
| 分子量、log Kow、SMILES | PubChem_get_CID_by_compound_name、PubChem_get_compound_properties_by_CID |
| 药物 PK 属性、作用机制 | ChEMBL_get_molecule |
| 结合亲和力(Kd、Ki、IC50) | BindingDB_search_by_target |
| 等位基因频率 | gnomad_get_variant、MyVariant_query_variants |
| 文献数值(R0、BCF 等) | EuropePMC_search_articles |
直接计算,当:
- 问题给出了所有数字
- 没有指定具体的现实化合物或基因
4. Python 计算模板
重要:如果问题给出数字并要求数值答案,请使用 Bash 工具编写并运行 Python 代码。 不要试图在脑中计算——编写脚本、执行脚本并报告结果。多步骤问题的心算容易出错。以下模板仅供起步使用——请根据具体问题进行调整,然后执行。
答案格式规则:匹配问题要求的精度和格式。如果数据保留 2 位小数,就四舍五入到 2 位。对于较大的数字(>10^6),使用科学计数法;如果问题要求“以 10^28 为单位”,只给出系数。对于较小的数字,遵循问题指定的格式(例如,“1.776 × 10^-3”,而不是“1.8e-3”)。只给出数字——除非明确要求,否则不要附加单位或说明。
# Pattern for every computation problem:
# 1. Extract ALL given values from the problem — write them down with units
# 2. Identify EXACTLY what quantity the question asks for
# 3. Write a Python script connecting givens to the unknown
# 4. Run it with: python3 -c "..."
# 5. VERIFY: substitute your answer back into the original problem — does it make sense?
# e.g., if computing a drip rate, check: rate × time = total volume?
# e.g., if computing vaccine coverage, check: coverage × efficacy × population > herd immunity?
模板 1:指数衰减 / 增长
适用场景:药物清除、放射性衰变、环境持久性、细菌生长、疫情翻倍。
import numpy as np
def exponential_process(initial, half_life, time):
"""Amount remaining after exponential decay. For growth, use negative half_life."""
return initial * (0.5 ** (time / half_life))
def time_to_reach(initial, target, half_life):
"""Time for exponential process to reach a target value."""
return half_life * np.log2(initial / target)
# Examples — same math, different domains:
# Drug: 500 mg dose, t½ = 6 h, after 24 h → 31.25 mg
# Radioactive: 20 mCi Tc-99m, t½ = 6 h, after 12 h → 5 mCi
# Environmental: 100 ppm pesticide, t½ = 30 days, after 90 days → 12.5 ppm
模板 2:守恒 / 稀释 / 混合
适用场景:C1V1=C2V2、河流混合、连续稀释。核心逻辑:C1*V1 = C2*V2(提供 3 个已知量,求第 4 个)。对于 n 股流体混合:final_conc = sum(Ci*Qi) / sum(Qi)。
模板 3:阈值 / 平衡求解器
适用场景:药物浓度低于治疗水平的时刻、群体免疫阈值。使用 scipy.optimize.brentq(lambda x: func(x) - target, lo, hi) 查找交叉点。
模板 4:饱和 / 结合曲线
适用场景:受体结合、酶动力学、吸附、剂量-反应。曲线形式:response = Rmax * C / (C + Kd)。使用 scipy.optimize.curve_fit 拟合,参数为 p0=[median(C), max(response)]。
模板 5:统计比较
适用场景:HWE 卡方检验、列联表、组间比较。使用 scipy.stats.chisquare(observed, expected) 进行拟合优度检验,使用 stats.ttest_ind/ttest_rel 进行组间比较。
模板 6:速率 / 量纲分析
适用场景:静脉滴注速率、清除率、通量、给药速率。核心公式:rate = amount / time、mass_rate = concentration * flow_rate。安排单位,使其正确约去。
模板 7:隔室模型与 R0
适用场景:SIR/SEIR、R0 推导。R0 = beta * N / gamma(基本 SIR 模型)。一般形式:R0 = transmission_rate * infectious_duration * susceptible_contacts。通过追踪一个感染者经过所有隔室的过程进行推导。
5. 多项选择题策略
生物物理学、药理学和临床医学中的多项选择题,答错往往不是因为知识不足,而是因为流程出错:漏看选项、混淆选项字母与文本,或选择了第一个听起来合理的答案。每次都使用以下系统化方法。
多项选择题必备流程
- 将题干读两遍。 确认题目要求的具体操作:“最可能”“第一步”“最佳描述”“除外”。这些限定词会改变答案。
- 逐一评估所有选项。 针对每个选项询问:
- 为什么它可能正确?——它是否符合核心概念?
- 为什么它可能错误?——推理是否与之矛盾,或者它是否只部分正确?
- 明确说明理由后再排除。 只有能陈述事实依据(而非仅凭感觉)时,才标记排除某个选项。
- 统计剩余选项。 剩下一个选项 → 它就是答案。剩下两个或更多 → 返回题干,寻找区分它们的限定词。
- 核对字母与文本是否对应。 写下答案前,确认准备填写的字母对应的是你推理过的选项文本。这能避免常见错误:推理时认为“B 正确”,写答案时却写了“C”。
- 定量多项选择题:先用 Python 计算出精确答案,再与最接近的选项匹配。不要让给出的选项影响计算——独立完成计算。
- 多项选择题陷阱:“以上皆是/以上皆非”只有约 25% 的情况下正确。绝对化措辞(“总是”“从不”“仅”)通常是错的。最长、最详细的选项往往更可能正确。两个选项互为相反说法时,通常有一个是正确的。
批量处理的关键要求:连续回答多道多项选择题时,切勿仓促作答。每道题都要完整执行排除流程。批量作答时常见的错误是凭第一印象作答,没有进行排除。对于每道多项选择题,必须:
- 在选定答案前,至少写出两个被排除的选项及理由
- 如果无法排除任何选项,说明你需要查找相关信息
mc_analyzer.py — 自动化多项选择题框架
位于 skills/tooluniverse-computational-biophysics/scripts/mc_analyzer.py。
# Analysis mode: systematic elimination
python mc_analyzer.py --question "..." --choices "A:opt1,B:opt2,C:opt3,D:opt4" --reasoning "..."
# Verify mode: confirm letter-text alignment
python mc_analyzer.py --verify --answer "B" --question "..." --choices "A:opt1,B:opt2,C:opt3,D:opt4"
分析模式会扫描推理中的排除信号,并报告剩余选项数量。验证模式会检查字母与文本是否对应。适用于任何计分的多项选择题。
6. 捆绑脚本
这些可直接运行的脚本位于 skills/tooluniverse-computational-biophysics/scripts/。
使用 Bash 工具运行它们,而不要手动计算——这些脚本包含验证步骤,并能处理边缘情况。
epidemiology.py — 流行病学计算(通过 --type 支持 5 种类型)
优先使用:通过 MCP/SDK 使用 ToolUniverse 工具,而不是脚本:
Epidemiology_r0_herd工具——R0 和群体免疫阈值Epidemiology_vaccine_coverage工具——根据现场数据计算疫苗接种覆盖率Epidemiology_nnt工具——需治疗人数Epidemiology_diagnostic工具——诊断测试性能(2x2 表)Epidemiology_bayesian工具——贝叶斯检测前/检测后概率
备用方案:仅使用标准库的脚本。类型:r0_herd、vaccine_coverage、nnt、diagnostic、bayesian。
python epidemiology.py --type r0_herd --R0 3.5 --VE 0.90
python epidemiology.py --type nnt --control_rate 0.30 --treatment_rate 0.20
python epidemiology.py --type diagnostic --tp 90 --fp 10 --tn 880 --fn 20
python epidemiology.py --type bayesian --prevalence 0.01 --sensitivity 0.95 --specificity 0.90
关键公式:r0_herd:Hc=1-1/R0,Vc=Hc/VE。vaccine_coverage:根据现场 PCV/PPV 数据推导 VE。nnt:ARR=对照组-治疗组,NNT=1/ARR。diagnostic:完整的 2x2 表。bayesian:检测前比值 → LR → 检测后概率。
herd_immunity.py — 旧版疫苗接种阈值脚本
python herd_immunity.py --R0 4.2 --VE 0.94
公式:Vc = (1 - 1/R0) / VE。新任务优先使用 epidemiology.py --type r0_herd。
radioactive_decay.py — 剩余活度 / 达到目标所需时间 / 母体-子体
三种模式:正向(--A0 --half_life --time)、反向(--A0 --half_life --target)、母体-子体(使用 Bateman 方程的 --parent_daughter)。
python radioactive_decay.py --A0 8 --half_life 67.3 --time 72 # forward
python radioactive_decay.py --A0 8 --half_life 67.3 --target 5 # reverse
python radioactive_decay.py --parent_daughter --half_life_parent 306.05 --half_life_daughter 40.27 --A1 1.4 --A2 2.1 --delta_t 336 --counted daughter
公式:A(t) = A0 * 0.5^(t/t_half)。母体-子体:Bateman 方程。--counted:子体/两者/母体。
env_risk_assessment.py — 环境风险评估(危害商)
计算经食物途径暴露于土壤污染物的 HQ。食物格式:"name:intake_g:bioavailability:PUF:TSCF"。
python env_risk_assessment.py --total_mass_ug 1e9 --area_m2 250000 --depth_m 0.6 \
--bulk_density 1500 --theta_w 0.35 --foc 0.03 --Koc 28.3 \
--food "fruit:300:0.5:0.1:5" --body_weight 80 --RfD 0.02
公式:C_soil → Kd=foc*Koc → C_sw → 各途径的 DI → HQ = sum(DI)/BW/RfD。
fluid_calculations.py — 临床补液与给药(通过 --type 指定 4 种类型)
类型:drip_rate、bsa_dose、maintenance、dilution。优先使用此工具,而非旧版 iv_drip_rate.py。
python fluid_calculations.py --type drip_rate --volume_ml 50 --time_min 60 --drop_factor 60
python fluid_calculations.py --type bsa_dose --dose_per_m2 25 --bsa 0.8
python fluid_calculations.py --type maintenance --weight_kg 22
python fluid_calculations.py --type dilution --c1 20 --v1 4.7 --v2 50
公式:drip_rate = (vol/time)drop_factor。bsa_dose = dose_per_m2BSA。maintenance = Holliday-Segar。dilution = C1V1=C2V2。
enzyme_kinetics.py — Km/Vmax、Hill、Ki(通过 --type 指定 3 种类型)
优先使用 EnzymeKinetics_calculate 工具(通过 MCP/SDK),并传入 type 和数据参数。备用方案:直接运行 enzyme_kinetics.py。
仅使用标准库。类型:km_vmax(Lineweaver-Burk + 非线性)、hill(协同性)、ki(竞争性/反竞争性/非竞争性)。
python enzyme_kinetics.py --type km_vmax --substrate "1,2,5,10,20" --velocity "0.5,0.8,1.2,1.5,1.7"
python enzyme_kinetics.py --type ki --substrate "1,2,5,10,20" --velocity_no_inh "0.5,0.8,1.2,1.5,1.7" --velocity_inh "0.3,0.5,0.8,1.0,1.1" --inhibitor_conc 5 --inhibition_type competitive
burn_fluids.py — 烧伤复苏与维持补液
成人:Parkland(4*kg*%TBSA)。儿童(<30kg):Galveston(5000*BSA*%TBSA + 2000*BSA)。
python burn_fluids.py --weight_kg 80 --tbsa_pct 40
python burn_fluids.py --weight_kg 25 --age_years 7 --tbsa_pct 45 --bsa_m2 0.95
输出:每小时速率(前 8h / 后 16h)、总容量、目标尿量。8h 从烧伤发生时开始计时。
7. 组合与计数问题
对于遗传学组合问题(F2 单倍型、基因型计数、样本统计)或任何计数/排列/组合问题:务必编写并执行 Python 代码。切勿尝试在脑中枚举或计数,即使看起来简单的问题(例如“由 5 个 SNP 能产生多少种不同染色体”)也可能存在细微之处,导致不借助代码就出错。使用 itertools.product、itertools.combinations 或直接公式,然后验证计数结果。
8. 常见易错点提示
- 单位不匹配:mg 与 g、mL 与 L、小时与秒。始终在每个数值旁标注单位,并在计算前确认单位能够约去。
- 单指数与多指数:药物清除通常呈双指数(分布期 + 消除期)。简单的半衰期衰减假设只有一个室。请说明这一假设。
- R0 与 Re:R0 = 人群完全易感时的值。Re = R0 x 易感人群比例。大多数现实问题要求的是 Re。
- 单个位点的估计有噪声:单个 SNP 的 Fst、单个患者的反应、单次测量的 Kd。请始终注明:全基因组平均值、人群均值或重复实验通常更可靠。
- 回归估计只能反映数量级:根据 log Kow 估算 BCF,根据 QSAR 估算毒性。请明确指出不确定性。
- 模拟中使用 SI 单位:神经元模型、扩散、热力学——计算前务必转换为 SI 单位(秒、米、焦耳、伏特)。ms/mV 混用会导致不易察觉的千倍误差。