Analysieren von Proteinstrukturdaten in C

17

Mein Hintergrund liegt in der Genomik, aber ich habe kürzlich mit Problemen im Zusammenhang mit der Proteinstruktur gearbeitet. Ich habe einige relevante Programme in C geschrieben und dabei meinen eigenen PDB-Datei-Parser von Grund auf neu erstellt. Ich habe mir keine Gedanken darüber gemacht, einen wirklich robusten Parser zu erstellen. Ich wusste nur, dass es der beste Weg ist, mich dazu zu zwingen, das PDB-Format wirklich zu verstehen.

Nachdem ich diesen Prozess durchlaufen habe, suche ich etwas Robusteres und Reiferes. Gibt es Open-Source-Proteinstrukturbibliotheken, die in C implementiert sind? Ich konnte ein paar auf Google finden, aber ich hatte noch nie von einem davon gehört und sie scheinen nicht sehr ausgereift oder stabil zu sein. Eine etwas verwandte Frage: Führt jeder wirklich all diese Arten von Berechnungen mit Python durch? oder Homebrew-Code?

PS. Ich bin im Wesentlichen auf der Suche nach einer Bibliothek, die einen PDB-Datei-Parser, Funktionen zum Berechnen von Bindungswinkeln, Bindungslängen, Torsionswinkeln, auf der Oberfläche zugänglichen Oberfläche usw. enthält.

Daniel Standage
quelle

Antworten:

8

Es gibt eine C ++ - Bibliothek, die ziemlich ausgereift ist. Dies ist wahrscheinlich so nah wie Sie an C gelangen. Ich selbst habe noch keine brauchbare C-Bibliothek gefunden. Sie können die C ++ - Bibliothek verwenden und dennoch den größten Teil Ihres Codes in C schreiben, indem Sie extern C { }den C ++ - Code verwenden.

Halfdan
quelle
1
Der Link ist veraltet
xhg
Hier ist die aktuelle Heimat der DSR-PDB-Bibliothek: graphics.stanford.edu/~drussel/pdb
Steven Darnell
6

OpenBabel ist C ++, wird jedoch häufig für allgemeine strukturelle Dinge verwendet. Der Schwerpunkt liegt auf der Konvertierung zwischen und der Fähigkeit, eine Vielzahl von Formaten zu lesen. Soweit ich weiß, ist es jedoch nicht möglich, SAS-Bereiche zu berechnen.

Aesin
quelle
3
Nur eine Notiz. Lassen Sie mich berichten, dass OpenBabel großartig ist, aber GPL, was ein Problem sein kann, wenn die damit entwickelte Software kommerziell werden muss.
Stefano Borini
Wenn Sie einen kommerziellen Nutzen in Betracht ziehen, würde ich empfehlen, sich OEChem ( eyesopen.com/oechem-tk ) von OpenEye und den dazugehörigen anderen Bibliotheken anzuschauen (zu denen unter anderem robuste Tools für Oberflächenberechnungen gehören). Es ist weder kostenlos noch Open Source, aber es ist robust und in der gesamten Branche weit verbreitet.
Joe Corkery
4

Beginnen Sie mit Ihrer "verwandten Frage": Ich analysiere PDBs in Python, auch wenn die nachfolgende Verarbeitung aus Gründen der Geschwindigkeit in einer kompilierten Sprache erfolgen muss. C ist einfach keine gute Sprache zum Parsen, insbesondere nicht für unübersichtliche Formate wie PDB. Und das ist wahrscheinlich der Grund, warum es in C. keine stabilen und ausgereiften PDB-Parser gibt.

Angenommen, Sie möchten mit Strukturen aus dem PDB arbeiten und verwenden statt des PDB-Formats das mmCIF-Format. mmCIF ist viel regelmäßiger und daher einfacher zu analysieren. Sie erhalten auch mehr analysierbare Informationen aus der mmCIF-Version der PDB-Einträge als aus den PDB-Versionen. Sie finden einen C-Parser für mmCIF auf der PDB-Website (CIFPARSE). Sie werden jedoch feststellen, dass seine Entwicklung zugunsten eines C ++ - Umschreibens mit dem Namen CIFPARSE-OBJ eingestellt wurde.

khinsen
quelle
3

Ich weiß, dass es um C geht, aber es gibt eine großartige Möglichkeit, dies mit der GLGRAPHICS-Bibliothek zu tun, die OPENGL in Processing implementiert (ein Java-basiertes Framework mit c ++ -ähnlicher Syntax). OpenGL ist unabhängig von der von Ihnen verwendeten Sprache grundsätzlich gleich, daher sollte Java den Leistungsunterschied nicht zu groß machen. Wie auch immer, die GLGRAPHICS-Bibliothek enthält einen pdb-Viewer, der sofort einsatzbereit ist. Es ist super einfach zu optimieren und das Processing-Forum hat eine wirklich reaktionsschnelle Anhängerschaft. Es könnte ein guter Ausgangspunkt sein.

GLGRAPHICS Library http://sourceforge.net/projects/glgraphics/files/glgraphics/1.0/ siehe GLGRAPHICS / examples / PDBview

wird bearbeitet http://processing.org/

Als letztes möchten Sie vielleicht dieses (weniger 3D, aber immer noch cooles Beispiel) ausprobieren: http://www.mydisk.se/tgn380/webpage/RECEPTOR/

D.Deriso
quelle
3

Wenn Sie bereit sind, mit C ++ zu arbeiten, würde ich ESBTL empfehlen .

Anstatt sich mit Dateien im PDB-Format zu befassen, können Sie sie auch aus der Proteindatenbank im PDBML-Format (eigentlich XML) herunterladen . Sie können dann PDBML-Dateien mit Ihrer bevorzugten XML-Bibliothek für C analysieren (z. B. mit Libxml2 ).

Juan M. Bello-Rivas
quelle
1

Obwohl dies möglicherweise nicht die beabsichtigte Verwendung der Software ist, habe ich die Parser und allgemeinen Proteinstruktur-Verarbeitungsmethoden in der gefunden VMD zu finden sind Quellcode enthaltenen robust und umfassend sind.

VMD ist ein Open-Source-Tool zur molekularen Visualisierung. Es ist relativ einfach zu verlängern, wenn dies angemessen ist, da sonst Code daraus ausgeschlachtet werden kann.

Stewart
quelle
VMD ist kostenlos, aber nicht Open Source. Sie müssen um Zugriff auf den Quellcode bitten und dürfen ihn nicht weitergeben.
Khinsen
@khinsen Die Lizenz ist an ks.uiuc.edu/Research/vmd/current/LICENSE.html und es tut erlauben die Verteilung von abgeleiteten Werken. Soweit mir bekannt ist, müssen Sie sich registrieren, um den Quellcode zu erhalten. Dies ist jedoch ein automatisierter Prozess, genau wie das Abrufen des ausführbaren Pakets.
Stewart
Derivative Arbeiten unterliegen strengen Einschränkungen. Sie können es nur frei verbreiten, wenn es höchstens 10% des VMD-Codes enthält, der nicht mehr als 50% der abgeleiteten Arbeit darstellen darf. In der Praxis können Sie eine etwas geänderte Version von VMD nicht verteilen. Sie können nur einen Patch verteilen und Leute bitten, VMD vom offiziellen Server zu beziehen. Das ist nach meinen Maßstäben nicht Open Source.
Khinsen
1

PDB-Dateien können in C ++ mit dem Open-Source- Chemkit (BSD-lizenziert) einfach gelesen und bearbeitet werden Bibliothek .

Als Beispiel sehen Sie hier einen Code, der eine PDB-Datei für Hämoglobin (PDB-ID: 2DHB ) liest und die Gesamtzahl der Atome, die Anzahl der Ketten und die vom Lösungsmittel zugängliche Oberfläche ausgibt :

#include <iostream>

#include <chemkit/polymer.h>
#include <chemkit/polymerfile.h>
#include <chemkit/molecularsurface.h>

using namespace chemkit;

int main()
{
    PolymerFile file("2DHB.pdb");
    bool ok = file.read();
    if(!ok){
        std::cerr << "Failed to read file: " << file.errorString() << std::endl;
        return -1;
    }

    Polymer *protein = file.polymer();
    if(!protein){
        std::cerr << "File is empty." << std::endl;
        return -1;
    }

    std::cout << "Number of Atoms: " << protein->atomCount() << std::endl;
    std::cout << "Number of Chains: " << protein->chainCount() << std::endl;

    MolecularSurface surface(protein);
    surface.setSurfaceType(MolecularSurface::SolventAccessible);

    std::cout << "Surface Area: " << surface.surfaceArea() << " A^2" << std::endl;

    return 0;
}

Ausgabe:

Number of Atoms: 2201
Number of Chains: 2
Surface Area: 14791 A^2

Weitere Informationen finden Sie in der Dokumentation der oben dargestellten Klassen:

Kyle Lutz
quelle
0

Sie könnten auch eine andere "Sprache" wie CNS in Betracht ziehen , die speziell für die Arbeit mit molekularen Strukturen entwickelt wurde und die von Ihnen genannten Funktionen hat.

Christopher Bottoms
quelle