JAL-1432 updated copyright notices
[jalview.git] / src / jalview / schemes / Blosum62ColourScheme.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
3  * Copyright (C) 2014 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 of the License, or (at your option) any later version.
10  *  
11  * Jalview is distributed in the hope that it will be useful, but 
12  * WITHOUT ANY WARRANTY; without even the implied warranty 
13  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14  * PURPOSE.  See the GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
17  * The Jalview Authors are detailed in the 'AUTHORS' file.
18  */
19 package jalview.schemes;
20
21 import jalview.analysis.AAFrequency;
22
23 import java.awt.Color;
24 import jalview.datamodel.SequenceI;
25
26 public class Blosum62ColourScheme extends ResidueColourScheme
27 {
28   public Blosum62ColourScheme()
29   {
30     super();
31   }
32
33   @Override
34   public Color findColour(char res, int j, SequenceI seq)
35   {
36     if ('a' <= res && res <= 'z')
37     {
38       // TO UPPERCASE !!!
39       res -= ('a' - 'A');
40     }
41
42     if (consensus == null || j >= consensus.length || consensus[j] == null
43             || (threshold != 0 && !aboveThreshold(res, j)))
44     {
45       return Color.white;
46     }
47
48     Color currentColour;
49
50     if (!jalview.util.Comparison.isGap(res))
51     {
52       String max = (String) consensus[j].get(AAFrequency.MAXRESIDUE);
53
54       if (max.indexOf(res) > -1)
55       {
56         currentColour = new Color(154, 154, 255);
57       }
58       else
59       {
60         int c = 0;
61         int max_aa = 0;
62         int n = max.length();
63
64         do
65         {
66           c += ResidueProperties.getBLOSUM62(max.charAt(max_aa), res);
67         } while (++max_aa < n);
68
69         if (c > 0)
70         {
71           currentColour = new Color(204, 204, 255);
72         }
73         else
74         {
75           currentColour = Color.white;
76         }
77       }
78
79       if (conservationColouring)
80       {
81         currentColour = applyConservation(currentColour, j);
82       }
83     }
84     else
85     {
86       return Color.white;
87     }
88
89     return currentColour;
90   }
91 }