JAL-2668 add tests for HMMER commands, annotation and io
[jalview.git] / test / jalview / datamodel / HiddenMarkovModelTest.java
1 package jalview.datamodel;
2
3 import static org.testng.Assert.assertEquals;
4
5 import jalview.io.DataSourceType;
6 import jalview.io.FileParse;
7 import jalview.io.HMMFile;
8
9 import java.io.IOException;
10 import java.net.MalformedURLException;
11
12 import org.testng.annotations.Test;
13
14 public class HiddenMarkovModelTest {
15
16   HiddenMarkovModel hmm;
17
18   @Test(priority = 0)
19   public void testGetMatchEmissionProbabilities()
20           throws MalformedURLException, IOException
21   {
22     HMMFile file = new HMMFile(new FileParse(
23             "test/jalview/io/test_PKinase_hmm.txt", DataSourceType.FILE));
24     hmm = file.getHMM();
25
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');
31
32     double[] expected = new double[4];
33     expected[0] = 0.02537400637;
34     expected[1] = 0.00588228492;
35     expected[2] = 0;
36     expected[3] = 0.04995163708;
37
38     for (int i = 0; i < 4; i++)
39     {
40       assertEquals(actual[i], expected[i], 0.001d);
41     }
42   }
43   
44   @Test(priority = 1)
45   public void testGetInsertEmissionProbabilities()
46   {
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');
52
53     double[] expected = new double[4];
54     expected[0] = 0.06841384927;
55     expected[1] = 0.06233763141;
56     expected[2] = 0;
57     expected[3] = 0.06764038926;
58
59     for (int i = 0; i < 4; i++)
60     {
61       assertEquals(actual[i], expected[i], 0.001d);
62     }
63   }
64
65   @Test(priority = 1)
66   public void testGetStateTransitionProbabilities()
67   {
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);
73
74     double[] expected = new double[4];
75     expected[0] = Double.NEGATIVE_INFINITY;
76     expected[1] = 0.00662894243;
77     expected[2] = 0.46183388908;
78     expected[3] = 1;
79
80     for (int i = 0; i < 4; i++)
81     {
82       assertEquals(actual[i], expected[i], 0.001d);
83     }
84   }
85   
86   @Test(priority = 1)
87   public void testGetConsensusAtAlignColumn()
88   {
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);
95     
96     char[] expected = new char[4];
97     expected[0] = 's';
98     expected[1] = 'k';
99     expected[2] = 'l';
100     expected[3] = 'k';
101     
102     for (int i = 0; i < 4; i++)
103     {
104       assertEquals(cons[i], expected[i]);
105     }
106     
107   }
108
109   @Test(priority = 1)
110   public void testGetConsensusSequence()
111   {
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------");
117   }
118 }