本文是对Gromacs官方教程第一课Tutorial 1: Lysozyme in Water的中文翻译,是溶菌酶在水溶液中的模拟。包含了:
- 蛋白质预处理和溶剂化
- 能量最小化和平衡
- 基本的MD模拟流程
- 结果分析方法
第一阶段:打好基础#
1. 环境搭建#
我自己是用的Autodl的云服务器,你也可以按照如下的方法自己配置
操作系统:Linux 是首选(Ubuntu 是最友好的选择)。你可以在物理机安装、虚拟机安装,或者使用 Windows 的 WSL2。
- 推荐:对于Windows用户,使用 WSL2 是最佳平衡方案。安装教程很容易在网上找到。
安装 GROMACS:
- 对于 Ubuntu/WSL,最简单的方式是用 apt:
bashsudo apt update sudo apt install gromacs - 如果你想用最新版,需要从官网下载源码编译(稍复杂,可后续再学)。
验证安装:
gmx -versionbash如果显示出版本信息,恭喜你,第一步成功了!
2. 认识一个标准的模拟流程#
这是一个经典的 MD 模拟流程:
正在加载流程图;也可展开下方源码查看。
查看流程图源码
graph TD
A[蛋白质/小分子<br>初始结构] --> B[预处理<br>补全缺失原子/残基];
B --> C[构建拓扑<br>定义分子连接与力场];
D[力场文件<br>e.g., charmm36, amber99sb-ildn] --> C;
E[溶剂盒子<br>e.g., 立方体, 十二面体] --> F[溶剂化<br>将分子放入盒子];
C --> F;
F --> G[添加离子<br>中和体系并设定离子浓度];
G --> H[能量最小化<br>消除原子间的近距离接触];
H --> I[NVT 平衡<br>稳定体系温度];
I --> J[NPT 平衡<br>稳定体系密度和压力];
J --> K[成品模拟<br>生产用于分析的数据];
K --> L[轨迹分析<br>提取有意义的科学信息];
第二阶段:你的第一个模拟——水中的溶菌酶#
让我们按照上述流程,亲手完成一个最简单的模拟。这是 GROMACS 的 “Hello World”。
步骤 1: 准备结构文件#
- 从 PDB 数据库下载溶菌酶的pdb结构: 1AKI ↗
- 用文本编辑器(如
vim,nano)或可视化软件(如 PyMOL, VMD)打开它,删除所有的水分子和无关的离子。只保留蛋白质链 A。保存为1aki_clean.pdb。
在这里我使用的是PyMOL得到干净的pdb文件
# 使用PyMOL打开1AKL.pdb文件
# 移除水分子
remove resn HOH
# 移除无关离子
remove not (polymer or resn UNK)
# 保存蛋白
save 1aki_clean.pdbplaintext步骤 2: 生成拓扑和力场#
拓扑文件描述了分子由哪些原子组成,它们如何连接,以及使用了什么力场。
# 使用 pdb2gmx 工具生成拓扑
gmx pdb2gmx -f 1aki_clean.pdb -o 1aki_processed.gro -p topol.top -water spcebash-f: 输入文件-o: 处理后的结构文件(GROMACS 格式)-p: 输出的拓扑文件-water: 指定水模型(这里用 SPC/E)- 此时,终端会让你选择一个力场。对于初学者,输入
15选择CHARMM36力场是一个不错的选择。
步骤 3: 定义模拟盒子并填充水#
# 创建一个立方体盒子,边界距离蛋白质至少 1.0 nm
gmx editconf -f 1aki_processed.gro -o 1aki_newbox.gro -c -d 1.0 -bt cubic
# 用水分子填充盒子
gmx solvate -cp 1aki_newbox.gro -cs spc216.gro -o 1aki_solvated.gro -p topol.topbasheditconf -c: 将蛋白质置于盒子中心solvate -cs: 指定水模型的结构文件(SPC 水)
步骤 4: 添加离子以中和电荷并设定盐浓度#
首先,需要生成一个 .tpr 输入文件,用于 grompp,然后使用 genion。
# 1. 准备一个离子参数文件(.mdp)。你可以从 GROMACS 官网教程或安装目录下找到。
# 下载 ‘ions.mdp’ 文件到当前目录。
wget http://www.mdtutorials.com/gmx/lysozyme/Files/ions.mdp
# 2. 生成 .tpr 文件
gmx grompp -f ions.mdp -c 1aki_solvated.gro -p topol.top -o ions.tpr
# 3. 添加离子
gmx genion -s ions.tpr -o 1aki_solv_ions.gro -p topol.top -pname NA -nname CL -neutral -conc 0.15bash-neutral: 添加钠离子或氯离子使体系整体电荷为中性。-conc 0.15: 添加盐至生理浓度 0.15 M。- 此时,终端会问你“选择要替换的分子组”,输入
13(代表 “SOL”, 水分子)。程序会用离子替换掉一些水分子。
步骤 5: 能量最小化#
消除原子间的过度靠近,防止模拟开始时系统“爆炸”。
# 1. 准备能量最小化参数文件(minim.mdp)
wget http://www.mdtutorials.com/gmx/lysozyme/Files/minim.mdp
# 2. 生成 .tpr 文件
gmx grompp -f minim.mdp -c 1aki_solv_ions.gro -p topol.top -o em.tpr
# 3. 运行能量最小化
gmx mdrun -v -deffnm embash-deffnm: 为所有输入和输出文件设置一个默认名称。
检查结果:
# 查看能量最小化是否收敛
gmx energy -f em.edr -o potential.xvg
# 当提示时,输入 `10 0` 选择 “Potential” 和 “零”。
# 用 xmgrace 或 gnuplot 绘图查看能量是否下降并趋于平稳。bash步骤 6 & 7: 平衡——NVT 和 NPT#
让系统在设定的温度和压力下达到平衡。
# NVT 平衡 (恒定粒子数、体积、温度)
gmx grompp -f nvt.mdp -c em.gro -r em.gro -p topol.top -o nvt.tpr
gmx mdrun -deffnm nvt
# 检查温度平衡
gmx energy -f nvt.edr -o temperature.xvg
# NPT 平衡 (恒定粒子数、压力、温度)
gmx grompp -f npt.mdp -c nvt.gro -r nvt.gro -t nvt.cpt -p topol.top -o npt.tpr
gmx mdrun -deffnm npt
# 检查压力平衡
gmx energy -f npt.edr -o pressure.xvg
# 检查密度平衡
gmx energy -f npt.edr -o density.xvgbash步骤 8: 成品 MD 模拟#
现在系统已经平衡好,可以开始长时间模拟来收集数据了。
gmx grompp -f md.mdp -c npt.gro -t npt.cpt -p topol.top -o md_0_1.tpr
gmx mdrun -deffnm md_0_1bash这个步骤可能会运行几分钟到几周,取决于你的体系大小和计算机性能。
第三阶段:分析结果#
模拟跑完了,我们得到了轨迹文件(.trr 或 .xtc)和能量文件(.edr)。现在来分析它。
-
回看轨迹:
bash# 注意,这个需要图形界面支持 gmx view -f md_0_1.xtc -s md_0_1.tpr -
计算 RMSD(蛋白质骨架稳定性):
bashgmx rms -s md_0_1.tpr -f md_0_1.xtc -o rmsd.xvg -tu ns # 选择 “Backbone” 作为计算和拟合的组 (两次都选 4) -
计算 RMSF(残基柔性):
bashgmx rmsf -s md_0_1.tpr -f md_0_1.xtc -o rmsf.xvg -res # 选择 “Backbone” (4) -
计算回旋半径(衡量蛋白质紧实度):
bashgmx gyrate -s md_0_1.tpr -f md_0_1.xtc -o gyrate.xvg # 选择 “Protein” (1)
课后说明#
.mdp 参数文件: 我们简要说明mdp文件的含义
案例1:ions.mdp#
; ions.mdp - used as input into grompp to generate ions.tpr
; Parameters describing what to do, when to stop and what to save
integrator = steep ; Algorithm (steep = steepest descent minimization)
emtol = 1000.0 ; Stop minimization when the maximum force < 1000.0 kJ/mol/nm
emstep = 0.01 ; Minimization step size
nsteps = 50000 ; Maximum number of (minimization) steps to perform
; Parameters describing how to find the neighbors of each atom and how to calculate the interactions
nstlist = 1 ; Frequency to update the neighbor list and long range forces
cutoff-scheme = Verlet ; Buffered neighbor searching
ns_type = grid ; Method to determine neighbor list (simple, grid)
coulombtype = cutoff ; Treatment of long range electrostatic interactions
rcoulomb = 1.0 ; Short-range electrostatic cut-off
rvdw = 1.0 ; Short-range Van der Waals cut-off
pbc = xyz ; Periodic Boundary Conditions in all 3 dimensionstxtmdp文件以;符号为注释,
这个ions.mdp文件是用于生成离子添加过程的输入参数文件。让我详细解释每个参数的含义:
基本最小化参数#
integrator = steep ; 使用最陡下降法进行能量最小化
emtol = 1000.0 ; 当最大力 < 1000.0 kJ/mol/nm时停止最小化
emstep = 0.01 ; 最小化步长 (nm)
nsteps = 50000 ; 最大最小化步数bash说明:这里使用了相对宽松的收敛标准(1000 kJ/mol/nm),因为目的只是生成一个合理的结构来添加离子,而不是完全的能量最小化。
邻居列表和相互作用参数#
nstlist = 1 ; 每1步更新邻居列表
cutoff-scheme = Verlet ; 使用Verlet缓冲邻居搜索
ns_type = grid ; 使用网格方法搜索邻居原子bash非键相互作用参数#
coulombtype = cutoff ; 使用截断方法处理静电相互作用
rcoulomb = 1.0 ; 静电相互作用的截断半径 (1.0 nm)
rvdw = 1.0 ; 范德华相互作用的截断半径 (1.0 nm)bash周期性边界条件#
pbc = xyz ; 在x、y、z三个方向都使用周期性边界条件bash这个配置文件的特殊用途#
这个ions.mdp文件不是用于真正的能量最小化,而是为了:
- 生成
.tpr文件:grompp需要这个文件来创建GROMACS的输入文件 - 定义力场参数:为
genion提供必要的力场和模拟参数 - 设置基本环境:定义截断半径、周期性边界条件等
案例2:minim.mdp#
这个minim.mdp文件是用于能量最小化的输入参数文件,用于执行体系的能量最小化,消除原子间的冲突和不利接触。
; minim.mdp - used as input into grompp to generate em.tpr
; Parameters describing what to do, when to stop and what to save
integrator = steep ; Algorithm (steep = steepest descent minimization)
emtol = 1000.0 ; Stop minimization when the maximum force < 1000.0 kJ/mol/nm
emstep = 0.01 ; Minimization step size
nsteps = 50000 ; Maximum number of (minimization) steps to perform
; Parameters describing how to find the neighbors of each atom and how to calculate the interactions
nstlist = 1 ; Frequency to update the neighbor list and long range forces
cutoff-scheme = Verlet ; Buffered neighbor searching
ns_type = grid ; Method to determine neighbor list (simple, grid)
coulombtype = PME ; Treatment of long range electrostatic interactions
rcoulomb = 1.0 ; Short-range electrostatic cut-off
rvdw = 1.0 ; Short-range Van der Waals cut-off
pbc = xyz ; Periodic Boundary Conditions in all 3 dimensionstxt最小化算法参数#
integrator = steep # 使用最陡下降法 - 简单稳定,适合初始最小化
emtol = 1000.0 # 收敛标准:最大力 < 1000 kJ/mol/nm
emstep = 0.01 # 步长0.01 nm - 保守值,保证稳定性
nsteps = 50000 # 最大步数 - 提供充足的优化空间bash邻居搜索设置#
nstlist = 1 # 每步都更新邻居列表 - 确保准确性
cutoff-scheme = Verlet # 现代Verlet缓冲搜索算法
ns_type = grid # 网格搜索方法 - 计算效率高bash相互作用处理#
coulombtype = PME # 使用粒子网格Ewald方法 - 精确处理长程静电
rcoulomb = 1.0 # 静电截断半径1.0 nm
rvdw = 1.0 # 范德华截断半径1.0 nm
pbc = xyz # 三维周期性边界条件bash