BioJava:CookbookFrench:Blast:Parser

From BioJava

Jump to: navigation, search

Comment lire les résultats d'un fichier BLAST?

La plus grande part du crédit pour cet exemple revient à Keith James.

Une des tâches les plus fréquentes en bio-informatique est la production de résultats de comparaison de séquences avec BLAST. BioJava est capable lire les fichiers de sortie "BLAST-like" provenant de BLAST et de HMMER en utilisant un truc qui transforme les sorties BLAST en évènements SAX qui sont "écoutés" par des écouteurs (listeners) enregistrés.

Voici le pipeline de base:

Blast_sortie -> Génère les SAX events --> Convertit les SAX events --> Construit les objets à partir des résultats --> Stockage des objets dans une liste.

En pratique, ça donne le processus suivant:

InputStream--> BLASTLikeSAXParser --> SeqSimilartyAdapter --> BlastLikeSearchBuilder --> List

L'API est très flexible mais dans la plupart des cas, la recette qui suit vous donnera les résultats que vous recherchez.

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] est assumé être le nom du fichier de sortie BLAST */
  public static void main(String[] args) {
    try {
      //obtenir les entrées Blast sous la forme de Stream
      InputStream is = new FileInputStream(args[0]);
 
      //construire un BlastLikeSAXParser
      BlastLikeSAXParser parser = new BlastLikeSAXParser();
 
      // La méthode setModeLazy() relache la procedure de lecture
      // afin de permettre la lecture des rapports BLAST
      // meme lorsque BLAST a change son format de sortie
      parser.setModeLazy();
 
      //construire un adaptateur pour SAX event qui les passera a un Handler.
      SeqSimilarityAdapter adapter = new SeqSimilarityAdapter();
 
      //initialiser l'adaptateur des SAX events  de l'objet parser
      parser.setContentHandler(adapter);
 
      //la liste qui contiendra les SeqSimilaritySearchResults
      List results = new ArrayList();
 
      //créer le SearchContentHandler qui construira les SeqSimilaritySearchResults
      //dans la liste results
      SearchContentHandler builder = new BlastLikeSearchBuilder(results,
          new DummySequenceDB("queries"), new DummySequenceDBInstallation());
 
      //enregistrer builder aupres de adapter
      adapter.setSearchContentHandler(builder);
 
      //parcourir le fichier; après, la liste result contiendra
      //les SeqSimilaritySearchResults
 
      parser.parse(new InputSource(is));
      formatResults(results);
    }
    catch (SAXException ex) {
      //probleme de XML
      ex.printStackTrace();
    }catch (IOException ex) {
      //probleme de IO, comme un fichier introuvable
      ex.printStackTrace();
    }
  }
Personal tools