--- /dev/null
+package jalview.schemes;
+
+import static org.testng.Assert.assertEquals;
+
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AnnotatedCollectionI;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceI;
+import jalview.io.DataSourceType;
+import jalview.io.HMMFile;
+
+import java.awt.Color;
+import java.io.IOException;
+import java.net.MalformedURLException;
+
+import org.testng.annotations.Test;
+
+public class HmmerLocalBackgroundTest {
+
+ @Test(groups = "Functional")
+ public void testFindColour() throws MalformedURLException, IOException
+ {
+ HMMFile file = new HMMFile("test/jalview/io/test_PKinase_hmm.txt",
+ DataSourceType.FILE);
+
+ /*
+ * alignment with 20 residues and background frequencies:
+ * A/a, S 3/20 = 0.15
+ * M, K 4/20 = 0.2
+ * V 2/20 = 0.1
+ * Q, R, L 1/20 = 0.05
+ * log(totalCount) = log(20) = 2.996
+ */
+ SequenceI seq1 = new Sequence("seq1", "AAMMMKKKVV");
+ SequenceI seq2 = new Sequence("seq2", "aAM-QKRSSSL");
+ SequenceI hmmSeq = file.getSeqsAsArray()[0];
+ AnnotatedCollectionI ac = new Alignment(
+ new SequenceI[]
+ { hmmSeq, seq1, seq2 });
+ ColourSchemeI scheme = new HmmerLocalBackground(ac);
+
+ /*
+ * 'A' in column 1, node 2, match emission 2.77204
+ * e-2.77204 = 0.0625
+ * background frequency is 0.15
+ * ratio is < 1, log is negative, colour is Orange
+ */
+ Color actual = scheme.findColour('A', 1, null, null, 0);
+ assertEquals(actual, Color.ORANGE);
+
+ // gap is white
+ actual = scheme.findColour('-', 2, null, null, 0);
+ assertEquals(actual, Color.WHITE);
+ actual = scheme.findColour(' ', 2, null, null, 0);
+ assertEquals(actual, Color.WHITE);
+ actual = scheme.findColour('.', 2, null, null, 0);
+ assertEquals(actual, Color.WHITE);
+
+ /*
+ * 'L' in column 3, node 4, match emission 1.98342
+ * e-1.98342 = 0.1376
+ * background frequency is 0.05
+ * ratio is 2.752, log is 1.012
+ * colour is graduated 1.012/2.996 or 86/255 of the way from
+ * white(255, 255, 255) to blue(0, 0, 255)
+ */
+ actual = scheme.findColour('L', 3, null, null, 0);
+ assertEquals(actual, new Color(169, 169, 255));
+
+ /*
+ * invalid symbol is White
+ */
+ actual = scheme.findColour('X', 2, null, null, 0);
+ assertEquals(actual, Color.WHITE);
+ }
+
+}