BioJava:CookbookFrench:Blast:Parser
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.
```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] 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();
}
}
```