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

使用 Python 模拟生物分子

背景

分子建模工具包 (MMTK) 是一个开源的Python库,用于分子建模和模拟,重点关注生物分子系统,采用Python和C混合编写。它以即用型形式提供分子动力学或简正模式计算等标准技术,同时也提供低级操作的基础,在此基础上可以轻松实现新技术。

我于1996年开始开发MMTK。我曾使用过主流的Fortran编写的生物分子模拟软件包,这些软件包起源于1970年代。那些软件包使用起来太笨重,尤其是修改和扩展。由于我的研究工作专注于新模拟技术的开发,因此可修改性是一个特别重要的标准。

Example MMTK Molecular Model

MMTK驱动的交互式 DomainFinder 获得的伴侣蛋白GroEL的动态变形 (放大)

生物分子模拟的特点是某些模拟技术的执行时间长(数周并不少见)以及描述生物分子数据结构的复杂性。

语言选择

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

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

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

库架构

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

MMTK的大部分是一个描述原子和分子并管理分子和片段数据库的类集。生物分子(蛋白质、DNA和RNA)由通用分子类的子类处理。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(一个通用的科学Python代码库)的作者。