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和存储
- 脚本输入输出: 生成不同软件需要的脚本
- 分析模块构建: 预制的分子结构分析工具
- 分析模块扩展: 更容易增加分析功能插件
锦上添花
- 界面