a4c2613ec546e7d093cae2a83e2c773bc4d813fe
[jalview.git] / test / jalview / schemes / ClustalxColourSchemeTest.java
1 package jalview.schemes;
2
3 import static org.testng.Assert.assertEquals;
4
5 import jalview.datamodel.AlignmentI;
6 import jalview.gui.AlignFrame;
7 import jalview.io.DataSourceType;
8 import jalview.io.FileLoader;
9
10 import java.awt.Color;
11
12 import org.testng.annotations.Test;
13
14 public class ClustalxColourSchemeTest
15 {
16   // @formatter:off
17   private static final String FASTA = 
18           ">seq1\nAAANNNRQ\n" + 
19           ">seq2\nAAANNNRQ\n" + 
20           ">seq3\nAAANNNRQ\n" + 
21           ">seq4\nAAANNNRQ\n" + 
22           ">seq5\nAAANYYKQ\n" + 
23           ">seq6\nAAANYYKQ\n" + 
24           ">seq7\nAVKWYYKQ\n" + 
25           ">seq8\nKKKWYYQQ\n" + 
26           ">seq9\nKKKWWYQQ\n" + 
27           ">seq0\nKKKWWWQW\n";
28   // @formatter:on
29
30   @Test(groups = "Functional")
31   public void testFindColour()
32   {
33     AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(FASTA,
34             DataSourceType.PASTE);
35     AlignmentI al = af.getViewport().getAlignment();
36     ClustalxColourScheme cs = new ClustalxColourScheme(al, null);
37
38     /*
39      * column 1 is 70% A which is above Clustalx threshold of 60%
40      */
41     Color clustalBlue = new Color(0.5f, 0.7f, 0.9f);
42     assertEquals(cs.findColour('A', 0, al.getSequenceAt(0)), clustalBlue);
43
44     /*
45      * column 2 is 70% A or V which is above Clustalx threshold for group
46      */
47     assertEquals(cs.findColour('A', 0, al.getSequenceAt(1)), clustalBlue);
48
49     /*
50      * column 3 is 60% A which is not above Clustalx threshold
51      * the Ks in the other rows are not in the same Clustalx group
52      */
53     assertEquals(cs.findColour('A', 2, al.getSequenceAt(1)), Color.white);
54
55     /*
56      * column 4 is 60% N which is above Clustalx threshold of 50%
57      */
58     Color clustalGreen = new Color(0.1f, 0.8f, 0.1f);
59     assertEquals(cs.findColour('N', 3, al.getSequenceAt(1)), clustalGreen);
60
61     /*
62      * column 5 is 40% N and 40% Y which fails to pass the threshold of
63      * 50% N or 85% either
64      */
65     assertEquals(cs.findColour('N', 4, al.getSequenceAt(1)), Color.white);
66
67     /*
68      * column 6 is 40% N and 50% Y which fails to pass the threshold of
69      * 85% for either
70      */
71     assertEquals(cs.findColour('N', 5, al.getSequenceAt(1)), Color.white);
72
73     /*
74      * column 7 is 40% R and 30% K which combine to make > 60%
75      */
76     Color clustalRed = new Color(0.9f, 0.2f, 0.1f);
77     assertEquals(cs.findColour('R', 6, al.getSequenceAt(1)), clustalRed);
78     assertEquals(cs.findColour('K', 6, al.getSequenceAt(7)), clustalRed);
79
80     /*
81      * column 8 is >85% Q which qualifies K and R to be red
82      */
83     assertEquals(cs.findColour('R', 7, al.getSequenceAt(1)), clustalRed);
84     assertEquals(cs.findColour('K', 7, al.getSequenceAt(1)), clustalRed);
85
86     // TODO more test cases; check if help documentation matches implementation
87   }
88
89   // @formatter:on
90
91   /**
92    * Test for colour calculation when the consensus percentage ignores gapped
93    * sequences
94    */
95   @Test(groups = "Functional")
96   public void testFindColour_ignoreGaps()
97   {
98     /*
99      * CCC
100      * CCC
101      * -CC
102      * first column is 66% C (blue) including gaps
103      * or 100% C ignoring gaps
104      */
105     String fasta = ">seq1\nCCC\n>seq2\nccc\n>seq3\n-CC\n";
106     AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(fasta,
107             DataSourceType.PASTE);
108     AlignmentI al = af.getViewport().getAlignment();
109     ClustalxColourScheme cs = new ClustalxColourScheme(al, null);
110
111     /*
112      * column 1 is 66% C which is above Clustalx threshold of 60%
113      */
114     Color clustalBlue = ClustalxColourScheme.ClustalColour.BLUE.colour;
115     assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalBlue);
116
117     /*
118      * set directly to ignore gaps
119      */
120     cs.setIncludeGaps(false);
121     Color clustalPink = ClustalxColourScheme.ClustalColour.PINK.colour;
122     assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalPink);
123
124     /*
125      * set ignore gaps on the viewport...
126      */
127     cs.setIncludeGaps(true);
128     assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalBlue);
129     af.getViewport().setIgnoreGapsConsensus(true, af.alignPanel);
130     // next test fails: colour scheme does not read ignore gaps flag from
131     // viewport
132     // assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalPink);
133   }
134 }