Разбор данных о структуре белка в С


17

Мой опыт в области геномики, но я недавно работал над проблемами, связанными со структурой белка. Я написал несколько соответствующих программ на C, создавая собственный анализатор PDB-файлов с самого начала. Я не беспокоился о создании действительно надежного синтаксического анализатора, я просто знал, что его создание будет лучшим способом заставить себя по-настоящему понять формат PDB.

Теперь, когда я прошел через этот процесс, я ищу что-то более надежное и зрелое. Существуют ли какие-либо библиотеки с открытым исходным кодом, реализованные в C? Мне удалось найти несколько в Google, но я никогда не слышал о них раньше, и они не кажутся достаточно зрелыми или стабильными. Немного связанный вопрос: все ли на самом деле делают все эти типы вычислений с использованием Python? или доморощенный код?

PS. По сути, я ищу библиотеку, которая включает в себя парсер файлов PDB, функции для вычисления углов склеивания, длин скручивания, углов кручения, площади поверхности, доступной поверхности, и т. Д.

Ответы:


8

Есть библиотека C ++, которая вполне зрелая. Это, вероятно, так близко, как вы доберетесь до C. Я сам еще не нашел пригодной для использования библиотеки C. Вы можете использовать библиотеку C ++ и по-прежнему писать большую часть своего кода на C, используя extern C { }в коде C ++.


1
Ссылка устарела
— xhg

Вот текущий дом библиотеки DSR PDB: graphics.stanford.edu/~drussel/pdb
— Стивен Дарнелл

6

OpenBabel - это C ++, но он обычно используется для общих структурных вещей - его основной задачей является преобразование и возможность чтения широкого спектра форматов. Насколько я знаю, у него нет возможности рассчитывать SAS-области.


3
Просто записка. Позвольте мне сообщить, что OpenBabel отличный, но GPL, что может быть проблемой, если программное обеспечение, разработанное с его помощью, должно стать коммерческим.
— Стефано Борини

Если вы рассматриваете коммерческую полезность, я бы порекомендовал взглянуть на OEChem ( eyesopen.com/oechem-tk ) из OpenEye и связанных с ним других библиотек (которые среди прочего включают в себя надежные инструменты для расчета поверхностей). Это не бесплатный или открытый исходный код, но он надежный и широко используется в отрасли.
— Джо Коркери

4

Начнем с вашего «связанного вопроса»: я делаю парсинг PDB на Python, даже если для ускорения необходимо выполнить последующую обработку на некотором скомпилированном языке. C просто не подходит для синтаксического анализа, в частности, не для таких грязных форматов, как PDB. И, вероятно, поэтому в C. нет стабильных и зрелых парсеров PDB.

Еще кое-что, что вы можете рассмотреть, предполагая, что ваша цель - работать со структурами из PDB, - это использовать формат mmCIF, а не формат PDB. mmCIF гораздо более регулярный и, следовательно, легче разбирать. Вы также получаете больше разбираемой информации из версии mmCIF записей PDB, чем из версий PDB. Вы можете найти синтаксический анализатор C для mmCIF на веб-сайте PDB (он называется CIFPARSE), хотя вы заметите, что его разработка была прекращена в пользу переписывания C ++ под названием CIFPARSE-OBJ.


3

Я знаю, что речь идет о C, но есть отличный способ сделать это, используя библиотеку GLGRAPHICS, которая реализует OPENGL в обработке (основанная на Java инфраструктура с синтаксисом, подобным c ++). 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. Затем вы можете анализировать файлы PDBML, используя вашу любимую библиотеку XML для C (например, с Libxml2 ).


1

Хотя это, возможно, не предполагаемое использование программного обеспечения, я нашел парсеры и общие методы обработки структуры белка, найденные в исходном коде VMD, надежными и всеобъемлющими.

VMD - это инструмент молекулярной визуализации с открытым исходным кодом. Когда это уместно, расширять его относительно рано, в противном случае код может быть удален из него.


VMD бесплатно, но не с открытым исходным кодом. Вы должны запросить доступ к исходному коду, и вы не можете распространять его.
— Хинсен

@khinsen Лицензия на ks.uiuc.edu/Research/vmd/current/LICENSE.html и делает позволяют распространение производных работ. Насколько я знаю, вам нужно зарегистрироваться, чтобы получить исходный код, но это автоматизированный процесс, такой же, как получение исполняемого пакета.
— Стюарт

Существуют серьезные ограничения для производной работы. Вы можете свободно распространять его, только если он содержит не более 10% кода VMD, что может составлять не более 50% производной работы. На практике вы не можете распространять несколько измененную версию VMD. Вы можете только распространить патч и попросить людей получить VMD с официального сервера. Это не Open Source по моим стандартам.
— Хинсен

1

Файлы PDB легко читаются и обрабатываются в C ++ с использованием открытого исходного кода (BSD-лицензия) библиотеки chemkit .

В качестве примера приведем код, который будет считывать в файле PDB гемоглобин (ID PDB: 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

Для получения дополнительной информации см. Документацию для классов, представленных выше:


0

Вы можете также рассмотреть другой «язык», такой как ЦНС , который специально разработан для работы с молекулярными структурами и имеет функции, которые вы упомянули.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.