Biomoleküle mit Python simulieren
Hintergrund
Das Molecular Modeling Toolkit (MMTK) ist eine Open-Source-Python-Bibliothek für molekulare Modellierung und Simulation mit Schwerpunkt auf biomolekularen Systemen, geschrieben in einer Mischung aus Python und C. Es bietet Standardtechniken wie Molekulardynamik oder Normalschwingungsberechnungen in gebrauchsfertiger Form, bietet aber auch eine Basis von Low-Level-Operationen, auf denen neue Techniken leicht implementiert werden können.
Ich begann 1996 mit der Entwicklung von MMTK. Ich hatte einige Erfahrung mit gängigen Simulationspaketen für Biomoleküle, die in Fortran geschrieben waren und ihren Ursprung in den 1970er Jahren hatten. Diese Pakete waren zu umständlich zu verwenden und insbesondere zu modifizieren und zu erweitern. Da meine Forschungsarbeit auf die Entwicklung neuer Simulationstechniken ausgerichtet ist, war Modifizierbarkeit ein besonders wichtiges Kriterium.
Dynamische Verformung des Chaperon-Proteins GroEL, erhalten mit dem MMTK-basierten interaktiven DomainFinder (Vergrößern)
Charakteristische Merkmale von BiomolekülsSimulationen, die berücksichtigt werden mussten, sind die langen Ausführungszeiten einiger Simulationstechniken (mehrere Wochen sind nicht unüblich) und die Komplexität der Datenstrukturen, die Biomoleküle beschreiben.
Wahl der Sprachen
Die Wahl von Python plus C erfolgte nach einer Evaluierung verschiedener Sprachen. Ich war schnell davon überzeugt, dass nur eine Mischung aus einer hochrangigen interpretierten Sprache und einer CPU-effizienten kompilierten Sprache meine scheinbar widersprüchlichen Anforderungen an schnelle Entwicklung und effiziente Ausführung erfüllen konnte.
Für den High-Level-Teil wurde Tcl ausgeschlossen, da es die für das Projekt erforderlichen komplexen Datenstrukturen nicht handhaben konnte. Perl wurde wegen seiner unangenehmen Syntax (dies war natürlich eine subjektive Wahl) und wegen seines schlecht integrierten OO-Mechanismus ausgeschlossen. Python punktete hoch in Bezug auf Lesbarkeit, OO-Unterstützung, Bibliotheksunterstützung und Integration mit kompilierten Sprachen. Außerdem war Numerical Python gerade veröffentlicht worden und ein wichtiger Baustein für meine Entwicklungen.
Für den Low-Level-Teil wurde Fortran 77 wegen seines archaischen Charakters, fehlendem Speichermanagement und Problemen bei der Portabilität der C-Fortran-Schnittstelle eliminiert. C++ war ein Kandidat, wurde aber letztendlich nicht gewählt, da die Portabilität zwischen Compilern 1996 noch ein Problem darstellte und ich den Nutzen von C++ für die geringe Menge an kompiliertem Code im Projekt als nicht ausreichend erachtete, um die Komplexität der Sprache auszugleichen.
Bibliotheksarchitektur
Die Architektur von MMTK ist eindeutig Python-gesteuert. Für den Benutzer präsentiert sie sich als reine Python-Bibliothek. Der C-Code in MMTK wurde von Grund auf in Form von Python-Erweiterungsmodulen geschrieben, die nur die wenigen zeitkritischen Aspekte handhaben: Auswertung von Wechselwirkungsenergien und langlaufende iterative Algorithmen wie Energieminimierung und Molekulardynamik, die ohne jeglichen Python-bezogenen Overhead laufen. Es wird umfangreicher Gebrauch von Numerical Python, LAPACK und der netCDF-Bibliothek gemacht. MMTK bietet Multi-Threading-Unterstützung für Shared-Memory-Parallelrechner und MPI-basierte Parallelisierung für verteilte Speicherrechner.
Der größte Teil von MMTK ist ein Satz von Klassen, die Atome und Moleküle beschreiben und eine Datenbank von Molekülen und Fragmenten verwalten. Biomoleküle (Proteine, DNA und RNA) werden von Unterklassen der generischen Molecule-Klasse behandelt. Ein weiterer wichtiger Teil von MMTK implementiert Schemata zur Berechnung von Wechselwirkungsenergien (in der Simulationsgemeinschaft etwas unzutreffend als "Kraftfelder" bezeichnet). I/O-bezogener Code ist die dritte Säule von MMTK. Er liest und schreibt einige populäre Dateiformate sowie sein eigenes Trajektorienformat, das auf dem netCDF-Format basiert. Im Gegensatz zu anderen Trajektorien-Dateiformaten sind die netCDF-Dateien von MMTK sowohl binär (und somit kompakt) als auch plattformübergreifend portabel und ermöglichen zudem einen effizienten Zugriff auf fast beliebige Teilmengen.
Schnappschuss einer Molekulardynamik-Simulation von Lysozym in Wasser, ausgeführt mit MMTK. Vergrößern
Modularität und Erweiterbarkeit waren wichtige Designkriterien. Algorithmen, Energiebegriffe und Spezialisierungen der Datentypen können hinzugefügt werden, ohne den MMTK-Code ändern zu müssen. Das Design von MMTK als Bibliothek und nicht als geschlossenes Programm ist für viele Anwendungen essentiell.
Ein wichtiger Aspekt von BiomolekülsSimulationen ist die Visualisierung. MMTK delegiert diese Aufgabe an externe Werkzeuge. Zwei Visualisierungsprogramme, VMD und PyMOL, sind besonders gut integriert.
Die meisten MMTK-Benutzer greifen über einfache Python-Skripte auf die Bibliothek zu, aber MMTK wurde auch als Basis für Endbenutzerprogramme mit grafischen Benutzeroberflächen wie nMOLDYN und DomainFinder verwendet.
MMTK besteht derzeit aus etwa 18.000 Zeilen Python-Code, 12.000 Zeilen handgeschriebenem C-Code und etwas maschinell generiertem C-Code. Der Großteil des Codes wurde von einer Person über acht Jahre als Teil einer Forschungsaktivität entwickelt. Zwei Module, einige Funktionen und viele Ideen wurden von der Benutzergemeinschaft beigesteuert.
Praktische Erfahrung
MMTK und andere Python-Bibliotheken waren zehn Jahre lang die Basis für alle meine Forschungsprojekte. Viele dieser Projekte wären ohne das schnelle Prototyping, das für Python charakteristisch ist, nicht möglich gewesen. Bei methodischer Arbeit sind Entwicklungs- und Testzeit essentiell: Eine Idee, die an einem Nachmittag ausprobiert werden kann, wird ausprobiert, während eine Idee, deren Auswertung eine Woche Arbeit erfordert, oft beiseitegelegt wird.
Wie bei allen Open-Source-Projekten kann die Größe der MMTK-Benutzergemeinschaft nur indirekt geschätzt werden. Die Mailingliste für MMTK-Benutzer hat derzeit 175 Mitglieder, und die wissenschaftliche Publikation, die MMTK für Computerchemiker beschreibt, wurde 30 Mal zitiert.
Über den Autor
Konrad Hinsen ist ein theoretischer Physiker, der für das französische Centre National de la Recherche Scientifique (CNRS) arbeitet. Er war am Numerical Python-Projekt beteiligt und ist der Autor von ScientificPython, einer allgemeinen Bibliothek für wissenschaftlichen Python-Code.
