Análisis de datos de estructura de proteínas en C


17

Mi experiencia es en genómica, pero recientemente he estado trabajando con problemas relacionados con la estructura de la proteína. Escribí algunos programas relevantes en C, construyendo mi propio analizador de archivos PDB desde cero en el proceso. No me preocupé por hacer un analizador realmente robusto, solo sabía que construir uno yo mismo sería la mejor manera de obligarme a entender realmente el formato PDB.

Ahora que he pasado por este proceso, estoy buscando algo un poco más robusto y maduro. ¿Hay alguna biblioteca de estructura de proteínas de código abierto implementada en C? Pude encontrar algunos en Google, pero nunca antes había oído hablar de ninguno de ellos y no parecen ser muy maduros ni estables. Una pregunta ligeramente relacionada: ¿todos realmente están haciendo todos estos tipos de cálculos usando Python? o código homebrew?

PD. Básicamente estoy buscando una biblioteca que incluya un analizador de archivos PDB, funciones para calcular ángulos de enlace, longitudes de enlace, ángulos de torsión, área de superficie accesible, etc.

Respuestas:


8

Hay una biblioteca C ++ que es bastante madura. Probablemente sea lo más cerca que estará de C. Yo mismo todavía no he encontrado ninguna biblioteca de C utilizable. Puede usar la biblioteca C ++ y aún escribir la mayor parte de su código en C usando extern C { }el código C ++.


1
El enlace está obsoleto
xhg

Aquí está el hogar actual de la biblioteca DSR PDB: graphics.stanford.edu/~drussel/pdb
Steven Darnell

6

OpenBabel es C ++, pero se usa comúnmente para cosas estructurales generales: su enfoque principal es la conversión y la capacidad de leer una amplia gama de formatos. Sin embargo, hasta donde yo sé, no tiene la capacidad de calcular áreas SAS.


3
Solo una nota. Permítanme informar que OpenBabel es excelente, pero GPL, lo que puede ser un problema si el software desarrollado con él tiene que ser comercial.
Stefano Borini

Si está considerando la utilidad comercial, recomendaría mirar OEChem ( eyesopen.com/oechem-tk ) de OpenEye y sus otras bibliotecas asociadas (que incluyen herramientas robustas para cálculos de superficie entre otras cosas). No es gratuito ni de código abierto, pero es robusto y ampliamente utilizado en toda la industria.
Joe Corkery

4

Para comenzar con su "pregunta relacionada": hago análisis PDB en Python, incluso cuando el procesamiento posterior debe hacerse en algún lenguaje compilado para mayor velocidad. C simplemente no es un buen lenguaje para analizar, en particular no para formatos desordenados como PDB. Y probablemente es por eso que no hay analizadores PDB estables y maduros en C.

Algo más que puede considerar, asumiendo que su objetivo es trabajar con estructuras del PDB, es usar el formato mmCIF en lugar del formato PDB. mmCIF es mucho más regular y, por lo tanto, más fácil de analizar. También obtiene más información analizable de la versión mmCIF de las entradas PDB que de las versiones PDB. Puede encontrar un analizador C para mmCIF en el sitio web de PDB (se llama CIFPARSE), aunque notará que su desarrollo se ha descartado en favor de una reescritura de C ++ llamada CIFPARSE-OBJ.


3

Sé que se trata de C, pero hay una excelente manera de hacerlo utilizando la biblioteca GLGRAPHICS, que implementa OPENGL en Processing (un marco basado en Java con sintaxis similar a C ++). OpenGL es básicamente el mismo independientemente del idioma que utilice, por lo que Java no debería marcar una gran diferencia en el rendimiento. De todos modos, la biblioteca GLGRAPHICS viene con un visor pdb que funciona de fábrica. Es muy fácil de ajustar y el foro de procesamiento tiene un seguimiento muy receptivo. Podría ser un buen punto de partida.

Biblioteca GLGRAPHICS http://sourceforge.net/projects/glgraphics/files/glgraphics/1.0/ ver GLGRAPHICS / examples / PDBview

Procesando http://processing.org/

Por último, es posible que desee ver esto (menos ejemplos en 3D pero aún geniales) http://www.mydisk.se/tgn380/webpage/RECEPTOR/


3

Si está dispuesto a usar C ++, le recomendaría ESBTL .

En lugar de tratar con archivos en formato PDB, puede considerar descargarlos del Protein Data Bank en formato PDBML , que en realidad es XML. Luego puede analizar archivos PDBML utilizando su biblioteca XML favorita para C (por ejemplo, con Libxml2 ).


1

Si bien este no es el uso previsto del software, he encontrado que los analizadores y los métodos generales de procesamiento de la estructura de proteínas que se encuentran dentro del código fuente de VMD son robustos y completos.

VMD es una herramienta de visualización molecular de código abierto. Es relativamente sencillo extenderlo cuando sea apropiado, de lo contrario, el código se puede eliminar de él.


VMD es gratuito pero no de código abierto. Debe solicitar acceso al código fuente y no puede redistribuirlo.
Khinsen 05 de

@khinsen La licencia está en ks.uiuc.edu/Research/vmd/current/LICENSE.html y se hace permitir la distribución de trabajos derivados. Hasta donde yo sé, es necesario registrarse para obtener el código fuente, pero ese es un proceso automatizado, al igual que obtener el paquete ejecutable.
Stewart

Existen severas restricciones al trabajo derivado. Puede distribuirlo libremente solo si contiene como máximo el 10% del código VMD, que no puede representar más del 50% del trabajo derivado. En la práctica, no puede distribuir una versión algo modificada de VMD. Solo puede distribuir un parche y pedirle a la gente que obtenga VMD del servidor oficial. Eso no es de código abierto para mis estándares.
Khinsen

1

AP archivos se pueden leer y fáciles de manipular en C ++ utilizando el código abierto (BSD licencia) chemkit biblioteca.

Como ejemplo, aquí hay un código que se leerá en un archivo PDB para hemoglobina (PDB ID: 2DHB ) e imprimirá el número total de átomos, número de cadenas y área de superficie accesible al solvente:

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

Salida:

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

Para obtener más información, consulte la documentación de las clases presentadas anteriormente:


0

También puede considerar otro "lenguaje" como el SNC , que está específicamente diseñado para trabajar con estructuras moleculares y tiene las funciones que mencionó.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.