• Using Amber & AmberTools (for beginners)

        ----SuperCRISPR

         

        总结了一下自己从零基础学习Amber与AmberTools的过程,大致涵盖了从建模、跑MD模拟、能量分析、轨迹分析等等最基本的操作流程。个人认为,真正困难的地方在于处理很对意外的报错,以及看出杂乱结果之中的意义和方向。初始的蛋白结构也许"千疮百孔",调参过程令人头秃,但既然要做就得先迈出第一步吧......作为初学者,近千页的使用手册必然是不现实了,也许不求甚解,用简单的体系来进行计算,得到"一定能跑出来"的结果,才能让自己有勇气迈进此坑。

         

        当能完全理解整个软件的工作流程时,不妨了解一下分子模拟和MD的深入原理,了解简单一行代码背后的公式,了解曾经被我们"视而不见"的参数的意义与作用......

         

        刚开始学习MD是真的很无从下手,但是先学习软件的使用,也就拿到了一块使用的敲门砖。去一步步走下去,出现了问题,也就知道了需要什么答案,也就慢慢清楚了自己在做什么,慕然回首,才发现自己已经是坑中人了......

         

         

        (以下操作以Amber18&AmberTools18为例)

         

         

        感谢杨志伟教授及其课题组成员的支持与帮助!

        欢迎批评指正

        2696331468@qq.com

         


        1 Linux环境下安装Amber与AmberTools

        1.0 前置条件:已安装C, C++, Fortran90等编译器

        以及其它,如

        1.1 下载压缩文件

        通过官网下载文件Amber18.tar.bz2与AmberTools18.tar.bz2

        1.2 选择合适文件夹,移动压缩文件至此并进行解压缩(例:/home/xxx)

        此时程序位于/home/example/amber18目录下

        1.3 设置环境变量

        1.4 进行编译前检测

        1.5 自动配置shell环境(同时加入.bashrc文件中使其自动加载)

        打开根目录下的.bashrc文件并编辑(使用vim)

        在其中加入

        该文件已经定义好了AMBERHOME环境变量,并将$AMBERHOME/bin/加入了PATH,所以无需再做其他设定

        1.6 安装

        (1.6.1 MPI版本安装)

        注意:

        (1)export DO_PARALLEL="mpirun -np 2"中的数字可能为2/4/8,推荐分别执行测试,以决定最佳数字

        (2)需要已经安装MPI并在PATH中包含mpiccmpif90

        (3)最后一步可以使用

        1.7 配置Python依赖环境

        (1)选择Python编译器

        在编译时,默认自动使用$AMBERHOME/miniconda/bin 中的可执行python程序。若不具有,则提示安装Miniconda

        (可选:选择在Amber中使用特定版本的Python程序,即使用configure命令时加入以下标签)

        查看和安装所需要的程序

        (2)Python package的位置

        默认在$AMBERHOME/lib/pythonX.X 中。amber.sh 可以自动将该目录添加至PATHPYTHONPATH 环境变量)

        (3)Amber下为python加入新的package

        若在编译阶段默认安装Python至AmberTools中,则Python、ipython、jupyter、conda的可执行文件位于$AMBERHOME/bin 并分别命名为amber.python、amber.ipython等。

        若使用amber.conda安装其他包至环境(如pandas),则在$AMBERHOME/bin目录下进行

         

         

        2 蛋白建模

        2.1 PDB文件的预处理

        (1)使用文本格式打开xxxx.pdb源文件,去除如实验方法、高级结构等信息,只保留各原子坐标;去除不必要的溶剂离子

        (2)对于X-ray衍射结构,其中的甲硫氨酸(Met)可能被置换为硒代甲硫氨酸(MSE)。一些常用力场不支持Se原子,因此使用在线工具可完成替换 https://www.novopro.cn/tools/mse2met.html

        (3)使用pdb4amber转换,自动修正其中的不规范和冗余信息

        2.2 (可选)利用Gaussian计算配体力场

        当蛋白质中含有非氨基酸的小分子配体时,由于自带的力场中可能不具有对应分子的力场信息,因此需要自己生成合适的力场文件才能完成建模。

        若需要添加配体ligand的信息于体系中,则需要先生成配体的参数文件.frcmod与输出文件.lib

        (1)若得到的ligand.pdb文件没有包含非极性氢,则需要加氢。此处用amber工具reduce命令。之后利用可视化工具进行检查是否合理。

        (2)使用antechamber转化为Gaussian输入格式.gjf

        (也可使用Gaussian自带转换工具)

        (3)利用Gaussian计算ESP数据(需在计算设置中选择计算方式)

        关于Gaussian计算ESP的部分,也可以在附录2中进行查看

        (4)利用antechamber得到包含RESP电荷的.mol2文件

        生成力场文件.frcmod

        (注意,有时需要手动修改.mol2文件中的分子名称,并使其与之后tleap中名称保持一致,如 XXX1 )

        (5)使用tleap生成.lib文件方便之后使用(以及prmtop与inpcrd)

        (建议检查.lib文件中分子名称是否为XXX1)

        2.3 使用tleap程序进行蛋白建模

        此时,工作目录下应包含:

        3 分子动力学模拟

        本示例中,在工作目录下创建IN目录,创建的运行脚本(.in)文件均存储于此目录下。

        3.1至3.4均创建了.in脚本以指明运行所需的参数,3.5中通过输入以上创建的脚本完成分子动力学模拟的计算

         

         

        注意!

        若脚本在Windows环境下编辑,由于Windows(DOS)与Linux(Unix)的换行符存在差异,应使用如Dos2Unix程序进行格式转换,否则脚本无法被运行!

        转换后建议在Linux环境下,在每个脚本的结尾处加入一空行,以保证成功运行

         

         

        3.1 预处理——最小化:排除不合理的原子接触

        当初始结构复杂度高、结构粗糙、不合理接触较多时,为了防止体系在最小化优化过程中出现作用力过大而“体系爆炸”(原子运动速度即受力过大,体系能量异常过高),使用 溶液-侧链-骨架 的“逐步放开”优化法

        运行后查看.out中的能量输出,若收敛于一个稳定的赋值则认为最小化可能完成,进行下一步,否则需要增加步数或排查其他的原因

        3.1.1 对水分子与溶液离子进行最小化

        创建脚本min1.in如下

        首行为任务标题,关键参数意义如下

        3.1.2 氨基酸侧链最小化

        创建脚本min2.in

        保持每个氨基酸Ca原子位置不变,仅优化侧链位置

        3.1.3 对整个体系的最小化

        创建脚本min3.in

        3.2 升温

        模拟升温过程,使原子克服体系势垒而突破局部最小值。此为从“静态”结构转向“动态”模拟的关键阶段

        所有脚本请根据体系实际情况合理选择限制权重与限制原子

        创建脚本heat.in

        3.3 体系的平衡过程

        3.3.1 NVT系综下的平衡

        创建脚本nvt.in

        3.3.2 NPT系综下的平衡

        创建脚本npt.in

        3.4 进行最终MD模拟

        此时体系已经达到了一个接近“真实条件”的较为合理的状态,现在可以进行最终的MD模拟

        创建脚本md.in

        注意,MD运行模拟的总时间(nstlim*dt)应足够长,应足够长的时间(10-1000ns)使分子发生构象变化,并保证分子真正达到平衡且稳定的状态。当然,这也意味着更长的计算时间!越大的分子需要越长的模拟时间

        一般通过修改运行次数来控制模拟时间。dt=0.002适用于大多数情况,若过大则造成精度的下降。对于结构难以稳定或是有较大作用力的体系可以适当减小dt的值,以免“碰撞”与“速度溢出”。但过小的dt增加系统弛豫时间,降低对相空间的搜索能力。

        3.5 分子动力学程序的运行

        Amber提供两套功能完全一致的MD运行程序:sanderpmemd,使用方法完全一样。pmemd实质为sander的付费版,计算时间远远小于sander。以下以pmemd为例进行介绍

        3.5.1 使用Shell脚本运行

        工作目录下应包括输入文件(初始结构)xxx.prmtop 与 xxx.inpcrd

        所有输入脚本(*.in)均保存于工作目录的 IN 目录下

        建立脚本md.sh于工作目录

        在工作目录下运行该脚本

        注:最后一步输出的轨迹文件为.nc类型。该类型文件被Amber支持,且通用性更高,占用空间更小,读取速度更快

        3.5.2 显卡加速(CUDA)版本的Shell脚本

        首先,在控制台中查看空闲GPU序号

        本例中,若空闲可用显卡序号为1

        创建md_cuda.sh脚本。需要使用pmemd.cuda版本

        工作目录下执行脚本

        3.6 初步检查运行结果

        3.6.1 保存并查看末帧PDB结构

        创建CheckStruc。使用ambpdb工具,将最小化、升温与最终MD模拟结果的最后一帧的原子坐标转换为PDB文件

        使用Chimera、Pymol结构即可打开查看

        3.6.2 使用VMD软件查看动态结构

        在VMD中,加载轨迹文件与拓扑文件,即可查看模拟过程中蛋白结构的动态变化过程。

        VMD中操作流程如下

        1. File -> New Molecula创建新的分子
        2. 加载拓扑文件md.prmtop,文件类型为AMBER7.parm。成功后出现0:prmtop对象
        3. 加载轨迹文件md.nc至0:prmtop,文件类型为NetCDF。
        4. 点击Load即可加载分子。在Graphics -> Representations中可以隐藏水、离子。

        3.6.3 初步分析体系状态的变化

        使用AmberTools自带的mdout_analyzer.py程序可以完成对总能量、动能、温度等数据的分析与提取

        输入的文件.out将按顺序被合并,最终产出合并后的分析结果。具有GUI界面,但依赖numpy和matplotlib包

         

        也可使用process_mdout.perl脚本处理

        输出温度.TEMP、密度.DENSITY、总能量.ETOT、总动能EKTOT、总势能EPTOT

         

        若无法直接用命令行打开该程序,则需要输入 $AMBERHOME/bin/process_mdout.perl 调用程序

         

        使用Xmgrace可以进行绘图

         

        根据不同阶段能量等性质的变化,初步判断MD模拟的质量

        4 轨迹分析

        4.1 基于cpptraj进行分析

        cpptraj是在MD结果分析中极其重要的一个工具(AmberTools自带),是轨迹提取、拓扑文件处理以及简单轨迹分析计算中最为常用(也是最好用)的工具

        4.1.1 溶剂分子的去除、RMSD与RMSF的计算

        命令行中打开cpptraj程序

        在cpptraj中执行以下操作

         

        为方便操作,可以将以上操作保存为脚本strip_rmsd.in。在命令行调用cpptraj时输入

         

        将得到的数据可以直接用xmgrace绘制

         

        以下脚本rmsf.in可以计算RMSF,输出rmsf.dat

         

        4.1.2 输出指定范围内的平均结构

        选取RMSD较为平稳的一段(如7501-10000帧),利用以下脚本average.in输入至cpptraj中,得到平均结构的pdb文件

         

        4.1.3 PCA的计算

        获取各帧在PC1、PC2的投影

        输入脚本pca.in如下,得到project.dat

        对结果进行可视化处理

        使用ddtpd(引用自http://sobereva.com/73)进行可视化

         

        下载链接在此

        注意:具体使用方法见README.txt文件;请正确引用原作者Sobereva的成果!

        数据类型预处理

        由于该程序基于Gromacs的分析结果,需要先对project.dat文件进行格式的转化,并且将其中数据格式由埃转为nm

        (这里使用了R进行处理,代码如下)

        输出后结果为Project.xvg。工作区保存为Project_Frame_nm.RData

        利用ddtpd绘制自由能面图(Free energy landscape)

        将Project.xvg拷贝至ddtpd.exe的工作目录下(应包含ddtpd.f90文件)。

        执行ddtpd.exe,执行以下命令

        (注:根据Boltzmann分布计算自由能,如下:)

        G(x)=kB TlnP(x)+ClnP(x)=N(x)Nmax 

        G(x), P(x), N(x), Nmax分别为自由能、构象x出现概率、构象x出现次数与所有构象中的最大出现次数。kB为Boltzmann常数,T为温度(K),C为常数。由于仅比较相对能量,可以认为C=0,或使G(x)min=0.

        对自由面图结果进行可视化

        同样,这里使用了R完成此步骤

        图像result.png保存于工作目录下

        4.2 基于R语言中Bio3d包进行分析

        4.2.1 使用cpptraj提取所有Ca轨迹

        在进行RMSD、RMSF与PCA等分析时,由于主要只需要用到各个氨基酸Ca的轨迹,为了减少数据量,先行使用cpptraj提取Ca轨迹

        输入脚本ca.in如下

        得到CA.nc与CA.prmtop

        4.2.2 使用Bio3d包进行各项分析

        #在Result目录下,包含了

        5 能量分析

        对MD结果的能量分析中,最常用的是对结合自由能的计算。这里展示使用MM-GB/PBSA方法分析蛋白-小分子结合能,并计算出蛋白质各残基对结合能的贡献。

        5.1 对轨迹进行预处理

        利用cpptraj,从蛋白-配体复合体的.prmtop中分别提取出蛋白分子的.prmtop与配体分子的.prmtop文件

        (4.1.1中演示了利用cpptraj从已有拓扑文件、轨迹文件中去除特定原子的过程。将原子标签改为对应配体/蛋白的名称或序号即可。标记原子/残基的具体方法见下文附录)

        5.2 指定输入参数

        创建脚本mmgbsa.in

        MM/PBSA现在较为少用。具体用法和涉及到的参数含义建议查阅一下Amber使用手册

        5.3 运行 MMPBSA.py

        这里使用了MPI(并行)模式运行,将计算提交到多个平行节点上,以减少运算时间

        (不使用MPI则命令如下)

         

        附录1 Amber程序中原子标记总结

        目标原子的指定

        如,:100-150为第100到150号残基,:WAT为所有水分子,@CA为所有Ca原子

        逻辑关系符号

        复合运算

        距离声明

        通配符

         

         

        附录2 Linux下利用Gaussian计算分子ESP

        在实际计算中,QM部分的参数往往需要自己根据分子特点、算力和预期精度进行选取,具有很大的灵活性,因此在这里简述一下运用Gaussian计算ESP的过程。此外也简要介绍例如ESP作图、chk格式转化等问题

        Gaussian中涉及的计算化学知识,可以参考附录4中资料:Exploring Chemistry with Electronic Structure Methods

        Gaussian环境配置

        在~/.bashrc中加入:

        Gaussian16与Gaussian09几乎相同,仅仅将g09改为g16即可

        对分子进行结构优化

        在linux中,计算所需参数主要在.gjf输入文件中声明。

        如示例input.gjf (原子坐标仅用作示例,无实际意义)

        其中,

         

        提交任务:

        工作目录下需要有input.gjf,输出out.log与output1.chk文件

         

        将.chk(Linux)转换为.fchk(Windows)

        .chk文件无法在Windows中被打开,也无法被Windows下的Gaussian/GaussView所识别。因此可以采用:

        (如果formchk命令无法直接执行,可以试试调用:Gaussian实际目录/formchk)

        进行单点能计算

        推荐在Windows下,使用GaussView打开.fchk,再保存为.gjf文件,并进行必要的修改

        输入input2.gjf

        提交

        使用antechamber拟合RESP电荷

        其中,-c resp声明使用RESP电荷进行拟合。

         

         

        (若使用BCC拟合,则精度大大下降,但不用计算ESP,直接由PDB结构即可计算)

        支线任务:绘制分子静电势(ESP)图

        此处选取Gaussian中的cubegen工具+VMD绘图、Multiwfn+VMD绘图两种方法。

        具体细节与其他方法、适用范围,请参考思想化学公社的相关帖子 使用vmd+cubegen快速绘制大分子静电势(ESP)图

         

        cubegen生成.cube格点文件

        计算化学一言难尽,如有个性化需求,可以看看官方说明

        需要在Linux中使用Gaussian所自带的工具cubegen。但也需要Windows下的.fchk而非.chk格式作为输入

        从前到后各参数含义为

         

        Multiwfn+VMD (Windows)

        可以参考sobereva老师的文章:使用Multiwfn+VMD快速地绘制静电势着色的分子范德华表面图和分子间穿透图

        Multiwfn生成格点文件

        multiwfn可以在此下载

         

        首先,需要将此前生成的*.fchk文件命名为1.fch并放在multiwfn.exe同一目录下。(此处无需用到2.fch, 3.fch, 4.fch,这些是用来绘制多分子作用的VDWs表面穿透图的)

        在此目录下同时还需要三个.bat文件(ESPiso.bat, ESPpt.bat, ESPext.bat),以及三个对应的.txt文件在此下载输入参数。[可以参考examples\drawESP目录下的示范文件]

        三个.bat文件如下: ESPiso.bat

        ESPpt.bat

        ESPext.bat

        需要注意,.bat文件中,最后一行move命令的地址应对应实际的目标存储路径(此处为"D:\VMD\NX")

         

        而对应的txt文件则可以直接在此下载

         

        分别运行.bat文件

        使用VMD绘图

        1. 同样的,参考examples\drawESP中的三个对应.vmd文件(在此下载),拷贝(或自己按需求重新编写/修改)至上文.bat中定义的.pdb存储路径
        1. 把目录中的所有文件拷贝至VMD工作目录(Windows与Linux版本均可)

        2. 打开VMD,在命令行中输入:

          即可绘制分子表面格点静电势分布图

        3. 或者在VMD命令行输入(在此之前,不要进行第3步)

          则绘制电子密度等值面图

        4. 在3或4的基础上继续输入

          则可以在之前的基础上,在图中标注极值点(黄点=静电势极大值;蓝点=静电势极小值)

        附录3 PBS任务提交方法

        PBS是现在集群服务器较为常用的一种任务管理系统。在提交一些大型任务时,需要使用该系统为所在账号的任务申请可用节点,排队取得使用权后才可使用。这里简要介绍一下PBS中提交任务的方式

        PBS常用命令

        PBS提供4条命令用于作业管理。

        (1)qsub 命令—用于提交作业脚本

        命令格式:

        参数说明:因为所采用的选项一般放在pbs脚本中提交,所以具体见PBS脚本选项。

        例:

        提交某作业,系统将产生一个作业号

        (2)qstat 命令—用于查询作业状态信息

        命令格式:

        参数说明:

        -f jobid 列出指定作业的信息

        -a 列出系统所有作业

        -i 列出不在运行的作业

        -n 列出分配给此作业的结点

        -s 列出队列管理员与scheduler所提供的建议

        -R 列出磁盘预留信息

        -Q 操作符是destination id,指明请求的是队列状态

        -q 列出队列状态,并以alternative形式显示

        -au userid 列出指定用户的所有作业

        -B 列出PBS Server信息

        -r 列出所有正在运行的作业

        -Qf queue 列出指定队列的信息

        -u 若操作符为作业号,则列出其状态。若操作符为destination id,则列出运行在其上的属于user_list中用户的作业状态。

        例:

        查询作业号为211的作业的具体信息。

        (3) qdel 命令—用于删除已提交的作业

        命令格式:

        例:

        15秒后删除作业号为211的作业

        (4) qmgr 命令—用于队列管理

        PBS脚本文件

        PBS脚本文件由脚本选项和运行脚本两部分组成。

        (1) PBS作业脚本选项 (若无-C选项,则每项前面加‘#PBS’)

        -a date_time : date_time格式为:[[[[CC]YY]MM]DD]hhmm[.SS] 表示经过date_time时间后作业才可以运行。

        -c interval : 定义作业的检查点间隔,如果机器不支持检查点,则忽略此选项。

        -C directive_prefix :在脚本文件中以directive_prefix开头的行解释为qsub的命令选项。(若无此选项,则默认为’#PBS’ )

        -e path :将标准错误信息重定向到path

        -I :以交互方式运行

        -j join :将标准输出信息与标准错误信息合并到一个文件join中去。

        -k keep :定义在执行结点上保留标准输出和标准错误信息中的哪个文件。 keep为o 表示保留前者,e表示后者,oe或eo表示二者都保留,n表示皆不保留。若忽略此选项,二者都不保留。

        -l resource_list : 定义资源列表。

        以下为几个常用的资源种类。

        cput=N : 请求N秒的CPU时间; N也可以是hh:mm:ss的形式。

        mem=N[K|M|G][B|W]:请求N {kilo|mega|giga}{bytes|words} 大小的内存。

        nodes=N:ppn=M :请求N个结点,每个结点M个处理器。

        -m mail_options :mail_option为a:作业abort时给用户发信;为b:作业开始运行发信;为e:作业结束运行时发信。若无此选项,默认为a。

        -M user_list : 定义有关此作业的mail发给哪些用户。

        -N name : 作业名,限15个字符,首字符为字母,无空格。

        -o path : 重定向标准输出到path。

        -p priority : 任务优先级,整数,[-1024,1023],若无定义则为0.

        -q destination : destination有三种形式: queue , @server,queue@server。

        -r y|n : 指明作业是否可运行,y为可运行,n为不可运行。

        -S shell : 指明执行运行脚本所用的shell,须包含全路径。

        -u user_list : 定义作业将在运行结点上以哪个用户名来运行。

        -v variable_list : 定义export到本作业的环境变量的扩展列表。

        -V : 表明qsub命令的所有环境变量都export到此作业。

        -W additional_attributes : 作业的其它属性。

        -z : 指明qsub命令提交作业后,不在终端显示作业号。

         

        此处是提交Gaussian计算任务的一个PBS脚本,输入文件为input.gjf,

         

        附录4 参考资料下载

        若有Debug需求或是需要进一步了解原理、参数含义等等,还是强烈建议查询Amber官方使用手册:

         

        Amber18 Reference Manual 下载链接

        Amber21 Reference Manual 下载链接

         

        以及分子动力学原理的入门介绍

        Understanding Molecular Simulation - From Algorithms to Applications

        (by Daan Frenkel & Berend Smit)

        下载链接

         

        计算化学与Gaussian的入门介绍

        Exploring Chemistry with Electronic Structure Methods

        (by James B. Foresman & AEleen Frisch)

        下载链接

         

         

        附录5 其他

        mmpbsa.py中缺少所需原子类型的半径参数

        在体系中含有部分原子(如Fe)时,由于程序中原先不含有其原子半径的信息,因此运行时出现报错:

        bad atom type: Fe

        此时就需要人为添加相关信息。在源文件中添加信息后,重新进行编译。

        在解压后的Amber目录下,寻找到mdread.F90文件(可能在这个目录中)

        在Amber18中,mdread.F90不直接包含编码信息,而是调用mdread1.F90与mdread2.F90.

        原子半径参数写于mdread2.F90文件中,故编辑此,向其中添加铁原子半径

        建议将添加的原子参数追加在if(gbsa==1)或else if(gbsa==2)内的最后一个原子对应的else if之后,bad atom报错对应的else if前

        如,对于gbsa==1的if函数内的语句,其末尾为:

        之后即为gbsa==2的else if内的语句

        之后按照安装Amber的步骤,重新编译安装即可!



        感谢杨志伟教授及其课题组成员的支持与帮助!

        created by SuperCRISPR

        Oct.1, 2022

         

        Copyright © 陈泓宇

        转载请注明出处