Analisando dados da estrutura da proteína em C


17

Minha formação é em genômica, mas recentemente trabalho com problemas relacionados à estrutura de proteínas. Escrevi alguns programas relevantes em C, construindo meu próprio analisador de arquivos PDB do zero no processo. Não me preocupei em criar um analisador realmente robusto; sabia que construir um seria a melhor maneira de me forçar a realmente entender o formato PDB.

Agora que passei por esse processo, estou procurando algo um pouco mais robusto e maduro. Existem bibliotecas de estruturas de proteínas de código aberto implementadas em C? Consegui encontrar alguns no Google, mas nunca tinha ouvido falar deles antes e eles não parecem muito maduros ou estáveis. Uma pergunta um pouco relacionada: todo mundo está realmente fazendo todos esses tipos de computação usando Python? ou código de homebrew?

PS. Estou essencialmente procurando por uma biblioteca que inclua um analisador de arquivo PDB, funções para calcular ângulos de união, comprimentos de união, ângulos de torção, área de superfície acessível de superfície etc.

Respostas:



6

O OpenBabel é C ++, mas é comumente usado para coisas estruturais gerais - seu foco principal é a conversão entre e a capacidade de ler uma ampla variedade de formatos. Até onde eu sei, ele não tem a capacidade de calcular áreas SAS, no entanto.


3
Apenas uma nota. Deixe-me relatar que o OpenBabel é ótimo, mas a GPL, que pode ser um problema se o software desenvolvido com ele precisar ser comercializado.
27411 Stefano Borini

Se você está pensando em utilidade comercial, recomendo consultar o OEChem ( eyesopen.com/oechem-tk ) do OpenEye e suas outras bibliotecas associadas (que incluem ferramentas robustas para cálculos de superfície, entre outras coisas). Não é de código aberto ou gratuito, mas é robusto e amplamente utilizado em todo o setor.
Joe Corkery

4

Para começar com a sua "pergunta relacionada": eu faço a análise do PDB no Python, mesmo quando o processamento subsequente precisa ser feito em alguma linguagem compilada para acelerar. C simplesmente não é uma boa linguagem para análise, em particular não para formatos confusos como PDB. E é provavelmente por isso que não há analisadores de PDB estáveis ​​e maduros em C.

Outra coisa que você pode considerar, assumindo que seu objetivo é trabalhar com estruturas do PDB, é usar o formato mmCIF em vez do formato PDB. O mmCIF é muito mais regular e, portanto, mais fácil de analisar. Você também obtém informações mais analisáveis ​​da versão mmCIF das entradas do PDB do que das versões do PDB. Você pode encontrar um analisador de C para mmCIF no site do PDB (chamado CIFPARSE), embora observe que seu desenvolvimento foi descartado em favor de uma reescrita de C ++ chamada CIFPARSE-OBJ.


3

Eu sei que isso é sobre C, mas existe uma ótima maneira de fazer isso usando a biblioteca GLGRAPHICS, que implementa o OPENGL no processamento (uma estrutura baseada em java com c ++ como sintaxe). O OpenGL é basicamente o mesmo, independentemente da linguagem usada, portanto o Java não deve fazer muita diferença no desempenho. De qualquer forma, a biblioteca GLGRAPHICS vem com um visualizador de pdb que funciona imediatamente. É super fácil de ajustar e o fórum Processing tem seguidores realmente responsivos. Poderia ser um bom ponto de partida.

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

Processing http://processing.org/

Por fim, convém verificar este (exemplo menos 3D, mas ainda interessante) http://www.mydisk.se/tgn380/webpage/RECEPTOR/


3

Se você deseja usar o C ++, recomendo o ESBTL .

Em vez de lidar com arquivos no formato PDB, considere fazer o download deles no Protein Data Bank no formato PDBML , que na verdade é XML. Você pode analisar arquivos PDBML usando sua biblioteca XML favorita para C (por exemplo, com Libxml2 ).


1

Embora esse talvez não seja o uso pretendido do software, achei os analisadores e os métodos gerais de processamento da estrutura de proteínas encontrados no código-fonte VMD como robustos e abrangentes.

VMD é uma ferramenta de visualização molecular de código aberto. É relativamente fácil estender quando apropriado, caso contrário, o código pode ser canibalizado a partir dele.


O VMD é gratuito, mas não de código aberto. Você precisa solicitar acesso ao código-fonte e não pode redistribuí-lo.
khinsen

@khinsen A licença está em ks.uiuc.edu/Research/vmd/current/LICENSE.html e faz permitir a distribuição de obras derivadas. Tanto quanto sei, você precisa se registrar para obter o código-fonte, mas esse é um processo automatizado, assim como o pacote executável.
Stewart

Existem severas restrições ao trabalho derivado. Você pode distribuí-lo livremente apenas se contiver no máximo 10% do código VMD, o que pode não representar mais de 50% do trabalho derivado. Na prática, você não pode distribuir uma versão modificada do VMD. Você só pode distribuir um patch e solicitar às pessoas que obtenham VMD no servidor oficial. Isso não é de código aberto para meus padrões.
khinsen

1

Os arquivos PDB podem ser lidos e manipulados facilmente em C ++ usando a biblioteca chemkit de código-fonte aberto (licenciado pela BSD) .

Como exemplo, aqui está um código que lerá um arquivo PDB para hemoglobina (ID do PDB: 2DHB ) e imprimirá o número total de átomos, número de cadeias e área de superfície acessível por 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;
}

Resultado:

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

Para mais informações, consulte a documentação das classes apresentadas acima:


0

Você também pode considerar outra "linguagem" como o CNS , projetada especificamente para trabalhar com estruturas moleculares e com as funções mencionadas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.