2009-09-16 11 views
5

Sto lavorando a una piccola applicazione e sto pensando di integrare BLAST o altre ricerche di allineamento locali nella mia applicazione. La mia ricerca ha solo portato programmi, che devono essere installati e chiamati come un programma esterno.Esecuzione di ricerche BLAST/SmithWaterman direttamente dalla mia applicazione

C'è un modo per non implementarlo da zero? Qualche biblioteca pre-fatta forse?

+0

Aggiunta: So che BLAST ri-attuazione sarebbe inutile.Non riesco nemmeno a usare un'interfaccia per un'esplosione che gira sul web, perché voglio definire la mia libreria di sequenze per allinearmi. Mi piacerebbe trovare una libreria che offra blast e smith-waterman e possibilmente altri algoritmi di allineamento, che possono essere chiamati dal mio codice senza dover scrivere le mie sequenze in un file di input e avviare una chiamata di sistema con parametri complicati per eseguire gli allineamenti . – brandstaetter

+0

C'è qualche ragione per cui non vuoi fare chiamate "system()" a una copia locale di BLAST? –

+0

Non voglio scrivere le sequenze su un file, che è necessario come input per quei programmi stand-alone. – brandstaetter

risposta

1

L'algoritmo BLAST è stato implementato circa 20 anni fa, ora è un algoritmo molto grande e non posso immaginare che possa essere facilmente implementato da zero. Puoi provare a scoprirlo guardando le fonti del programma "blastall" nello NCBI toolkit. Un semplice algoritmo di pairwise (Swith Waterman, Needleman-Wunsch) dovrebbe essere più facile da implementare:

0

Io uso NetBLAST attraverso il binario cliente blastcl3. Credo che il binario blastcl3 sia un client piuttosto sottile per il servizio web NetBLAST.

In tal caso, non dovrebbe essere troppo difficile sniffare i pacchetti e implementare il proprio client. A seconda del caso d'uso, questo potrebbe essere più veloce/più semplice dell'implementazione del proprio algoritmo di allineamento. Tuttavia, introduce una dipendenza dai servizi Web di NCBI.

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

5

ha a essere in C, o sarebbe C++ anche essere OK? In tal caso, potresti voler consultare la libreria SeqAn here.

+0

È grandioso. Darei un'occhiata a questo, se posso implementarlo anche in C++. – brandstaetter

5

Questo è un argomento che ha anche a che fare con la riproducibilità dei risultati: è sempre meglio usare il binario dell'esplosione grezzo fornito da NCBI o UCSC, perché renderà i risultati più facili da riprodurre da altri scienziati e ti salverà un sacco di tempo speso per scrivere i test (più tempo di quanto tu possa immaginare).

Per il lavoro quotidiano ho spesso utilizzato exonerate, uno strumento scritto in C che può eseguire sia l'allineamento globale che locale, ha una semplice interfaccia unix-like e non richiede di formattare l'input come con esplosione. Inoltre, si tenga presente che le persone solitamente usano una combinazione di makefile e script per definire una pipeline, invece di chiamare tutto da uno script: la maggior parte dei linguaggi di programmazione non è buona per definire le pipeline, mentre gli strumenti di compilazione automatica come Make non lo sono utile per attività di scripting. Dai un'occhiata a questi esempi: http://skam.sourceforge.net/skam-intro.htmlhttp://swc.scipy.org/lec/build.html

0

ho postato una domanda simile (running BLAST (bl2seq) without creating sequence files)

In sostanza, la risposta mi è venuta è stata l'esecuzione di questo comando:

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

che i tubi il risultato del comando echo al bl2seq (Blast 2 sequenze) programma.

Ma non riuscivo a farlo funzionare tramite il sistema di chiamata da Python

Problemi correlati