7eb920d022847579e360e033cfdcab1523cbbdd8
[jalview.git] / src / jalview / schemes / ScoreColourScheme.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.schemes;
22
23 import jalview.datamodel.SequenceI;
24
25 import java.awt.Color;
26
27 /**
28  * DOCUMENT ME!
29  * 
30  * @author $author$
31  * @version $Revision$
32  */
33 public class ScoreColourScheme extends ResidueColourScheme
34 {
35   /** DOCUMENT ME!! */
36   public double min;
37
38   /** DOCUMENT ME!! */
39   public double max;
40
41   /** DOCUMENT ME!! */
42   public double[] scores;
43
44   /**
45    * Creates a new ScoreColourScheme object.
46    * 
47    * @param scores
48    *          DOCUMENT ME!
49    * @param min
50    *          DOCUMENT ME!
51    * @param max
52    *          DOCUMENT ME!
53    */
54   public ScoreColourScheme(int symbolIndex[], double[] scores, double min,
55           double max)
56   {
57     super(symbolIndex);
58
59     this.scores = scores;
60     this.min = min;
61     this.max = max;
62
63     // Make colours in constructor
64     // Why wasn't this done earlier?
65     int i, iSize = scores.length;
66     colors = new Color[scores.length];
67     for (i = 0; i < iSize; i++)
68     {
69       float red = (float) (scores[i] - (float) min) / (float) (max - min);
70
71       if (red > 1.0f)
72       {
73         red = 1.0f;
74       }
75
76       if (red < 0.0f)
77       {
78         red = 0.0f;
79       }
80       colors[i] = makeColour(red);
81     }
82   }
83
84   /**
85    * DOCUMENT ME!
86    * 
87    * @param s
88    *          DOCUMENT ME!
89    * @param j
90    *          DOCUMENT ME!
91    * 
92    * @return DOCUMENT ME!
93    */
94   @Override
95   public Color findColour(char c, int j, SequenceI seq)
96   {
97     if (threshold > 0)
98     {
99       if (!aboveThreshold(c, j))
100       {
101         return Color.white;
102       }
103     }
104
105     if (jalview.util.Comparison.isGap(c))
106     {
107       return Color.white;
108     }
109
110     Color currentColour = colors[ResidueProperties.aaIndex[c]];
111
112     if (conservationColouring)
113     {
114       currentColour = applyConservation(currentColour, j);
115     }
116
117     return currentColour;
118   }
119
120   /**
121    * DOCUMENT ME!
122    * 
123    * @param c
124    *          DOCUMENT ME!
125    * 
126    * @return DOCUMENT ME!
127    */
128   public Color makeColour(float c)
129   {
130     return new Color(c, (float) 0.0, (float) 1.0 - c);
131   }
132 }