af7036fa631042045c7daa6a9a1bc04a883f8ee3
[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   /**
90    * Test for colour calculation when the consensus percentage ignores gapped
91    * sequences
92    */
93   @Test(groups = "Functional")
94   public void testFindColour_ignoreGaps()
95   {
96     /*
97      * CCC
98      * CCC
99      * -CC
100      * first column is 66% C (blue) including gaps
101      * or 100% C ignoring gaps
102      */
103     String fasta = ">seq1\nCCC\n>seq2\nccc\n>seq3\n-CC\n";
104     AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(fasta,
105             DataSourceType.PASTE);
106     AlignmentI al = af.getViewport().getAlignment();
107     ClustalxColourScheme cs = new ClustalxColourScheme(al, null);
108   
109     /*
110      * column 1 is 66% C which is above Clustalx threshold of 60%
111      */
112     Color clustalBlue = ClustalxColourScheme.ClustalColour.BLUE.colour;
113     assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalBlue);
114
115     /*
116      * set directly to ignore gaps
117      */
118     cs.setIncludeGaps(false);
119     Color clustalPink = ClustalxColourScheme.ClustalColour.PINK.colour;
120     assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalPink);
121
122     /*
123      * set ignore gaps on the viewport...
124      */
125     cs.setIncludeGaps(true);
126     assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalBlue);
127     af.getViewport().setIgnoreGapsConsensus(true, af.alignPanel);
128     // next test fails: colour scheme does not read ignore gaps flag from
129     // viewport
130     // assertEquals(cs.findColour('C', 0, al.getSequenceAt(0)), clustalPink);
131   }
132 }