GroMacs 跑起来!

开始之前感谢一下Justin A. Lemkul, Ph.D.教授的GROMACS Tutorials。现在已经几乎成为新手必学行业标准了。强烈推荐可以去上他的课。这篇blog是我根据他的教程总结出来,并加上了自动化的部分,让一切更加方便!

我们会采用3NPO pdb file 和一个autodock vina对接后的pdbqt文件开始。你可以从下面下载他们,但也可以参考我之前的教程一步一步拿到自己的pdbqt flie:

一、准备pdb file

你会发现autodock vina dock之后的pdbqt里面有多个构象,他们都被MODEL分割。如下图:

model1的一部分

所以我们处理的第一步就是分割,把这个含有多个model的变成单独的一个model。利用下面几行sh就可以轻松拿到第一个构象。当然,也可以直接用手复制粘贴出来。不过可能使用vina的vina_split会更可靠一些

vina_split --input dock_result.pdbqt
mv dock_result_ligand_01.pdbqt ligand.pdbqt # rename to liagnd
rm dock_result_ligand_* # remove all other pdbqt

拿到第一个构象

pdbqt是autodock专用格式,我们下面转换成ligand常用的通用格式:

obabel -ipdbqt ligand.pdbqt -omol2 -O ligand.mol2 -p 7.0

转换为mol2

😎
到目前为止,我们有1个pdb file (3npo.pdb)还有一个mol2 file!

这里有一个我写好的sh文件,可以用来自动化这个流程,跟着问答走就好

二、准备拓扑结构

如果你一步一步做上来,肯定已经疑问很久了,pdb file里面只有x y z坐标,那些键是哪里来的?为啥使用pymol打开他有键的信息?没错,pymol是猜的!所以经常显示错误。

拓扑结构生成还是比较耗费算力的,下面就来生成一个

2.1 ligand topology

ligand相对复杂,因为topology并没有现成的。毕竟你想想,氨基酸就那么几个,实际蛋白在生成拓扑结构的时候就是做简单的查字典,但是小分子可不一样,小分子变化多端没有字典可查,而是要老老实实的算薛定谔方程。这个过程非常复杂,还好有一个好用的工具帮我们做到,他就是acpype.

acpype -i ligand.mol2 -c bcc

没错,一行命令,10分钟等待

这里我们指定了AM1-BCC 电荷模型,它是半经验半计算的,让他比传统RESP速度大幅提升。我们小分子虽然小,但是实际上也不小,使用BCC模型非常常见。

里面含有_GMX为后缀的就是给gromacs用的文件。里面有用的是一个gro文件和一个itp。

2.2 protein topology

下面是相对简单的蛋白拓扑图。Gromacs直接有对应的工具,直接使用即可

gmx pdb2gmx -f protein.pdb -o protein.gro -p topol.top -ter

gmx pdb2gmx 一句话搞定

命令中也可以不加-ter而是-ignh让他直接根据默认方式加H,如果有报错的话。

三、合并拓扑和坐标

现在我们有两个分开的topology和gro的xyz文件,在真正跑gromacs的时候,我们要一个文件包含所有信息。这一步似乎基本上只能手动,不过我这里提供脚本可以变得全自动,但是我们从原理开始

gromacs最终跑需要:

  1. 一个gro文件,也就是xyz坐标文件,类似pdb。
  2. 一个top文件,也就是topology。itp也是top文件,并且可以被top include

现在我们逐个搭建:

3.1 gro文件搭建

gro文件本质上就是xyz,所以我们直接粘贴过去就好。复制整个ligand_GMX.gro里面的信息,粘贴在protein的gro的最下面,box信息之前,并且修改第二行的总原子个数。

下面是等效的sh file用于自动化操作

head -n -1 protein.gro > complex.gro
sed '1,2d;$d' ligand_GMX.gro >> complex.gro
tail -n 1 protein.gro >> complex.gro

PROT_ATOMS=$(sed -n '2p' protein.gro | awk '{print $1}')
LIG_ATOMS=$(sed -n '2p' ligand_GMX.gro | awk '{print $1}')
TOTAL_ATOMS=$((PROT_ATOMS + LIG_ATOMS))
echo "Total atoms will be: $TOTAL_ATOMS"
sed -i "2s/.*/$TOTAL_ATOMS/" complex.gro

3.2 top文件搭建

top文件相对简单。只要在力场文件后面加上include ligand的itp。并且在最后一行加上1个ligand组成成分即可。下面是等效的sh文件:

echo "ligand              1" >> topol.top
sed -i '/#include "amber14sb.ff\/forcefield.itp"/a #include "ligand_GMX.itp"' topol.top
😎
此时Gro文件中有两个部分组成,top文件也是两部分合体而成,所以他们都准备好了

四、搭建溶液体系并加ion中和

从这里开始流程就相对固定,可以高度自动化了。并且软件会处理的比较好,简单了解流程即可。

首先要定义一个有溶液的框框:

gmx editconf -f complex.gro -o complex_box.gro -c -d 1.0 -bt dodecahedron 
gmx solvate -cp complex_box.gro -cs spc216.gro -o complex_solv.gro -p topol.top

定义box并加入溶液

下面添加ion中和可能的离子。gromacs体系是不带电的,通常情况下如果你的protein+ligend带正电,就加Cl-,如果是负电就加Na+。

这里需要做grompp所以需要一个配置文件。autodock中配置文件是config.txt,这里的配置文件就是**.mdp。对于这个ion.mdp可以用下面的链接下载,这玩意比较通用,除非你是大神否则没必要改里面的内容。

gmx grompp -f ion.mdp -c complex_solv.gro -p topol.top -o ions.tpr
printf "SOL\n" | gmx genion -s ions.tpr -o complex_neutral.gro -p topol.top -pname NA -nname CL -neutral 

五、控制ligand

不能让ligand在平衡模拟阶段乱跑,在平衡模拟阶段水分子并不均匀,很有可能和ligand重叠一开始就直接把ligand撞飞。为了防止这个情况发生,我们采用强锁定ligand的方式

首先我们选中所有ligand做成一个组,然后生成一个规则名为posre_ligand.itp,注意这是一个可以被添加进top文件的拓扑补充文件,后缀是之前就见过的itp

printf "0 & ! a H*\nq\n" | gmx make_ndx -f ligand_GMX.gro -o index_ligand.ndx 
printf "3\n" | gmx genrestr -f ligand_GMX.gro -n index_ligand.ndx -o posre_ligand.itp -fc 1000 1000 1000 

然后include这个itp file,这里的意思是如果配置文件mdp里面写了POSRES_LIG就include,如果没有写就不include。因为我们只有平衡阶段要引入他,正式模拟还是希望小分子也会运动的,所以要这样写

; Ligand position restraints
#ifdef POSRES_LIG
#include "posre_ligand.itp"
#endif

或者使用sh自动化完成添加的过程

sed -i '/#include "ligand_GMX.itp"/a \\n; Ligand position restraints\n#ifdef POSRES_LIG\n#include "posre_ligand.itp"\n#endif' topol.top

对于从三到五也有一个自动化脚本可以一键完成所有事情, 感兴趣的可以试试看。也是跟着提示一步一步做即可。

六、开始模拟!

模拟主要分为两个阶段,平衡模拟和正式模拟。平衡模拟在可控的环境下进行(也就是我们刚刚做的控制ligand步骤),让水分子、温度、压力完全达到配置文件mdp中写出来的那样。正式模拟就让所有原子自由运动了。

在模拟之前,我有很多配置文件要给你,你可以打开看他们,在大多数情况下不需要更改,这都是非常基础和通用的模板,最可能要改的就是步数和保存间隔了。如果你希望跑的多一些,就把步数调整高一些。所有的mdp文档也都是从两位教授的教程中拿到的。

第一步是能量最小化:

gmx grompp -f inputs/em.mdp -c complex_neutral.gro -p topol.top -o em.tpr
gmx mdrun -v -deffnm em

第二步是Canonical Ensemble,压力P 和 能量E 变化,体积和温度不变

gmx grompp -f inputs/nvt.mdp -c em.gro -r em.gro -p topol.top -o nvt.tpr
gmx mdrun -v -deffnm nvt

下一步是Isothermal-Isobaric Ensemble,压力和温度都不变,能量和体积可变

gmx grompp -f inputs/npt.mdp -c nvt.gro -r nvt.gro -p topol.top -o npt.tpr
gmx mdrun -v -deffnm npt

这一共3步平衡模拟以后,就可以开始正式模拟了!开始前记得修改到自己想要跑的步数。目前mdp里面是跑200ns的,也就是发文章最低标准。

gmx grompp -f inputs/md.mdp -c npt.gro -t npt.cpt -p topol.top -o md_noPBC.tpr
gmx mdrun -v -deffnm md

然后?

然后等着吧,如果你要求的步数多的话,几天都是有可能的。没错,几天也就能跑出来蛋白质在几纳秒里面的变化,不得不感慨,大自然真的是一台超级超级计算机。

量子计算其实就是再利用大自然给我们做计算,我跑完gromacs真的有点想去学量子计算了!

另外,跑出来的文件就可以用来进行轨迹分析等等了。

Read more

Autodock vina对接!

Autodock vina对接!

相信你已经准备好了两个pdbqt,如果没有可以去看我准备pdbqt的那个blog。如果你想要直接下载,请下载: KaempferolKaempferol.pdbqt2 KBdownload-circle3NPO3NPO.pdbqt122 KBdownload-circle 这个blog采用3NPO作为模拟蛋白,可以在这里看到!上面的pdbqt是处理好的ph=7.0的,Kaempferol就是ligand,3NPO是receptor config file准备 pdbqt是最难准备的,config相对就容易很多。autodock 4的config file准备也很看水平,但是vina把这个过程简化了,就只要最基础的几个事情 # 受体和配体设置 # 应该你已经准备好了两个pdbqt receptor = receptor.pdbqt ligand = ligand.pdbqt out = output.pdbqt # 输出格式也是pdbqt!是包含多个对接结果的pdbqt! # 网格中心与大小 (Grid Box) # 这一部分要看蛋白质的状态! ce

By Blake Jia
Autodock vina の pdbqt准备

Autodock vina の pdbqt准备

这篇blog中假设你毫无autodock经验但是有最最基础linux使用经验,本blog着重描述vina的一些文件和操作流程,以避免以后自己操作的时候犯错。 我们会先从配体准备的软件选择和安装开始,然后会分别讲解ligand和receptor的准备过程。 pdbqt生成-软件的选择和安装 这里的软件指的是从sdf或者pdb文件到pdbqt文件的过程。本质上来说他们都是笛卡尔坐标系xyz的信息储存文件,都可以用文本文档直接打开。 head your_pdbqt.pdbqt 如果你打开看了,就会发现其实pdbqt比pdb多出了两列:也就是q和t。Partial Charge (Q)和Atom Type (T)。Q用于计算静电相互作用,T用于计算van derr waal力和氢键,他们正常pdb是不需要的,但是预测docking的时候非常有用。 一直以来Autodock tools或者MGL tools是比较被推荐的,也是官方标准工具,也是图形化工具。另外也有PyRx等别的第三方pdbqt生成器的库,但是兼容性相对差一点点(生成QT就说白了是很简单的活儿,但是既然有官方的为啥不

By Blake Jia
Autodock vina自动化运行

Autodock vina自动化运行

autodock vina 现在还是比较常用了,虽说config file之类的还是比较直观易懂的,但是一般来说我们做一个东西都要同时dock很多个ligand。下面就是我常用的autodock vina自动化运行脚本。 * 自动化批量对接(Batch Docking): 自动扫描指定目录下的所有配体文件(.pdbqt),并逐个与受体(Receptor)进行对接。 * 智能参数记忆(State Persistence): 首次输入参数后,脚本会自动将其缓存到隐藏文件 .dockenv 中。下次运行时直接回车即可跳过输入,极大提升复用效率。 * 动态生成配置与日志(Auto-Logging): 自动为每个配体生成专属的 config.txt 配置文件,并实时保存带有时间戳的详细运行日志(.out)。 * 重名防覆盖保护(File Protection): 如果输出目录已存在同名对接结果,脚本会自动给新文件加上序号(如 _1, _2),防止实验数据被意外覆盖。 用户输入内容: 序号允许用户输入的内容 (Input)默认值 (Default)说明 (Notes)1

By Blake Jia