BioJava:Cookbook:Alphabets:Ambiguous
How can I make an ambiguous Symbol like Y or R?
The IBU defines standard codes for symbols that are ambiguous such as Y to indicate C or T and R to indicate G or C or N to indicate any nucleotide. BioJava represents these Symbols as BasisSymbols. BasisSymbol objects can contain one or more component Symbols that are valid members of the same Alphabet as the BasisSymbol and are therefore capable of being ambiguous.
Generally an ambiguity Symbol is retrieved by calling the getAmbiguity(Set symbols) method from the Alphabet that the Symbol is intended to come from. In the case of making the Symbol Y the set ‘symbols’ used as an argument will contain the DNA Alphabet Symbols ‘C’ and ‘T’.
```java import org.biojava.bio.symbol.*; import org.biojava.bio.seq.*; import java.util.*;
public class Ambiguity {
public static void main(String[] args) {
try {
//get the DNA Alphabet
Alphabet dna = DNATools.getDNA();
//make the 'Y' symbol
Set symbolsThatMakeY = new HashSet();
symbolsThatMakeY.add(DNATools.c());
symbolsThatMakeY.add(DNATools.t());
Symbol y = dna.getAmbiguity(symbolsThatMakeY);
//print information about 'Y' basis Symbol
System.out.println("Formal name of 'Y' is: "+y.getName());
System.out.println("Class type of 'Y' is: "+y.getClass().getName());
//break the Y BasisSymbol into its component 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();
}
}
} ```