学习amber教程A17:伞形采样,绘制丙氨酸三肽的势能面
一.内容简介
在本次练习模拟中,我们的模拟目标是采集到发生顺反异构的丙氨酸三肽的足够样本,计算其平均力势。
问题1:由于在MD模拟中,分子很难跨过高势能垒而发生很大的构象改变,一般模拟过程下,分子都稳定在一个较低的能量状态下不思进取。或者说,发生分子跨过高能垒得到一个变构的构型的概率时很低很低的,运行几ps的模拟也采不到这样的构象。本次的练习模拟中,丙氨酸三肽发生顺反异构现象也需要跨越高势能垒。
解决1:我们给发生顺反异构的酰胺键添加一个人工的简谐势能k(X-X0)^2,强迫这个键在我们要求的角度范围内旋转,得到我们想要的二面角(顺反异构等效于将中间的酰胺键扭转180度)。
这个人工的简谐势能是一个二次函数,会强迫酰胺键在X0这个角度周围小范围的旋转(角度变得离这个X0太远,势能也就越大,酰胺键受到的阻力也越大)
问题2:但是光有一个酰胺键扭转180度和没扭转两个构象是不够的,顺反异构是一个连续变化的过程(从0度到180度),这两个构象中的酰胺键都不可能会在模拟中发生从0度到180度的变化。
解决2:两个模型不够,就做多个模型。将0~180度,每隔3度做一个模型,就是对酰胺键扭转3度(间隔不能太大,太大会导致采样不精准),得到91个构象进行模拟,这样的模拟就采集到顺反异构过程中二面角的变化数据了。
问题3:我们是强行添加一个不存在的简谐势能,这样得到的平均力势(PMF)靠谱吗?
解决3:我们每隔3度构建一个模型,这样可以保证模型之间的采样(数据)会出现重叠。有重叠,就可以用加权直方图分析方法去处理结果, 从而去除限制偏置并恢复PMF。利用WHAM可以实现这点(原来如此,完全听不懂)。
二.建立和弛豫初始结构
1.建立模型:
编写如下的tleap.in文件
source leaprc.protein.ff19SB
source leaprc.water.tip3pmol=sequence {ACE ALA ALA NME}solvateoct mol TIP3PBOX 10.0#保存用于模拟的inp和top文件:
saveamberparm mol mol.parm mol.crd#保存为pdb文件,可以用来对轨迹中的平移和旋转进行修正:
savepdb mol mol.pdbquit
在终端输入:
tleap -f tleap.in
2.对模型进行弛豫:
分别编写如下的最小化,升温和弛豫的输入文件:
#最小化模拟1000步:
minimize&cntrl imin=1, maxcyc=1000, ncyc=500, cut=8.0, ntb=1, ntp=0, ntc=2, ntf=2,/#升温,时间步长为2fs,模拟20ps,从0K到300K:
heat NVT 20ps&cntrl imin=0, irest=0, ntx=1, nstlim=10000, dt=0.002, ntc=2, ntf=2, cut=8.0, ntt=3, gamma_ln=1.0, ntb=1, ntp=0, tempi=0.0, temp0=300.0, ntpr=100, ntwx=100, ntwr=10000, ioutfm=1,/#弛豫,模拟100ps:
equil NPT 100ps&cntrl imin=0, irest=1, ntx=5, nstlim=50000, dt=0.002, ntc=2, ntf=2, cut=8.0, ntt=3, gamma_ln=1.0, ntb=2, ntp=1, tautp=1.0, temp0=300.0, ntpr=500, ntwx=500, ntwr=10000, ioutfm=1,/
分别命名为01min.in、02heat.in和03equil.in
编写sh脚本md.sh进行模拟:
#!/usr/bin/bash
pmemd -O -i 01min.in -o 01min.out -p mol.parm -c mol.crd -r 01_min.rst
echo -e "\033[1m minimize is finish! \033[0m"
pmemd -O -i 02heat.in -o 02heat.out -p mol.parm -c 01_min.rst -r 02heat.rst -x 02heat.nc
echo -e "\033[1m heat is finish! \033[0m"
pmemd -O -i 03equil.in -o 03equil.out -p mol.parm -c 02heat.rst -r 03equil.rst -x 03equil.nc
echo -e "\033[1m equilibrium is finish! \033[0m"
运行脚本:
sh md.sh
三.添加简谐势,模拟人为约束酰胺键扭转120度的构象
1.编写如下的局部能量最小化、弛豫和产品采样in文件:
#能量最小化的in文件:
2000 step minimization for 120 deg&cntrlimin = 1,maxcyc=2000, ncyc = 500,ntpr = 100, ntwr = 1000,ntf = 1, ntc = 1, cut = 8.0,ntb = 1, ntp = 0,nmropt = 1,&end&wttype='END',&end
DISANG=disang.120#弛豫的in文件:
50 ps NPT equilibration for 120 deg&cntrlimin = 0, ntx = 1, irest = 0,ntpr = 5000, ntwr = 50000, ntwx = 0,ntf = 2, ntc = 2, cut = 8.0,ntb = 2, nstlim = 50000, dt = 0.001,tempi=0.0, temp0 = 300.0, ntt = 3,gamma_ln = 1.0,ntp = 1, pres0 = 1.0, taup = 5.0,nmropt = 1, ioutfm=1,&end&wttype='END',&end
DISANG=disang.120#成品模拟的in文件:
100 ps NPT production for 120 deg&cntrlimin = 0, ntx = 5, irest = 1,ntpr = 10000, ntwr = 0, ntwx = 10000,ntf = 2, ntc = 2, cut = 8.0,ntb = 2, nstlim = 100000, dt = 0.001,temp0 = 300.0, ntt = 3,gamma_ln = 1,ntp = 1, pres0 = 1.0, taup = 5.0,nmropt = 1, ioutfm = 1,&end&wttype='DUMPFREQ', istep1=50,&end&wttype='END',&end
DISANG=disang.120
DUMPAVE=dihedral_120.dat
DISANG=disang.120:disang.120是下面描述的文件,内容是我们添加的简谐势信息
disang.120务必放在sh脚本的同级目录下。
DUMPAVE=dihearal_120.dat:dihearal_120.dat是一个输出文件,记录模拟过程中角度变化值
nmropt=1:读取之后&wt区域的内容,在type=“DUMPFREQ”中,写下的istep1=50表示每隔50步记录一次二面角度数值
2.编写disang.120文件,这里告知pmemd添加简谐势能的信息:
Harmonic restraints for 120 deg&rstiat=9,15,17,19,r1=-60.0, r2=120.0, r3=120.0, r4=300.0,rk2=200, rk3=200,&end
3.编写md脚本md_120.sh,进行模拟:
pmemd -O -i mdin_min.120 -o ala_tri_min_120.out -p ala_tri.prmtop -c 03_equil.rst -r ala_tri_min_120.rst
pmemd -O -i mdin_equi.120 -o ala_tri_equil_120.out -p ala_tri.prmtop -c ala_tri_min_120.rst -r ala_tri_equil_120.rst
pmemd -O -i mdin_prod.120 -o ala_tri_prod_120.out -p ala_tri.prmtop -c ala_tri_equil_120.rst -r ala_tri_prod_120.rst -x ala_tri_prod_120.nc
4.运行模拟:
sh md_120.sh
四.将120度的构象进行限制,进行扭转60度的模拟
根据这个模板,我们编写由120度扭转到60度的in文件,进行酰胺键扭转60度的模拟和采样
1.编写对应的四个in文件(01min.in、02heat.in、03equil.in和disang60.in):
#minimize的in文件:
2000 step minimization for 60 deg&cntrlimin = 1,maxcyc=2000, ncyc = 500,ntpr = 100, ntwr = 1000,ntf = 1, ntc = 1, cut = 8.0,ntb = 1, ntp = 0,nmropt = 1,&end&wttype='END',&end
DISANG=disang.60#equilibration的in文件:
50 ps NPT equilibration for 60 deg&cntrlimin = 0, ntx = 1, irest = 0,ntpr = 5000, ntwr = 50000, ntwx = 0,ntf = 2, ntc = 2, cut = 8.0,ntb = 2, nstlim = 50000, dt = 0.001,tempi=0.0, temp0 = 300, ntt = 3,gamma_ln = 1.0,ntp = 1, pres0 = 1.0, taup = 5.0,nmropt = 1,&end&wttype='END',&end
DISANG=disang.60#produce的in文件:
100 ps NPT production for 60 deg&cntrlimin = 0, ntx = 5, irest = 1,ntpr = 10000, ntwr = 0, ntwx = 10000,ntf = 2, ntc = 2, cut = 8.0,ntb = 2, nstlim = 100000, dt = 0.001,temp0 = 300.0, ntt = 3,gamma_ln = 1,ntp = 1, pres0 = 1.0, taup = 5.0,nmropt = 1, ioutfm = 1,&end&wttype='DUMPFREQ', istep1=50,&end&wttype='END',&end
DISANG=disang.60
DUMPAVE=dihedral_60.dat#restrain的in文件:
Harmonic restraints for 60 deg&rstiat=9,15,17,19,r1=-120.0, r2=60.0, r3=60.0, r4=240.0,rk2=200, rk3=200,&end
2.同样是用pmemd进行模拟和采样。
五.批量进行0~90度,90~150度,150~180度的模拟和采样
这里直接修改教程里提供的perl脚本就可以了,命名为md.perl
#!/usr/bin/perl -w
use Cwd;
$wd=cwd;print "Preparing input files\n";$name="ala_tri"; #这里修改inp和top文件的路径
$incr=3;
$force=200.0;&prepare_input();exit(0);sub prepare_input() {$dihed=0; #这里修改模拟的角度最小值while ($dihed <= 90) { #这里修改模拟的角度最大值if ($dihed != 60) { #这里修改要跳过的模拟,分别是60,120和180#skip 60 degrees since we already ran itprint "Processing dihedral: $dihed\n";&write_mdin0();&write_mdin1();&write_mdin2();&write_disang();&write_batchfile();system("sh run.pbs.$dihed"); #这里改为用sh运行}$dihed += $incr;}
}sub write_mdin0 {open MDINFILE,'>', "mdin_min.$dihed";print MDINFILE <<EOF;
2000 step minimization for $dihed deg&cntrlimin = 1, maxcyc=2000, ncyc = 500,ntpr = 100, ntwr = 1000,ntf = 1, ntc = 1, cut = 8.0,ntb = 1, ntp = 0,nmropt = 1,&end&wt type='END',&end
DISANG=disang.$dihed
EOFclose MDINFILE;
}
sub write_mdin1 {open MDINFILE,'>', "mdin_equi.$dihed";print MDINFILE <<EOF;
50 ps NPT equilibration for $dihed deg&cntrlimin = 0, ntx = 1, irest = 0,ntpr = 5000, ntwr = 50000, ntwx = 0,ntf = 2, ntc = 2, cut = 8.0,ntb = 2, nstlim = 50000, dt = 0.001,tempi=0.0, temp0 = 300, ntt = 3,gamma_ln = 1.0,ntp = 1, pres0 = 1.0, taup = 5.0,nmropt = 1, ioutfm=1,&end&wt type='END',&end
DISANG=disang.$dihed
EOFclose MDINFILE;
}
sub write_mdin2 {open MDINFILE,'>', "mdin_prod.$dihed";print MDINFILE <<EOF;
100 ps NPT production for $dihed deg&cntrlimin = 0, ntx = 5, irest = 1,ntpr = 10000, ntwr = 0, ntwx = 10000,ntf = 2, ntc = 2, cut = 8.0,ntb = 2, nstlim = 100000, dt = 0.001,temp0 = 300, ntt = 3,gamma_ln = 1.0,ntp = 1, pres0 = 1.0, taup = 5.0,nmropt = 1, ioutfm=1,&end&wttype='DUMPFREQ', istep1=50,&end&wt type='END',&end
DISANG=disang.$dihed
DUMPAVE=dihedral_${dihed}.dat
EOFclose MDINFILE;
}
sub write_disang {$left = sprintf "%4.1f", $dihed - 180;$min = sprintf "%4.1f", $dihed;$right = sprintf "%4.1f", $dihed + 180;open DISANG,'>', "disang.$dihed";print DISANG <<EOF;
Harmonic restraints for $dihed deg&rstiat=9,15,17,19,r1=$left, r2=$min, r3=$min, r4=$right,rk2=${force}, rk3=${force},&end
EOFclose DISANG;
}sub write_batchfile {open BATCHFILE, '>', "run.pbs.$dihed";print BATCHFILE <<EOF;
#PBS -l nodes=1:ppn=2
#PBS -l walltime=1:00:00
#PBS -N run_$dihedcd $wdpmemd -O -i mdin_min.$dihed -p ${name}.prmtop -c ala_tri_prod_60.rst -r ${name}_min_${dihed}.rst -o ${name}_min_${dihed}.out
pmemd -O -i mdin_equi.$dihed -p ${name}.prmtop -c ${name}_min_${dihed}.rst -r ${name}_equil_${dihed}.rst -o ${name}_equil_${dihed}.out
pmemd -O -i mdin_prod.$dihed -p ${name}.prmtop -c ${name}_equil_${dihed}.rst -r ${name}_prod_${dihed}.rst -o ${name}_prod_${dihed}.out -x ${name}_prod_${dihed}.mdcrd
EOFprint BATCHFILE "\necho \"Execution finished\"\n";close BATCHFILE;
}
运行这个脚本,就会编写好一个,跑一个,直到跑完规定的角度:
perl md.perl
跑完所有的模拟,编写如下脚本,将得到的一系列dihedral_${dihed}.dat存到一个文件里:
#!/usr/bin/python3
import os
for i in (3,180,3):os.system("cat dihedral_"+i+".dat > all_dihedral.dat")
del i
用xmgrace进行绘图:
这里的x轴标签改为step ,由于我是隔5度一个模型进行模拟的,反应坐标会少一些,图像就会显得度数的覆盖程度不高,看起来较稀疏。
六.运行WHAM
1.WHAM的tgz包的下载:WHAM的下载链接
2.使用脚本建立meta.dat文件:
#!/usr/bin/perl -w
use Cwd;
$wd=cwd;print "Preparing meta file\n";$name="meta.dat";
$incr=3;
$force=0.12184;&prepare_input();exit(0);sub prepare_input() {$dihed=0;while ($dihed <= 180) { print "Processing dihedral: $dihed\n";&write_meta();$dihed += $incr;}
}sub write_meta {open METAFILE,'>>', "$name";print METAFILE <<EOF;
dihedral_$dihed.dat $dihed.0 $force
EOFclose MDINFILE;
}
这里的meta.dat里指定了要调用的dihedral文件,所以生成的91个dihedral_${name}.dat要放在当前目录下,运行wham:
wham P -1 181 61 0.01 300 0 meta.dat result.dat#P: 反应坐标是周期性变化的,即0度=360度
#-1 181: 从-1度到180度
#61 0.01: 采样61个模型,能量的最单位是0.01kcal
#300: 温度是300K
#0: 不加数据点
提取result的前两列,xmgrace绘制PMF图:
cat result.dat | awk '{print$1,$2}' > pmf.datxmgrace pmf.dat
查看势能面图像:
可见,在二面角在180度时,势能最低
参考文章:
amber教程A17
学习amber教程A17:伞形采样,绘制丙氨酸三肽的势能面相关推荐
- amber教程A17学习----概念篇
1.体系的总能量---内能 一个模拟的体系,无论是NPT还是NVT,都有总能量,就是内能. 内能=动能+势能 势能=键能+非键作用能 对模拟过程的记录的能量变化进行绘图,可以检查能量是否达到收敛 2. ...
- 学习如何在AutoCad土木工程中绘制建筑设计图
学习如何在AutoCad中绘制建筑设计图从平面图到AutoCad土木工程中的整栋建筑 你会学到: 如何绘制房屋地图 如何绘制建筑设计 如何从AutoCad打印或出图 AutoCaD使用 AutoCaD ...
- 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 个性化推荐
人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 个性化推荐 本教程源代码目录在book/recommender_system,初次使用请您参考Book文档使用说明. 说明: 硬件 ...
- [转载] python学习-基础教程、深度学习
参考链接: 在Python中使用NLTK对停用词进行语音标记 人工智能学习线路图 Python教程 Python 教程Python 简介Python 环境搭建Python 中文编码Python 基础语 ...
- iMindMap 12.2021中文多语言版下载学习激活教程
iMindMap12教程学习技巧 学习怎样使用iMindMap中文版来绘制思维导图是一门技术活,也不光是参照iMindMap教程就能够堆砌出来的,更多的是实践,是领悟.所谓师父领进门修行在个人,iMi ...
- 生信宝典:生物信息学习系列教程、视频、资源
生信的作用越来越大,想学的人越来越多,不管是为了以后发展,还是为了解决眼下的问题.但生信学习不是一朝一夕就可以完成的事情,也许你可以很短时间学会一个交互式软件的操作,却不能看完程序教学视频后就直接写程 ...
- 推荐一个opengl系统学习的教程
由于opengl的版本特别多,而且opengl 1.x和opengl2.x及以后的版本差别有特别大,刚开始自学的时候难免会走一些误区,发现学的并不是自己所用的. 前者是固定管线,渲染流程的相关概念都比 ...
- Pytorch 深度学习实战教程(二):UNet语义分割网络
本文 GitHub https://github.com/Jack-Cherish/PythonPark 已收录,有技术干货文章,整理的学习资料,一线大厂面试经验分享等,欢迎 Star 和 完善. 一 ...
- Pytorch深度学习实战教程(二):UNet语义分割网络
1 前言 本文属于Pytorch深度学习语义分割系列教程. 该系列文章的内容有: Pytorch的基本使用 语义分割算法讲解 如果不了解语义分割原理以及开发环境的搭建,请看该系列教程的上一篇文章< ...
最新文章
- BZOJ2127happiness——最小割
- HDU 1432 Lining Up (POJ 1118)
- 【Android 插件化】基于插件化引擎的“恶意应用“与“良性应用“区别 | 恶意插件化应用特征
- 全球及中国数字出版产业投资产值与运营模式咨询报告2022版
- Linux配置静态IP地址
- php用script判断闰年,php判断/计算闰年的方法小结【三种方法】
- linux中的守护进程
- 【HDU - 6183】Color it(CDQ分治 或 动态开点线段树)
- python生成1到100的列表_python列表生成式与列表生成器的使用
- 1.13单用户模式 1.14 救援模式 1.15 克隆虚拟机 1.16 Linux机器相互登录
- Oracle的order by的中文排序问题
- UniWebView3 使用中遇到的坑
- Unity 关于制作UV动画,模拟管路气路流向示意图
- JZYZOJ1384 种花小游戏 状压dp
- win10系统还原点怎么设置
- 数据库SQLite之嵌入式Linux实际网关项目使用初步
- Postgresql杂谈 10—Postgresql中的分区表
- 学习HTML经历记录01
- 数学对计算机的重要性
- 微信小程序--js中string转换为number
热门文章
- 从校招到自己投简历找公司的一名大学应届生
- 京东校招java面试题_2018京东校招Java笔试题
- oracle查询元数据,Oracle Spatial-元数据及SDO_GEOMETRY
- 4G核心网与IMS有什么区别
- ros ubuntu 卸载_ROS安装与卸载
- android蓝牙耳机来电铃声,Android蓝牙耳机接听挂断电话流程
- 君表增强了公式计算中的区域引用,支持SUM(A:A)
- 横河川仪压力变送器故障代码_横河川仪压力变送器
- BIOS和UEFI的区别,系统安装引导以及MBR和GPT磁盘分区
- 陀螺年度好文回顾|区块链跨链互操性的意义和应用案例