注意: 虽然 JavaScript 对于本网站不是必需的,但您与内容的互动将受到限制。请启用 JavaScript 以获得完整体验。

使用 Python 模拟生物分子

背景

分子建模工具包 (MMTK) 是一个开源的 Python 库,用于分子建模和模拟,专注于生物分子系统,用 Python 和 C 的混合编写。它提供了诸如分子动力学或简正模式计算等现成的标准技术,但也提供了底层操作的基础,在此基础上可以轻松实现新技术。

我于 1996 年开始开发 MMTK。我有一些使用 Fortran 编写的生物分子主流模拟软件包的经验,这些软件包起源于 20 世纪 70 年代。这些软件包使用起来过于繁琐,特别是难以修改和扩展。由于我的研究工作侧重于新模拟技术的发展,可修改性是一个特别重要的标准。

Example MMTK Molecular Model

伴侣蛋白 GroEL 的动态变形,使用基于 MMTK 的交互式 DomainFinder 获得 (放大)

必须考虑到的生物分子模拟的特征是某些模拟技术的执行时间很长(几周并不罕见)以及描述生物分子的数据结构的复杂性。

语言的选择

在评估了各种语言后,选择了 Python 加 C 的组合。我很快就确信,只有高级解释语言和 CPU 高效编译语言的混合才能满足我对快速开发和高效执行看似矛盾的要求。

对于高级部分,Tcl 被排除在外,因为它无法处理项目所需的复杂数据结构。Perl 因其令人不快的语法(这当然是一个主观选择),以及其糟糕的 OO 机制而被排除在外。Python 在可读性、OO 支持、库支持以及与编译语言的集成方面得分很高。此外,Numerical Python 刚刚发布,这是我开发工作的重要组成部分。

对于低级部分,Fortran 77 因其过时的特性、缺乏内存管理以及 C-Fortran 接口中的可移植性问题而被排除在外。C++ 是一个候选者,但最终没有选择,因为在 1996 年,编译器之间的可移植性仍然是一个问题,而且我认为 C++ 对于项目中少量编译代码的好处不足以弥补该语言的复杂性。

库架构

MMTK 的架构显然是 Python 驱动的。对于用户而言,它以纯 Python 库的形式呈现。MMTK 中的 C 代码是从头开始编写的,以 Python 扩展模块的形式,这些模块仅处理少数时间关键方面:交互能量的评估,以及长时间运行的迭代算法,如能量最小化和分子动力学,它们在没有 Python 相关开销的情况下运行。广泛使用了 Numerical Python、LAPACK 和 netCDF 库。MMTK 为共享内存并行机器提供多线程支持,并为分布式内存机器提供基于 MPI 的并行化。

MMTK 的最大部分是一组描述原子和分子并管理分子和片段数据库的类。生物分子(蛋白质、DNA 和 RNA)由通用 Molecule 类的子类处理。MMTK 的另一个重要子集实现了计算交互能量的模式(在模拟社区中被错误地称为“力场”)。I/O 相关代码是 MMTK 的第三个支柱。它读取和写入一些流行的文件格式,以及它自己的基于 netCDF 格式的轨迹格式。与其他轨迹文件格式相反,MMTK 的 netCDF 文件既是二进制文件(因此紧凑),又可以在平台之间移植,并且允许高效访问几乎任意的子集。

Example MMTK Molecular Model

使用 MMTK 运行的溶菌酶在水中的分子动力学模拟的快照。 放大

模块化和可扩展性是重要的设计标准。可以在不修改 MMTK 代码的情况下添加算法、能量项和数据类型的专门化。MMTK 作为库而不是封闭程序的设计对于许多应用至关重要。

生物分子模拟的一个重要方面是可视化。MMTK 将此任务委托给外部工具。两个可视化程序 VMD 和 PyMOL 特别集成良好。

大多数 MMTK 用户从简单的 Python 脚本访问该库,但 MMTK 也已被用作带有图形用户界面的最终用户程序的基础,例如 nMOLDYN 和 DomainFinder。

MMTK 目前由约 18,000 行 Python 代码、12,000 行手写的 C 代码和一些机器生成的 C 代码组成。大部分代码由一个人在八年内作为研究活动的一部分开发。两个模块、一些函数和许多想法是由用户社区贡献的。

实践经验

MMTK 和其他 Python 库已成为我十年所有研究项目的基础。如果没有 Python 的快速原型制作特性,其中许多项目是不可能实现的。在方法论工作中,开发和测试时间至关重要:一个下午可以尝试的想法会被尝试,而需要一周时间进行评估的想法通常会被搁置。

与所有开源项目一样,MMTK 用户社区的规模只能间接估计。MMTK 用户邮件列表目前有 175 名成员,而描述 MMTK 给计算化学家的科学出版物已被引用 30 次。

关于作者

Konrad Hinsen 是法国国家科学研究中心 (CNRS) 从事理论物理研究的研究员。他参与了 Numerical Python 项目,并且是 ScientificPython 的作者,ScientificPython 是一个通用的科学 Python 代码库。