在C中解析蛋白质结构数据


17

我的背景是基因组学,但是最近我一直在研究与蛋白质结构有关的问题。我用C语言编写了一些相关程序,在此过程中从头开始构建了自己的PDB文件解析器。我不担心制作一个真正强大的解析器,我只是知道自己构建一个将是迫使自己真正理解PDB格式的最佳方法。

现在,我已经完成了这个过程,我正在寻找更坚固和成熟的东西。是否在C中实现了任何开源蛋白质结构库?我可以在Google上找到一些,但我以前从未听说过,而且它们似乎还不太成熟或稳定。一个稍微相关的问题:是否每个人都真的使用Python进行所有这些类型的计算吗?或自制代码?

PS。我本质上是在寻找一个包含PDB文件解析器,用于计算键角,键长,扭转角,表面可访问表面积等的函数的库。

Answers:



6

OpenBabel是C ++,但是它通常用于一般的结构化事物-它的主要重点是在多种格式之间进行转换以及能够读取多种格式。据我所知,它没有能力计算SAS面积。


3
请注意。让我报告说OpenBabel很棒,但是GPL,如果使用它开发的软件必须商业化,这可能是个问题。
Stefano Borini,

如果您正在考虑商业用途,我建议您查看OpenEye及其相关库(包括用于表面计算的强大工具)的OEChem(eyeopen.com/oechem-tk)。它不是免费或开源的,但功能强大且在整个行业中广泛使用。
Joe Corkery

4

首先从您的“相关问题”开始:我需要使用Python进行PDB解析,即使为了提高速度也需要使用某种编译语言进行后续处理。C根本不是解析的好语言,尤其是对于像PDB这样的凌乱格式而言更是如此。这可能就是为什么C中没有任何稳定成熟的PDB解析器的原因。

假设您的目标是使用PDB中的结构,您可以考虑使用mmCIF格式而不是PDB格式。mmCIF更规则,因此更易于解析。从PDB条目的mmCIF版本获得的可解析信息也比从PDB版本获得的更多。您可以在PDB网站(称为CIFPARSE)上找到mmCIF的C解析器,尽管您会注意到它的开发已被放弃,而支持C ++重写CIFPARSE-OBJ。


3

我知道这是关于C的,但是使用GLGRAPHICS库有一个很棒的方法,该库在Processing(一个具有c ++语法的基于Java的框架)中实现OPENGL。无论您使用哪种语言,OpenGL基本上都是相同的,因此Java不应在性能上造成太大差异。无论如何,GLGRAPHICS库带有一个pdb查看器,它可以直接使用。它的超级易于调整,并且Processing论坛拥有大量响应者。这可能是一个很好的起点。

GLGRAPHICS库 http://sourceforge.net/projects/glgraphics/files/glgraphics/1.0/ 请参阅GLGRAPHICS / examples / PDBview

正在处理 http://processing.org/

最后,您可能想看看这个(3d较少但仍然很酷的示例)http://www.mydisk.se/tgn380/webpage/RECEPTOR/


3

如果您愿意使用C ++,那么我建议使用ESBTL

与其处理PDB格式的文件,不如考虑从Protein Data Bank以PDBML格式(实际上是XML)下载文件。然后,您可以使用喜爱的C语言XML库(例如,使用Libxml2)来解析PDBML文件。


1

虽然这可能不是该软件的预期用途,但我发现VMD源代码中的解析器和常规蛋白质结构处理方法既强大又全面。

VMD是一种开源分子可视化工具。在适当的时候进行扩展是相对容易的,否则可以从中蚕食代码。


VMD是免费的,但不是开源的。您必须请求访问源代码,并且不能重新分发它。
khinsen 2011年

@khinsen许可证位于ks.uiuc.edu/Research/vmd/current/LICENSE.html,它确实允许分发派生作品。据我所知,您确实需要注册才能获取源代码,但这是一个自动化过程,就像获取可执行程序包一样。
斯图尔特

派生工作受到严格限制。仅当它包含最多10%的VMD代码(不能代表超过50%的派生作品)时,您才能自由分发它。实际上,您不能分发经过某种程度修改的VMD。您只能分发补丁程序,并要求人们从官方服务器获取VMD。按照我的标准,这不是开源的。
khinsen 2011年

1

使用开源(经BSD许可)的chemkit库,可以在C ++中轻松读取和处理PDB文件。

作为示例,以下代码将读取PDB文件中的血红蛋白(PDB ID:2DHB),并打印出原子总数,链数和溶剂可及表面积:

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

输出:

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

有关更多信息,请参见上述类的文档:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.