BioJava:CookbookPortuguese:Blast:Parser

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:

```java 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();
   }
 }

} ```