平台文档 GROMACS Selection 选区语法

admin · 2026年07月13日 · 26 次阅读
本帖已被管理员设置为精华贴

GROMACS Selection 选区语法教程:从入门到常用写法

整理来源:Jerkwin《GROMACS 选区 (selection) 语法及用法》
原文:https://jerkwin.github.io/GMX/GMXsel/
参考校对:GROMACS 2026.3 官方文档 Selection syntax and usage
https://manual.gromacs.org/current/onlinehelp/selections.html

0. 最简单的案例

这一节先给最常用、最容易复制的 selection。初学时可以先不管完整语法,把这些例子当作模板改名字、改链 ID、改残基名即可。

目标 selection 写法 说明
选择 A 链 chain A 常用于 PDB/mmCIF 中有链 ID 的体系
选择 B 链 chain B B 换成自己的链 ID
选择残基名为 LIG 的小分子 resname LIG LIG 要换成实际配体残基名
选择所有蛋白 group "Protein" 依赖 GROMACS/index 中已有 Protein
选择所有蛋白原子 protein 如果当前工具/版本支持该内置选择,可直接用
选择所有 RNA group "RNA" 如果 index 中已有 RNA 组,推荐这样写
按常见 RNA 残基名选择 RNA resname A U G C RA RU RG RC 不同力场/文件命名可能不同
选择所有 DNA/RNA 核酸 group "DNA"group "RNA" 取决于 index 组是否存在
选择蛋白骨架 group "Backbone" 依赖已有 Backbone
不依赖 index 选择蛋白骨架 group "Protein" and name N CA C O 常用骨架原子;必要时可加 OXT
选择蛋白 A 链骨架 chain A and group "Protein" and name N CA C O 链、蛋白、原子名三重条件
选择水 resname SOL GROMACS 常见水名是 SOL
选择其他常见水命名 resname SOL WAT HOH TIP3 根据体系实际命名选择
选择离子 group "Ion" 如果 index 中已有 Ion 组,最方便
选择常见钠钾氯离子 resname NA K CL 命名可能是 NA+CLACL- 等,需看结构文件
选择水和离子 group "Water_and_ions" 如果 index 中已有该组,推荐
不依赖 index 选择水和常见离子 resname SOL WAT HOH TIP3 NA K CL 实际残基名按体系调整
排除水和离子 not group "Water_and_ions" 常用于只分析溶质
选择 C-alpha 原子 group "Protein" and name CA 常用于蛋白结构分析
选择蛋白重原子 group "Protein" and not name H* 按原子名排除氢,命名规则需确认
选择配体附近 0.5 nm 内的蛋白原子 group "Protein" and within 0.5 of resname LIG 动态邻近选择
选择配体附近 0.5 nm 内的完整蛋白残基 group "Protein" and same residue as within 0.5 of resname LIG 比只选邻近原子更适合看结合口袋

几个小提醒:

  • resname LIG 里的 LIG 是残基名,不是文件名。可以先用可视化软件或 .gro/.pdb 文件确认真实残基名。
  • group "Protein"group "Backbone"group "Water_and_ions" 依赖 index 组是否存在;如果报错,就用 gmx make_ndx 生成,或改用不依赖 index 的写法。
  • 水和离子的命名差异很大,最稳妥的方法是先看结构文件中的 residue name。

1. Selection 是什么?

在 GROMACS 里,selection 用来选择原子、残基、分子或它们的几何位置,以便后续分析工具使用。

它和传统的 index 文件不完全一样:

方式 特点 适合场景
index group 通常是静态分组 简单、固定的原子集合
selection 可以按表达式动态选择 距离、坐标、残基、质心等复杂条件

selection 最后会被求值为一组位置。这些位置可以是:

  • 原子坐标
  • 残基质心
  • 残基几何中心
  • 分子质心
  • 自定义常量位置

很多分析命令,例如 gmx distancegmx selectgmx gangle,都可以使用 selection。

2. 先看一个完整例子

假设你想选择所有距离蛋白 0.5 nm 以内的配体 LIG 原子,可以写:

gmx select -s topol.tpr -f traj.xtc -select '"Close to protein" resname LIG and within 0.5 of group "Protein"'

这个 selection 可以拆成四部分:

"Close to protein"  resname LIG  and  within 0.5 of group "Protein"
部分 作用
"Close to protein" 给这个选区起名字
resname LIG 选择残基名为 LIG 的原子
and 逻辑与
within 0.5 of group "Protein" 限制这些原子必须距离 Protein 组 0.5 nm 以内

这就是 selection 的核心思想:用一条可读的表达式,把“我要选什么”直接写出来。

3. Selection 的工作流程

flowchart LR
    A["输入结构/轨迹"] --> B["读取 selection 表达式"]
    B --> C["解析 atom / position / numeric 表达式"]
    C --> D["逐帧求值"]
    D --> E["得到一组位置"]
    E --> F["交给分析工具"]

如果表达式依赖坐标,例如 withindistancex < 2,它可以在轨迹每一帧重新计算,因此结果可能随时间变化。

4. 在命令行中传入 selection

4.1 直接写在命令行

多数工具会有类似 -select 的参数。不同工具的参数名可能不同,具体要看命令帮助:

gmx help select
gmx help distance
gmx help gangle

一个命令里可以传入一个或多个 selection。多个 selection 可以用分号分隔:

gmx select -s topol.tpr -f traj.xtc -select 'resname SOL and name OW; resname LIG'

注意:selection 通常要加引号,避免 shell 把括号、星号、空格等字符提前解释掉。

4.2 从文件读取

如果 selection 很长,建议写进文件,例如 selection.dat

"Water oxygens" resname SOL and name OW;
"Ligand near protein" resname LIG and within 0.5 of group "Protein";

然后运行:

gmx select -s topol.tpr -f traj.xtc -select -sf selection.dat

4.3 使用 index 文件

如果你已经有传统 index 文件,可以用 -n 传入:

gmx select -s topol.tpr -f traj.xtc -n index.ndx -select 'group "Protein"'

index 组可以通过两种方式引用:

group 1
group "Protein"

如果整个 selection 就是一个 index 组,group 关键词在某些交互场景下可以省略。

5. Selection 的三类表达式

GROMACS selection 里最重要的是理解三种表达式:

类型 含义 例子
ATOM_EXPR 选出一组原子 resname SOL and name OW
POS_EXPR 得到一组位置 com of group "Protein"
NUM_EXPR 得到数值 x of cog of resname LIG

一般来说,一个完整 selection 应该是 ATOM_EXPRPOS_EXPR。如果写的是原子表达式,GROMACS 会按默认位置类型把它转换成位置。

6. 常用选择条件

6.1 按残基和原子名称选择

选择所有水氧:

resname SOL and name OW

选择所有蛋白 C-alpha 原子:

group "Protein" and name CA

选择残基名为 LIG 的配体:

resname LIG

常用关键词:

关键词 含义
name / atomname 按 GROMACS 原子名选择
pdbname / pdbatomname 按 PDB 文件中的原始原子名选择
resname 按残基名选择
atomtype / type 按原子类型选择
chain 按链 ID 选择

注意:如果输入是 PDB 文件,GROMACS 可能会转换以数字开头的 4 字符原子名。例如 PDB 中的 3HG2 可能需要用 name HG23 匹配。如果想按 PDB 原始名字匹配,使用 pdbname

6.2 按编号选择

选择原子编号 1 到 5,以及 7 和 9:

atomnr 1 to 5 7 9

选择残基编号 1 到 5 和 10:

resnr 1 to 5 10

常用整数关键词:

关键词 含义
atomnr 原子编号
resnr / resid 残基编号
resindex / residue 残基索引
molindex / mol / molecule 分子索引

7. 逻辑运算:and、or、not

selection 可以用逻辑运算组合:

resname SOL and name OW
resname LIG or resname ATP
not resname SOL

复杂表达式建议加括号:

(resname LIG or resname ATP) and within 0.5 of group "Protein"

逻辑表达式会从左到右求值,并有短路行为。因此,把便宜、严格的条件放前面通常更高效:

resname LIG and within 0.5 of group "Protein"

比先做全体系距离判断再筛 LIG 更直观,也往往更快。

8. 字符串匹配:普通字符串、通配符、正则

按名称选择时,可以使用普通字符串:

name CA

也可以使用通配符:

name "C*"

还可以使用正则表达式:

resname "R[AB]"

GROMACS 会根据字符串内容自动猜测匹配类型。如果想强制某种匹配方式,可以用:

写法 含义
name = "C*" 按字面量匹配 C*
name ? "C*" 强制通配符匹配
name ~ "C[0-9]+" 强制正则匹配

包含特殊字符、空格或可能和关键词冲突的字符串,建议始终加双引号。

9. 按距离选择

9.1 within:最常用的距离选择

选择距离蛋白 0.5 nm 以内的配体原子:

resname LIG and within 0.5 of group "Protein"

选择距离固定坐标 [1.2, 3.1, 2.4] 超过 1 nm 的所有原子:

not within 1 of [1.2, 3.1, 2.4]

9.2 distance 与 mindistance

distance from POS 计算到单个位置的距离:

distance from com of group "Protein"

mindistance from POS_EXPR 计算到一组位置中最近一个位置的距离:

mindistance from group "Protein"

如果要提高计算效率,可以给距离关键词加 cutoff

distance from com of group "Protein" cutoff 2.0

距离超过 cutoff 的结果会被截断为 cutoff,适合只关心某个范围内的判断。

10. 位置:atom、com、cog 与残基/分子中心

selection 不一定只选原子,也可以选“位置”。

10.1 常量位置

[1.2, 3.1, 2.4]

表示一个固定三维坐标。

10.2 质心和几何中心

蛋白质质心:

com of group "Protein"

配体几何中心:

cog of resname LIG

如果分子跨周期性边界,可以加 pbc

com of group "Protein" pbc

10.3 常见位置类型

写法 含义
atom 原子位置
res_com 每个残基的质心
res_cog 每个残基的几何中心
mol_com 每个分子的质心
mol_cog 每个分子的几何中心

例如,残基 1 到 5 和残基 10 的质心:

res_com of resnr 1 to 5 10

11. whole、part、dyn 的区别

位置类型可以加前缀:

前缀 含义 适合场景
whole_ 用整个残基/分子计算中心 想按完整残基或完整分子理解
part_ 用选中的固定原子集合计算中心 默认折衷,速度和直觉较平衡
dyn_ 每帧只用真正满足条件的原子计算中心 严格动态选择,但可能更慢

例子:选择每个残基中 C1 C2 C3 任意一个满足 x < 2 的残基,并计算这些原子的质心:

part_res_com of name C1 C2 C3 and x < 2

如果要用整个残基计算质心:

whole_res_com of name C1 C2 C3 and x < 2

如果只用当前帧严格满足 x < 2 的那些原子计算质心:

dyn_res_com of name C1 C2 C3 and x < 2

12. 给 selection 起名字

可以在 selection 前面加一个字符串作为名字:

"Close to protein" resname LIG and within 0.5 of group "Protein"

这个名字可能出现在输出文件、图例或日志中。建议给复杂 selection 起一个短名字,后续排查会轻松很多。

13. 使用变量复用表达式

复杂 selection 中,变量非常有用。变量定义语法:

VARNAME = EXPR ;

例子:计算每个 RES 残基质心到所有 RES 质心的距离,并筛选 2 到 4 nm 范围内的残基:

rdist = res_com distance from com of resname RES;
resname RES and rdist >= 2 and rdist <= 4

使用变量有两个好处:

  • 表达式更易读
  • 公共子表达式在一帧内只需要求值一次

14. merge、plus 和 permute

14.1 plus:把多个位置拼起来

两个 index 组的质心:

com of group 1 plus com of group 2

这可以用于 gmx distance 计算两个质心之间的距离。

固定 x 方向向量:

[0, 0, 0] plus [1, 0, 0]

这可以在 gmx gangle 里作为参考向量。

14.2 merge:交错合并位置

生成类似 C1 C2 C2 C3 C3 C4 ... C8 C9 的重复原子序列:

name "C[1-8]" merge name "C[2-9]"

这可用于 gmx distance 计算 C1-C2C2-C3 等连续距离。

14.3 permute:改变最终顺序

默认 selection 返回结果通常按原子索引递增排序。如果想把 C1 C2 变成 C2 C1

name C1 C2 permute 2 1

这在 gmx gangle 中很有用,例如想得到 C2 -> C1 而不是 C1 -> C2 的向量。

15. same:把局部条件扩展到整个残基/分子

选择至少有一个原子距离配体 LIG 0.5 nm 以内的所有蛋白残基:

group "Protein" and same residue as within 0.5 of resname LIG

这里的关键是:

same residue as ...

它不是只选中靠近配体的那些原子,而是把满足条件的原子扩展为整个 residue。

类似思路也可用于按分子、残基编号、字符串属性扩展选择。

16. insolidangle:按立体角选择

语法:

insolidangle center POS span POS_EXPR [cutoff REAL]

它的含义是:从中心位置 POS 看过去,选择落在由 POS_EXPR 中各位置张成的小圆锥范围内的原子。cutoff 控制圆锥宽度,默认单位是角度。

这个关键词相对少用,适合处理“从某个观察点看,处在某方向区域内的原子”这一类几何问题。

17. 常用例子速查

目标 selection
所有水氧 resname SOL and name OW
残基 1-5 和 10 的质心 res_com of resnr 1 to 5 10
距固定点超过 1 nm 的原子 not within 1 of [1.2, 3.1, 2.4]
距蛋白 0.5 nm 内的配体 "Close to protein" resname LIG and within 0.5 of group "Protein"
至少一个原子靠近配体的蛋白残基 group "Protein" and same residue as within 0.5 of resname LIG
两个 index 组的质心 com of group 1 plus com of group 2
C1-C2、C2-C3 连续距离 name "C[1-8]" merge name "C[2-9]"
把 C1 C2 改成 C2 C1 name C1 C2 permute 2 1

18. 常见坑

18.1 selection 要加引号

命令行里建议始终给 selection 加引号:

gmx select -select 'resname SOL and name OW'

如果 selection 本身需要双引号,外层可以用单引号:

gmx select -select '"Close to protein" resname LIG and within 0.5 of group "Protein"'

18.2 结构文件和轨迹文件的信息来源不同

如果工具同时使用 -s-f,通常:

  • 坐标来自轨迹 -f
  • 原子名、残基名等拓扑/结构信息来自 -s

如果轨迹里的原子名和结构文件里的不同,GROMACS 可能不会警告你;通常只检查原子数量。

18.3 负数范围可能需要花括号

有些情况下,表达式第一个值是负数会触发语法问题:

charge -1 to -0.7

可以改写为:

charge {-1 to -0.7}

18.4 默认顺序不是你写的顺序

很多关键词会按原子索引递增返回结果,所以这些写法可能得到同样顺序:

resname RA RB RC
resname RB RC RA

如果分析工具依赖顺序,考虑使用:

  • permute
  • merge
  • plus
  • 外部 index 文件

19. 推荐学习路线

  1. 先熟悉 resnamenamegroupandornot
  2. 再掌握 within,这是最常见的动态选择。
  3. 接着学习 com ofcog ofres_com of
  4. 当 selection 变长时,用变量拆开。
  5. 遇到顺序敏感的分析,再学习 mergepluspermute

20. 一句话总结

GROMACS selection 的核心是:用类似自然语言的表达式,把“选择哪些原子”和“如何把它们变成位置”写清楚。

最常用的模板可以记成:

条件1 and 条件2 and within 距离 of 参考对象

例如:

resname LIG and within 0.5 of group "Protein"

掌握这个模板后,大多数日常轨迹分析的选区问题都可以逐步扩展出来。

admin 将本帖设为了精华贴。 07月13日 15:50
需要 登录 后方可回复, 如果你还没有账号请 注册新账号