Phân tích dữ liệu cấu trúc protein trong C


17

Nền tảng của tôi là về genomics, nhưng gần đây tôi đã làm việc với các vấn đề liên quan đến cấu trúc protein. Tôi đã viết một vài chương trình có liên quan trong C, xây dựng trình phân tích cú pháp tệp PDB của riêng tôi từ đầu trong quá trình này. Tôi không lo lắng về việc tạo một trình phân tích cú pháp thực sự mạnh mẽ, tôi chỉ biết rằng tự mình xây dựng một trình phân tích sẽ là cách tốt nhất để buộc bản thân tôi thực sự hiểu định dạng PDB.

Bây giờ tôi đã trải qua quá trình này, tôi đang tìm kiếm thứ gì đó mạnh mẽ và trưởng thành hơn một chút. Có bất kỳ thư viện cấu trúc protein nguồn mở nào được triển khai trong C không? Tôi đã có thể tìm thấy một số ít trên Google, nhưng tôi chưa bao giờ nghe thấy bất kỳ ai trong số họ trước đây và họ dường như không trưởng thành hoặc ổn định. Một câu hỏi hơi liên quan: mọi người có thực sự làm tất cả các loại tính toán này bằng Python không? hoặc mã homebrew?

Tái bút Về cơ bản, tôi đang tìm kiếm một thư viện bao gồm trình phân tích tệp PDB, các hàm để tính toán các góc trái phiếu, độ dài liên kết, góc xoắn, diện tích bề mặt có thể tiếp cận, v.v.

Câu trả lời:


8

Có một thư viện C ++ khá trưởng thành. Điều này có thể gần như bạn sẽ đến C. Bản thân tôi chưa tìm thấy bất kỳ thư viện C có thể sử dụng nào. Bạn có thể sử dụng thư viện C ++ và vẫn viết hầu hết mã của mình bằng C bằng extern C { }mã C ++.


1
Liên kết đã lỗi thời
xhg

Đây là ngôi nhà hiện tại của thư viện DSR PDB: Graphics.stanford.edu/~drussel/pdb
Steven Darnell

6

OpenBabel là C ++, nhưng nó thường được sử dụng cho những thứ cấu trúc chung - trọng tâm chính của nó là chuyển đổi giữa và khả năng đọc một loạt các định dạng. Tuy nhiên, theo như tôi biết thì nó không có khả năng tính toán các khu vực SAS.


3
Chỉ cần một lưu ý. Hãy để tôi báo cáo rằng OpenBabel là tuyệt vời, nhưng GPL, có thể là một vấn đề nếu phần mềm được phát triển cùng với nó phải được thương mại hóa.
Stefano Borini

Nếu bạn đang xem xét tiện ích thương mại, tôi khuyên bạn nên xem OEChem ( eyesopen.com/oechem-tk ) từ OpenEye và các thư viện khác liên quan của nó (bao gồm các công cụ mạnh mẽ để tính toán bề mặt trong số những thứ khác). Nó không phải là nguồn mở hoặc miễn phí, nhưng nó mạnh mẽ và được sử dụng rộng rãi trong toàn ngành.
Joe Corkery

4

Để bắt đầu với "câu hỏi liên quan" của bạn: Tôi thực hiện phân tích cú pháp PDB bằng Python, ngay cả khi việc xử lý tiếp theo cần được thực hiện bằng một số ngôn ngữ được biên dịch để tăng tốc. C đơn giản không phải là một ngôn ngữ tốt để phân tích cú pháp, đặc biệt không phải là các định dạng lộn xộn như PDB. Và đó có lẽ là lý do tại sao không có bất kỳ trình phân tích cú pháp PDB ổn định và trưởng thành nào trong C.

Một cái gì đó khác mà bạn có thể xem xét, giả sử mục tiêu của bạn là làm việc với các cấu trúc từ PDB, là sử dụng định dạng mmCIF thay vì định dạng PDB. mmCIF thường xuyên hơn nhiều và do đó dễ phân tích cú pháp hơn. Bạn cũng nhận được nhiều thông tin có thể phân tích cú pháp hơn từ phiên bản mmCIF của các mục PDB so với các phiên bản PDB. Bạn có thể tìm thấy trình phân tích cú pháp C cho mmCIF trên trang web PDB (nó được gọi là CIFPARSE), mặc dù bạn sẽ lưu ý rằng sự phát triển của nó đã bị loại bỏ để viết lại C ++ có tên là CIFPARSE-OBJ.


3

Tôi biết đây là về C, nhưng có một cách tuyệt vời để làm điều này bằng thư viện GLGRAPHICS, thực hiện OPENGL trong Xử lý (một khung dựa trên java với cú pháp như c ++). OpenGL về cơ bản là giống nhau bất kể bạn sử dụng ngôn ngữ nào, vì vậy Java không nên tạo ra sự khác biệt lớn về hiệu suất. Dù sao, thư viện GLGRAPHICS đi kèm với trình xem pdb hoạt động tốt. Nó rất dễ dàng để điều chỉnh và diễn đàn Xử lý có một phản hồi thực sự sau. Nó có thể là một điểm khởi đầu tốt.

Thư viện GLGRAPHICS http://sourceforge.net/projects/glgraphics/files/glgraphics/1.0/ xem GLGRAPHICS / example / PDBview

Đang xử lý http: // processing.org/

Cuối cùng, bạn có thể muốn kiểm tra điều này (ví dụ 3d ít hơn nhưng vẫn tuyệt vời) http://www.mydisk.se/tgn380/webpage/RECEPTOR/


3

Nếu bạn sẵn sàng sử dụng C ++, thì tôi khuyên dùng ESBTL .

Thay vì xử lý các tệp ở định dạng PDB, bạn có thể xem xét tải xuống từ Ngân hàng Dữ liệu Protein ở định dạng PDBML , thực chất là XML. Sau đó, bạn có thể phân tích các tệp PDBML bằng thư viện XML yêu thích của mình cho C (ví dụ: với Libxml2 ).


1

Mặc dù đây không phải là mục đích sử dụng của phần mềm, tôi đã tìm thấy các trình phân tích cú pháp và các phương pháp xử lý cấu trúc protein nói chung được tìm thấy trong mã nguồn VMD là mạnh mẽ và toàn diện.

VMD là một công cụ trực quan hóa phân tử nguồn mở. Nó tương đối hướng về phía trước để mở rộng khi điều đó là phù hợp, nếu không thì mã có thể được lấy từ nó.


VMD là miễn phí nhưng không phải là nguồn mở. Bạn phải yêu cầu quyền truy cập vào mã nguồn và bạn không được phân phối lại.
khinsen

@khinsen Giấy phép là ks.uiuc.edu/Research/vmd/current/LICENSE.html và nó không cho phép việc phân phối các sản phẩm phái sinh. Theo như tôi biết, bạn cần phải đăng ký để lấy mã nguồn, nhưng đó là một quy trình tự động, giống như nhận gói thực thi.
Stewart

Có những hạn chế nghiêm trọng đối với công việc phái sinh. Bạn chỉ có thể phân phối nó một cách tự do nếu nó chứa tối đa 10% mã VMD, có thể không đại diện cho hơn 50% công việc phái sinh. Trong thực tế, bạn không thể phân phối một phiên bản VMD đã được sửa đổi một chút. Bạn chỉ có thể phân phối một bản vá và yêu cầu mọi người lấy VMD từ máy chủ chính thức. Đó không phải là Nguồn mở theo tiêu chuẩn của tôi.
khinsen

1

Các tệp PDB có thể được đọc và thao tác dễ dàng trong C ++ bằng thư viện chemkit mã nguồn mở (được cấp phép BSD) .

Ví dụ ở đây là một số mã sẽ đọc trong tệp PDB cho hemoglobin (ID PDB: 2DHB ) và in ra tổng số nguyên tử, số chuỗi và diện tích bề mặt có thể tiếp cận của dung môi:

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

Đầu ra:

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

Để biết thêm thông tin, xem tài liệu cho các lớp được trình bày ở trên:


0

Bạn cũng có thể xem xét một "ngôn ngữ" khác như CNS , được thiết kế đặc biệt để làm việc với các cấu trúc phân tử và có các chức năng bạn đã đề cập.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.