/** * edu.utexas.GeDBIT.type.RNA 2003.06.05 * * Copyright Information: * * Change Log: * 2003.06.05: Created, by Rui Mao * 2003.11.07: Tuned for performance, by Willard * 2004.08.18: Made constructor public, by Willard */ package GeDBIT.type; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import GeDBIT.dist.SymmetricSubstitutionWeightMatrix; import GeDBIT.dist.WeightMatrix; import GeDBIT.type.DNA.DNASymbol; /** * A compact representation of an RNA sequence. * * @author Rui Mao. Willard * @version 2003.06.06 */ public class RNA extends Sequence { private static final long serialVersionUID = -3352921445817956726L; /** * * @author Willard * */ public enum RNASymbol implements Symbol { A("Adenine", (byte) 0), C("Cytosine", (byte) 1), G("Guanine", (byte) 2), U( "Uracil", (byte) 3), R("Purine", (byte) 4), Y("Pyrimidine", (byte) 5), M("C or A", (byte) 6), K("T, U,or G", (byte) 7), W( "T, U or A", (byte) 8), S("C or G", (byte) 9), B("not A", (byte) 10), D("not C", (byte) 11), H("not G", (byte) 12), V( "not T, U", (byte) 13), N("Any base", (byte) 14); private String description; public byte byteValue; RNASymbol() { } RNASymbol(String description, byte byteValue) { this.description = description; this.byteValue = byteValue; } public String description() { return description; } public byte byteValue() { return byteValue; } public String stringValue() { return toString(); } public Symbol getSymbol(String s) { return valueOf(s); } public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(description.length()); out.writeChars(description); out.writeByte(byteValue); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { char[] charDescription = new char[in.readInt()]; for (int i = 0; i < charDescription.length; i++) { charDescription[i] = in.readChar(); } description = String.copyValueOf(charDescription); byteValue = in.readByte(); } public static int distinctSize() { return 15; } } /** * */ public static final Alphabet ALPHABET = new Alphabet(RNASymbol.values(), RNASymbol.distinctSize()); /** * @param sequenceID * @param sequence */ public RNA(String sequenceID, String sequence) { super(sequenceID, sequence); for (int i = 0; i < data.length; i++) { data[i] = (DNASymbol.valueOf(sequence.substring(i, i + 1))) .byteValue(); } } /* * (non-Javadoc) * * @see GeDBIT.type.Sequence#getAlphabet() */ public Alphabet getAlphabet() { return ALPHABET; } /* * (non-Javadoc) * * @see GeDBIT.type.Sequence#get(int) */ public Symbol get(int index) { return ALPHABET.get(data[index]); } /* * (non-Javadoc) * * @see GeDBIT.type.Sequence#toString() */ public String toString() { StringBuffer buffer = new StringBuffer(data.length); for (int i = 0; i < data.length; i++) buffer.append(ALPHABET.get(data[i])); return buffer.toString(); } /** * The SimpleEditDistanceMatrix looks like: {0,1,1,1}, {1,0,1,1}, {1,1,0,1}, * {1,1,1,0} */ public final static WeightMatrix SimpleEditDistanceMatrix = new SymmetricSubstitutionWeightMatrix( DNA.ALPHABET, new double[][] { { 0, 1, 1, 1 }, { 1, 0, 1, 1 }, { 1, 1, 0, 1 }, { 1, 1, 1, 0 } }); }