注意: 雖然 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程式碼庫)的作者。