首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >分析梳理--分子动力学模拟的常规步骤二(Gromacs)

分析梳理--分子动力学模拟的常规步骤二(Gromacs)

原创
作者头像
追风少年i
修改2026-04-16 12:42:41
修改2026-04-16 12:42:41
40
举报

作者,Evil Genius

有人说,人生低谷期就是在救你的命,可是一直低谷,一般人也是受不了。

今天我们开始分子动力学第二步:定义单位盒子和添加溶剂。

上一步我们生成了蛋白拓扑结构,文章在分析梳理--分子动力学模拟的常规步骤一(Gromacs)

gmx pdb2gmx读取.pdb或.gro文件,并读取数据库文件,向分子添加氢并在GROMACS(GROMOS)或可选的.pdb中生成坐标,格式以及GROMACS格式的拓扑。随后可以处理这些文件以生成运行输入文件。那么在这个基础上,我们要进行下一步。

第一步输出的日志需要注意一下信息

后续我们平衡电荷需要用。

我们首先来看看参数

gmx editconf 将通用结构格式转换为.gro、g96或.pdb在分子动力学模拟中,通常会给体系添加一个周期性的模拟盒子.gmx editconf有许多控制盒子的选项.

代码语言:javascript
复制
Options to specify input files:

 -f      [<.gro/.g96/...>]  (conf.gro)
           Structure file: gro g96 pdb brk ent esp tpr
 -n      [<.ndx>]           (index.ndx)      (Opt.)
           Index file
 -bf     [<.dat>]           (bfact.dat)      (Opt.)
           Generic data file

Options to specify output files:

 -o      [<.gro/.g96/...>]  (out.gro)        (Opt.)
           Structure file: gro g96 pdb brk ent esp
 -mead   [<.pqr>]           (mead.pqr)       (Opt.)
           Coordinate file for MEAD

Other options:

 -[no]w                     (no)
           View output .xvg, .xpm, .eps and .pdb files
 -[no]ndef                  (no)
           Choose output from default index groups
 -bt     <enum>             (triclinic)
           Box type for -box and -d: triclinic, cubic, dodecahedron,
           octahedron
 -box    <vector>           (0 0 0)
           Box vector lengths (a,b,c)
 -angles <vector>           (90 90 90)
           Angles between the box vectors (bc,ac,ab)
 -d      <real>             (0)
           Distance between the solute and the box
 -[no]c                     (no)
           Center molecule in box (implied by -box and -d)
 -center <vector>           (0 0 0)
           Shift the geometrical center to (x,y,z)
 -aligncenter <vector>      (0 0 0)
           Center of rotation for alignment
 -align  <vector>           (0 0 0)
           Align to target vector
 -translate <vector>        (0 0 0)
           Translation
 -rotate <vector>           (0 0 0)
           Rotation around the X, Y and Z axes in degrees
 -[no]princ                 (no)
           Orient molecule(s) along their principal axes
 -scale  <vector>           (1 1 1)
           Scaling factor
 -density <real>            (1000)
           Density (g/L) of the output box achieved by scaling
 -[no]pbc                   (no)
           Remove the periodicity (make molecule whole again)
 -resnr  <int>              (-1)
            Renumber residues starting from resnr
 -[no]grasp                 (no)
           Store the charge of the atom in the B-factor field and the radius
           of the atom in the occupancy field
 -rvdw   <real>             (0.12)
           Default Van der Waals radius (in nm) if one can not be found in the
           database or if no parameters are present in the topology file
 -[no]sig56                 (no)
           Use rmin/2 (minimum in the Van der Waals potential) rather than
           sigma/2
 -[no]vdwread               (no)
           Read the Van der Waals radii from the file vdwradii.dat rather than
           computing the radii based on the force field
 -[no]atom                  (no)
           Force B-factor attachment per atom
 -[no]legend                (no)
           Make B-factor legend
 -label  <string>           (A)
           Add chain label for all residues
 -[no]conect                (no)
           Add CONECT records to a .pdb file when written. Can only be done
           when a topology (tpr file) is present

KNOWN ISSUES

* For complex molecules, the periodicity removal routine may break down,
* in that case you can use gmx trjconv.

-f:[.gro/.g96/...>] (conf.gro)输入蛋白结构

-O:[.grol.g96/...>] (out.gro)输出带模拟盒子信息的结构文件

-c:将蛋白分子置于盒子中心

-bt:盒子类型,默认使用长方盒子,dodecahedron、cubic等

-d:溶质与盒子之间的距离,在X,Y,Z方向上的最小距离

到盒子边缘的距离是一个重要参数,因为我们要使用周期性边界条件,必须满足最小映象约定,也就是说,一个蛋白质永远不能“看到”它自身的周期性映象(不能与其自身有相互作用),否则计算的力就会含有虚假的部分.指定溶质与盒子之间的距离为1.0nm意味着,蛋白质分子的任意两个周期性映象之间的距离至少是2.0nm.对于模拟中常用的任何截断方案,这个距离都足够了。-d选项设定分子到盒子边缘的最小距离,以nm为单位,它决定了盒子的尺寸.理论上在绝大多数系统中,-d都不能小于0.9nm。

当你对周期性的边界条件与盒子类型有了更多了解后,强烈推荐使用菱形十二面体晶胞,因为在周期性距离相同的情况下,它的体积大约只有立方体晶胞的71%,因此可以减少需要加入的溶剂水分子的数目。

我们多扩展一下,周期性边界(periodic boundary condition)

考虑一个极小的立方体液滴单元, 里面有一千个原子. 其中有83=512个在内部, 可以看作完全处于液体环境中, 而剩下的接近一半, 都在这个单元的表皮上, 显然不会有着相同的性质. 即使是到了106 个原子这样一个量级, 仍然有接近6%有着不同的性质. 而我们所取得这个液体单元, 必须要是对宏观普适的抽样, 那么怎么做呢?

这个问题可以通过由Born and von Karman 在1912年提出的周期性边界条件来克服. 第一种说法是, 就是假想空间中有无数个相同的液体元胞的展开, 在立方体边界上的微粒, 依然可以受到邻近的元胞的作用. 第二种说法, 临近的元胞都是本体的镜像. 落实到实处就是, 一个微粒运动出了盒子, 将从盒子的另一边再穿进来. 有点像小时后玩的贪吃蛇.

如此一来, 盒子便没有了边界, 也没有了在表面的粒子, 这样的盒子很容易地用坐标的形式表现出来, 不用去储存真实的坐标. 但是我们仍有办法, 去得到这个元胞在真实体系中展开的情形. 折算到盒子内部坐标通常称之为wrap, 而按真实展开的叫做unwrap.

有个非常关键的问题是, 这个非常小的无限循环的小东西, 能不能和宏观的系统有着相同的性质? 这取决于分子间作用力的范围和所考察的范围. 概括的说, 对于短程的强相互作用, 作用力距离不能超过盒子的一半. 这可能有一点抽象, 请看好Fig1.13, 如果粒子1的作用力距离超过一倍的盒子长, 那么会出现粒子自己对自己作用, 这显然是make sense的; 如果超过一半的盒长, 那么对于某些粒子, 粒子1在正方向将会对其作用一次, 从反方向同样会再次对它作用, make no science sense. 这个就是最小镜像原则(minimum image convention), 任意一个粒子的作用力仅被计算一次.

以立方体为例, 讲一下思路. 要注意的是, 计算坐标和计算距离是有所不同的. 这里盒子是放在原点, 边长为L的立方体.

计算坐标时, 我们不但想知道其在盒子中的位置, 也想知道实际上它跑到哪去了, 这个数据可以用来计算扩散等参数. 这时我们需要引入一个image flag的概念. 这个值代表着原子穿出盒子的次数, 正方向穿出image flag+1, 反方向-1.

当微粒从正方向跑出盒子, 那就意味着它跑进了下一个盒子, 坐标值将大于L. 此时应该减去L的值, 将其wrap进盒子, 同时image flag+1; 如果从反方向跑了出去, 那就需要加一个L让他wrap进盒子, 同时image flag-1.

计算距离时分为两种情况, 仅仅计算wrap体系中两个微粒间作用力, 那么就有, coord1-coord2. 如果这个距离大于1/2L, 那L减去这个距离; 如果小于-1/2L, 那就需要加上L. 总之很简单, 在纸上画个坐标轴取个特殊值就能搞明白.

我们来加一下盒子

代码语言:javascript
复制
gmx editconf -f conf.gro -o newbox.gro -c -bt cubic -d 1.0

然后我们添加溶剂gmx solvate ,我们还是看一下参数

代码语言:javascript
复制
Options to specify input files:

 -cp     [<.gro/.g96/...>]  (protein.gro)    (Opt.)
           Structure file: gro g96 pdb brk ent esp tpr
 -cs     [<.gro/.g96/...>]  (spc216.gro)     (Lib.)
           Structure file: gro g96 pdb brk ent esp tpr

Options to specify input/output files:

 -p      [<.top>]           (topol.top)      (Opt.)
           Topology file

Options to specify output files:

 -o      [<.gro/.g96/...>]  (out.gro)
           Structure file: gro g96 pdb brk ent esp

Other options:

 -box    <vector>           (0 0 0)
           Box size (in nm)
 -radius <real>             (0.105)
           Default van der Waals distance
 -scale  <real>             (0.57)
           Scale factor to multiply Van der Waals radii from the database in
           share/gromacs/top/vdwradii.dat. The default value of 0.57 yields
           density close to 1000 g/l for proteins in water.
 -shell  <real>             (0)
           Thickness of optional water layer around solute
 -maxsol <int>              (0)
           Maximum number of solvent molecules to add if they fit in the box.
           If zero (default) this is ignored
 -[no]vel                   (no)
           Keep velocities from input solute and solvent

gmx solvate可以做以下两件事之一:

1.创建一个充满溶剂的盒子.可以通过指定-cs和-box选项来完成.对具有盒子信息但不含原子的结构文件则可以通过指定-cs和-cp来实现.

2.将溶质分子,如蛋白质进行溶剂化,使其处于溶剂分子的包围之中.-cp和-cs分别用于指定溶质和溶剂.不设定-box时,会使用溶质坐标文件(-cp)中的盒子信息.

-cp[<gro/.g96/...>] (protein.gro)输入文件,使用的蛋白质构型文件来自前面editconf步骤中的输出文件

-cs [<gro/.g96/...>] (spc216.gro)输入库文件,来自标准安装的GROMACS的剂构型文件

-p[<.top>] (topol.top)指定所要修改的拓扑文件

-o[<.gro/.g96/...>] (out.gro)输出加过剂的结构文件

使用的spc216.gro是通用的已平衡的三位点溶剂模型.也可以使用spc216.gro作为SPC,SPC/E或TIP3P水模型的溶剂构型,因为它们都是三位点的水模型。

注意topol.top中[molecules]的变化(SOL那一项)

solvate记录了增加的水分子数目,并将其写入拓扑文件中以显示它所做的更改,注意,如果你使用其他的(非水)溶剂,solvate不会在拓扑文件中写入这些信息!它自动记录更新水分子的功能是直接写在源代码中的.

定义好了模拟盒子后,使用solvate模块添加溶剂,输出包含溶剂的结构文件solv.gro.

代码语言:javascript
复制
gmx solvate -cp newbox.gro -cs spc216.gro -p topol.top -o solv.gro

看一下添加的效果

生活很好,有你更好。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者,Evil Genius
  • 有人说,人生低谷期就是在救你的命,可是一直低谷,一般人也是受不了。
  • 今天我们开始分子动力学第二步:定义单位盒子和添加溶剂。
  • 上一步我们生成了蛋白拓扑结构,文章在分析梳理--分子动力学模拟的常规步骤一(Gromacs)。
  • gmx pdb2gmx读取.pdb或.gro文件,并读取数据库文件,向分子添加氢并在GROMACS(GROMOS)或可选的.pdb中生成坐标,格式以及GROMACS格式的拓扑。随后可以处理这些文件以生成运行输入文件。那么在这个基础上,我们要进行下一步。
  • 第一步输出的日志需要注意一下信息
  • 后续我们平衡电荷需要用。
  • 我们首先来看看参数
  • gmx editconf 将通用结构格式转换为.gro、g96或.pdb在分子动力学模拟中,通常会给体系添加一个周期性的模拟盒子.gmx editconf有许多控制盒子的选项.
  • -f:[.gro/.g96/...>] (conf.gro)输入蛋白结构
  • -O:[.grol.g96/...>] (out.gro)输出带模拟盒子信息的结构文件
  • -c:将蛋白分子置于盒子中心
  • -bt:盒子类型,默认使用长方盒子,dodecahedron、cubic等
  • -d:溶质与盒子之间的距离,在X,Y,Z方向上的最小距离
  • 到盒子边缘的距离是一个重要参数,因为我们要使用周期性边界条件,必须满足最小映象约定,也就是说,一个蛋白质永远不能“看到”它自身的周期性映象(不能与其自身有相互作用),否则计算的力就会含有虚假的部分.指定溶质与盒子之间的距离为1.0nm意味着,蛋白质分子的任意两个周期性映象之间的距离至少是2.0nm.对于模拟中常用的任何截断方案,这个距离都足够了。-d选项设定分子到盒子边缘的最小距离,以nm为单位,它决定了盒子的尺寸.理论上在绝大多数系统中,-d都不能小于0.9nm。
  • 当你对周期性的边界条件与盒子类型有了更多了解后,强烈推荐使用菱形十二面体晶胞,因为在周期性距离相同的情况下,它的体积大约只有立方体晶胞的71%,因此可以减少需要加入的溶剂水分子的数目。
  • 我们多扩展一下,周期性边界(periodic boundary condition)
  • 考虑一个极小的立方体液滴单元, 里面有一千个原子. 其中有83=512个在内部, 可以看作完全处于液体环境中, 而剩下的接近一半, 都在这个单元的表皮上, 显然不会有着相同的性质. 即使是到了106 个原子这样一个量级, 仍然有接近6%有着不同的性质. 而我们所取得这个液体单元, 必须要是对宏观普适的抽样, 那么怎么做呢?
  • 这个问题可以通过由Born and von Karman 在1912年提出的周期性边界条件来克服. 第一种说法是, 就是假想空间中有无数个相同的液体元胞的展开, 在立方体边界上的微粒, 依然可以受到邻近的元胞的作用. 第二种说法, 临近的元胞都是本体的镜像. 落实到实处就是, 一个微粒运动出了盒子, 将从盒子的另一边再穿进来. 有点像小时后玩的贪吃蛇.
  • 如此一来, 盒子便没有了边界, 也没有了在表面的粒子, 这样的盒子很容易地用坐标的形式表现出来, 不用去储存真实的坐标. 但是我们仍有办法, 去得到这个元胞在真实体系中展开的情形. 折算到盒子内部坐标通常称之为wrap, 而按真实展开的叫做unwrap.
  • 有个非常关键的问题是, 这个非常小的无限循环的小东西, 能不能和宏观的系统有着相同的性质? 这取决于分子间作用力的范围和所考察的范围. 概括的说, 对于短程的强相互作用, 作用力距离不能超过盒子的一半. 这可能有一点抽象, 请看好Fig1.13, 如果粒子1的作用力距离超过一倍的盒子长, 那么会出现粒子自己对自己作用, 这显然是make sense的; 如果超过一半的盒长, 那么对于某些粒子, 粒子1在正方向将会对其作用一次, 从反方向同样会再次对它作用, make no science sense. 这个就是最小镜像原则(minimum image convention), 任意一个粒子的作用力仅被计算一次.
  • 以立方体为例, 讲一下思路. 要注意的是, 计算坐标和计算距离是有所不同的. 这里盒子是放在原点, 边长为L的立方体.
  • 计算坐标时, 我们不但想知道其在盒子中的位置, 也想知道实际上它跑到哪去了, 这个数据可以用来计算扩散等参数. 这时我们需要引入一个image flag的概念. 这个值代表着原子穿出盒子的次数, 正方向穿出image flag+1, 反方向-1.
  • 当微粒从正方向跑出盒子, 那就意味着它跑进了下一个盒子, 坐标值将大于L. 此时应该减去L的值, 将其wrap进盒子, 同时image flag+1; 如果从反方向跑了出去, 那就需要加一个L让他wrap进盒子, 同时image flag-1.
  • 计算距离时分为两种情况, 仅仅计算wrap体系中两个微粒间作用力, 那么就有, coord1-coord2. 如果这个距离大于1/2L, 那L减去这个距离; 如果小于-1/2L, 那就需要加上L. 总之很简单, 在纸上画个坐标轴取个特殊值就能搞明白.
  • 我们来加一下盒子
  • 然后我们添加溶剂gmx solvate ,我们还是看一下参数
  • gmx solvate可以做以下两件事之一:
  • 1.创建一个充满溶剂的盒子.可以通过指定-cs和-box选项来完成.对具有盒子信息但不含原子的结构文件则可以通过指定-cs和-cp来实现.
  • 2.将溶质分子,如蛋白质进行溶剂化,使其处于溶剂分子的包围之中.-cp和-cs分别用于指定溶质和溶剂.不设定-box时,会使用溶质坐标文件(-cp)中的盒子信息.
  • -cp[<gro/.g96/...>] (protein.gro)输入文件,使用的蛋白质构型文件来自前面editconf步骤中的输出文件
  • -cs [<gro/.g96/...>] (spc216.gro)输入库文件,来自标准安装的GROMACS的剂构型文件
  • -p[<.top>] (topol.top)指定所要修改的拓扑文件
  • -o[<.gro/.g96/...>] (out.gro)输出加过剂的结构文件
  • 使用的spc216.gro是通用的已平衡的三位点溶剂模型.也可以使用spc216.gro作为SPC,SPC/E或TIP3P水模型的溶剂构型,因为它们都是三位点的水模型。
  • 注意topol.top中[molecules]的变化(SOL那一项)
  • solvate记录了增加的水分子数目,并将其写入拓扑文件中以显示它所做的更改,注意,如果你使用其他的(非水)溶剂,solvate不会在拓扑文件中写入这些信息!它自动记录更新水分子的功能是直接写在源代码中的.
  • 定义好了模拟盒子后,使用solvate模块添加溶剂,输出包含溶剂的结构文件solv.gro.
  • 看一下添加的效果
  • 生活很好,有你更好。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档