mcpField
T
tooluniverse-computational-biophysics

tooluniverse-computational-biophysics

github.com/mims-harvard数据与数据库1.8k227 次安装2 天前更新
代码仓库

关于 tooluniverse-computational-biophysics

这是一个用于定量生物学和计算生物物理问题的 ToolUniverse 技能,帮助学习者和研究人员识别物理过程、选择计算或查询方法,并用 Python 检查数值推理。

主要功能

  1. 01将问题映射到物理过程
  2. 02常见定量模型的解题指导
  3. 03选择计算、估算或查询方法
  4. 04Python 计算模板
  5. 05系统化选择题分析

适用场景

  1. 01计算药物衰减或清除
  2. 02分析结合与稀释问题
  3. 03估算流行病阈值
  4. 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.py
env_risk_assessment.py
enzyme_kinetics.py
epidemiology.py
fluid_calculations.py
herd_immunity.py
iv_drip_rate.py
mc_analyzer.py
radioactive_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、SMILESPubChem_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. 多项选择题策略

生物物理学、药理学和临床医学中的多项选择题,答错往往不是因为知识不足,而是因为流程出错:漏看选项、混淆选项字母与文本,或选择了第一个听起来合理的答案。每次都使用以下系统化方法。

多项选择题必备流程
  1. 将题干读两遍。 确认题目要求的具体操作:“最可能”“第一步”“最佳描述”“除外”。这些限定词会改变答案。
  2. 逐一评估所有选项。 针对每个选项询问:
    • 为什么它可能正确?——它是否符合核心概念?
    • 为什么它可能错误?——推理是否与之矛盾,或者它是否只部分正确?
  3. 明确说明理由后再排除。 只有能陈述事实依据(而非仅凭感觉)时,才标记排除某个选项。
  4. 统计剩余选项。 剩下一个选项 → 它就是答案。剩下两个或更多 → 返回题干,寻找区分它们的限定词。
  5. 核对字母与文本是否对应。 写下答案前,确认准备填写的字母对应的是你推理过的选项文本。这能避免常见错误:推理时认为“B 正确”,写答案时却写了“C”。
  6. 定量多项选择题:先用 Python 计算出精确答案,再与最接近的选项匹配。不要让给出的选项影响计算——独立完成计算。
  7. 多项选择题陷阱:“以上皆是/以上皆非”只有约 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 混用会导致不易察觉的千倍误差。

评论

支持 Markdown