在这里已经制作了能量收敛的水分子层,现在我们需要在合适的位置加上蛋白质盖子。
这里用gromacs搭建,原理是将水做为原始蛋白然后插入一层下蛋白,然后再将这个结构插入一层上蛋白,蛋白分子是用packmol搭建的仿真盒子,大小是55立方A°,packmol的单位是A°,而gromacs是纳米,转换的时候一定要注意。
gmx insert-molecules -f water_test_npt_after_center.gro -ip position.dat -ci downlevel.gro -o down_water.gro -rot none
首先要将water_test_npt.gro文件中的仿真盒子z轴改为这里我其实是将之前的算出来的water_test_npt.gro文件做了居中,其实后来经过测试这里不居中也是可以的,修改成20.3nm,为了后面能放的下蛋白,这里可以改大一些,但是不能改小,否则蛋白放不进去。当然所有的蛋白经过packmol生成后也都居中了,但是后来的插入位置根据居中的坐标计算不符合理论,所以插入的位置还是手工试一试就出来了。
然后居中
gmx editconf -f water_test_npt.gro -o water_test_npt_after_center.gro
uplevel和downlevel分别是上下两层的蛋白,结构是一样的,都是两个chain_A两个chain_B.
gmx pdb2gmx -f downlevel.pdb -o downlevel.gro -p downlevel.top -i downlevel.itp -water spc -ignh
gmx pdb2gmx -f uplevel.pdb -o uplevel.gro -p uplevel.top -i uplevel.itp -water spc -ignh
我们一会儿要以生成的top为依据制作总的top。
然后就要添加蛋白层了
首先加下层
gmx insert-molecules -f water_test_npt_after_center.gro -ip position.dat -ci downlevel.gro -o down_water.gro -rot none
这个-rot none一定要加,否则结构不正确
然后加上层
gmx insert-molecules -f down_water_center.gro -ip position2.dat -ci uplevel.gro -o all_water.gro -rot none
两个position是有特定要求的,太远了达不到目的,太近了无法添加进去
position.dat
0 0 -5.45
这里生成水层和单层蛋白层的结构之后,要居中一下结构,然后才可以输入正值坐标,否则加不下
gmx editconf -f down_water.gro -o down_water_center.gro
position2.dat
0 0 5.75
然后就成功生成最终的模拟蛋白了
可以看到避免了那种成H键的情况。
那么我们就得到了最终用于模拟的gro文件。可以在这里下载。
需要结合上面生成的两个uplevel.top和downlevel.top。
all_water.top
#include "oplsaa.ff/forcefield.itp"
#include "oplsaa.ff/spce.itp"
#include "oplsaa.ff/ions.itp"
#include "uplevel_Protein_chain_A.itp"
#include "uplevel_Protein_chain_B.itp"
#include "uplevel_Protein_chain_C.itp"
#include "uplevel_Protein_chain_D.itp"
#include "downlevel_Protein_chain_A.itp"
#include "downlevel_Protein_chain_B.itp"
#include "downlevel_Protein_chain_C.itp"
#include "downlevel_Protein_chain_D.itp"
[ system ]
; Name
system
[ molecules ]
; Compound #mols
SOL 7396
uplevel_Protein_chain_A 1
uplevel_Protein_chain_B 1
uplevel_Protein_chain_C 1
uplevel_Protein_chain_D 1
downlevel_Protein_chain_A 1
downlevel_Protein_chain_B 1
downlevel_Protein_chain_C 1
downlevel_Protein_chain_D 1
为了让gro和top中的原子不被报错do not match,还需要更改uplevel_Proein_A,uplevel_Proein_B.itp等一共8个.itp文件中的分子名称。
这里仅以uplevel_Proein_A.itp为例
[ moleculetype ]
; Name nrexcl
uplevel_Protein_chain_A 3
要将默认的Proein_chain_A前面加个前缀。
然后就可以使用top文件了。
索引文件就是说,告诉gromacs,那些原子对应哪一类,因为后面在nvt平衡的过程中希望冻结蛋白层(主要是希望水分子不会溢出,并且现在蛋白上有极性),所以首先要计算出原子总数。
打开uplevel.gro,左上角就原子总数为25918,然后打开downlevel.gro,同理25918,再看all_water.top,有7396个sol,所以总原子数为:
Γ ( z ) = 25918 + 25918 + 7396 ∗ 3 = 74024 \Gamma(z) = 25918+25918+7396*3= 74024 Γ(z)=25918+25918+7396∗3=74024
接下来就要给根据top中的分子顺序给原子分类了。
使用gromacs的make_ndx制作索引文件
gmx make_ndx -f all_water.gro -o all_water.ndx
随后根据gromacs的提示依次选择
system
name
q
这样就完成索引文件的制作了。
我们制作索引文件目的是在最后一步nvt模拟中冻结蛋白质夹层,即首先重新建立一个nvt.mdp文件
; Run Control
integrator = md ; leap-frog integrator of Newton's equations of motion
tinit = 0 ; [ps] starting time for the run
dt = 0.002 ; 2 fs - [ps] time step for integration
nsteps = 50000 ; 0.1 ns
; Output Control
nstxout = 1000 ; save coordinates every 2 ps
nstenergy = 500 ; save energies every 1 ps
nstlog = 50000 ; update log file every 100 ps
; Bond parameters
continuation = no ; apply constraints to the start configuration and reset shells
constraints = h-bonds ; convert all bonds to constraints
constraint-algorithm = lincs ; holonomic constraints
; Neighbor searching and nonbonded interactions
cutoff-scheme = verlet ; Cutoff-related parameters
nstlist = 20 ; Frequency to update the neighbor list and the long-range forces
ns_type = grid ; Method to determine neighbor list (simple, grid)
pbc = xy ; Use periodic boundary conditions in all directions
rlist = 1.2 ; [nm] Cut-off for making neighbor list (short range forces)
ewald-geometry = 3dc
nwall = 2
wall-atomtype = MW MW
wall-type = 12-6
; Electrostatics
coulombtype = PME ; Treatment of long range electrostatic interactions
rcoulomb = 0.9 ; [nm] Short-range electrostatic cut-off
; Van der waals
vdwtype = cutoff
rvdw = 0.9 ; [nm] Short-range Van der Waals cut-off
; Do I need pme-order and fourier spacing?
;pme_order = 4 ; cubic interpolation
;fourierspacing = 0.16 ; grid spacing for FFT
; Temperature coupling
tcoupl = v-rescale ; Temperature coupling, modified Berendsen thermostat
tc_grps = system ; Group to couple to separate temperature baths
tau_t = 0.1 ; [ps] Time constant for coupling
ref_t = 300 ; [K] Reference temperature for coupling
; Pressure coupling is off for NVT
Pcoupl = No ; No pressure coupling (fixed box size)
; Generate velocities to start
gen_vel = yes ; assign velocities from Maxwell distribution
gen_temp = 300 ; temperature for Maxwell distribution
gen_seed = -1 ; generate a random seed
; Freeze Sheets
;freezegrps = Backbone ;freezing the protein, so limit the water
;freezedim = Y Y Y
注重看到
;freezegrps = Backbone ;freezing the protein, so limit the water
;freezedim = Y Y Y
这里backbone是蛋白质夹层对应的分组,下一行的意义是冻结它。
随后输入
gmx grompp -f nvt.mdp -c all_water.gro -p all_water.top -n all_water.ndx -o fd_nvt.tpr -maxwarn 1
gmx mdrun -v -deffnm fd_nvt
有一个警告目的是忽略体系中的电荷不平衡,还会提示提升cutoff截止值,这个只是和精度有关,可以忽略。
这里有可能会报错初始能量太大,这个解决办法可以看我的其他文章。