Mengurai data struktur protein dalam C

17

Latar belakang saya adalah genomik, tetapi saya baru-baru ini bekerja dengan masalah yang berkaitan dengan struktur protein. Saya menulis beberapa program yang relevan di C, membangun parser file PDB saya sendiri dari awal dalam proses. Saya tidak khawatir membuat parser yang benar-benar kuat, saya hanya tahu bahwa membuat parser sendiri akan menjadi cara terbaik untuk memaksa diri saya untuk benar-benar memahami format PDB.

Sekarang saya telah melalui proses ini, saya mencari sesuatu yang sedikit lebih kuat dan dewasa. Apakah ada pustaka struktur protein open source yang diimplementasikan di C? Saya dapat menemukan beberapa di Google, tetapi saya belum pernah mendengar satu pun dari mereka sebelumnya dan mereka tampaknya tidak terlalu matang atau stabil. Pertanyaan yang sedikit terkait: apakah semua orang benar-benar melakukan semua jenis perhitungan ini menggunakan Python? atau kode homebrew?

PS. Saya pada dasarnya mencari perpustakaan yang menyertakan pengurai file PDB, fungsi untuk menghitung sudut ikatan, panjang ikatan, sudut torsi, luas permukaan yang dapat diakses permukaan, dll.

Daniel Standage
sumber

Jawaban:

8

Ada pustaka C ++ yang cukup matang. Ini mungkin sedekat yang Anda dapatkan dengan C. Saya sendiri belum menemukan perpustakaan C yang dapat digunakan. Anda bisa menggunakan pustaka C ++ dan masih menulis sebagian besar kode Anda di C menggunakan extern C { }dalam kode C ++.

halfdan
sumber
1
Tautan ini sudah usang
xhg
Ini adalah rumah saat ini dari perpustakaan DSR PDB: graphics.stanford.edu/ ~
drussel/
6

OpenBabel adalah C ++, tetapi umumnya digunakan untuk hal-hal struktural umum - fokus utamanya adalah konversi di antara dan kemampuan membaca berbagai format. Sejauh yang saya tahu itu tidak memiliki kemampuan untuk menghitung area SAS.

Aesin
sumber
3
Hanya sebuah catatan. Izinkan saya melaporkan bahwa OpenBabel hebat, tetapi GPL, yang bisa menjadi masalah jika perangkat lunak yang dikembangkan dengannya harus komersial.
Stefano Borini
Jika Anda mempertimbangkan utilitas komersial, saya akan merekomendasikan melihat OEChem ( eyesopen.com/oechem-tk ) dari OpenEye dan terkait perpustakaan lain (yang termasuk alat yang kuat untuk perhitungan permukaan antara lain). Ini bukan gratis atau open source, tetapi kuat dan banyak digunakan di seluruh industri.
Joe Corkery
4

Untuk memulai dengan "pertanyaan terkait" Anda: Saya melakukan parsing PDB dengan Python, bahkan ketika pemrosesan selanjutnya perlu dilakukan dalam beberapa bahasa yang dikompilasi untuk kecepatan. C sama sekali bukan bahasa yang baik untuk parsing, khususnya bukan untuk format berantakan seperti PDB. Dan itu mungkin mengapa tidak ada parser PDB stabil dan matang di C.

Hal lain yang dapat Anda pertimbangkan, dengan asumsi tujuan Anda adalah bekerja dengan struktur dari PDB, adalah menggunakan format mmCIF daripada format PDB. mmCIF jauh lebih teratur dan dengan demikian lebih mudah diurai. Anda juga mendapatkan lebih banyak informasi yang dapat diuraikan dari versi mmCIF dari entri PDB daripada dari versi PDB. Anda dapat menemukan parser C untuk mmCIF di situs Web PDB (disebut CIFPARSE), meskipun Anda akan mencatat bahwa pengembangannya telah dibatalkan karena penulisan ulang C ++ yang disebut CIFPARSE-OBJ.

khinsen
sumber
3

Saya tahu ini tentang C, tetapi ada cara yang bagus untuk melakukan ini menggunakan perpustakaan GLGRAPHICS, yang mengimplementasikan OPENGL dalam Pemrosesan (kerangka kerja berbasis java dengan sintaksis seperti c ++). OpenGL pada dasarnya sama terlepas dari bahasa apa yang Anda gunakan, jadi Java seharusnya tidak membuat terlalu besar perbedaan kinerja. Pokoknya, perpustakaan GLGRAPHICS hadir dengan penampil pdb yang berfungsi dengan baik. Sangat mudah untuk mengubah dan forum Pemrosesan memiliki pengikut yang sangat responsif. Ini bisa menjadi titik awal yang baik.

Perpustakaan GLGRAPHICS http://sourceforge.net/projects/glgraphics/files/glgraphics/1.0/ lihat GLGRAPHICS / contoh / PDBview

Memproses http://processing.org/

Terakhir, Anda mungkin ingin memeriksa ini (kurang 3d tapi masih keren contoh) http://www.mydisk.se/tgn380/webpage/RECEPTOR/

D.Deriso
sumber
3

Jika Anda bersedia menggunakan C ++, maka saya akan merekomendasikan ESBTL .

Alih-alih berurusan dengan file dalam format PDB, Anda dapat mempertimbangkan mengunduhnya dari Protein Data Bank dalam format PDBML , yang sebenarnya adalah XML. Anda kemudian dapat mengurai file PDBML menggunakan pustaka XML favorit Anda untuk C (misalnya, dengan Libxml2 ).

Juan M. Bello-Rivas
sumber
1

Meskipun ini mungkin bukan tujuan penggunaan perangkat lunak, saya telah menemukan parser dan metode pemrosesan struktur protein umum yang ditemukan dalam kode sumber VMD menjadi kuat dan komprehensif.

VMD adalah alat visualisasi molekul open source. Relatif maju untuk memperpanjang ketika itu sesuai, jika tidak kode dapat dikanibal darinya.

Stewart
sumber
VMD gratis tetapi tidak Open Source. Anda harus meminta akses ke kode sumber dan Anda tidak boleh mendistribusikannya kembali.
khinsen
@khinsen Lisensi adalah di ks.uiuc.edu/Research/vmd/current/LICENSE.html dan itu tidak memungkinkan distribusi karya turunan. Sejauh yang saya ketahui Anda perlu mendaftar untuk mendapatkan kode sumber, tetapi itu adalah proses otomatis, seperti halnya mendapatkan paket yang dapat dieksekusi.
Stewart
Ada batasan ketat untuk pekerjaan turunan. Anda dapat mendistribusikannya secara cuma-cuma hanya jika mengandung paling banyak 10% dari kode VMD, yang mungkin tidak mewakili lebih dari 50% pekerjaan turunan. Dalam praktiknya, Anda tidak dapat mendistribusikan versi VMD yang agak dimodifikasi. Anda hanya dapat mendistribusikan tambalan dan meminta orang untuk mendapatkan VMD dari server resmi. Itu bukan Open Source menurut standar saya.
khinsen
1

File PDB dapat dibaca dan dimanipulasi dengan mudah dalam C ++ menggunakan pustaka chemkit open-source (BSD berlisensi) .

Sebagai contoh di sini adalah beberapa kode yang akan membaca dalam file PDB untuk hemoglobin (PDB ID: 2DHB ) dan mencetak jumlah total atom, jumlah rantai, dan area permukaan yang dapat diakses pelarut:

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

Keluaran:

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

Untuk informasi lebih lanjut, lihat dokumentasi untuk kelas yang disajikan di atas:

Kyle Lutz
sumber
0

Anda mungkin juga mempertimbangkan "bahasa" lain seperti CNS , yang dirancang khusus untuk bekerja dengan struktur molekul dan memiliki fungsi yang Anda sebutkan.

Christopher Bottoms
sumber