package test.beast.evolution.alignment;
import java.util.List;
import org.junit.Test;
import beast.evolution.alignment.Alignment;
import beast.evolution.alignment.Sequence;
import beast.evolution.datatype.DataType;
import beast.evolution.tree.Tree;
import beast.util.TreeParser;
import junit.framework.TestCase;
public class UncertainAlignmentTest extends TestCase {
static public Tree getTreeB(Alignment data) throws Exception {
TreeParser tree = new TreeParser();
tree.initByName("taxa", data,
"newick", "(seq1:2,(seq2:1,seq3:1):1);",
"IsLabelledNewick", true);
return tree;
}
static public Tree getTreeA(Alignment data) throws Exception {
TreeParser tree = new TreeParser();
tree.initByName("taxa", data,
"newick", "((seq1:1,seq2:1):1,seq3:2);",
"IsLabelledNewick", true);
return tree;
}
static public Alignment getUncertainAlignment() throws Exception {
return getUncertainAlignment(false);
}
static public Alignment getUncertainAlignmentDoubled() throws Exception {
return getUncertainAlignment(true);
}
static public Alignment getUncertainAlignment(boolean duplicate) throws Exception {
String seq1Probs = new String("0.7,0.0,0.3,0.0; 0.0,0.3,0.0,0.7; 0.0,0.0,0.0,1.0;");
String seq2Probs = new String("0.7,0.0,0.3,0.0; 0.0,0.3,0.0,0.7; 0.0,1.0,0.0,0.0;");
String seq3Probs = new String("0.4,0.0,0.6,0.0; 0.0,0.6,0.0,0.4; 0.0,1.0,0.0,0.0;");
if (duplicate) {
seq1Probs += seq1Probs;
seq2Probs += seq2Probs;
seq3Probs += seq3Probs;
}
Sequence seq1 = new Sequence();
seq1.initByName("taxon","seq1","value",seq1Probs,"uncertain",true);
Sequence seq2 = new Sequence();
seq2.initByName("taxon","seq2","value",seq2Probs,"uncertain",true);
Sequence seq3 = new Sequence();
seq3.initByName("taxon","seq3","value",seq3Probs,"uncertain",true);
Alignment data = new Alignment();
data.initByName("sequence", seq1, "sequence", seq2, "sequence", seq3,
"dataType", "nucleotide"
);
DataType dataType = data.getDataType();
System.out.println("Most probable sequences:");
for (List<Integer> seq : data.getCounts()) {
System.out.println(dataType.state2string(seq));
}
return data;
}
static public Alignment getAlignment() throws Exception {
// The sequences now denote the most likely annotation
Sequence seq1 = new Sequence("seq1", "ATT");
Sequence seq2 = new Sequence("seq2", "ATC");
Sequence seq3 = new Sequence("seq3", "GCC");
Alignment data = new Alignment();
data.initByName("sequence", seq1, "sequence", seq2, "sequence", seq3,
"dataType", "nucleotide"
);
return data;
}
@Test
public void testUncertainAlignment() throws Exception {
Alignment data = getUncertainAlignment();
DataType dataType = data.getDataType();
System.out.println("Tip likelihoods:");
int sites = data.getCounts().get(0).size();
for (int taxon=0; taxon<data.getTaxonCount(); taxon++) {
for (int i=0; i<sites; i++) {
double[] probs = data.getTipLikelihoods(taxon,i);
for (int j=0; j<probs.length; j++) {
System.out.print(probs[j]+" ");
}
System.out.print("; ");
}
System.out.println();
}
System.out.println("Most likely sequences:");
for (List<Integer> seq : data.getCounts()) {
System.out.println(dataType.state2string(seq));
}
Alignment data2 = getAlignment();
for (int taxon=0; taxon<data.getTaxonCount(); taxon++) {
assertEquals(data.getCounts().get(taxon),data2.getCounts().get(taxon));
}
}
}