Welcome to molpy
author: Roy Kid
contact: lijichen365@126.com
date: 2021-10-23
version: 0.0.1
molpy
want to build a data structure used to describe molecules in computational chemistry, just like numpy in data science
遇到的小问题
对于任意的大分子, 建模是一个非常困难的工作. 首先需要确定每一个原子的位置, 其次是原子之间链接信息. 在这个基础上需要生成分子中所有的键角, 二面角等拓扑信息. 接下来, 需要根据力场给每一个原子分配合适的原子类型. 然后把多个这样的分子以一种合适的摆放方式放入到模拟盒子中. 最后输出到每种计算软件所需要的格式. 这一套工作并没有成体系的工具可以调用, 现有的工具都是针对某种特定体系或者软件的. 我之前写了一个心路历程. 下面给出一个调研结果
-
建模工具
- Material Studio
- 收费, 臃肿
- 不能程序化编程->构建复杂大分子困难
- avogadro
- 轻量, 容易上手
- 几乎停止维护(包括avogadro2)
- moltemplate
- 模块化构建思路非常漂亮
- 仅支持LAMMPS
- 源码是个灾难(作者原话)
.lt
脚本语法不够丰富
- Material Studio
-
力场匹配
- ligpargen
- 仅支持opls
- 最多60个原子
- 原子类型随机分配, 多个文件难以合并
- amber及charmm
- 没用过
- ligpargen
-
packing
- packmol
- constraint 功能很强大
- 仅支持pdb和xyz
- packmol
随着对分子的描述日益精细, 原有的软件的功能将捉襟见肘, 而且很难加以扩展. 原子上需要附加的属性越来越多, 包括极化张量, 多极展开参数, 电子结构等. 需要输出的格式也在不断变化, 需要适应新生代的机器学习的计算化学. 我想在这个方面做一点工作, 因此开发了molpy.
思路
molpy想成为计算化学方向的numpy. 工作的思路是将一个分子描述成由Atom
(node)和Bond
(edge)组成的Group
(graph). 既然底层是由图实现的, 所以很容易实现拆分子图, 遍历搜索等等算法. 构建分子结构之后, 和自定义的ForceField
进行匹配就可以将模板上的属性附加到所有的对象上. 有了完全描述的分子结构, 可以输出到任何格式的文件中, 供其他软件调用. 同样, 有了力场描述, 实现梯度下降密铺等方法也很容易.
如何阅读源码
已经实现的功能一定会有相关的测试文件. 所有对象的基类是Item
.
roadmap:
核心工作
- 数据结构: 描述分子的数据结构
- 分子建模: 给出原子和键接定义生成一个分子
- 分子拼接: 复用分子片段生成大分子
- 层级结构: 快速索引分子中的片段
- 拓扑搜索: 已知键接信息生成键角二面角等信息
- 序列化 : 返回与语言无关的数据结构共其他工具调用
- 力场分配: 根据原子化学环境判断原子类型
- 模板匹配: 将分子和力场中模板相匹配
- 结构优化: 梯度下降地寻找分子能量较低的构型
- packing: 将分子密铺在模拟盒子中
外围工作
- 数据输入输出: 读入输出其他格式的文件
- 调用其他程序: 直接调用其他QM/MM程序
- 脚本核心结构: 人类友好的脚本API和存储
- 脚本输入输出: 生成不同软件需要的脚本
- 分析模块构建: 预制的分子结构分析工具
- 分析模块扩展: 更容易增加分析功能插件
锦上添花
- 界面