BioJava:Cookbook:Alphabets:Custom

How do I make a custom Alphabet from custom Symbols?

This example demonstrates the creation of a ‘binary’ alphabet that will have two Symbols, zero and one. The custom made Symbols and Alphabet can then be used to make SymbolList, Sequences, Distributions, etc.

```java package biojava_in_anger;

import org.biojava.bio.symbol.*; import org.biojava.bio.*; import java.util.*;

public class Binary {

 public static void main(String[] args) {

   //make the "zero" Symbol with no annotation
   Symbol zero =
       AlphabetManager.createSymbol("zero", Annotation.EMPTY_ANNOTATION);

   //make the "one" Symbol
   Symbol one =
       AlphabetManager.createSymbol("one", Annotation.EMPTY_ANNOTATION);

   //collect the Symbols in a Set
   Set symbols = new HashSet();
   symbols.add(zero); symbols.add(one);

   //make the Binary Alphabet
   FiniteAlphabet binary = new SimpleAlphabet(symbols, "Binary");

   //iterate through the symbols to show everything works
   for (Iterator i = binary.iterator(); i.hasNext(); ) {
     Symbol sym = (Symbol)i.next();
     System.out.println(sym.getName());
   }

   //it is usual to register newly created Alphabets with the AlphabetManager
   AlphabetManager.registerAlphabet(binary.getName(), binary);

   /*
    * The newly created Alphabet will have been registered with the
    * AlphabetManager under the name "Binary". If you retreive an instance
    * of it using this name it should be canonical with the previous instance
    */
   Alphabet alpha = AlphabetManager.alphabetForName("Binary");

   //check canonical status
   System.out.println(alpha == binary);
 }

} ```