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); } }