关于MDAnalysis生存概率计算中tau_max参数的疑问
背景与测试情况
本人是MDAnalysis及Python新手,完成了100ns蛋白质模拟,欲计算所选区域内水分子的生存概率(Survival Probability, SP)。使用MDAnalysis的SurvivalProbability代码已成功生成x为时间、y为SP的图像,但不清楚时间单位。
为测试,使用最后1000帧(对应2ns)数据运行如下代码:
import MDAnalysis from MDAnalysis.analysis.waterdynamics import SurvivalProbability as SP import numpy as np import matplotlib.pyplot as plt u = MDAnalysis.Universe("md.psf", "md1000f.dcd", in_memory= True) select = "byres name OH2 and sphzone 3.5 (name N and resid 143 144 145)" sp = SP(u, select, verbose=True) sp.run(start=0, stop=1000, tau_max=20) tau_timeseries = sp.tau_timeseries sp_timeseries = sp.sp_timeseries # print in console for tau, sp in zip(tau_timeseries, sp_timeseries): print("{time} {sp}".format(time=tau, sp=sp))
目标为筛选与残基143、144、145的N原子处于3.5Å球内的OH2水分子,得到结果如下:
0 1 1 0.8738224637681159 2 0.8059945504087194 3 0.7505464480874317 4 0.7115068493150685 5 0.6736263736263736 6 0.6382920110192837 7 0.6041436464088398 8 0.573961218836565 9 0.5491666666666666 10 0.5242339832869081 11 0.5033519553072625 12 0.4809523809523809 13 0.45983146067415726 14 0.43999999999999995 15 0.4186440677966101 16 0.3985835694050991 17 0.37698863636363633 18 0.3566951566951567 19 0.33485714285714285 20 0.31432664756446993
疑问点
- 已设置
start和stop参数,为何仍需tau_max?是否应计算0-2ns(1-1000帧)内的水分子留存概率? tau_max=20代表什么含义?其单位是皮秒(ps)还是纳秒(ns)?- 针对100ns模拟,最优
tau_max值应为多少?
此外,曾尝试将tau_max设为50至1000(误以为是帧数),但结果中tau到56后SP值变为0.0或NaN。
问题解答
1. start/stop与tau_max的区别
start和stop定义的是用于计算生存概率的原始轨迹帧范围——即你选取哪一段轨迹数据做统计。而tau_max是生存概率计算的时间间隔上限:生存概率的核心是统计“在初始时刻t0处于选中区域的水分子,到t0+τ时刻仍留在区域内的比例”,τ的取值从0到tau_max。
你的测试用了1000帧(2ns)轨迹,tau_max=20意味着只会计算τ=0、1、…、20这些时间点的SP值,而非把整个2ns作为单一τ值计算。如果你想得到0-2ns的留存概率,需要把tau_max设为2000(对应2000ps=2ns),这样才能获取τ=2000ps对应的SP值。
2. tau_max的含义与单位
tau_max的单位是皮秒(ps),这是MDAnalysis中SurvivalProbability模块的默认时间单位,它会自动读取轨迹的帧间隔(timestep)来转换τ的数值。
你的测试轨迹1000帧对应2ns,说明每帧间隔是2ps(2000ps ÷ 1000帧)。你设置tau_max=20,输出的τ值正好对应0到20ps的时间点,和你得到的结果完全匹配。
之前你误将tau_max当作帧数设置为50-1000,但实际它是ps单位。当τ超过轨迹能提供的有效最大间隔时,比如τ=1000ps需要从t0+500帧统计,但t0+500超出stop=1000的范围时,没有足够数据支撑计算,结果就会变成0或NaN。
3. 100ns模拟的最优tau_max设置
最优tau_max取决于你关注的时间尺度:
- 若研究短时间尺度的水分子停留(如皮秒到几十纳秒),可将
tau_max设为感兴趣的最大时间,比如50000ps(50ns)。 - 若想覆盖整个模拟周期的留存情况,理论上
tau_max可设为100000ps(100ns),但需注意:当τ接近模拟总时长时,可用的统计样本会越来越少(因为t0+τ不能超过轨迹最后一帧),SP值的误差会变大,甚至出现NaN。
实际操作中,建议先设置一个较大的tau_max(比如50000ps),运行后查看SP曲线的趋势:当SP下降至接近0或波动剧烈时,再增大tau_max就没有意义了,此时调整到合适数值即可。
内容的提问来源于stack exchange,提问作者Alvea Tasneem

