Analisi dei dati della struttura proteica in C


17

Il mio background è nella genomica, ma recentemente ho lavorato con problemi legati alla struttura delle proteine. Ho scritto alcuni programmi rilevanti in C, costruendo il mio parser di file PDB da zero nel processo. Non mi preoccupavo di fare un parser veramente robusto, sapevo solo che costruirne uno da solo sarebbe stato il modo migliore per costringermi a capire davvero il formato PDB.

Ora che ho attraversato questo processo, sto cercando qualcosa di un po 'più robusto e maturo. Esistono librerie di strutture proteiche open source implementate in C? Sono stato in grado di trovarne alcuni su Google, ma non ne avevo mai sentito parlare prima e non sembrano essere molto maturi o stabili. Una domanda leggermente correlata: tutti fanno davvero tutti questi tipi di calcoli usando Python? o codice homebrew?

PS. Sto essenzialmente cercando una libreria che includa un parser di file PDB, funzioni per il calcolo di angoli di legame, lunghezze di legame, angoli di torsione, area di superficie accessibile, ecc.

Risposte:


8

C'è una libreria C ++ abbastanza matura. Questo è probabilmente il più vicino possibile a C. Io stesso non ho ancora trovato alcuna libreria C utilizzabile. È possibile utilizzare la libreria C ++ e comunque scrivere la maggior parte del codice in C utilizzando extern C { }il codice C ++.


1
Il collegamento è obsoleto
xhg

Ecco l'attuale sede della libreria PDB DSR: graphics.stanford.edu/~drussel/pdb
Steven Darnell,

6

OpenBabel è C ++, ma è comunemente usato per cose strutturali generali - il suo obiettivo principale è la conversione tra e la capacità di leggere una vasta gamma di formati. Per quanto ne so, non ha la capacità di calcolare le aree SAS.


3
Solo una nota. Vorrei segnalare che OpenBabel è eccezionale, ma GPL, che può essere un problema se il software sviluppato con esso deve essere commercializzato.
Stefano Borini,

Se stai prendendo in considerazione l'utilità commerciale, ti consiglierei di guardare OEChem ( eyesopen.com/oechem-tk ) di OpenEye e le sue librerie associate (che includono tra l'altro strumenti robusti per il calcolo delle superfici). Non è gratuito o open source, ma è robusto e ampiamente utilizzato in tutto il settore.
Joe Corkery,

4

Per iniziare con la tua "domanda correlata": eseguo l'analisi del PDB in Python, anche quando l'elaborazione successiva deve essere eseguita in un linguaggio compilato per la velocità. C non è semplicemente un buon linguaggio per l'analisi, in particolare non per i formati disordinati come PDB. Ed è probabilmente per questo che non ci sono parser PDB stabili e maturi in C.

Qualcos'altro che puoi considerare, supponendo che il tuo obiettivo sia lavorare con le strutture del PDB, è usare il formato mmCIF piuttosto che il formato PDB. mmCIF è molto più regolare e quindi più facile da analizzare. È inoltre possibile ottenere più informazioni analizzabili dalla versione mmCIF delle voci del PDB rispetto alle versioni del PDB. È possibile trovare un parser C per mmCIF sul sito Web PDB (si chiama CIFPARSE), sebbene si noterà che il suo sviluppo è stato abbandonato a favore di una riscrittura C ++ chiamata CIFPARSE-OBJ.


3

So che si tratta di C, ma c'è un ottimo modo per farlo usando la libreria GLGRAPHICS, che implementa OPENGL in Processing (un framework basato su Java con sintassi come c ++). OpenGL è sostanzialmente lo stesso indipendentemente dal linguaggio che usi, quindi Java non dovrebbe fare una differenza di prestazioni troppo grande. Ad ogni modo, la libreria GLGRAPHICS viene fornita con un visualizzatore pdb che funziona immediatamente. È super facile da modificare e il forum di elaborazione ha un seguito davvero reattivo. Potrebbe essere un buon punto di partenza.

Biblioteca GLGRAPHICS http://sourceforge.net/projects/glgraphics/files/glgraphics/1.0/ consultare GLGRAPHICS / esempi / PDBview

Elaborazione http://processing.org/

Infine, potresti voler dare un'occhiata a questo (meno esempio 3d ma comunque interessante) http://www.mydisk.se/tgn380/webpage/RECEPTOR/


3

Se sei disposto ad andare con C ++, allora consiglierei ESBTL .

Invece di gestire i file in formato PDB, potresti prendere in considerazione il download dalla banca dati proteica in formato PDBML , che in realtà è XML. È quindi possibile analizzare i file PDBML utilizzando la libreria XML preferita per C (ad esempio, con Libxml2 ).


1

Sebbene ciò non preveda l'uso previsto del software, ho riscontrato che i parser e i metodi generali di elaborazione della struttura proteica presenti nel codice sorgente VMD sono robusti e completi.

VMD è uno strumento di visualizzazione molecolare open source. È relativamente avanzato da estendere quando ciò è appropriato, altrimenti il ​​codice può essere cannibalizzato da esso.


VMD è gratuito ma non Open Source. Devi chiedere l'accesso al codice sorgente e non puoi ridistribuirlo.
khinsen,

@khinsen La licenza è a ks.uiuc.edu/Research/vmd/current/LICENSE.html e non consentire la distribuzione di opere derivate. Per quanto ne so, è necessario registrarsi per ottenere il codice sorgente, ma si tratta di un processo automatizzato, proprio come ottenere il pacchetto eseguibile.
Stewart,

Esistono gravi restrizioni al lavoro derivato. Puoi distribuirlo liberamente solo se contiene al massimo il 10% del codice VMD, che potrebbe non rappresentare più del 50% del lavoro derivato. In pratica, non è possibile distribuire una versione leggermente modificata di VMD. Puoi solo distribuire una patch e chiedere alle persone di ottenere VMD dal server ufficiale. Questo non è Open Source secondo i miei standard.
Khinsen,

1

I file PDB possono essere letti e manipolati facilmente in C ++ utilizzando la libreria chemkit open source (con licenza BSD) .

Ad esempio, ecco un codice che leggerà in un file PDB per l'emoglobina (ID PDB: 2DHB ) e stamperà il numero totale di atomi, il numero di catene e l'area accessibile ai solventi:

#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;
}

Produzione:

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

Per ulteriori informazioni consultare la documentazione per le classi sopra presentate:


0

Potresti anche prendere in considerazione un altro "linguaggio" come il SNC , che è specificamente progettato per lavorare con strutture molecolari e ha le funzioni che hai citato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.