BioJava:CookbookPortuguese:Blast:Parser

From BioJava

Jump to: navigation, search

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();
    }
  }
}
Personal tools