自然界中往往存在一些对PH值敏感的蛋白,当我们想要探究这些蛋白在不同PH条件下构象变化时自然离不开MD的辅助。遗憾的是Gromacs暂不支持恒定PH条件下的模拟,因为这涉及到了蛋白表面残基质子化状态需要时刻改变。一种折衷的方法是:用
propka
等预测工具预测蛋白极性/可质子化残基的pka值(因为实际蛋白表面的pka值可能受到邻近残基的影响而发生偏移),然后根据想要模拟的PH环境,自主确定各个可质子化残基质子化状态(比如某个残基pKa=4,pH环境为7,那么这个残基自然是处于离去质子的解离状态)。然后修改对应pdb文件中的残基名,比如脱去质子的CYS改名为CYM(这个问题文末有提及)。这种方法存在的最大缺点在于:质子化状态一但设定好就会一成不变,这和实际情况显然是不符的。因此我们今天不介绍这种方法,而是介绍在Amber中的实现方法。
有这样一张表(下图所示),罗列了常见质子化残基,包括
ASP、GLU、HIS、CYS、LYS、TYR
. 第三列数据对应它们各自的pKa值。第二列对应它们在恒定PH环境模拟时Amber识别的名字,如果想让Amber在模拟时对某个残基上面的质子化状态"多多关照",总得披上"马甲"好让Amber认识它吧。比如我想要模拟PH=7的环境,查看下表可以看出ASP、GLU、HIS
在此条件下质子会发生解离,那么就把pdb文件中它们的名称改成对应的"马甲"。ASP
→AS4
、GLU
→GL4
、HIS
→HIP
本次就以11个氨基酸长度的小肽test.pdb
在pH为7的环境下模拟为例:
首先修改需要更换“马甲”的残基名,这里我们做了
ASP
→AS4
、GLU
→GL4
修改,由于没有HIS残基,所以就不做考虑。此外该分子种有两个距离较靠近的CYS,我们想让他们之间成二硫键,所以修改做出修改:CYS
→CYX
。修改后的文件名为test_fix.pdb
#用pdb4amber不加氢,补全缺失原子,连接二硫键
pdb4amber -i test_fix.pdb --nohyd -o test_fix2.pdb
#不知道什么原因pdb4amber除氢总是失败,只能用下条命令自行除去了
grep -v '.............H' test_fix2.pdb > test_fix3.pdb
下图所示,我们想要连接的二硫键并没有形成,什么原因呢?这是因为只有硫原子间距小于2.5Å时pdb4amber
才会自动连接。不过也没关系,后面我们还能在构建拓扑时强制将它们连上。
#唤醒tleap程序
tleap
#加载constph力场(底层用的amber_ff10力场,同时于蛋白而言等价于ff99SB)
source leaprc.constph
source leaprc.water.tip3p #为后面的抗衡离子添加力场
#加载修改好的pdb
mol = loadPDB test_fix3.pdb
#连接二硫键
#遵循语法bond <原子1> <原子2> [bondtype]
#bondtype分三类:“-”单键、“=”双键、“#”三键、“:”芳香键,若不指定则默认是单键
bond mol.4.SG mol.8.SG
#维持体系电中性
addions mol Cl- 0
addions mol Na+ 0
#保存拓扑、坐标
saveAmberParm mol test.prmtop test.inpcrd
#退出tleap程序
quit
注意,这里我们构建拓扑时没有添加水分子,这是因为本例要使用的是’隐式水‘模型。’隐式水‘不是真正的水分子,你可以把它理解为一个个数据点。启用’隐式水‘模型的参数为
icnstph=1
,需要将它添加到后文用到的以*.in
为后缀的文件中。
#因为本例中我们只考虑了GLU、ASP的质子化状态改变,所以resname后面的参数改为它们对应的'马甲'——GL4、AS4
cpinutil.py -resnames GL4 AS4 -p test.prmtop -o test.cpin
#em.in文件在分享文件中的em文件夹内
pmemd -O -i em/em.in -p test.prmtop -c test.inpcrd -o em/test_min.mdout -r em/test_min.rst -ref test.inpcrd -cpin test.cpin -inf em/em_mdinfo
#heat.in文件在分享文件中的heat文件夹内
pmemd -O -i heat/heat.in -p test.prmtop -c em/test_min.rst -o heat/test_heat.mdout -r heat/test_heat.rst -ref em/test_min.rst -cpin test.cpin -inf heat/heat_mdinfo
- 这一步
*in
文件里需要添加或调整参数solvph=
,ntcnstph=
。solvph=
设定体系pH值,ntcnstph=
设置每隔多少步监测一次所选残基质子化状态。要注意的是,amber每次只能监测一个残基的状态,也就是说所选“滴定残基”(即需要质子化状态改变的残基)数越多,于单个残基而言监测间隔越长。这就需要我们进行适当取舍。amber官方举的例子:当选取滴定残基数为10时,监测步长设为5得到的结果比较好。可见即便amber可以模拟恒定pH条件,但这也是有限制的。本例中我们选取的滴定残基数总共就两个,所以ntcnstph=
可以设得比较大,我设定为25。(ps:后来才发现前面设置了三个“滴定残基”,不过影响应该不大)
#pr.in文件在分享文件中的pr文件夹内
pmemd -O -i pr/pr.in -p test.prmtop -c heat/test_heat.rst -o pr/test_pr.mdout -cpin test.cpin -r pr/test_pr.rst -cpout pr/test_pr.cpout -cprestrt pr/test_pr.cpin -inf pr/pr_mdinfo
本步输出的
test_pr.cpin
是test.cpin
文件更新版。在预平衡中,“滴定残基”质子化状态发生了改变,所以需要将更新后的信息保存到新结果中,以供下一步成品模拟调用。
无关紧要的内容
如下图所示展示了Amber计算各种质子化状态之间的相对自由能差的原理。绿色区域的各种质子化状态的自由能在模拟过程中(t0)存入以*cpin
为后缀的文件中。在当质子化状态又一次发生改变[下图红色区域]时(t0+Δt)依照下方公式即可计算出残基质子化前后自由能的变换。
无关紧要的内容
#md.in文件在分享文件中的md文件夹内
pmemd -O -i md/md.in -p test.prmtop -c pr/test_pr.rst -o md/test_md.mdout -cpin pr/test_pr.cpin -r md/test_md.rst -x md/test_md.nc -cpout md/test_md.cpout -cprestrt md/test_md.cpin -inf md/md_mdinfo
#结果输出到analyse文件夹内
cphstats -i md/test_md.cpin md/test_md.cpout -o analyse/calcpka.dat --population analyse/populations.dat
calcpka.dat
文件中记录了每个滴定残基的预测pKa值及质子化存在时间比率等信息。本例由于运行时间很短,所以两个ASP质子化状态未改变,所以pKa没有预测值。populations.dat
文件记录了每个残基各种质子化状态及相应状态数量占比。
除此之外,你也可以按照常规步骤分析其他的性质,比如构象变化、主成分、自由能等。
写在最后
在Amber中,对于一些标准残基的特殊状态,我们往往用另一种名字替代。这样Amber才能识别,并施加适当的力场参数。大体有如下几种情况:
原残基名 | “马甲” | 描述 |
---|---|---|
CYS | CYX | 半胱氨酸成二硫键 |
CYS | CYM | 半胱氨酸和金属螯合/或用于恒定pH模拟的滴定碱基 |
HIS | HIE | 见下图描述 |
HIS | HID | 见下图描述 |
HIS | HIP | 见下图描述/同时用于恒定pH模拟的滴定碱基 |
ASP | AS4 | 可用于恒定pH模拟的滴定碱基 |
GLU | GL4 | 可用于恒定pH模拟的滴定碱基 |
:::