BioJava:CookbookPortuguese:Blast:Parser
From BioJava
Como eu verifico um BLAST Result?
Grande parte do crédito para este exemplo pertence a Keith James.
Uma tarefa freqüente em bioinformatica é a geração de resultados a partir de pesquisa BLAST. O BioJava possui a habilidade de analisar gramaticalmente uma saída "Blast-like" como Blast e HMMER utilizando um truque que faz a saída Blast produzir eventos SAX que podem ser utilizados por listeners registrados.
O caminho básico é mostrado a seguir:
Blast_output --> Gera eventos SAX --> Converte eventos SAX --> Cria objetos de resultado --> Armazena-os em uma lista.
InputStream --> BLASTLikeSAXParser --> SeqSimilartyAdapter --> BlastLikeSearchBuilder --> List.
A API é muito flexível para a maioria dos propósitos e a receita abaixo o lhe dará uma idéia de como funciona:
import java.io.*; import java.util.*; import org.biojava.bio.program.sax.*; import org.biojava.bio.program.ssbind.*; import org.biojava.bio.search.*; import org.biojava.bio.seq.db.*; import org.xml.sax.*; import org.biojava.bio.*; public class BlastParser { /** * args[0] nome do arquivo de saída Blast */ public static void main(String[] args) { try { //obtém o arquivo Blast como Stream InputStream is = new FileInputStream(args[0]); //cria um BlastLikeSAXParser BlastLikeSAXParser parser = new BlastLikeSAXParser(); //cria o evento SAX adapter que irá passar eventos para um Handler. SeqSimilarityAdapter adapter = new SeqSimilarityAdapter(); //atribui o evento de parser SAX parser.setContentHandler(adapter); //A lista que armazenará o SeqSimilaritySearchResults List results = new ArrayList(); //cria o SearchContentHandler que irá gerar SeqSimilaritySearchResults //na List resultante SearchContentHandler builder = new BlastLikeSearchBuilder(results, new DummySequenceDB("queries"), new DummySequenceDBInstallation()); //registra o builder com adapter adapter.setSearchContentHandler(builder); //Verifica o arquivo, após isto a Lista de resultado será populada com //SeqSimilaritySearchResults parser.parse(new InputSource(is)); //exibe alguns detalhes blast for (Iterator i = results.iterator(); i.hasNext(); ) { SeqSimilaritySearchResult result = (SeqSimilaritySearchResult)i.next(); Annotation anno = result.getAnnotation(); for (Iterator j = anno.keys().iterator(); j.hasNext(); ) { Object key = j.next(); Object property = anno.getProperty(key); System.out.println(key+" : "+property); } System.out.println("Hits: "); //lista os acertos for (Iterator k = result.getHits().iterator(); k.hasNext(); ) { SeqSimilaritySearchHit hit = (SeqSimilaritySearchHit)k.next(); System.out.print("\tmatch: "+hit.getSubjectID()); System.out.println("\te score: "+hit.getEValue()); } System.out.println("\n"); } } catch (SAXException ex) { //erro de XML ex.printStackTrace(); }catch (IOException ex) { //erro de IO, provavelmente arquivo não encontrado ex.printStackTrace(); } } }

