2009-09-16 11 views
5

Estoy trabajando en una pequeña aplicación y estoy pensando en integrar BLAST u otras búsquedas de alineación local en mi aplicación. Mi búsqueda solo ha generado programas, que deben instalarse y llamarse como un programa externo.Realizando BLAST/SmithWaterman busca directamente desde mi aplicación

¿Hay alguna manera de implementarlo desde cero? ¿Alguna biblioteca prefabricada tal vez?

+0

Adición: Sé que BLAST volver a implementar sería inútil.Tampoco puedo usar una interfaz para una explosión que se ejecuta en la web, porque quiero definir mi propia biblioteca de secuencias para alinearme. Me encantaría encontrar una biblioteca que ofrezca blast y smith-waterman y posiblemente otros algoritmos de alineación, que se puedan invocar desde mi código sin tener que escribir mis secuencias en un archivo de entrada y comenzar una llamada al sistema con parámetros complicados para ejecutar las alineaciones . – brandstaetter

+0

¿Hay algún motivo por el que no desee realizar llamadas 'system()' a una copia local de BLAST? –

+0

No quiero escribir las secuencias en un archivo, que es necesario como entrada para esos programas independientes. – brandstaetter

Respuesta

1

El algoritmo BLAST se implementó ~ hace 20 años, ahora es un algoritmo muy grande y no puedo imaginar que se pueda implementar fácilmente desde cero. Puede intentar aprender sobre esto al consultar las fuentes del programa 'blastall' en el NCBI toolkit. Un algoritmo pairwise más simple (Swith Waterman, Needleman-Wunsch) debería ser más fácil de implementar:

0

Utilizo NetBLAST a través del binario del cliente blastcl3. Creo que el binario blastcl3 es un cliente bastante delgado para el servicio web NetBLAST.

Si es así, no debería ser demasiado difícil olfatear los paquetes e implementar su propio cliente. Dependiendo de su caso de uso, esto podría ser más rápido/más fácil que implementar su propio algoritmo de alineación. Sin embargo, introduce una dependencia a los servicios web de NCBI.

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

5

¿Tiene que estar en C, C++ o pudiera también estar bien? Si es así, es posible que desee consultar la biblioteca SeqAn here.

+0

Eso es genial. Lo echaré un vistazo, si puedo implementarlo en C++ también. – brandstaetter

5

Este es un tema que también tiene que ver con la reproducibilidad de resultados: siempre es mejor usar el binario de explosión sin procesar proporcionado por NCBI o UCSC, porque hará que sus resultados sean más fáciles de reproducir por otros científicos y le ahorrará mucho tiempo dedicado a escribir pruebas (más tiempo de lo que puedes imaginar).

Para el trabajo diario a menudo he usado exonerate, una herramienta escrita en C que puede hacer alineación tanto global como local, tiene una interfaz simple tipo Unix, y no requiere formatear su entrada como con explosión

Por otra parte, tomar en cuenta que las personas suelen utilizar una combinación de archivos make y secuencias de comandos para definir una tubería, en lugar de llamar a todo, desde una secuencia de comandos: la mayoría de los lenguajes de programación no son buenos para definir las tuberías, mientras que las herramientas de construcción automatizados como el maquillaje no son útil para tareas de scripting. Eche un vistazo a estos ejemplos: http://skam.sourceforge.net/skam-intro.htmlhttp://swc.scipy.org/lec/build.html

0

He publicado una pregunta similar (running BLAST (bl2seq) without creating sequence files)

Básicamente, la respuesta que se le ocurrió fue correr este comando:

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

que las tuberías del resultado del comando echo a la bl2seq (Blast 2 secuencias) programa.

Pero no pude conseguir que funcione a través de sistema de llamada desde Python

Cuestiones relacionadas