Einige der Algorithmen sind aus dem Quellcode für die verschiedenen Pakete verfügbar. PyMol ist eines davon, und auf die Quelle von VMD kann ebenfalls zugegriffen werden.
Ich habe den Bandalgorithmus von VMD in den 1990er Jahren implementiert. Der erste Schritt ist die Strukturbestimmung - wo sind die Aminosäuren? welche sind zu einer kette verbunden? Wo sind die C-Alpha-Atome?
Als nächstes ist, wie Kyle sagte, der Spline. VMD verwendet einen Catmull-Rom-Spline mit den C-Alphas als Kontrollpunkte. Dies ist ein Spline 3. Ordnung, und die Splines durchlaufen die C-Alphas. Wenn Sie rechnen, gibt es einen einzelnen freien Parameter, der der Steifigkeit des Splines um den Kontrollpunkt entspricht. Ich habe ein paar Werte ausprobiert, bis ich einen gefunden habe, der ästhetisch ansprechend ist.
Es gibt auch einige Schwierigkeiten, wie man mit dem Ende umgeht, wenn nicht genug C-Alphas vorhanden sind. Ich habe hochgerechnet, um die anderen Punkte zu bekommen.
Das gibt den Weg vor. Eine kreisförmige Extrusion entlang des Pfades ergibt ein Rohr. Sie können die Querschnittsradien variieren, um eine Ellipse zu erhalten, und mit etwas mehr Arbeit definieren Sie das Menüband.
Das Problem ist, die richtige Norm zu finden, so dass die Bänder mit einer Alpha-Helix ausgerichtet sind. Ich habe verschiedene Dinge ausprobiert und dann aufgegeben, mir die Raster3D-Implementierung angesehen, die Berechtigung zur Verwendung erhalten und diese VMD hinzugefügt. Es ist eine kumulative Summe der vorherigen Vektornorm und der aktuellen Norm, die durch die C-Alpha-Kurve definiert wird. Ich müsste an der Quelle nachsehen, wie es wieder funktioniert. Interessanterweise wies Ethan Merritt, der Raster3D-Autor, darauf hin, dass er dieses Stück Code von FRODO erhalten habe, so dass es eine lange Geschichte hat.
VMD hat jetzt "NewRibbons", die nach meiner Zeit implementiert wurden. Ich weiß nicht, wie es funktioniert.
Der einfachste Weg, eine Alpha-Helix zu erstellen, besteht darin, eine Linie vom ersten bis zum letzten Rest zu ziehen. Extrudieren Sie einen Kreis entlang der Linie und Sie haben einen Zylinder. Sie können auch eine lineare Anpassung an die Helix vornehmen, aber ich denke, dies verursachte Probleme bei kurzen Helices. Es gibt wahrscheinlich cleverere Methoden, einschließlich der von Kyle vorgeschlagenen Methoden, die weiche Biegungen ermöglichen.
Beta-Stränge sind einfach. Es gibt zwei Steuerpfade, einen für jede Seite. Diese definieren den Strangpfad und die Normalen. Man muss ein bisschen vorsichtig mit Drehungen sein, damit sich der Faden nicht um 290 Grad dreht, wenn er sich um 70 Grad drehen sollte, aber das war nicht schwer zu handhaben.
Ein schwieriger Teil, den Sie nicht erwähnt haben, besteht darin, zu erkennen, wo sich die Alpha-Helix und die Beta-Stränge befinden. Einige PDB-Datensätze enthalten das, aber nicht alle. Dafür habe ich ein Drittanbieter-Tool namens STRIDE verwendet. Warren implementierte seinen eigenen Algorithmus. Roger Sayle hat seine eigene Version von DSSP für Raster3D implementiert.