MindSponge分子动力学模拟——计算单点能(2023.08)
技术背景
在前面的几篇文章中,我们分别介绍了MindSponge的软件架构、MindSponge的安装与使用和如何在MindSponge中定义一个分子系统。那么就像深度学习中的损失函数,或者目标函数,这里分子力学的主要目标函数就是势能(也有动能项,但动能项更多的来源于分子动力学模拟的过程,而不是实验中的参数)。这篇文章我们主要探讨一下,在MindSponge中如何计算给定体系的单点能。
浅析ForceField类
ForceField是用于构建分子力场的基础类,首先我们还是来看一下ForceField这个类的内部实现,主要关注下需要哪些输入,以及这些输入的含义是什么。
class ForceField(ForceFieldBase):
r"""Potential energy of classical force field. It is a subclass of `ForceFieldBase`.
The `ForceField` class use force field parameter files to build the potential energy.
Args:
system (Molecule): Simulation system.
parameters (Union[dict, str, List[Union[dict, str]]]):
Force field parameters. It can be a `dict` of force field parameters,
a `str` of filename of a force field file in MindSPONGE YAML format,
or a `list` or `tuple` containing multiple `dict` or `str`.
If a filename is given, it will first look for a file with the same name
in the current directory. If the file does not exist, it will search
in MindSPONGE's built-in force field.
If multiple sets of parameters are given and the same atom type
is present in different parameters, then the atom type in the parameter
at the back of the array will replace the one at the front.
cutoff (float): Cutoff distance. Default: None
rebuild_system (bool): Whether to rebuild the atom types and bond connection of the system
based on the template in parameters.
Default: True
length_unit (str): Length unit. If None is given, it will be assigned with the global length unit.
Default: None
energy_unit (str): Energy unit. If None is given, it will be assigned with the global energy unit.
Default: None
Returns:
energy (Tensor): Tensor of shape `(B, E)`. Data type is float.
Supported Platforms:
``Ascend`` ``GPU``
Symbols:
B: Batchsize, i.e. number of walkers in simulation.
E: Number of energy terms.
"""
在这里面重点关注下这三个输入信息:
- 分子系统。这里面包含了原子类型、成键关系等构建力场所必须的参数,因此我们可以直接把构建好的Molecule对象直接传入ForceField。
- 力场参数。我们已经在MindSponge内部转化了一些常用的Amber力场参数文件,包含amber.ff03,amber.ff14sb,amber.ff96和amber.gaff等,还有两个常用的水分子力场spce和tip3p。我们在构建ForceField对象的时候,只需要用字符串给parameters这一项赋值即可调用相关的力场文件。如果是自己做了一个力场文件,那么传入该力场文件的绝对路径即可。能被成功调用的前提条件是,完全按照MindSponge的力场文件格式要求做的力场。
- 截断半径。在力场里面的长程相互作用力的计算中会使用到近邻表的计算,因为对大体系而言我们不太可能考虑全连接图,因此需要用一个截断半径对长程相互作用的范围进行一定的截断。
除了ForceField类之外,我们还需要关注一个相关的类是MindSponge中的WithEnergyCell,这也是在计算单点能中一个非常重要的类。
class WithEnergyCell(Cell):
r"""
Cell that wraps the simulation system with the potential energy function.
This Cell calculates the value of the potential energy of the system at the current coordinates and returns it.
Args:
system(Molecule): Simulation system.
potential(PotentialCell): Potential energy function cell.
bias(Union[Bias, List[Bias]]): Bias potential function cell. Default: None
cutoff(float): Cut-off distance for neighbour list. If None is given, it will be assigned
as the cutoff value of the of potential energy.
Defulat: None
neighbour_list(NeighbourList): Neighbour list. Default: None
wrapper(EnergyWrapper): Network to wrap and process potential and bias.
Default: None
Inputs:
- **\*inputs** (Tuple(Tensor)) - Tuple of input tensors of 'WithEnergyCell'.
Outputs:
energy, Tensor of shape `(B, 1)`. Data type is float. Total potential energy.
Supported Platforms:
``Ascend`` ``GPU``
Symbols:
B: Batchsize, i.e. number of walkers of the simulation.
A: Number of the atoms in the simulation system.
N: Number of the maximum neighbouring atoms.
U: Number of potential energy terms.
V: Number of bias potential terms.
"""
在前面一部我们构建好的ForceField里面,实际上更多的是建模过程,在分子构象空间和拓扑连接性上面查找相应的对象,并匹配到相应的力场参数,最终作为一个能量计算环节的参数输入。而WithEnergyCell则可以根据system和forcefield两者提供的信息,直接计算能量。关于WithEnergyCell类的输入,我们重点关注下这几个参数:
- 分子系统。就是前面构造好的system参数,或者Molecule对象。
- 力场模型。根据上一个介绍的ForceField类中构建的力场模型,有了这个力场模型,就可以直接计算各项力场的能量和力的大小。
- 偏置势。这一项虽然看起来只是一个参数,但其实最能够体现使用AI框架来做分子动力学模拟的优势,后面会专门写一篇文章来介绍。其主要作用是添加一些偏置势能项,用于约束分子系统,向期望的方向演化。比如我们可以添加一个球形谐振子势,把体系约束在一个给定体积大小的球体中。也可以通过bias添加Meta Dynamics,用于快速模拟化学反应的过程。
- 近邻表。相比于给定一个cutoff,这里给定一个近邻表会更加直接。由于近邻表在分子模拟的过程中有可能直接决定了分子模拟的速度,或者是可模拟体系的大小,因为近邻表所产生的最大Tensor维度有可能为(B,A,N,D),是所有Tensor中最大的。熟悉GPU计算的童鞋可能都知道,在GPU上占用显存过大有可能导致不可计算的问题。
- 修饰器。wrapper这个参数,为力场的使用增添了许多的灵活性。跟bias的功能是很相似的,但是bias相当于是添加了一个新的势能函数,而wrapper则是直接对原始力场的能量进行修饰。
以上,就是ForceField和WithEnergyCell的基本介绍,有了这两个工具,我们就可以导入一些已有的力场,来完成单点能的计算。
计算单点能
给定一个初始的分子构象,求这个构象的分子势能。一般情况,这个问题可能需要通过计算化学的方式来进行求解,比如CCSD(T)之类的方法。但是我们做分子模拟,需要快速的演化和迭代,如果使用计算化学的方法,速度是无法满足计算的需求的。因此将实验数据或者是计算化学的数据拟合成一系列的力场参数,目前来说还是一个相对比较快速而且不损失太多精度的方案。接下来我们展示一下如何使用MindSponge来计算单点能。
from sponge import Protein, ForceField, WithEnergyCell
system = Protein('case1.pdb', rebuild_hydrogen=True)
energy = ForceField(system, parameters='amber.ff14sb')
with_energy = WithEnergyCell(system, energy)
print (with_energy.energy_names)
print (with_energy.calc_energies())
在上面这个案例中,先是用MindSponge内置的Protein类加载了case1.pdb这个案例作为示例。这个pdb文件的内容为:
REMARK Generated By Xponge (Molecule)
ATOM 1 N ALA 1 -0.095 -11.436 -0.780
ATOM 2 CA ALA 1 -0.171 -10.015 -0.507
ATOM 3 CB ALA 1 1.201 -9.359 -0.628
ATOM 4 C ALA 1 -1.107 -9.319 -1.485
ATOM 5 O ALA 1 -1.682 -9.960 -2.362
TER
运行结束之后会在case1.pdb同路径下生成一个补氢的文件case1_addH.pdb,内容如下所示:
MODEL 1
ATOM 1 N ALA A 1 -0.095 -11.436 -0.780 1.0 0.0 N
ATOM 2 CA ALA A 1 -0.171 -10.015 -0.507 1.0 0.0 C
ATOM 3 CB ALA A 1 1.201 -9.359 -0.628 1.0 0.0 C
ATOM 4 C ALA A 1 -1.107 -9.319 -1.485 1.0 0.0 C
ATOM 5 O ALA A 1 -1.682 -9.960 -2.362 1.0 0.0 O
ATOM 6 H ALA A 1 -0.994 -11.866 -0.701 1.0 0.0 H
ATOM 7 HA ALA A 1 -0.767 -9.928 0.292 1.0 0.0 H
ATOM 8 HB1 ALA A 1 1.816 -9.816 0.015 1.0 0.0 H
ATOM 9 HB2 ALA A 1 1.407 -8.427 -0.329 1.0 0.0 H
ATOM 10 HB3 ALA A 1 1.797 -9.446 -1.427 1.0 0.0 H
TER
ENDMDL
END
上述单点能的计算结果如下所示:
[MindSPONGE] Adding 10 hydrogen atoms for the protein molecule in 0.003 seconds.
Warrning! The head_atom of residue 0 is not None but the tail_atom of residue -1 is None.
Warrning! The head_atom of residue 0 is not None but the tail_atom of residue -1 is None.
['bond_energy', 'angle_energy', 'dihedral_energy', 'coulomb_energy', 'lj_energy', 'nb_pair_energy']
[[ 45.856487 76.87538 2.9642215 -100.20307 -0.50251234
206.13483 ]]
而这里如果我们还是依旧使用这个代码,只是替换一个输入的pdb文件,比如如下的一个多肽:
REMARK Generated By Xponge (Molecule)
ATOM 1 N ALA 1 -0.095 -11.436 -0.780
ATOM 2 CA ALA 1 -0.171 -10.015 -0.507
ATOM 3 CB ALA 1 1.201 -9.359 -0.628
ATOM 4 C ALA 1 -1.107 -9.319 -1.485
ATOM 5 O ALA 1 -1.682 -9.960 -2.362
ATOM 6 N ARG 2 -1.303 -8.037 -1.397
ATOM 7 CA ARG 2 -2.194 -7.375 -2.328
ATOM 8 CB ARG 2 -3.606 -7.943 -2.235
ATOM 9 CG ARG 2 -4.510 -7.221 -3.228
ATOM 10 CD ARG 2 -5.923 -7.789 -3.136
ATOM 11 NE ARG 2 -6.831 -7.111 -4.087
ATOM 12 CZ ARG 2 -8.119 -7.421 -4.205
ATOM 13 NH1 ARG 2 -8.686 -8.371 -3.468
ATOM 14 NH2 ARG 2 -8.844 -6.747 -5.093
ATOM 15 C ARG 2 -2.273 -5.882 -2.042
ATOM 16 O ARG 2 -1.630 -5.388 -1.119
ATOM 17 N ALA 3 -3.027 -5.119 -2.777
ATOM 18 CA ALA 3 -3.103 -3.697 -2.505
ATOM 19 CB ALA 3 -1.731 -3.041 -2.625
ATOM 20 C ALA 3 -4.039 -3.001 -3.483
ATOM 21 O ALA 3 -4.614 -3.643 -4.359
ATOM 22 N ALA 4 -4.235 -1.719 -3.394
ATOM 23 CA ALA 4 -5.126 -1.057 -4.325
ATOM 24 CB ALA 4 -6.538 -1.625 -4.233
ATOM 25 C ALA 4 -5.205 0.436 -4.039
ATOM 26 O ALA 4 -4.561 0.930 -3.116
ATOM 27 OXT ALA 4 -5.915 1.166 -4.728
TER
这样得到的单点能的计算结果如下所示:
[MindSPONGE] Adding 57 hydrogen atoms for the protein molecule in 0.008 seconds.
['bond_energy', 'angle_energy', 'dihedral_energy', 'improper_energy', 'coulomb_energy', 'lj_energy', 'nb_pair_energy']
[[ 231.55423 1049.3224 194.43379 20.708637 -689.10315 4051.5076
163.09871 ]]
在MindSponge的单点能的计算过程中,我们保留了每一项能量的name和value,便于结果的比对。
需要注意的是,不同的分子模拟软件所使用的默认输出单位也是不一样的。所以我们用MindSponge进行分子模拟的时候,最好在代码的最前头把单位配置加上:
from sponge import set_global_units
set_global_units('nm', 'kj/mol')
比如像上面这样操作一下,就把全局的能量单位配置成了kj/mol,全局的长度单位配置成了nm。常用的长度单位还有A,常用的能量单位还有kcal/mol,主要就是这里两组单位之间进行切换。
总结概要
本文主要衔接前面的文章,继“MindSponge的安装与使用”、“MindSponge软件架构”以及“MindSponge中定义一个分子系统”系列文章之后,再讲解一下如何根据一个定义好的分子系统进行力场建模,使用力场来计算单点能,就是一个比较简单的案例。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/single-point-energy.html
作者ID:DechinPhy
更多原著文章:https://www.cnblogs.com/dechinphy/
请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
MindSponge分子动力学模拟——计算单点能(2023.08)的更多相关文章
- Gromacs分子动力学模拟流程概述
Gromacs分子动力学模拟主要可以分为以下几个步骤,不同的体系步骤可能略有不同. 在开始之前,先简单了解一下预平衡: 分子动力学模拟的最终目的是对体系进行抽样,然后计算体系的能量,各种化学键,成分分 ...
- 分子动力学模拟之基于自动微分的LINCS约束
技术背景 在分子动力学模拟的过程中,考虑到运动过程实际上是遵守牛顿第二定律的.而牛顿第二定律告诉我们,粒子的动力学过程仅跟受到的力场有关系,但是在模拟的过程中,有一些参量我们是不希望他们被更新或者改变 ...
- 分子动力学模拟之SETTLE约束算法
技术背景 在上一篇文章中,我们讨论了在分子动力学里面使用LINCS约束算法及其在具备自动微分能力的Jax框架下的代码实现.约束算法,在分子动力学模拟的过程中时常会使用到,用于固定一些既定的成键关系.例 ...
- 分子动力学模拟软件VMD的安装与使用
技术背景 在分子动力学模拟过程中会遇到一些拓扑结构非常复杂的分子模型,所谓的复杂不仅仅是包含众多的原子,还有各种原子之间的成键关系与成键类型等.这时候就非常能够体现一个好的可视化软件的重要性了,这里我 ...
- ZOJ 3778 Talented Chef(找规律,模拟计算,11届ACM省赛,简单)
题目链接 2014年浙江省赛C题,当时觉得难,现在想想这题真水.. 找规律: 若 最大的那个步骤数*m-总和>=0,那么答案就是 最大的那个步骤数 . 否则 就要另加上不够的数量,具体看代 ...
- 【GROMACS】分子动力学模拟①——环境搭建
系统环境 Win11 22H2 企业版 开启虚拟化.window subsystem for liunx等虚拟机相关的功能 应用商店中安装WSL2 安装步骤 打开Ubuntu,输入sudo apt f ...
- PAT甲题题解-1081. Rational Sum (20)-模拟分数计算
模拟计算一些分数的和,结果以带分数的形式输出注意一些细节即可 #include <iostream> #include <cstdio> #include <algori ...
- 2017NOIP模拟赛-科普基地
今天回来打的第一场NOIP难度的试题,结果惨不忍睹.写一下每道题的做法,然后每道题犯的__弱智__错误 UPD:2018.9.15 突然这篇题解就变成很多大佬要看的了,因为之前是写给自己看的,所以写的 ...
- 2021年【线上】lammps分子动力学技术实战培训班
材料模拟分子动力学课程 3月19号--22号 远程在线课 lammps分子动力学课程 3月12号--15号 远程在线课 第一性原理VASP实战课 3月25号-28号 远程在线课 量子化学Gaussia ...
- Python的GPU编程实例——近邻表计算
技术背景 GPU加速是现代工业各种场景中非常常用的一种技术,这得益于GPU计算的高度并行化.在Python中存在有多种GPU并行优化的解决方案,包括之前的博客中提到的cupy.pycuda和numba ...
随机推荐
- ubuntu搜狗输入法显示简体中文,输入却是繁体中文问题解决方案
一.现场重现 我的ubuntu版本是20.04,搜狗输入法版本是2.4.在输入的时候发生了如下场景: 明明输入法上是简体中文,可是打出来就变成了繁体中文! 二.解决方案 1.尝试 网上许多答案都是按下 ...
- 2014年蓝桥杯C/C++大学B组省赛真题(切面条)
题目描述: 一根高筋拉面,中间切一刀,可以得到2根面条. 如果先对折1次,中间切一刀,可以得到3根面条. 如果连续对折2次,中间切一刀,可以得到5根面条. 那么,连续对折10次,中间切一刀,会得到多少 ...
- 人工智能导论——口罩佩戴检测详解(附带MTCNN论文精读)
人工智能导论--口罩佩戴检测详解(附带MTCNN论文精读) 一.问题重述 随着人类的科技不断进步,病毒也在随之更新迭代:在19年席卷全球的新冠肺炎疫情给人们的生活带来了极大的灾难,造成了无数的人因此失 ...
- 一步步教你如何搭建K8S集群
一.环境配置 三台CentOS7虚拟机,默认配置,内存2GB.处理器2核心. 先更新下系统 1 sudo yum update 2 sudo yum upgrade 二.安装并启动 docker 1 ...
- wireshark基本使用
Wireshark 是一种开源.跨平台的网络数据包分析工具,能够嗅探和调查实时流量并检查数据包捕获 (PCAP).它通常 被用作最好的数据包分析工具之一. 数据包过滤操作 ip过滤器 IP 过滤器帮助 ...
- CANoe _ Panel面板的创建过程
在Canoe中创建Panel面板,用于显示和操作CAN网络的数据和信号,遵循以下步骤: 1.打开Canoe 启动Canoe软件. 2.打开项目 在Canoe的菜单栏中,选择"File&quo ...
- 前端vue单个文件上传支持图片,压缩包以及文件 , 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13066
前端vue单个文件上传支持图片,压缩包以及文件 , 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13066 效果图如下: 使用方 ...
- Spring 中的 Bean
前言 欢迎来到本篇文章,鸽了好久了,今天继续写下 Spring 的内容:Spring 中 Bean 的基本概念.基本写法和 3 种实例化 Bean 的方式等. 什么是 Bean? 我们回顾下,什么是 ...
- git推送时被拒绝,发现class文件被人上传到仓库的解决办法
写好的代码commit之后,想要推送到远端,结果发现有同事提交了class文件 这时候我们需要执行以下指令 git stash git pull git stash pop 原理:先把commit的东 ...
- Mininet教程
mininet的安装 1.前言 1.本次安装环境为ubuntu20.04. 2.mininet 为 github上的最新版,我已经修改镜像地址并克隆到了gitee,只需要从我的gitee仓库克隆即可. ...