230427
当前位置: 首页   >  组内活动   >  OpenMM
OpenMM
发布时间:2021-05-11

简介

openmm是用于分子模拟的高性能工具包。 该代码是开源,并在MIT和LGPL license下。是 Omnia(预测生物分子模拟的工具套件)的一部分。 

http://openmm.org/

Install

conda install -c conda-forge openmm
# 如果特殊的cuda版本号
conda install -c conda-forge openmm cudatoolkit==10.0
#ps:支持gpu
#如果要在GPU上运行OpenMM,请确保已安装驱动程序。
#如果是Nvidia GPU,请从https://www.nvidia.com/cn/download/index.aspx下载最新的驱动程序。
#如果是AMD GPU,并且正在使用Linux或Windows,请从https://support.amd.com下载最新版本的驱动程序。
#检查openmm是否已经安装
python -m simtk.testInstallation

# out
OpenMM Version: 7.4.2
Git Revision: dc9d188939ad630d240e89806b185061f7cd661a

There are 3 Platforms available:

1 Reference - Successfully computed forces
2 CPU - Successfully computed forces
3 OpenCL - Successfully computed forces

Median difference in forces between platforms:

Reference vs. CPU: 6.30679e-06
Reference vs. OpenCL: 6.73408e-06
CPU vs. OpenCL: 8.89223e-07

All differences are within tolerance.

Run Examples

  • 加载一个PDB文件
  • 使用Amber14力场和TIP3P-FB水模型对其进行参数化
  • 将其能量最小化
  • 使用Langevin积分器对其进行10,000步模拟,40ps
  • 并将快照保存到每1000个时间步的PDB文件称为output.pdb。
#所用蛋白为1stp
from pdbfixer import PDBFixer
from simtk.openmm.app.pdbfile import PDBFile
import os
def fix_pdb(pdb_id):
    path = os.getcwd()
    if len(pdb_id) != 4:
        print("Creating PDBFixer...")
        fixer = PDBFixer(pdb_id)
        print("Finding missing residues...")
        fixer.findMissingResidues()

        chains = list(fixer.topology.chains())
        keys = fixer.missingResidues.keys()
        for key in list(keys):
            chain = chains[key[0]]
            if key[1] == 0 or key[1] == len(list(chain.residues())):
                print("ok")
                del fixer.missingResidues[key]

        print("Finding nonstandard residues...")
        fixer.findNonstandardResidues()
        print("Replacing nonstandard residues...")
        fixer.replaceNonstandardResidues()
        print("Removing heterogens...")
        fixer.removeHeterogens(keepWater=True)

        print("Finding missing atoms...")
        fixer.findMissingAtoms()
        print("Adding missing atoms...")
        fixer.addMissingAtoms()
        print("Adding missing hydrogens...")
        fixer.addMissingHydrogens(7)
        print("Writing PDB file...")

        PDBFile.writeFile(
            fixer.topology,
            fixer.positions,
            open(os.path.join(path, "%s_fixed_pH_%s.pdb" % (pdb_id.split('.')[0], 7)),
                 "w"),
            keepIds=True)
        return "%s_fixed_pH_%s.pdb" % (pdb_id.split('.')[0], 7)
fix_pdb('1stp.pdb')
from simtk.openmm.app import *
from simtk.openmm import *
from simtk.unit import *
from sys import stdout

#倒入pdb文件,同样openmm也支持PDBx/mmCIF格式
pdb = app.PDBFile('1stp_fixed_pH_7.pdb')
#确定使用的力场,Amber14:amber14-all.xml;TIP3P-FB water model:amber14/tip3pfb.xml
#使用XML files 来定义标准力场
#可用力场从:http://docs.openmm.org/latest/userguide/application.html#force-fields 进行查看
forcefield = ForceField('amber14-all.xml', 'amber14/tip3pfb.xml')
#将力场与分子拓扑文件相组合来创建一个对此模拟系统的完整的数学描述
#一些options:
# 将粒子网格Ewald用于长距离静电相互作用(nonbondedMethod = PME)
# 设置1nm截止值用于直接空间相互作用(nonbondedCutoff = 1 *纳米)
# 并约束所有涉及氢原子的键的长度(约束条件 = HBonds)。
system = forcefield.createSystem(pdb.topology, nonbondedMethod=PME,nonbondedCutoff=1*nanometer, constraints=HBonds)
# 朗之万动力学 ( Langevin Dynamics ) ,模拟温度(300 K),摩擦系数(1 ps-1)和步长(0.004 ps)
# 还可以使用许多其他集成方法。 例如,如果要在恒定能量而不是恒定温度下模拟系统,则可以使用VerletIntegrator。
integrator = LangevinIntegrator(300*kelvin, 1/picosecond, 0.004*picoseconds)
# 将topology,system,integrator进行组合,创建一个Simulation对象,并将其分配给一个名为Simulation的变量。
#模拟对象管理运行模拟所涉及的所有过程
simulation = Simulation(pdb.topology, system, integrator)
#指定了用于模拟的初始原子位置。
simulation.context.setPositions(pdb.positions)
#进行局部能量最小化,建议在模拟开始前进行,减少应力
simulation.minimizeEnergy()
#创建一个“报告程序”以在模拟过程中输出结果, PDBReporter将结构写入PDB文件。
#指定输出文件为output.pdb,并应每1000步写入一个结构。
simulation.reporters.append(PDBReporter('output.pdb', 1000))
#在模拟运行时获取常规状态报告,可以监视其进度
#添加另一个报告程序,以每1000个时间步长打印一些基本信息:当前步长索引,系统的势能和温度。
#将stdout(而不用引号)指定为输出文件,这意味着将结果在终端显示。
#也可以给文件名(用引号引起来),将信息写到文件中。
simulation.reporters.append(StateDataReporter(stdout, 1000, step=True,potentialEnergy=True, temperature=True))
#开始模拟
simulation.step(10000)
#result

#"Step","Potential Energy (kJ/mole)","Temperature (K)"
1000,-10439.484774531746,299.56325970834155
2000,-10663.160555781746,298.4476284317964
3000,-11088.430087031746,296.83560819072136
4000,-10801.258212031746,296.276886377841
5000,-10968.391024531746,302.23009618402386
6000,-11008.289462031746,295.76176920559607
7000,-10883.461337031746,302.16333057574894
8000,-11009.863680781746,312.57213252166844
9000,-11113.148837031746,307.5580071086222
10000,-11322.344149531746,301.048477900256
#运行完成之后,可以使用任何可视化的程序对结果进行分析(VMD, PyMol, AmberTools, etc.)

#同样oenmm也支持AMBER,Gromacs,CHARMM文件等等,具体可见:http://docs.openmm.org/latest/userguide/application.html#installing-openmm



OpenMM.No.2.可视化界面

创建openmm脚本的一种方法是从上面给出的示例开始,并对其进行自定义以满足实际需求,但是还有一个更简单的选择。

OpenMM-Setup是一个图形应用程序,可引导完成加载输入文件和设置选项的整个过程。 然后,它会生成一个完整的脚本,甚至可以直接运行。

安装

conda install -c conda-forge openmm-setup
#启动
openmm-setup

它将自动在Web浏览器中打开一个显示用户界面的窗口。

OpenMM-Setup不仅仅是脚本生成器。 它可以解决输入文件中的问题,添加缺失的原子,构建膜和water box等。 这是快速完成所有必要准备和设置的非常简单的方法。

openmm强烈建议所有新手到专家使用OpenMM-setup。

我这里使用的是chrome

比较容易使用,会单独出一章

模拟参数

platforms

创建模拟时,可以选择要使用的平台。

OpenMM包括四个平台:Reference,CPU,CUDA和OpenCL。

可以通过三种方式选择平台:

1.默认情况下,OpenMM将尝试选择最快的可用平台。 通常,它的选择是比较合理的,但是有时需要自定义。

2.或者,可以将OPENMMDEFAULTPLATFORM环境变量设置为要使用的平台的名称。 这将覆盖默认选项。

3.最后,在创建模拟时,可以在脚本中显式指定Platform对象。

以下各行指定使用CUDA平台:

#platform参数应为下列:
platform = Platform.getPlatformByName('CPU')simulation = Simulation(prmtop.topology, system, integrator, platform)您还可以自定义特定平台的属性,以进行计算。 
有关每个平台支持的属性的详细信息,请参见Chapter 10
 例如,以下代码指定使用两个GPU(CUDA:01)之间进行并行处理工作,以双精度执行所有计算:
platform = Platform.getPlatformByName('CUDA')properties = {'DeviceIndex': '0,1', 'Precision': 'double'}simulation = Simulation(prmtop.topology, system, integrator, platform, properties)

力场

创建力场时,可以指定一个或多个XML文件,使用加载力场定义。

通常,会有一个文件定义主要力场,可能还有另一个文件定义水模型(隐式或显式)。

例如:

forcefield = ForceField('amber14-all.xml', 'amber14/tip3pfb.xml')

在某些情况下,一个XML文件包含其余的力场文件。

例如,amber14-all.xml实际上只是加载几个不同文件的快捷方式,这些文件共同构成了AMBER14力场。

如果需要对加载哪些参数进行更精细的控制,则可以单独指定组件文件。

请注意,某些力场和水模型包括“额外粒子”,例如 lone pairs or Drude particles。

示例包括CHARMM极化力场以及所有4或5点水模型。 要使用这些力场,必须首先将多余的粒子添加到 拓扑 中。

下面描述的力场是与OpenMM捆绑在一起的力场。

其他力场可从https://github.com/choderalab/openmm-forcefields 在线获得。

Amber14

Amber14 力场由各种文件组成,这些文件定义了蛋白质,DNA,RNA,脂质,水和离子的参数。

File

Parameters

amber14/protein.ff14SB.xml

Protein (recommended)

amber14/protein.ff15ipq.xml

Protein (alternative)

amber14/DNA.OL15.xml

DNA (recommended)

amber14/DNA.bsc1.xml

DNA (alternative)

amber14/RNA.OL3.xml

RNA

amber14/lipid17.xml

Lipid

amber14/tip3p.xml

TIP3P water model[2] and ions

amber14/tip3pfb.xml

TIP3P-FB water model[3] and ions

amber14/tip4pew.xml

TIP4P-Ew water model[4] and ions

amber14/tip4pfb.xml

TIP4P-FB water model[3] and ions

amber14/spce.xml

SPC/E water model[5] and ions

为了方便,可以将文件amber14-all.xml用作包含:amber14 / protein.ff14SB.xml,amber14 / DNA.OL15.xml,amber14 / RNA.OL3.xml和amber14 / lipid17.xml的快捷方式。

在大多数情况下,在构建模型时,您只需包含amber14-all.xml,再加上其中一种水模型,例如amber14 / tip3pfb.xml

forcefield = ForceField('amber14-all.xml', 'amber14/tip3pfb.xml')

CHARMM36

CHARMM36 力场提供了蛋白质,DNA,RNA,脂质,碳水化合物,水,离子和各种小分子的参数(有关完整参考资料,请参见此处)。

File

Parameters

charmm36.xml

Protein, DNA, RNA, lipids, carbohydrates, and small molecules

charmm36/water.xml

Default CHARMM water model (a modified version of TIP3P[2]) and ions

charmm36/spce.xml

SPC/E water model[5] and ions

charmm36/tip3p-pme-b.xml

TIP3P-PME-B water model[7] and ions

charmm36/tip3p-pme-f.xml

TIP3P-PME-F water model[7] and ions

charmm36/tip4pew.xml

TIP4P-Ew water model[4] and ions

charmm36/tip4p2005.xml

TIP4P-2005 water model[8] and ions

charmm36/tip5p.xml

TIP5P water model[9] and ions

charmm36/tip5pew.xml

TIP5P-Ew water model[10] and ions

charmm36.xml将除水和离子力场以外的所有xml都捆绑到一个文件中。

在大多数情况下,只需包含该文件,再加上一个水模型,例:charmm36 / water.xml,它指定了默认的CHARMM水模型(TIP3P 的修改版)和离子:

forcefield = ForceField('charmm36.xml', 'charmm36/water.xml')

Tip

•charmm36 /目录中包含的溶剂模型XML文件同时包含水和离子模型,因此,如果错误地指定了tip3p.xml而不是charmm36/water.xml,则可能会引发异常: 系统中缺少离子参数。

•CHARMM广泛使用patches,这些patches会与残基模板自动结合,通过ForceField创建扩展的patches残基模板库。 这意味着修补残基(例如ACE和NME修补末端)必须作为单个残基出现,以便ForceField正确匹配残基模板并应用参数。 由于这些修补的残基不是标准的PDB残基,因此Modeller不知道如何向这些非标准残基中添加氢,并且输入拓扑必须已经包含适当的氢

•如果读取从CHARMM-GUI之类程序处理之后的PDB文件可能会出现问题。某些程序会生成不符合PDB标准的PDB文件,并忽略指定残基(例如半胱氨酸)之间键的CONECT记录,可能导致二硫键的检测和参数分配出现问题。 确保您阅读的文件符合有关键和非标准残基定义的适当标准。 如果使用的是CHARMM-GUI中的文件,则直接加载PSF文件最简单。

AMOEBA

AMOEBA极化力场提供蛋白质,水和离子的参数。

File

Parameters

amoeba2013.xml

AMOEBA 2013[12]

amoeba2013_gk.xml

Generalized Kirkwood solvation model[13] for use with AMOEBA 2013 force field

amoeba2009.xml

AMOEBA 2009[14]. This force field is deprecated. It isrecommended to use AMOEBA 2013 instead.

amoeba2009_gk.xml

Generalized Kirkwood solvation model for use with AMOEBA 2009 force field

Water Models

以下文件定义了流行的水模型。 它们可以与不提供自己的水模型的力场一起使用。 使用Amber14或CHARMM36时,请改用那些力场附带的水文件,因为它们也包含离子参数。

File

Water Model

tip3p.xml

TIP3P water model[2]

tip3pfb.xml

TIP3P-FB water model[3]

tip4pew.xml

TIP4P-Ew water model[4]

tip4pfb.xml

TIP4P-FB water model[3]

tip5p.xml

TIP5P water model[9]

spce.xml

SPC/E water model[5]

swm4ndp.xml

SWM4-NDP water model[23]