一种量子化学与分子力学结合的方法

描述

本专题将介绍一种量子化学与分子力学结合的方法(QM/MM方法),该方法既包括量子化学的精确性,又利用分子力学的高效性,其基本思想是用量子力学处理感兴趣的区域,其余部分用经典分子力学来处理。本章节以一个典型的没食子酸分子(Gallic Acid,GA)为例,介绍输入文件准备,QM/MM 单点计算,QM/MM结构优化,QM/MM激发态计算。其中,BDF程序主要完成量子化学计算部分,其余部分由BDF开发成员修改的pDynamo2.0程序包完成。同时介绍如何读取数据用于结果分析,帮助用户深入了解BDF软件的使用。    

   输入文件准备   

一般来说,QM/MM计算之前,需要对目标体系进行分子动力学模拟,得到适合的初始构象。当采用PDB、MOL2或xyz文件作为输入时,pDynamo2.0程序包仅支持OPLS力场,对于小分子和非标准氨基酸力场参数不全,不推荐使用。建议优先采用Amber程序,通过拓扑文件输入力场参数。以Amber为例,从动力学模拟轨迹提取感兴趣的结构存储于.crd文件中,与对应的参数/拓扑文件.prmtop一起可以作为QM/MM计算的起始点。Python脚本如下:

动力学

其中,需要提前安装好AmberTools,python2.0版本,并正确设置好AMBERHOME和PDYNAMO环境变量,关于如何将GallicAcid.pdb初始结构文件(图1,晶胞为2*1*1)生成使用AmberTools21程序相对应的坐标文件GallicAcid.crd和参数/拓扑文件GallicAcid.prmop的方法如下:

动力学

运行antechamber程序将Pdb文件转化为mol2文件:antechamber -i GallicAcid.pdb -fi pdb -o GallicAcid.mol2 -fo mol2 -j 5 -at amber -dr no

-i 指定输入文件

-fi 指定输入文件类型

-o 指定输出文件

-fo 指定输出文件类型

-j 匹配原子类型和键类型

-at 定义原子类型

运行parmchk2程序生成对应体系的力场参数文件:parmchk2 -i GallicAcid.mol2 -f mol2 -o GallicAcid.frcmod

运行tleap程序构建系统拓扑并为分子定义力场参数步骤如下:

1.使用tleap命令启动tleap程序

动力学

2. 确定并加载体系力场:source leaprc.gaff(此为GAFF力场) 

动力学

3. 调入配体mol2文件:GA = loadmol2 GallicAcid.mol2

动力学

4. 检查导入的结构是否准确或缺失参数:check GA

5. 调入体系分子的模板,并补全库文件中缺失的参数:loadamberparams GallicAcid.frcmod

6. 准备生成的Sustiva库文件:saveoff GA GallicAcid.lib

7. 修改生成的Sustiva库文件并调入该文件:loadoff GallicAcid.lib

动力学

8. 保存.crd和.prmop文件:saveamberparm GA GallicAcid.prmtop GallicAcid.crd

动力学

9. 退出tleap程序:quit

   分子动力学模拟   

 

1.此处采用amber软件进行分子动力学模拟,首先对体系进行能量最小化模拟,输入文件min.in如下:

Initial minimisation of GallicAcid complex

&cntrl

imin=1, maxcyc=200, ncyc=50,

cut=16, ntb=0, igb=1,

&end

imin=1:运行能量最小化

maxcyc=200:能量最小化的最大循环数

ncyc=50:最初的0到ncyc循环使用最速下降算法, 此后的ncyc到maxcyc循环切换到共轭梯度算法

cut=16:以埃为单位的非键截断距离

ntb=0:关闭周期性边界条件

igb=1:Born模型

使用如下命令运行能量最小化:

sander -O -i min.in -o GallicAcid_min.out -p GallicAcid.prmtop -c GallicAcid.crd -r GallicAcid_min.rst &

其中GallicAcid_min.rst为输出包含坐标和速度的重启文件

2.接下来利用最小化模拟得到的重启文件升温系统,从而完成分子动力学模拟,输入文件md.in如下:

Initial MD equilibration

&cntrl

imin=0, irest=0,

nstlim=1000,dt=0.001, ntc=1,

ntpr=20, ntwx=20,

cut=16, ntb=0, igb=1,

ntt=3, gamma_ln=1.0,

tempi=0.0, temp0=300.0,

&end

imin=0:进行分子动力学(MD)

irest=0:读取先前保存的重新启动文件读取坐标和速度

nstlim=1000:运行的MD步数

dt=0.001:时间步长(单位:ps)

ntc=1:不启用SHAKE约束

ntpr=20:每ntpr步输出能量信息mdout一次

ntwx=20:每ntwx步输出Amber轨迹文件mdcrd一次

ntt=3:Langevin恒温器控制温度

gamma_ln=1.0:Langevin恒温器的碰撞频率

tempi=0.0:模拟的初始温度

temp0=300.0:模拟的最终温度

使用如下命令运行分子动力学模拟:

sander -O -i md.in -o md.out -p GallicAcid.prmtop -c GallicAcid_min.rst -r GallicAcid_md.rst -x GallicAcid_md.mdcrd -inf GallicAcid_md.mdinfo

其中GallicAcid_md.mdcrd文件即为MD模拟的轨迹文件,可借助VMD软件进行可视化显示分子结构,并从动力学模拟轨迹提取感兴趣的结构存储于.crd文件中。

   QM/MM总能量计算 

分子动力学模拟后提取文件为GallicAcid.prmtop, GallicAcid.crd,可对体系进行全量子化学总能量计算,python代码如下:

import glob, math, os

from pBabel import AmberCrdFile_ToCoordinates3, AmberTopologyFile_ToSystem

from pCore import logFile

from pMolecule import QCModelBDF,  System

# 读取水盒子坐标和拓扑信息

molecule = AmberTopologyFile_ToSystem ("GallicAcid.prmtop")

molecule.coordinates3 = AmberCrdFile_ToCoordinates3("GallicAcid.crd")

# 定义能量计算模式,此处为全体系密度泛函计算,可以定义方法和基组,分别为GB3LYP和6-31g,

model = QCModelBDF("GB3LYP:6-31g")

molecule.DefineQCModel(model)

molecule.Summary() #输出体系计算设置信息

# 计算总能量

energy = molecule.Energy()

除了可以用全量子化学QM计算体系总能量,也可对感兴趣的分子进行QM/MM计算(本例为指定第五个分子用QM方法计算),QM/MM组合能量计算python脚本如下:

import glob, math, os

from pBabel import AmberCrdFile_ToCoordinates3, AmberTopologyFile_ToSystem

from pCore import logFile, Selection

from pMolecule import NBModelORCA, QCModelBDF, System

# 定义能量计算模式

nbModel = NBModelORCA() #处理QM和MM区相互作用

qcModel = QCModelBDF("GB3LYP:6-31g")

# 读取体系坐标和拓扑信息

molecule = AmberTopologyFile_ToSystem("GallicAcid.prmtop")

molecule.coordinates3 = AmberCrdFile_ToCoordinates3("GallicAcid.crd")

# 关闭体系对称性

molecule.DefineSymmetry(crystalClass = None) # QM/MM方法不支持使用周期性边界条件,故关闭周期性边界条件

# 指定QM区

qm_area = Selection.FromIterable(range (72, 90))  # 指定第五个分子用QM方法计算,其中(72, 90)指明原子列表索引值为72,73,74…..87,88,89,该值=原子序数-1

# 定义能量计算模式

molecule.DefineQCModel (qcModel, qcSelection = qm_area)

molecule.DefineNBModel (nbModel)

molecule.Summary()

# 计算总能量

energy = molecule.Energy()

QM/MM模拟的输出总结了MM部分,QM部分,QM区和MM区相互作用部分的计算细节如下:

动力学

输出体系总能量信息以及各部分能量贡献如下:

动力学  

      审核编辑:彭静

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分