首页/文章/ 详情

刘建川・GROMACS 干货 | 如何计算任意组分或参考点之间的距离

1天前浏览2
大家好,我是刘建川,14 年深耕 GROMACS 分子模拟领域,始终专注分子模拟实战。在分子动力学模拟中,我们经常需要计算两组分子(或原子)之间的质心距离,或者某个组分到空间中某个固定点的距离。GROMACS 提供了 gmx distance 命令,配合强大的选区(selection)语法,可以非常灵活地完成这类计算。

今天就来详细讲讲如何用 gmx distance 计算任意组分或参考点之间的距离。

一、准备工作:理解选区语法的核心逻辑

在开始之前,先理解 GROMACS 选区语法的核心思想:你可以通过 -select 参数直接在命令行中定义要计算距离的两个位置,而不需要提前制作复杂的索引文件(虽然索引文件依然是一种可选方式)。

gmx distance 的基本工作原理是:你在 -select 中提供一对位置,程序计算它们之间的距离随时间的变化。选区中的 plus 关键词用于连接两个位置。

⚠️注意:gmx distance 计算的是固定配对的距离。对于计算两组之间的最小距离、最大距离或所有两两距离,应使用 gmx pairdist。

二、场景一:计算两个组分的质心距离

方法一:使用索引文件 + 选区语法

这是最常用的方法。首先用 gmx make_ndx 创建索引文件,定义好两个组,然后在 gmx distance 中通过 -select 引用它们。

第一步:创建索引文件

gmx make_ndx -f md.tpr -o index.ndx

在交互界面中,用 ri 列出残基,用 r 残基号 选择残基,用 name 组名 命名组例如:

> ri # 列出所有残基
> r 1-50 # 选择残基 1 到 50
> name 19 Protein_A # 命名为 Protein_A(注意组编号)
> r 100-150 # 选择另一个组
> name 20 Protein_B
> q # 退出保存

第二步:计算距离

gmx distance -s md.tpr -f md.xtc -n index.ndx -select 'com of group "Protein_A" plus com of group "Protein_B"' -oall dist.xvg

这里的选区语法 'com of group "组名 A" plus com of group "组名 B"' 表示:计算组 A 的质心(center of mass)与组 B 的质心之间的距离。

方法二:完全使用选区语法(不依赖索引文件)

如果你不想制作索引文件,可以直接在 -select 中用原子选择条件来定义两组:

gmx distance -s md.tpr -f md.xtc -select 'com of resnr 1 to 50 plus com of resnr 100 to 150' -oall dist.xvg

或者按链选择:

gmx distance -s md.tpr -f md.xtc -select 'com of chain "A" plus com of chain "B"' -oall dist.xvg

按残基名选择:

gmx distance -s md.tpr -f md.xtc -select 'com of resname "Protein" plus com of resname "Ligand"' -oall dist.xvg

💡 小技巧:选区语法非常灵活,你可以组合使用各种条件,比如 resnr 204 and name OD1 and chain G 表示链 G 中残基 204 的 OD1 原子。

命令详解

参数    
说明    
-s md.tpr
输入结构文件(tpr/gro/pdb),提供拓扑和坐标信息    
-f md.xtc
输入轨迹文件(xtc/trr 等)    
-n index.ndx
索引文件(可选,如果选区中引用了索引组则需要)    
-select '...'
选区字符串,定义要计算距离的位置对    
-oall dist.xvg
输出所有距离随时间变化的数据    
-[no]pbc
是否使用周期性边界条件计算距离,默认开启    

其他常用输出选项:

  • -oav distave.xvg:输出平均距离
  • -oxyz distxyz.xvg:输出距离的 x、y、z 分量
  • -oh disthist.xvg:输出距离的直方图
  • -oallstat diststat.xvg:输出每个距离的平均值和标准差

三、场景二:计算组分到固定坐标点的距离

如果你需要计算某个组分的质心到空间中一个固定点的距离(比如到某个特定坐标位置),可以直接在选区中嵌入坐标。

gmx distance -s md.tpr -f md.xtc -n index.ndx -select 'com of group "Chain_A" plus [1.718, 3.711, 1.532]' -oall dist.xvg -nopbc

这里的 [1.718, 3.711, 1.532] 就是一个常量位置(constant position),单位 nm,表示空间中的一个固定点。plus 连接了组 A 的质心和这个固定坐标点,程序计算二者之间的距离。

⚠️注意:这里加了 -nopbc 参数,表示不使用周期性边界条件。因为固定坐标点可能位于周期性盒子之外,使用 PBC 可能导致距离计算错误。

更灵活的坐标点定义

你甚至可以直接在选区中定义更复杂的坐标表达式,比如:

# 计算质心到原点 (0,0,0) 的距离
gmx distance -s md.tpr -f md.xtc -select 'com of group "Protein" plus [0, 0, 0]' -oall dist.xvg -nopbc

# 计算某个原子到固定点的距离
gmx distance -s md.tpr -f md.xtc -select 'atomnr 100 plus [2.5, 1.2, 3.8]' -oall dist.xvg -nopbc

四、选区语法速查

1. 位置类型(POS_TYPE)

语法    
说明    
com of 选择
计算所选原子的质心(center of mass)    
cog of 选择
计算所选原子的几何中心(center of geometry)    
[x, y, z]
定义一个固定坐标点    
atomnr N
选择原子序号为 N 的原子位置    

2. 原子选择(ATOM_EXPR)

语法    
说明    
group "组名"
引用索引文件中的组    
resnr N
按残基序号选择    
resname "名称"
按残基名称选择    
chain "X"
按链标识选择    
name "原子名"
按原子名称选择    
resnr N to M
残基序号范围    

3. 组合与连接

语法    
说明    
A plus B
将位置 A 和位置 B 配对,计算距离    
and / or
逻辑与/或,用于组合选择条件    

4. 多个距离同时计算

如果需要同时计算多对距离,可以用多个 -select 参数,或者在一个选区中用多对位置:

gmx distance -s md.tpr -f md.xtc -select 'atomnr 1 plus atomnr 2 plus atomnr 3 plus atomnr 4' -oall dist.xvg
# 这会计算 1-2 和 3-4 两对距离

五、常见问题与注意事项

1. 选区中的引号使用

建议使用单引号包裹整个选区字符串,内部的双引号用于包裹组名或残基名:

-select 'com of group "Chain_A" plus com of group "Chain_B"'

如果混用不当,可能会导致 shell 解析错误。

2. 关于 -nopbc 的使用

  • 计算两个真实分子/原子组之间的距离时,通常保留 PBC(默认开启),以考虑周期性镜像的最短距离
  • 计算到固定坐标点的距离时,建议加 -nopbc,因为固定点可能不在周期性盒子内

3. 性能提示

对于大规模轨迹,选区解析和质心计算可能会消耗较多时间。如果反复使用相同的选区,可以考虑:

  • 先用 gmx select 生成索引文件,再用 -n 引用
  • 使用 -dt 参数跳帧,减少计算量

掌握这些基本语法后,你可以组合出更复杂的选择条件,满足各种分析需求。如果在使用中遇到问题,别忘了 gmx distance -h 可以查看完整的帮助信息!


来源:模拟之家
分子动力学GROMACS
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-10-10
最近编辑:1天前
刘建川(刘十三)
博士 分子模拟实战、GROMACS
获赞 242粉丝 249文章 148课程 35
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈