b43afec4e5960e9fcb40dfb45a7405c30fecded4
[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 java.util.Map;
25
26 import jalview.datamodel.AnnotatedCollectionI;
27 import jalview.datamodel.SequenceCollectionI;
28 import jalview.datamodel.SequenceI;
29
30 public class Blosum62ColourScheme extends ResidueColourScheme
31 {
32   public Blosum62ColourScheme()
33   {
34     super();
35   }
36
37   @Override
38   public Color findColour(char res, int j, SequenceI seq)
39   {
40     if ('a' <= res && res <= 'z')
41     {
42       // TO UPPERCASE !!!
43       res -= ('a' - 'A');
44     }
45
46     if (consensus == null || j >= consensus.length || consensus[j] == null
47             || (threshold != 0 && !aboveThreshold(res, j)))
48     {
49       return Color.white;
50     }
51
52     Color currentColour;
53
54     if (!jalview.util.Comparison.isGap(res))
55     {
56       String max = (String) consensus[j].get(AAFrequency.MAXRESIDUE);
57
58       if (max.indexOf(res) > -1)
59       {
60         currentColour = new Color(154, 154, 255);
61       }
62       else
63       {
64         int c = 0;
65         int max_aa = 0;
66         int n = max.length();
67
68         do
69         {
70           c += ResidueProperties.getBLOSUM62(max.charAt(max_aa), res);
71         } while (++max_aa < n);
72
73         if (c > 0)
74         {
75           currentColour = new Color(204, 204, 255);
76         }
77         else
78         {
79           currentColour = Color.white;
80         }
81       }
82
83       if (conservationColouring)
84       {
85         currentColour = applyConservation(currentColour, j);
86       }
87     }
88     else
89     {
90       return Color.white;
91     }
92
93     return currentColour;
94   }
95   @Override
96   public ColourSchemeI applyTo(AnnotatedCollectionI sg,
97           Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
98   { 
99     ColourSchemeI newcs = super.applyTo(sg, hiddenRepSequences);
100     return newcs;
101   }
102 }