1 package jalview.datamodel;
3 import static org.testng.Assert.assertEquals;
5 import jalview.io.DataSourceType;
6 import jalview.io.FileParse;
7 import jalview.io.HMMFile;
9 import java.io.IOException;
10 import java.net.MalformedURLException;
12 import org.testng.annotations.Test;
14 public class HiddenMarkovModelTest {
16 HiddenMarkovModel hmm;
19 public void testGetMatchEmissionProbabilities()
20 throws MalformedURLException, IOException
22 HMMFile file = new HMMFile(new FileParse(
23 "test/jalview/io/test_PKinase_hmm.txt", DataSourceType.FILE));
26 double[] actual = new double[4];
27 actual[0] = hmm.getMatchEmissionProbability(0, 'R');
28 actual[1] = hmm.getMatchEmissionProbability(19, 'W');
29 actual[2] = hmm.getMatchEmissionProbability(160, 'G');
30 actual[3] = hmm.getMatchEmissionProbability(475, 'A');
32 double[] expected = new double[4];
33 expected[0] = 0.02537400637;
34 expected[1] = 0.00588228492;
36 expected[3] = 0.04995163708;
38 for (int i = 0; i < 4; i++)
40 assertEquals(actual[i], expected[i], 0.001d);
45 public void testGetInsertEmissionProbabilities()
47 double[] actual = new double[4];
48 actual[0] = hmm.getInsertEmissionProbability(2, 'A');
49 actual[1] = hmm.getInsertEmissionProbability(5, 'T');
50 actual[2] = hmm.getInsertEmissionProbability(161, 'K');
51 actual[3] = hmm.getInsertEmissionProbability(472, 'L');
53 double[] expected = new double[4];
54 expected[0] = 0.06841384927;
55 expected[1] = 0.06233763141;
57 expected[3] = 0.06764038926;
59 for (int i = 0; i < 4; i++)
61 assertEquals(actual[i], expected[i], 0.001d);
66 public void testGetStateTransitionProbabilities()
68 double[] actual = new double[4];
69 actual[0] = hmm.getStateTransitionProbability(475, hmm.MATCHTODELETE);
70 actual[1] = hmm.getStateTransitionProbability(8, hmm.MATCHTOINSERT);
71 actual[2] = hmm.getStateTransitionProbability(80, hmm.INSERTTOINSERT);
72 actual[3] = hmm.getStateTransitionProbability(475, hmm.DELETETOMATCH);
74 double[] expected = new double[4];
75 expected[0] = Double.NEGATIVE_INFINITY;
76 expected[1] = 0.00662894243;
77 expected[2] = 0.46183388908;
80 for (int i = 0; i < 4; i++)
82 assertEquals(actual[i], expected[i], 0.001d);
87 public void testGetConsensusAtAlignColumn()
89 char[] cons = new char[4];
90 cons[0] = hmm.getConsensusAtAlignColumn(10);
91 cons[1] = hmm.getConsensusAtAlignColumn(50);
92 hmm.setConsensusResidueStatus(false);
93 cons[2] = hmm.getConsensusAtAlignColumn(100);
94 cons[3] = hmm.getConsensusAtAlignColumn(400);
96 char[] expected = new char[4];
102 for (int i = 0; i < 4; i++)
104 assertEquals(cons[i], expected[i]);
110 public void testGetConsensusSequence()
112 SequenceI seq = hmm.getConsensusSequence();
113 String subStr = seq.getSequenceAsString().substring(0, 10);
114 assertEquals(subStr, "YELLEKLGSG");
115 subStr = seq.getSequenceAsString().substring(150, 161);
116 assertEquals(subStr, "-DLLK------");