BioJava:CookBookItaliano:Alphabets:Ambiguous
Come posso costruire simboli ambigui come Y o R?
L’IBU stabilisce una codifica standard per i simboli che sono ambigui come ad esempio Y per indicare C o T, R per indicare G o C o N per indicare qualsiasi nucleotide. Biojava rappresenta questi simboli come BasisSymbols. Una istanza di un BasisSymbol può contenere uno o più componenti Symbol, queste istanze possono far parte di un Alfabeto come Simboli avendo però la capacità di essere ambigui (rappresentano più valori). Generalmente un simbolo ambiguo è ottenuto chiamato il metodo getAmbiguity(Set symbols) della classe Alphabet da cui proviene il simbolo. Nel caso si voglia costruire il simbolo Y bisognerà utilizzare un set di simboli che conterrà i simboli C e T dell’alfabeto DNA.
```java package biojava_in_anger;
import org.biojava.bio.symbol.*; import org.biojava.bio.seq.*; import java.util.*;
public class Ambiguity {
public static void main(String[] args) {
try {
//prendo L'alfabeto del DNA
Alphabet dna = DNATools.getDNA();
//creo il simbolo Y
Set symbolsThatMakeY = new HashSet();
symbolsThatMakeY.add(DNATools.c());
symbolsThatMakeY.add(DNATools.t());
Symbol y = dna.getAmbiguity(symbolsThatMakeY);
//stampo le informazioni riguardanti il sibolo di base Y
System.out.println("Formal name of 'Y' is: "+y.getName());
System.out.println("Class type of 'Y' is: "+y.getClass().getName());
//divido il BasisSymbol Y nei suoi componenti AtomicSymbols
Alphabet matches = y.getMatches();
System.out.print("The 'Y' Symbol is made of: ");
//we know that there will be a finite set of matches so its ok to cast it
for(Iterator i = ((FiniteAlphabet)matches).iterator(); i.hasNext();){
Symbol sym = (Symbol)i.next();
System.out.print(sym.getName());
if(i.hasNext())
System.out.print(", ");
}
}
catch (IllegalSymbolException ex) {
ex.printStackTrace();
}
}
} ```