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


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.