2009-09-16 8 views
5

Я работаю над небольшим приложением и думаю об интеграции BLAST или других локальных поисков выравнивания в мое приложение. В моем поиске были созданы только программы, которые необходимо установить и вызывать как внешнюю программу.Выполнение BLAST/SmithWaterman выполняет поиск непосредственно из моего приложения

Есть ли способ, которым я не реализую его с нуля? Может быть, какая-нибудь готовая библиотека?

+0

Дополнения: Я знаю, что повторное осуществление BLAST было бы бесполезно.Я также не могу использовать интерфейс для взрыва, запущенного в Интернете, потому что я хочу определить свою собственную библиотеку последовательностей для выравнивания. Мне бы очень хотелось найти библиотеку, которая предлагает взлом и smith-waterman и, возможно, другие алгоритмы выравнивания, которые можно вызывать из моего кода без необходимости записывать мои последовательности во входной файл и запускать системный вызов со сложными параметрами для запуска выравниваний , – brandstaetter

+0

Есть ли причина, по которой вы не хотите делать вызовы системы() на локальную копию BLAST? –

+0

Я не хочу записывать последовательности в файл, который необходим в качестве входных данных для этих автономных программ. – brandstaetter

ответ

1

Алгоритм BLAST был реализован ~ 20 лет назад, теперь это очень большой алгоритм, и я не могу себе представить, что его можно легко реализовать с нуля. Вы можете попытаться узнать об этом, посмотрев на источники программы «blastall» в NCBI toolkit. Более простой алгоритм pairwise (Swith Waterman, Needleman-Wunsch) должен быть проще реализовать:

0

Я использую NetBLAST через двоичный файл blastcl3. Я считаю, что двоичный файл blastcl3 - довольно тонкий клиент для веб-службы NetBLAST.

Если это так, не должно быть слишком сложно обнюхать пакеты и реализовать собственный клиент. В зависимости от вашего варианта использования это может быть быстрее/проще, чем реализовать собственный алгоритм выравнивания. Однако он вводит зависимость от веб-служб NCBI.

http://www.ncbi.nlm.nih.gov/staff/tao/URLAPI/netblast.html

5

ли это быть в C или C++ будет также хорошо? Если это так, вы можете посмотреть библиотеку SeqAn here.

+0

Отлично. Я посмотрю на это, если я смогу реализовать его и на C++. – brandstaetter

5

Это тема, которая также связана с воспроизводимостью результатов: всегда лучше использовать необработанную бинарную версию, предоставляемую NCBI или UCSC, потому что это сделает ваши результаты easirir воспроизведными другими учеными и спасет вас много времени, потраченное на написание тестов (больше времени, чем вы можете себе представить).

Для повседневной работы я часто использовал exonerate, инструмент, написанный на C, который может выполнять как глобальное, так и локальное выравнивание, имеет простой unix-подобный интерфейс и не требует форматирования ввода как с взрывом.

Кроме того, имейте в виду, что люди обычно используют комбинацию make-файлов и скриптов для определения конвейера, а не для вызова всего из сценария: большинство языков программирования нехорошо определяют конвейеры, в то время как автоматические инструменты сборки, такие как Make, не являются полезно для задач сценариев. Взгляните на эти примеры: http://skam.sourceforge.net/skam-intro.htmlhttp://swc.scipy.org/lec/build.html

0

Я отвечал на подобный вопрос (running BLAST (bl2seq) without creating sequence files)

В принципе, ответ, который я придумал бегала эту команду:

bl2seq -i<(echo sequence1) -j(echo sequence2) -p blastn 

, что трубы в результате эхо команды к bl2seq (взрыв 2 последовательности).

Но я не мог заставить его работать через вызывающую систему из Python