MDAnalysis专题

MDAnalysis自定义分析与双进程运行

用原生AnalysisFromFunction计算质量质心和回转半径,比较串行与两个工作进程的完整字段及帧序。

更新于 2026-11-09约 4 分钟阅读按任务与环境选择适用配置
阅读本篇目录

已有分析模块不能直接表达自己的逐帧量时,可以把函数交给 AnalysisFromFunction,使用MDAnalysis统一的轨迹切片、结果保存和并行框架。本篇用质量质心与回转半径平方,演示一套完整操作。

下载完整真实轨迹、拓扑、分析脚本和数据图包,先按平均结构篇的共用步骤运行一次,本篇读取同一批结果,不重复提交。

1. 先写清楚函数的输出#

import numpy as np
from MDAnalysis.analysis.base import AnalysisFromFunction

def moments(atoms):
    x=np.asarray(atoms.positions,float)
    m=np.asarray(atoms.masses,float)
    center=m@x/m.sum()
    rg2=np.sum(m*np.sum((x-center)**2,axis=1))/m.sum()
    return np.r_[center,rg2]

每帧返回4列:质心x/y/z,单位Å;以及质量权回转半径平方,单位Ų。回转半径本身应对第四列开平方,不应把Rg²标成Å。质量来自已核对的GROMACS原生导出数据,分析前已按真实键使蛋白完整。

2. 原生串行与双进程调用#

serial=AnalysisFromFunction(moments,u.atoms).run(backend='serial')
parallel=AnalysisFromFunction(moments,u.atoms).run(
    backend='multiprocessing',n_workers=2,n_parts=2)
values=parallel.results.timeseries
frames=parallel.results.frames
times=parallel.results.times

在可独立运行的Python脚本中,把启动分析的主流程放进 if __name__=='__main__':。函数应定义在可导入的模块顶层,避免把无法序列化的临时对象或文件句柄传给工作进程。

本例最多两个工作进程,使用已分配的CPU资源。环境没有安装Dask,本包不启动Dask后端;不能把multiprocessing结果说成所有后端都已运行。

3. 不只比较平均值#

本例比较51帧×4列的全部字段,同时检查返回的帧号0—50和实际时间0—100ps顺序。这里的帧号属于抽样后的内存轨迹,原始保存帧0、20至1000另存在 original_saved_frames 中。

串行与双进程结果逐字段一致,并与原始坐标的独立质量加权计算对应。这个小例子不用于报告一般性能加速比;轨迹读取、任务划分和序列化可能使小任务的并行反而不划算。

同一真实轨迹的质量质心与串行、双进程回转半径

4. 在终端导出结果#

export PATH="/public/toolkit/miniconda3/envs/qvasp-2.26/bin:$PATH"
python - <<'PYDATA'
import numpy as np
x=np.load('analysis-fields.npz')
v=x['multiprocessing_moments'].copy()
v[:,3]=np.sqrt(v[:,3])
np.savetxt('protein-moments.csv',np.column_stack([x['multiprocessing_times_ps'],v]),delimiter=',',header='time_ps,COM_x_A,COM_y_A,COM_z_A,Rg_A',comments='')
print('全部字段最大串并行差:',abs(x['serial_moments']-x['multiprocessing_moments']).max())
PYDATA
head -n 5 protein-moments.csv

已有数组只需 python plot.py 重画,不必重复跑分析。扩展自己的函数前,先明确每列单位、拓扑与PBC处理,再确认函数可逐帧独立计算;需要历史帧状态或不可拆分积分的算法,不应直接照搬这个并行模板。参考MDAnalysis2.9分析框架。

按分析目标选择教程#

目标 已有实操作用入口
读取、选区、PBC与RMS 输入与几何、距离与接触
平均结构与质量权对齐 平均结构与迭代参考
RDF、氢键、MSD RDF与氢键扩散操作、水的配对距离和介电
氢键持续、取向与水桥 水的关联、WaterBridgeAnalysis
三维/线密度 三维水密度、固定盒线密度
蛋白二级结构、二面角与内坐标 DSSP与二面角、BAT与HELANAL
蛋白接触、GNM与PCA 基础网络与PCA、全原子接触残基网络
膜与孔道 膜叶识别、HOLE实际轮廓
RNA几何 碱基配对距离、RNA构象量
聚合物 链与持续长度
路径、集合与降维 路径相似、集合比较、SPE嵌入、扩散映射与独立求解

各篇针对实际版本和数据解释适用范围,不把一个模块的一个例子外推成所有参数和可选依赖都已运行。当前扩散映射原生特征向量需要按该篇核对,配套独立求解单独标记;旧的legacy X3DNA接口需要额外的外部程序,本专题尚未提供该旧接口的实算,核酸几何可先用已展示的nucleicacids/nuclinfo操作。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗