BioJava:CookbookFrench:Annotations:Filter
Comment filtrer les séquences selon leur espèce d’origine?
Le champ “espèce” (ou autre) d’une séquence en format GenBank, SwissProt ou EMBL aboutit dans une entrée de type Annotation. Tout ce qu’il y a à faire essentiellement est d’obtenir la propriété de l’espèce des annotations de chaque séquence et de vérifier celle que l’on veut.
La propriété de l’espèce dépends du fichier source: pour EMBL et SwissProt, c’est “OS”, pour GenBank, c’est “Organism”.
Le programme suivant va lire les sequences d’un fichier et les filtrer selon l’espèce. La même recette de base peut être utilisé, avec quelques modifications, pour rechercher n’importe quelle propriété d’une Annotation.
```java import java.io.*;
import org.biojava.bio.*; import org.biojava.bio.seq.*; import org.biojava.bio.seq.db.*; import org.biojava.bio.seq.io.*;
public class FilterEMBLBySpecies {
public static void main(String[] args) {
try {
//lire un fichier EMBL specifié en args[0]
BufferedReader br = new BufferedReader(new FileReader(args[0]));
SequenceIterator iter = SeqIOTools.readEmbl(br);
//le nom de l'espèce à chercher (spécifié par args[1]);
String species = args[1];
//une SequenceDB pour stocker les Sequences filtrées
SequenceDB db = new HashSequenceDB();
//lorsque chaque séquence est lue
while(iter.hasNext()){
Sequence seq = iter.nextSequence();
Annotation anno = seq.getAnnotation();
//vérifier si l'Annotation contient le champs "OS"
if(anno.containsProperty("OS")){
String property = (String)anno.getProperty("OS");
//vérifier la valeur de la proprieté; pourrait être une expression régulière
if(property.startsWith(species)){
db.addSequence(seq);
}
}
}
//écrire les séquences en format FASTA
SeqIOTools.writeFasta(System.out, db);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
} ```