Розбір даних про структуру білка в С


17

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

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

PS. Я по суті шукаю бібліотеку, яка включає аналізатор файлів PDB, функції обчислення кутів зв'язку, довжини зв'язку, кути нахилу кручення, доступної поверхні поверхні тощо.

Відповіді:


8

Існує бібліотека С ++, яка досить зріла. Це, мабуть, так близько, як ви дістанетесь до C. Я сам ще не знайшов жодної корисної бібліотеки С. Ви можете використовувати бібліотеку C ++ і все ще записувати більшу частину коду на C, використовуючи extern C { }код C ++.


1
Посилання застаріле
xhg

Ось поточний дім бібліотеки PDR PDR: graphics.stanford.edu/~drussel/pdb
Стівен Дарнелл

6

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


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

Якщо ви розглядаєте комерційну корисність, я рекомендую переглянути OEChem ( eyesopen.com/oechem-tk ) з OpenEye та пов'язаних з нею інших бібліотек (які включають надійні інструменти для обчислення поверхонь серед інших речей). Він не є безкоштовним або відкритим кодом, але він є надійним і широко використовується у всій галузі.
Джо Коркері

4

Для початку з вашим "спорідненим запитанням": я роблю розбір PDB в Python, навіть коли наступна обробка повинна бути виконана якоюсь компільованою мовою для швидкості. C просто не є гарною мовою для розбору, зокрема не для брудних форматів, таких як PDB. І тому, мабуть, не існує стабільних і зрілих парсерів PDB в C.

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


3

Я знаю, що це стосується C, але є чудовий спосіб зробити це за допомогою бібліотеки GLGRAPHICS, яка реалізує OPENGL в Processing (на базі Java бази з c ++, як синтаксис). OpenGL в основному однаковий незалежно від того, якою мовою ви користуєтесь, тому Java не повинна занадто сильно відрізнятись від продуктивності. У будь-якому разі бібліотека GLGRAPHICS оснащена програмою для перегляду pdb, яка працює поза коробкою. Його супер легко налаштувати, і на форумі Processing є дуже чуйний наступний. Це може бути гарною відправною точкою.

ГЛГРАФІКА Бібліотека http://sourceforge.net/projects/glgraphics/files/glgraphics/1.0/ див. GLGRAPHICS / прикладів / PDBview

Обробка http://processing.org/

Нарешті, ви можете перевірити це (менш 3d, але все ще класний приклад) http://www.mydisk.se/tgn380/webpage/RECEPTOR/


3

Якщо ви готові перейти на C ++, то я рекомендую ESBTL .

Замість того, щоб мати справу з файлами у форматі PDB, ви можете розглянути можливість завантаження їх із банку даних білків у форматі PDBML , що насправді є XML. Потім можна проаналізувати файли PDBML, використовуючи улюблену бібліотеку XML для C (наприклад, за допомогою Libxml2 ).


1

Хоча це і є попередньою мірою не цільовим використанням цього програмного забезпечення, я знайшов аналізатори та загальні методи обробки білкової структури, знайдені в VMD вихідному коді є надійними та всебічними.

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


VMD безкоштовний, але не з відкритим кодом. Вам потрібно попросити доступ до вихідного коду, і ви можете не перерозподіляти його.
khinsen

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

Існують суворі обмеження похідних робіт. Ви можете розповсюджувати його вільно, лише якщо він містить щонайменше 10% коду VMD, що може не представляти більше 50% похідної роботи. На практиці ви не можете поширювати дещо змінену версію VMD. Ви можете лише поширити патч і попросити людей отримати VMD з офіційного сервера. За моїми мірками це не Open Source.
khinsen

1

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

Як приклад, ось якийсь код, який буде прочитати у файлі 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

Для отримання додаткової інформації дивіться документацію для класів, представлених вище:


0

Ви також можете розглянути іншу "мову" на зразок CNS , яка спеціально розроблена для роботи з молекулярними структурами і має вказані вами функції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.