计算化学公社

标题: 基于gmx_MMPBSA程序的结合自由能计算-MMGBSA方法 [打印本页]

作者
Author:
jackshoulder    时间: 2025-5-14 15:26
标题: 基于gmx_MMPBSA程序的结合自由能计算-MMGBSA方法
本帖最后由 jackshoulder 于 2025-5-15 20:18 编辑

基于gmx_MMPBSA程序的结合自由能计算-MMGBSA方法

1 前言

结合自由能,在模拟计算中,用以量化受体-配体之间的结合强度的一种指标。尤其是对于药物设计,蛋白-蛋白互作,蛋白-核酸,核酸-小分子等研究领域,均会涉猎分子动力学模拟的工作。在众多工作中,分子动力学数据后处理中,直接用以量化研究对象之间的识别强度和结合能力的指标较少,所以结合自由能在研究受体-配体间结合强度的尤为重要。但对于初学者,众多动力学程序及计算结合自由能相关程序,难以入手,特别是没有耐心看用户手册的新手们(毕竟大部分都是英文,畏难情绪更加大)。于是,作为一个踩过坑的新手我来说,再次分享一下有关结合自由能计算的经验。

由于本人刚入坑时,也是一头雾水,不经意间逛到强大的计算化学公社,从此几乎将其视为圣经。所以根据流行程度,选择了Gromacs程序来研究分子动力学。为什么选择,可以参考sob老师的帖子,《2021年计算化学公社论坛“你最常用的计算化学程序和DFT泛函”投票结果统计》(http://bbs.keinsci.com/thread-23482-1-1.html)和《2024年计算化学公社举办的计算化学程序和DFT泛函的流行程度投票结果》(http://bbs.keinsci.com/thread-45272-1-1.html)毕竟这是真适合新手入门的程序(对于我而言)。于是做完分子动力学之后,为了我课题研究的完整性,我要通过计算的方法来量化受体-配体间的结合强度,因此又要挑选相关程序来进行计算。起初,本人也是使用了李老师的脚本来进行结合自由能计算,也许是本人能力有限,每次算出来的值要么为0,要么为正值,这明显的不对(因为动力学轨迹来看,我的蛋白-核酸结合良好),于是就不停查文献找其他程序,后里找到了gmx_MMPBSA这个程序。专门为Gromacs开发的用以计算结合自由能程序。

gmx_MMPBSA,该文献发表于2021年,各位可以进入其官方网址,进行详细了解(https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/)。对其相关推荐和讨论,可以参考sob老师的《GROMACS做MM/PBSA结合自由能计算最理想的工具:gmx_MMPBSA》(http://bbs.keinsci.com/thread-23634-1-1.html)。正如其官网介绍所说,“gmx_MMPBSA 是基于 AMBERMMPBSA.py 的新工具,旨在使用 GROMACS 文件执行自由能量计算”。因此,在这里,大佬们不要抬杠,毕竟 AMBER我不会,会AMBER的可以直接用MMPBSA.py计算。从我开始使用这个程序以来,已经有一年之久,从其1.6.2版本到现在的1.6.4版本,使用其计算过较多体系:蛋白-蛋白,蛋白-小分子,蛋白-核酸,核酸-小分子,核酸-核酸,核酸-多肽,蛋白-多肽等体系。也常与使用此程序的一些友友们交流经常。本人对此程序稍有了解和使用经验,突发奇想来论坛写一篇帖子,互相交流和分享经验。



2 安装
       本人使用的是ubuntu系统,从最开始的20,到22再到现在的24,均自己安装配置部署,也可以交流分享ubuntu系统部署经验。
         安装方法,我这里不详细介绍,毕竟安装方法,官网介绍的非常详细https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/installation/ 。我是1.6.2版本入坑的,最开始我纯属小白,按照官网的安装,包括env.file  始终会卡在git和pip某些程序安装不了,于是找人安装(100元子,大概23年12月左右)。反正也是用着把毕业论文做完了。但由于后续维护,以及后面我继续在组里读博,程序安装始终都要解决。又捣鼓了很久,自己在装1.6.3版本的时候,装成功了。总结经验:有些安装包,可能是在当前的conda源没有,也有可能是网络问题,导致有些环境配置过程中断; 因为,那个时候流行用chatgpt,都知道的,要**上网嘛,于是我在组里的机器(双系统,我都装了个工具),使用env.file 安装的时候,非常顺畅;还有一种情况就是不要用校园网,毕竟有些校园网拒绝访问很多网址。
          现在安装相对简单一行命令就可以搞定,其实就是官网给的方法 。只要你网络顺畅,conda源update一下,基本上都能安装成功。
  1. conda env create --file env.yml
复制代码
        由于在使用env.file时,里边有gromacs的安装,如果你的系统中安装了gromacs程序,你可以将env.file中“- gromacs<=2024.3”所在行删除掉。后续在使用的时候,程序会自动读取你当前系统中,bashrc文件中写入的gromacs版本。



3 使用方法
gmx_MMPBSA gmx_MMPBSA_ana两部分主要程序
         gmx_MMPBSA 负责计算,  gmx_MMPBSA_ana负责绘图
         本人先声明一点,我分享的经验不一定全面,所使用的代码和方法,以及命令参数,均是前言中提到的体系中,成功跑通过,如果你按照我的方法,没有跑通,表明缺失了相应的文件,或者中间有些步骤没有正确处理。我的处理方式和方法不一定最优,但可以畅通无阻。一般体系分别包括“蛋白-小分子”,“蛋白-蛋白”,“蛋白-核酸”,“核酸-小分子”为什么不提多肽,其实多肽可以分为两种情况,一种是短肽,还有一种是长肽,短肽你可以把其视为“小分子”处理,这样就跟“蛋白-小分子”体系类似;另一种是长肽,你可以将其为一种较短的蛋白质处理,这样就跟“蛋白-蛋白”体系类似。为什么要提到“核酸-小分子”这种小众的体系,其实这并不小众,可能大家不怎么了解,现在在检测领域,核酸又称适配体,现在更流行的叫法,功能核酸,在抗生素残留和肿瘤标志物检测,会做核酸-小分子的动力学,并且适配体几乎都是单链的DNA和RNA。做这种体系的模拟比较少。还有一个原因是,本人就是做适配体的,所以将其作为一个例子分享一下,因为适配体-小分子的模拟比较小众,对很多刚入门新手,几乎找不到很好的方法和策略。于是借此分享一点个人经验。
        后文提到的方法中,均是使用MMGBSA方法进行的计算,MMPBSA和RISM后续再专门写帖子介绍
        强烈建议大家,有时间,多去看看官网给的使用手册以及例子。

(1) 准备工作
       如工作流程图所示(https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/howworks/),需要对提供的complex,recepotor,ligand通过parmed和tleap进行转换为AMBER程序所能识别的文件;注意:大多因为结构文件有问题报错,均会在这个环节出现,如小分子结构扭曲,键连关系不正确,下载小分钟结构时为2d导致的结构等问题均会在这里报错。另外一类常见报错就是index索引超出范围,这里一般均是你提供给程序的结构文件和你的轨迹文件中原子数不一致导致的。
        与此同时,对提供的gromacs轨迹(xtc或trr)进行转换。流程图中有“clean up”和“dry trajectory”,这个意思是你要对你的轨迹进行清除,在(https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/gmx_MMPBSA_running/)中提到“The trajectory defined in -ct, -rt, or -lt doesn't contain PBC”,要求对轨迹进行周期性矫正。一般这里不做周期性矫正,同样也会导致index超出范围的报错等问题。

(2) 输入文件

        参数文件:mmpbsa.in       结构文件:tpr(是你正式md时的tpr,一般会命名为md.tpr或者md_0_1.tpr)     索引文件    index.ndx        轨迹文件:  xtc或者trr       top文件(可选,但被要求)          参考结构文件  pdb (可选)     加粗均是必须提供的。

        这里我提供一个基于MMGBSA方法的mmpbsa.in文件,大家可以直接用到自己的计算中,稍作修改即可,主要是更改力场,温度,离子浓度即可。通用性参数文件; (, 下载次数 Times of downloads: 279)


        对相关参数做一定的解释,注:我提供的mmpbsa.in文件中,在接下来没有进行解释的,都是按照官网推荐默认值。
  sys_name             = "SAs16-1 with SMP"      # 用户自定义;
  startframe           = 1                                              # 起始帧,建议轨迹中的第一帧,但也可以自己定义从自己轨迹的第多少帧开始;
  endframe             = 9999999                               # 结束帧可以是自己轨迹的最后一帧所对应的帧号,也可以写9999999,这样的目的是使轨迹中的帧尽可能算完,因为你的轨迹也不可能超过9999999帧
forcefields       = "leaprc.protein.ff14SB/leaprc.gaff2"     # 最关键的一点来了,力场参数,“/”左边是受体力场,右边是配体力场。(这里“/”也可以是“,”两种方法,程序都是能识别的。力场的写法至关重要,见官网对力场的写法要求“https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/input_file/#general-namelist-variables”中“forcefields”部分的介绍。这里力场尽可能与你动力学轨迹中所用力场一致。
ions_parameters      = 1     # 这个参数跟“forcefields ”字段一样。
PBRadii              = 4       # 这个参数,我改过,因为我是用MMGBSA中的“igb=8”所以这个地方就必须写4 ,具体这个值写多少,必须根据你用的哪种“igb”方法;具体见官网“https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/input_file/#general-namelist-variables”中“PBRadii”字段。
temperature          = 298.15    # 温度,不用过多赘述,这个跟你跑动力学时,保持一致即可。
gmx_path             = ""   # 这个地方,我常会看见有网友去进行定义,其实这里不需要,如果你是使用的ubuntu系统,只要你在bashrc中添加了gromacs的环境变量,那么这个地方空着不写,程序会自动去检查的系统gromacs版本并使用的。
igb         = 8    # 这个地方,根据大家的选择,官网默认用的5 如果用的5 那么记得把PBRadii 改成3,这个地方我习惯性使用8,具体哪个好哪个差,我判别不了。
intdiel              = 5                  #内部介电常数,我一般写的5,因为我平时算核酸和小分子体系比较都,因为核酸的带电性质。
extdiel              = 78.5         #  外部介电常数,一般就默认,78.5
saltcon   = 0.15   #  盐浓度,这个就跟你动力学模拟时一致吧,基本上要么为0,要么为0.15,因为现在动力学大部分基本都是按照0.15生理条件在设置。
idecomp   = 2      #  残基能量分解,这里我习惯用2 将每一个残基都进行分解到1-4 EEL added to EEL and 1-4 VDW added to VDW potential terms,具体看个,只是分解的不同项归到哪个类别里边。“https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/input_file/#decomp-namelist-variables
dec_verbose          = 3      #    这里也是看个人,因为我有时候会去看Complex, Receptor, Ligand,的各项值的分解,以及主链和侧链对能量的贡献,因此我会选择3。
print_res            = "within 1000"        #  这里,很多伙伴会写6或者5,有或者更小,我一般是选择尽可能的大,这样程序会自动去判断你受体与配体之间多远的距离的残基,去做能量分解,写的越大,基本上会把你体系中,每一个残基都进行考虑,这个地方,其实,建议考虑所有残基,通常,无限远的残基,结合自由能分解出来,也是0,这里不会增加计算的时间,这里只是做统计。因为你写的小了,你也不能完全保证,在整个轨迹中,哪些残基之间是保持在这些范围内的,因为这里在分解的时候,是根据你提供的初始结构去判断的,但你也不能保证初始结构按照within 6或者更短判断出来的残基在动力学过程中,是否有超出6或者其他值,也有可能在轨迹后期,有其它残基距离在6之内,但你在提供做残基分解的时候,最开始没有考虑到这一残基对,这样就不会分解到此残基上。索性,这里就写很大,尽肯能考虑所有残基。


(3)具体实现

          假设你已经跑完某个体系的动力学模拟。备注:以下动力学代码,来自sob老师培训班中,学习后,总结的。


         1)首先对md结束的轨迹进行周期性矫正
  1. gmx trjconv -s md_0_1.tpr -f md_0_1.xtc -o md1.xtc -pbc nojump -n index.ndx            
复制代码
        在选择的时候,选择自己index.ndx中,定义的复合物的那个组,如果没有建立组,就建一个,并命名为complex。这个时候得到的md1.xtc中就只包含了你的复合物分子,像水和离子是不存在的。周期性这里,其实,你选择的什么组 输出的组里边就只含有什么。

         2)做平动与转动的消除
  1. gmx trjconv -f md1.xtc -s md_0_1.tpr -fit rot+trans -o fit.xtc -n index.ndx
复制代码
      在选择的时候,两次均选择complex组,即受体和配体在一起的组。得到的fit.xtc就是一个比较干净的没有水和离子,做完周期性矫正和平动与转动消除的轨迹,符合gmx_MMPBSA计算对轨迹的要求。
      
         3) 新建一个文件夹“energy”(名字自定义),将相应的mmpbsa.in文件拷贝进去;并修改其中的力场,温度,离子浓度,内部介电常数
          注意1:“蛋白-蛋白”体系,你需要将mmpbsa.in文件中的forcefields          = "leaprc.DNA.bsc1,leaprc.gaff2"的力场改为自己md运行时所用的力场,intdiel = 1,内部介电常数改为1。由于我跑蛋白体系,力场一般都会用amber14sb,所以这里提供一个“蛋白-蛋白”体系,我常用的参数文件: (, 下载次数 Times of downloads: 148)
          注意2:“蛋白-小分子”体系,直接提供参数文件了,改动主要是力场的写法。 (, 下载次数 Times of downloads: 275)
          注意3:“蛋白-核酸”体系,核酸我一般会用bsc1那个力场,由于我们经常做适配体(含有单链核酸的体系,我曾试过解析的晶体结构,bsc1,OL15,以及OL3等,柑橘bsc1在多个适配体晶体结构,模拟效果较佳) (, 下载次数 Times of downloads: 45)
          注意4:“核酸-小分子”体系,内部介电常数改成5。 (, 下载次数 Times of downloads: 35)

         4) gmx_MMPBSA运行
若你用env.file成功且正确安装,那么你应该也正确安装了MPI并行化程序,这样就可以直接用下边的命令:
  1. mpirun --allow-run-as-root --oversubscribe -np 64 gmx_MMPBSA MPI -O -i mmpbsa.in -cs ../md_0_1.tpr -ct ../fit.xtc -ci ../index.ndx -cg 1 12 -cp ../topol.top -o FINAL_RESULTS_MMPBSA.dat -eo FINAL_RESULTS_MMPBSA.csv
复制代码
             --allow-run-as-root:这个参数,是由于我使用的是root用户,不加这个就会报错。
              --oversubscribe:   这个命令,没记错应该是我当时报超线程那个错误,加了这个就不报错了。
              -np 64    :这里是系统中的CPU核心数,这里的数字一定要小于你轨迹中的帧数,倘若-np后边的值大于你轨迹中的帧数也会报错,如果报这种错,那就把-np降一降。
              -cg 1 12    :这里是index.ndx中,你受体,配体所在的组号。这里也是与forcefields          = "leaprc.DNA.bsc1,leaprc.gaff2"字段对应的,先写受体的,再写配体的。

              -nogui  :    如果你在命令上加上这个参数,代表你只进行计算,不自动调用gmx_MMPBSA_ana做图形化的数据可视化分析。  后续可以手动可视化分析,调用gmx_MMPBSA_ana。直接运行就行了

注意:由于我是把gmx_MMPBSA写到了bashrc中,所以就可以直接调用,如果你们严格按照env.file安装的,那你应该要先激活环境
  1. conda activate gmxMMPBSA
复制代码

所有的运行就到这里结束了!

总结:此程序对于gromaca用户真的很有好,大家总是容易报错,主要原因还是没有好好的看官网的介绍,其实此程序官网写的是真的非常好,该做的提醒都写到了,只是大家没有仔细认真的去看完,导致处处碰壁报错。


目前只是基于此程序做了MMGBSA模型的结合自由能计算,正如题目所写,后期空闲时,再来总结MMPBSA,以及IE,3D-RISM,还有ALA突变给总结出来。至于本贴提到的一些参数,也仅仅是一个初探,具体设置为多少,没有一个特好的标准,如比:内部介电常数,在不同体系,可能就不太一样。

结语:祝大家工作顺利,科研畅通。祝计算化学公社千千万万同仁,一帆风顺!



作者
Author:
ccc.    时间: 2025-5-21 11:23
你好,请问gromacs用gromos54a7力场跑的结果能用gmx_MMPBSA计算结合自由能吗
作者
Author:
jackshoulder    时间: 2025-5-21 14:30
ccc. 发表于 2025-5-21 11:23
你好,请问gromacs用gromos54a7力场跑的结果能用gmx_MMPBSA计算结合自由能吗

54a7这个力场应该是不得行的,你如果跑的是蛋白-小分子体系,其实建议你动力学将力场换成amber系列的,14sb或者19sb这样也比较认可一些。54a7力场可能不是很流行。

如果投机取巧一些呢,你也可以直接用上述提供的蛋白-小分子的mmpbsa.in里边的力场直接进行结合自由能计算,但这不是很严苛
作者
Author:
ccc.    时间: 2025-5-21 16:31
jackshoulder 发表于 2025-5-21 14:30
54a7这个力场应该是不得行的,你如果跑的是蛋白-小分子体系,其实建议你动力学将力场换成amber系列的,14 ...

我尝试过直接计算,但是会报错。请问你使用过g_mmpbsa计算结合能吗?是否支持gromos力场?

作者
Author:
jackshoulder    时间: 2025-5-21 17:21
ccc. 发表于 2025-5-21 16:31
我尝试过直接计算,但是会报错。请问你使用过g_mmpbsa计算结合能吗?是否支持gromos力场?

g_mmpbsa不用,计算速度慢的很,你说报错,具体报错内容,不说明,怎么解答。你要用gmx_MMPBSA程序跑,请严格按照我上述的方法进行。若报错,将内容贴上来看看。
作者
Author:
UPL_JUN    时间: 2025-5-28 22:33
感谢楼主,还想请教两个问题:
1.“mpirun detected that one or more processes exited with non-zero states”这个报错楼主有遇到过吗?这个报错会导致无法我使用mpirun -np * 并行计算(*=1可以,*=2以上不行)
2.mmpbsa.in 文件中,对于我的研究(蛋白在表面吸附)存在力场参数  forcefields     =  "蛋白/无机分子"的情况,,无机分子的力场该如何确定?因为在MD生产中无机分子中的原子力场参数是我自行拟合到.top 和 .itp中的,但我使用 forcefields  =  "oldff/leaprc.ff99SB" 依旧能够完成gb计算并得到结果. 按道理leaprc.ff99SB力场应该是不适配无机分子的,还是gmxMMPBSA在计算时调用了我自行设置的力场参数?
作者
Author:
jackshoulder    时间: 2025-5-29 10:54
UPL_JUN 发表于 2025-5-28 22:33
感谢楼主,还想请教两个问题:
1.“mpirun detected that one or more processes exited with non-zero st ...

针对第一个问题,建议先检测一下系统是否正确按照mpi
第二个问题,如果你的无机分子力场是用sob老师的sobtop调用的gaff或者gaff2力场参数,你可以设置为gaff相关力场.forcefields字段如果不写会报错,目前你写了oldff/leaprc.ff99SB依然能成功运行,根据运行时终端输出内容来判断,是否调用了你设置的力场,你的力场参数会写在命令引用的topol.top里边,我多次使用,终端输出会提示使用topol.top中的参数.

第一个问题,目前没有遇到,你可以问问大模型是什么原因造成,然后尝试解决

作者
Author:
UPL_JUN    时间: 2025-6-11 10:56
UPL_JUN 发表于 2025-5-28 22:33
感谢楼主,还想请教两个问题:
1.“mpirun detected that one or more processes exited with non-zero st ...

借楼标记一下:1.mpirun detected that one or more processes exited with non-zero states ,我系统上的原因是自行安装的mpi #export PATH=/usr/lib64/openmpi/bin:$PATH与conda中的mpi冲突,解决办法是把环境变量中的openmpi注释掉,然后用conda重装gmxMMPBSA环境中的mpi;2.对于力场参数的选择,官网在介绍gmxMMPBSA运行流程时介绍到:"使用 GROMACS 拓扑时,parmed 用于转换拓扑。当研究具有许多单元的复杂系统或包含已独立参数化且未出现在标准力场中的单元的系统时,此方法非常有用。如果使用 Amber 力场,则可以考虑是否使用拓扑。但是,当使用 CHARMM (任何版本) 力场时,拓扑始终是必需的。" 这个意思应该就是在遇到AMBER不支持的参数时可以调用Gromace中使用的拓扑参数。所以,即使我使用了无机原子,依然可以运行。
作者
Author:
jackshoulder    时间: 2025-6-11 16:03
UPL_JUN 发表于 2025-6-11 10:56
借楼标记一下:1.mpirun detected that one or more processes exited with non-zero states ,我系统上 ...

同意当下两个问题的解决方案,尤其是第二个问题很好的补充本贴,赞
作者
Author:
basagazzh    时间: 2025-7-25 09:54
UPL_JUN 发表于 2025-5-28 22:33
感谢楼主,还想请教两个问题:
1.“mpirun detected that one or more processes exited with non-zero st ...

您好,我最近也在做蛋白的表面吸附模拟,我用的是charmm-gui构建的周期性SiO2板,动力学模拟后想用gmxMMPBSA计算结合能,但是SiO2板无法通过trjconv来处理周期边界,想请问您是怎么处理的?
作者
Author:
jackshoulder    时间: 2025-7-28 14:06
basagazzh 发表于 2025-7-25 09:54
您好,我最近也在做蛋白的表面吸附模拟,我用的是charmm-gui构建的周期性SiO2板,动力学模拟后想用gmxMMP ...

你这种体系目前应该是无法通过这个程序算结合自由能的。我目前无法帮你解决

作者
Author:
basagazzh    时间: 2025-7-31 09:08
jackshoulder 发表于 2025-7-28 14:06
你这种体系目前应该是无法通过这个程序算结合自由能的。我目前无法帮你解决

谢谢,我后来找到方法了,主要是周期分子的bond energy项无法计算(会得到*****的值),但bond energy项在计算delta G时是会抵消为0的,所以我是修改了gmxMMPBSA的代码,当bond energy项为非正常值时不报错,就能正常运行。
作者
Author:
samtol    时间: 2025-8-3 22:55
你好,请问gromacs用CHARMM36力场跑的结果能用gmx_MMPBSA计算结合自由能吗?小分子配体(一个单体)的力场选择能够选用提示以外的力场呢?因为AI给出建议受体是CHARMM 36力场最好搭配配体是CGenFF力场
作者
Author:
lry    时间: 2025-8-13 10:20
samtol 发表于 2025-8-3 22:55
你好,请问gromacs用CHARMM36力场跑的结果能用gmx_MMPBSA计算结合自由能吗?小分子配体(一个单体)的力场 ...

同问,请问你算出来了吗
作者
Author:
lele123    时间: 2025-8-15 10:37
请问,楼主为什么要消除水和离子,是为了缩短计算时间吗?消除水和离子,会不会对计算结果有影响呢?

我看gmx_MMPBSA的官方文件,只要求消除周期性和平动/转动,而且输出的组是0 (system),也就是轨迹中是包含水和离子的
作者
Author:
wbqdssl    时间: 2025-8-15 13:05
lele123 发表于 2025-8-15 10:37
请问,楼主为什么要消除水和离子,是为了缩短计算时间吗?消除水和离子,会不会对计算结果有影响呢?

我 ...

这不是写了要去除水和离子吗?
(, 下载次数 Times of downloads: 8)

作者
Author:
lele123    时间: 2025-8-15 13:54
wbqdssl 发表于 2025-8-15 13:05
这不是写了要去除水和离子吗?

你说的那个是gmx_MMPBSA运行以后的步骤,运行之前准备的轨迹文件好像是不需要去除的(下图是运行前的准备)
(, 下载次数 Times of downloads: 8)

不过谢谢你解答了我的问题,这样看的话,运行之前去除轨迹中的水和离子应该是不影响计算结果的。
而且我很久之前就有一个问题,gmx_MMPBSA能不能计算金属离子和其他组分(比如金属蛋白酶)的结合能。如果gmx_MMPBSA运行之后会去除水和离子,那应该是不能的。

作者
Author:
jackshoulder    时间: 2025-8-15 15:46
lele123 发表于 2025-8-15 10:37
请问,楼主为什么要消除水和离子,是为了缩短计算时间吗?消除水和离子,会不会对计算结果有影响呢?

我 ...

你在看看官网,他们提到了,干净的轨迹,即使不是干净的轨迹,也没有问题,因为在计算的时候,只会与你命令中的两个组有关系,比如,你计算的时17 18之间的结合自由能,就只会算着两个组之间的,与其他分子没有任何关系,所以一般是得到一个“干净的轨迹”(是指只包含有你要计算的两个组的轨迹)。
作者
Author:
jackshoulder    时间: 2025-8-15 15:51
lele123 发表于 2025-8-15 13:54
你说的那个是gmx_MMPBSA运行以后的步骤,运行之前准备的轨迹文件好像是不需要去除的(下图是运行前的准备 ...

金属蛋白酶这一类的结合自由能,这个程序不太好处理,但你可以尝试将蛋白和你的金属编为一个组,这样你在保存轨迹的时候,就只保存这几个组含有的轨迹。在创建组的时候,先将你要计算的金属原子编为一个组,然后你要计算的另一个编为一个组,然后将这两个组合并为一个“complex”组,这样在保存轨迹的时候,你就只保存这个complex就行了
作者
Author:
lele123    时间: 2025-8-15 18:14
本帖最后由 lele123 于 2025-8-15 18:19 编辑
jackshoulder 发表于 2025-8-15 15:51
金属蛋白酶这一类的结合自由能,这个程序不太好处理,但你可以尝试将蛋白和你的金属编为一个组,这样你在 ...

谢谢楼主,楼上帮我解答了关于轨迹的疑问。

关于金属离子与其他组分的结合能,按照gmx_MMPBSA运行的步骤来看(在生成拓扑文件时,会删除水和离子),应该是不能计算离子与其他组分的结合能。
不知道这样理解对不对,还是说如果把离子作为受体或者配体时,会有例外(不被删除)


作者
Author:
徐永红    时间: 2025-9-3 20:09
请问楼主,index.ndx怎么得到的,是gmx make_ndx -f md_0_1.tpr -o index.ndx吗

作者
Author:
jackshoulder    时间: 2025-9-4 11:34
徐永红 发表于 2025-9-3 20:09
请问楼主,index.ndx怎么得到的,是gmx make_ndx -f md_0_1.tpr -o index.ndx吗

就是在gromacs中建立索引,gmx make_ndx -f em.gro -o index.ndx     这里em.gro也可以是nvt的,也可以是npt的,或者md产生的gro
作者
Author:
Soulmate    时间: 2025-9-18 16:07
首先,感谢楼主的分享,写得真好,很详细,帮助很大。
鄙人下载了楼主总结的蛋白质-小分子的mmpbsa.in参数文件,发现其中  print_res  = "within 1000"     # Which residues to print decomposition data for
处的1000似乎设置得不合理,官网默认值是6,查了一下资料,这个参数给出的是距离5埃米范围内的残基对,刚好覆盖了结合界面,1000是不是太大了点。
作者
Author:
KanbeKotori    时间: 2025-9-18 16:41
Soulmate 发表于 2025-9-18 16:07
首先,感谢楼主的分享,写得真好,很详细,帮助很大。
鄙人下载了楼主总结的蛋白质-小分子的mmpbsa.in参数 ...

print_res的大小对计算耗时影响非常小,我记得也有默认的-0.5 Kcal/mol可作为相互作用的筛选阈值。他这主要考虑的是相对于参考结构中原本不在print_res范围内的残基在轨迹后期进入该范围内的情况。这是有可能发生的。
作者
Author:
jackshoulder    时间: 2025-9-18 20:20
Soulmate 发表于 2025-9-18 16:07
首先,感谢楼主的分享,写得真好,很详细,帮助很大。
鄙人下载了楼主总结的蛋白质-小分子的mmpbsa.in参数 ...

这是防止你给的初始构象的在经过100ns或者更多ns的模拟,结合位点发生了漂移,相较于初始构象发生了很大的变化。这种情况,在有些结合位点不牢固的情况下,很常见。这是一个以防万一的做法,并且这个不管写多大,是不会影响计算速度的。
作者
Author:
wang011127    时间: 2025-10-16 21:10
楼主您好,我尝试了许多不同的安装方法,都出现了各种各样的报错,想试试您的方法,所以想把我之前安装的一些东西完全删掉,请问您有什么好的方案嘛
作者
Author:
wang011127    时间: 2025-10-18 12:08
  1. [INFO   ] Building Normal Complex Amber topology...
  2.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/bin/gmx_MMPBSA", line 7, in <module>
  3.     sys.exit(gmxmmpbsa())
  4.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/lib/python3.10/site-packages/GMXMMPBSA/app.py", line 98, in gmxmmpbsa
  5.     app.make_prmtops()
  6.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/lib/python3.10/site-packages/GMXMMPBSA/main.py", line 681, in make_prmtops
  7.     self.FILES.mutant_receptor_prmtop, self.FILES.mutant_ligand_prmtop) = maketop.buildTopology()
  8.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/lib/python3.10/site-packages/GMXMMPBSA/make_top.py", line 125, in buildTopology
  9.     tops = self.gmxtop2prmtop()
  10.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/lib/python3.10/site-packages/GMXMMPBSA/make_top.py", line 566, in gmxtop2prmtop
  11.     com_top = self.cleantop(self.FILES.complex_top, self.indexes['COM']['COM'])
  12.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/lib/python3.10/site-packages/GMXMMPBSA/make_top.py", line 853, in cleantop
  13.     rtemp_top = parmed.gromacs.GromacsTopologyFile(temp_top.name)
  14.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/lib/python3.10/site-packages/parmed/gromacs/gromacstop.py", line 346, in __init__
  15.     self.read(fname, defines, parametrize)
  16.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/lib/python3.10/site-packages/parmed/gromacs/gromacstop.py", line 383, in read
  17.     for line in f:
  18.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/lib/python3.10/site-packages/parmed/gromacs/_gromacsfile.py", line 42, in __iter__
  19.     for line in self._handle:
  20.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/lib/python3.10/site-packages/parmed/gromacs/_cpp.py", line 174, in __iter__
  21.     self._ppcmdmap[cmd](self, args)
  22.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/lib/python3.10/site-packages/parmed/gromacs/_cpp.py", line 29, in wrapper
  23.     return func(self, args)
  24.   File "/home/wsy/miniconda3/envs/gmxMMPBSA/lib/python3.10/site-packages/parmed/gromacs/_cpp.py", line 283, in _pp_include
  25.     raise PreProcessorError(f'Could not find {includefile}')
  26. PreProcessorError: Could not find amber14sb_parmbsc1.ff/forcefield.itp
  27. Error occurred on rank 0.
  28. Exiting. All files have been retained.
  29. --------------------------------------------------------------------------
  30. MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD
  31. with errorcode 1.

  32. NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
  33. You may or may not see output from other processes, depending on
  34. exactly when Open MPI kills them.
复制代码


出现了这样的报错,请问有什么解决方案呢?
作者
Author:
jackshoulder    时间: 2025-10-18 18:36
wang011127 发表于 2025-10-18 12:08
出现了这样的报错,请问有什么解决方案呢?

第26行,提示你没有amber14sb_parmbsc1.ff/forcefield.itp力场,这个力场是根据你安装gromacs时,gromacs安装的文件夹中的力场文件决定的。根据这个提示报错,我认为你应该是没有正确将这个力场添加到gromacs的力场库中。力场安装库一般是在“share→gromacs→top”中。这是其一,其二是,还有一种可能是你动力学根本就没有用到这个力场进行动力学模拟,如果你没有用这个力场进行动力学模拟,却要用这个力场进行结合自由能计算,先抛开结果可靠性不谈,你这其实已经是前后力场不一致了,计算不规范。最终建议:先核对你动力学模拟是用的什么力场,然后再在计算结合自由能时改成相应力场,前后保持一致。
作者
Author:
jackshoulder    时间: 2025-10-18 18:37
wang011127 发表于 2025-10-18 12:08
出现了这样的报错,请问有什么解决方案呢?

主要原因是因为你的动力学文件中的topol中引用了amber14sb_parmbsc1.ff/forcefield.itp相关的参数,而你算结合自由能时又要用到这个topol,所以导致报错。
作者
Author:
jackshoulder    时间: 2025-10-18 18:40
wang011127 发表于 2025-10-16 21:10
楼主您好,我尝试了许多不同的安装方法,都出现了各种各样的报错,想试试您的方法,所以想把我之前安装的一 ...

你如果是借助conda创建的env的独立环境,你直接利用conda删除现有环境就行了。然后重新安装,重新创建新的env环境即可了。
作者
Author:
wang011127    时间: 2025-10-18 20:16
本帖最后由 wang011127 于 2025-10-18 21:55 编辑
jackshoulder 发表于 2025-10-18 18:36
第26行,提示你没有amber14sb_parmbsc1.ff/forcefield.itp力场,这个力场是根据你安装gromacs时,gromacs ...

但是我动力学跑完了呀,这不就说明不在conda环境里的gromacs是可以用这个力场的,而且当时我是把这个力场手动添加进去的。conda里面我是新配置了一个env库(我也不大懂计算机,我的理解是一个环境会配置属于这个环境需要的东西,出了这个环境就用不了了),我应该把那个立场文件也放在这个环境里面吗?虚心求教

已解决:按照楼主的方法 相当于工作目录实际上在此文件夹的上级文件夹,因此需要把立场文件.ff放在上级目录,也就是topol.top所在的目录,而不是这个energy目录

作者
Author:
jackshoulder    时间: 2025-10-19 16:21
wang011127 发表于 2025-10-18 20:16
但是我动力学跑完了呀,这不就说明不在conda环境里的gromacs是可以用这个力场的,而且当时我是把这个力场 ...

只要能解决就好
作者
Author:
wang011127    时间: 2025-10-20 14:22
jackshoulder 发表于 2025-10-19 16:21
只要能解决就好

anyway 感谢
作者
Author:
prolifery    时间: 2025-12-12 10:51
[INFO   ] Building Normal Complex Amber topology...
  File "/public/software/anaconda3/envs/gmxMMPBSA/bin/gmx_MMPBSA", line 8, in <module>
    sys.exit(gmxmmpbsa())
  File "/public/software/anaconda3/envs/gmxMMPBSA/lib/python3.9/site-packages/GMXMMPBSA/app.py", line 98, in gmxmmpbsa
    app.make_prmtops()
  File "/public/software/anaconda3/envs/gmxMMPBSA/lib/python3.9/site-packages/GMXMMPBSA/main.py", line 687, in make_prmtops
    self.FILES.mutant_receptor_prmtop, self.FILES.mutant_ligand_prmtop) = maketop.buildTopology()
  File "/public/software/anaconda3/envs/gmxMMPBSA/lib/python3.9/site-packages/GMXMMPBSA/make_top.py", line 125, in buildTopology
    tops = self.gmxtop2prmtop()
  File "/public/software/anaconda3/envs/gmxMMPBSA/lib/python3.9/site-packages/GMXMMPBSA/make_top.py", line 534, in gmxtop2prmtop
    com_top = self.cleantop(self.FILES.complex_top, self.indexes['COM']['COM'])
  File "/public/software/anaconda3/envs/gmxMMPBSA/lib/python3.9/site-packages/GMXMMPBSA/make_top.py", line 822, in cleantop
    rtemp_top = parmed.gromacs.GromacsTopologyFile(ttp_file.as_posix())
  File "/public/software/anaconda3/envs/gmxMMPBSA/lib/python3.9/site-packages/parmed/gromacs/gromacstop.py", line 346, in __init__
    self.read(fname, defines, parametrize)
  File "/public/software/anaconda3/envs/gmxMMPBSA/lib/python3.9/site-packages/parmed/gromacs/gromacstop.py", line 497, in read
    key, knd, t, replace = self._parse_dihedraltypes(line)
  File "/public/software/anaconda3/envs/gmxMMPBSA/lib/python3.9/site-packages/parmed/gromacs/gromacstop.py", line 928, in _parse_dihedraltypes
    per = int(words[si+3])
ValueError: invalid literal for int() with base 10: '3.0'

这是什么情况?
作者
Author:
jackshoulder    时间: 2025-12-13 19:02
prolifery 发表于 2025-12-12 10:51
Building Normal Complex Amber topology...
  File "/public/software/anaconda3/envs/gmxMMPBSA/bin/gm ...

建议你将此问题,复制给大模型,找具体解决办法。目前我能给的帮助如下:这个问题,应该是你topol文件有问题,但具体问题出在哪里,我不清楚,由于我无法查看你所运行的问题。应该是topol文件或者是topol中引用的某些文件参数有问题。极有可能是小分子的top出现了问题。如果你小分子top是按照sob老师的方法生成的应该不会出问题。其次,如果你的小分子的配体是非常规的,比如那种奇奇怪怪的二面角等参数,非常容易报错。
作者
Author:
新人计算    时间: 2025-12-17 10:55
楼主您好 最近刚好在了解这个gmxMMPBSA 我有一个问题想请教一下您 我的结构是一个环状DNA 然后环状的中心存在几个金属离子  那么我能不能通过gmxMMPBSA来计算金属离子与环状DNA的结合能呢
作者
Author:
jackshoulder    时间: 2025-12-23 15:31
新人计算 发表于 2025-12-17 10:55
楼主您好 最近刚好在了解这个gmxMMPBSA 我有一个问题想请教一下您 我的结构是一个环状DNA 然后环状的中心存 ...

这个,无法严格计算,gmx_MMPBSA程序计算你当前的这个体系可能会有些困难,但你可以尝试,将环状DNA一个组,金属离子一个组,然后进行计算,但这样计算的严谨性与准确性无法保证
作者
Author:
Loading0760    时间: 2025-12-23 16:31
新人计算 发表于 2025-12-17 10:55
楼主您好 最近刚好在了解这个gmxMMPBSA 我有一个问题想请教一下您 我的结构是一个环状DNA 然后环状的中心存 ...

肯定不合适的,金属和DNA的作用类型不适合用PB或者GB模型描述。
作者
Author:
新人计算    时间: 2025-12-29 17:28
jackshoulder 发表于 2025-12-23 15:31
这个,无法严格计算,gmx_MMPBSA程序计算你当前的这个体系可能会有些困难,但你可以尝试,将环状DNA一个 ...

好的 非常感谢您的回复 不行我就试试别的方法了
作者
Author:
新人计算    时间: 2025-12-29 17:29
Loading0760 发表于 2025-12-23 16:31
肯定不合适的,金属和DNA的作用类型不适合用PB或者GB模型描述。

感谢您的回复 是的 前段时间尝试的时候  一直给我报错显示不支持金属离子存在
作者
Author:
科研小白0126    时间: 2026-1-14 18:25
本帖最后由 科研小白0126 于 2026-1-14 18:29 编辑
UPL_JUN 发表于 2025-6-11 10:56
借楼标记一下:1.mpirun detected that one or more processes exited with non-zero states ,我系统上 ...

老师我的给体和受体都是有sobtop软件构建的itp,里面都是gaff力场,那我在mmpbsa.in这么写 forcefields          = "leaprc.gaff/leaprc.gaff" 对吗,还是只要写一个 forcefields          = "leaprc.gaff",这里的leaprc是加载脚本的意思吗
作者
Author:
keeper14335    时间: 3 day ago
楼主您好,请问我计算的eel为正值是什么原因呢?我是蛋白-蛋白对接后用gmx进行动力学模拟,然后利用gmx_mmpbsa进行计算,mmpbsa.in文件用的您的,计算帧数选的模拟的最后1ns,是否因为力场不匹配?因为我模拟时用的力场为amber99sb-ildn,而在官方手册上寻找力场参数时发现其针对“蛋白-蛋白”体系提供的只有leaprc.protein.ff19SB和leaprc.protein.ff14SB两种力场,没有我需要的amber99sb-ildn力场,这种情况该怎么办呢?
作者
Author:
jackshoulder    时间: 前天 22:01
科研小白0126 发表于 2026-1-14 18:25
老师我的给体和受体都是有sobtop软件构建的itp,里面都是gaff力场,那我在mmpbsa.in这么写 forcefields   ...

两个都要写哦,因为我们在计算的时候,命令里边会写入受体和配体的组,如:1 2,  受体和配体所用的参数都得明确的在in文件中进行定义,在计算的时候才会被载入
作者
Author:
jackshoulder    时间: 前天 22:09
keeper14335 发表于 2026-1-20 17:29
楼主您好,请问我计算的eel为正值是什么原因呢?我是蛋白-蛋白对接后用gmx进行动力学模拟,然后利用gmx_mmp ...

对于amber99sb的写法,官网是有的哦,链接如下:https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/input_file/               在页面中检索“Forcefields for Protein/Nucleic Acids”就会看到了,这里提供了较老版本的写法。     计算出来eel为正并不奇怪,可能的原因,两个蛋白相互作用上,其主要由范德华驱动,而不是静电相互作用。如果你想改善这一点,你可以增加计算结合自由能的帧数,你目前是取的模拟最后1ns,应该只有100帧,也不排除计算的样本量不足导致,你可以尝试将最后10ns,或者全段轨迹都进行计算,提高计算样本的量,来弥补偶然性。希望解答了你的疑惑
作者
Author:
keeper14335    时间: 6 hour ago
jackshoulder 发表于 2026-1-21 22:09
对于amber99sb的写法,官网是有的哦,链接如下:https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/i ...

感谢老师答疑!我已按照您提供的办法找到了amber99sb-ildn力场在mmpbsa.in文件中的写法,目前正在计算最后10ns的结合自由能,并且把间隔帧数改成了1,之前一直用的10,希望有效果吧!如果计算模拟全程的话,这个成本有点太夸张了,我模拟了200ns,毕竟是在超算平台计算的,还是要考虑一下成本问题。至于EEL的正负问题,因为目前我看了两个文献中他们EEL都为负值,所以才怀疑是自己计算时哪里出现问题。
作者
Author:
wbqdssl    时间: 3 hour ago
keeper14335 发表于 2026-1-23 16:04
感谢老师答疑!我已按照您提供的办法找到了amber99sb-ildn力场在mmpbsa.in文件中的写法,目前正在计算最 ...

一般来说是算RMSD平稳之后那段轨迹(间隔取样),如果模拟了200ns但只取最后1ns计算,那有点搞笑,可能会被审稿人批。
此外,MM-PBSA主要靠CPU算,不靠GPU。你可以考虑开纯CPU的机器。




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3