BioJava:CookbookFrench:Count:Residues
Comment compter les résidues d’une Sequence?
Faire le décompte des résidues d’une Sequence est une tâche standard de la bio-informatique. En général, vous construiriez un tableau d’entiers et établiriez une forme d’indexation arbitraire. Mieux encore, vous pourriez utiliser un AlphabetIndex pour imposer un index standardisé. Vous pouvez en obtenir un à partir du AlphabetManager en utilisant les méthodes getAlphabetIndex(). Parce que ce type de traitement est si souvent utilisé, BioJava enveloppe toutes les indexations de ce type dans une classe appellée IndexedCount, une implementation de l’interface Count.
Le programme suivant lit un fichier de séquence d’un type quelquonque et en compte les résidues, imprimant les résultats sur STDOUT. Noter que ce programme ne peut accepter des Symbols ambigüs. Si vous voulez faire le décompte des Symbols ambigüs, vous devez ajouter un décompte partiel pour chaque Symbol qui fait partie de l’ambiguité. Si c’est le cas, vous utiliseriez la solution 2.
Solution 1
```java import java.io.*; import java.util.*;
import org.biojava.bio.dist.*; import org.biojava.bio.seq.*; import org.biojava.bio.seq.io.*; import org.biojava.bio.symbol.*;
public class CountResidues {
/**
* Prends 2 arguments: le 1er est un nom de fichier de séquence,le 2ème est un entier
* qui est égal à un des formats supportés par SeqIOTools. Les formats de fichiers
* appropriés sont:
* FASTADNA = 1;
* FASTAPROTEIN = 2;
* EMBL = 3;
* GENBANK = 4;
* SWISSPROT = 5;
* GENPEPT = 6;
*/
public static void main(String[] args) {
//créer une réference à un objet pour contenir les décomptes
Count counts = null;
try {
//lire le fichier de séquence
BufferedReader br = new BufferedReader(new FileReader(args[0]));
//obtenir un SequenceIterator pour les séquences contenues dans ce fichier
SequenceIterator iter = (SequenceIterator)SeqIOTools.fileToBiojava(
Integer.parseInt(args[1]), br);
//pour chaque séquence
while(iter.hasNext()){
Sequence seq = iter.nextSequence();
//au besoin, initialiser counts
if(counts == null){
counts = new IndexedCount((FiniteAlphabet)seq.getAlphabet());
}
//iteration à travers les Symbols contenus dans seq
for (Iterator i = seq.iterator(); i.hasNext(); ) {
AtomicSymbol sym = (AtomicSymbol)i.next();
counts.increaseCount(sym,1.0);
}
}
//imprimer les résultats
for (Iterator i = ((FiniteAlphabet)counts.getAlphabet()).iterator();
i.hasNext(); ) {
AtomicSymbol sym = (AtomicSymbol)i.next();
System.out.println(sym.getName()+" : "+counts.getCount(sym));
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
} ```
Solution 2
```java import java.io.*; import java.util.*;
import org.biojava.bio.dist.*; import org.biojava.bio.seq.*; import org.biojava.bio.seq.io.*; import org.biojava.bio.symbol.*;
public class CountResidues2 {
/**
* Prends 2 arguments: le 1er est un nom de fichier de séquence,le 2ème est un entier
* qui est égal à un des formats supportés par SeqIOTools. Les formats de fichiers
* appropriés sont:
* FASTADNA = 1;
* FASTAPROTEIN = 2;
* EMBL = 3;
* GENBANK = 4;
* SWISSPROT = 5;
* GENPEPT = 6;
*/
public static void main(String[] args) {
//créer une réference à un objet pour contenir les décomptes
Count counts = null;
try {
//lire le fichier de séquence
BufferedReader br = new BufferedReader(new FileReader(args[0]));
//obtenir un SequenceIterator pour les séquences de ce fichier
SequenceIterator iter = (SequenceIterator)SeqIOTools.fileToBiojava(
Integer.parseInt(args[1]), br);
//pour chaque séquence
while(iter.hasNext()){
Sequence seq = iter.nextSequence();
//au besoin, initialiser counts
if(counts == null){
counts = new IndexedCount((FiniteAlphabet)seq.getAlphabet());
}
//faire un iteration à travers les Symbols de seq
for (Iterator i = seq.iterator(); i.hasNext(); ) {
Symbol sym = (Symbol)i.next();
/*
* Ce Symbol peut etre ambigu: ajouter un décompte partiel pour chaque Symbol
* qui constitue ce Symbol ambigu. Ex.: le Symbol ADN ambigu est crée à partir
* d'un Alphabet de 4 Symbols, alors ajouter 0.25 au décompte de chacun des nucl.
*/
FiniteAlphabet subSymbols = (FiniteAlphabet)sym.getMatches();
for (Iterator i2 = subSymbols.iterator(); i2.hasNext(); ) {
AtomicSymbol sym2 = (AtomicSymbol)i2.next();
counts.increaseCount(sym2, 1.0 / (double)subSymbols.size());
}
}
}
//imprimer les résultats
for (Iterator i = ((FiniteAlphabet)counts.getAlphabet()).iterator();
i.hasNext(); ) {
AtomicSymbol sym = (AtomicSymbol)i.next();
System.out.println(sym.getName()+" : "+counts.getCount(sym));
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
} ```