Skip to content

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脚本语法不够丰富
  • 力场匹配

    • ligpargen
      • 仅支持opls
      • 最多60个原子
      • 原子类型随机分配, 多个文件难以合并
    • amber及charmm
      • 没用过
  • packing

    • packmol
      • constraint 功能很强大
      • 仅支持pdb和xyz

随着对分子的描述日益精细, 原有的软件的功能将捉襟见肘, 而且很难加以扩展. 原子上需要附加的属性越来越多, 包括极化张量, 多极展开参数, 电子结构等. 需要输出的格式也在不断变化, 需要适应新生代的机器学习的计算化学. 我想在这个方面做一点工作, 因此开发了molpy.

思路

molpy想成为计算化学方向的numpy. 工作的思路是将一个分子描述成由Atom(node)和Bond(edge)组成的Group(graph). 既然底层是由图实现的, 所以很容易实现拆分子图, 遍历搜索等等算法. 构建分子结构之后, 和自定义的ForceField进行匹配就可以将模板上的属性附加到所有的对象上. 有了完全描述的分子结构, 可以输出到任何格式的文件中, 供其他软件调用. 同样, 有了力场描述, 实现梯度下降密铺等方法也很容易.

如何阅读源码

已经实现的功能一定会有相关的测试文件. 所有对象的基类是Item.

roadmap:

核心工作

  1. 数据结构: 描述分子的数据结构
  2. 分子建模: 给出原子和键接定义生成一个分子
  3. 分子拼接: 复用分子片段生成大分子
  4. 层级结构: 快速索引分子中的片段
  5. 拓扑搜索: 已知键接信息生成键角二面角等信息
  6. 序列化 : 返回与语言无关的数据结构共其他工具调用
  7. 力场分配: 根据原子化学环境判断原子类型
  8. 模板匹配: 将分子和力场中模板相匹配
  9. 结构优化: 梯度下降地寻找分子能量较低的构型
  10. packing: 将分子密铺在模拟盒子中

外围工作

  • 数据输入输出: 读入输出其他格式的文件
  • 调用其他程序: 直接调用其他QM/MM程序
  • 脚本核心结构: 人类友好的脚本API和存储
  • 脚本输入输出: 生成不同软件需要的脚本
  • 分析模块构建: 预制的分子结构分析工具
  • 分析模块扩展: 更容易增加分析功能插件

锦上添花

  • 界面