Merge branch 'releases/Release_2_11_3_Branch'
[jalview.git] / src / jalview / schemes / Blosum62ColourScheme.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.analysis.scoremodels.ScoreModels;
24 import jalview.api.AlignViewportI;
25 import jalview.api.analysis.PairwiseScoreModelI;
26 import jalview.datamodel.AnnotatedCollectionI;
27 import jalview.datamodel.SequenceI;
28 import jalview.util.Comparison;
29
30 import java.awt.Color;
31
32 public class Blosum62ColourScheme extends ResidueColourScheme
33 {
34   private static final Color LIGHT_BLUE = new Color(204, 204, 255);
35
36   private static final Color DARK_BLUE = new Color(154, 154, 255);
37
38   public Blosum62ColourScheme()
39   {
40     super();
41   }
42
43   /**
44    * Returns a new instance of this colour scheme with which the given data may
45    * be coloured
46    */
47   @Override
48   public ColourSchemeI getInstance(AlignViewportI view,
49           AnnotatedCollectionI coll)
50   {
51     return new Blosum62ColourScheme();
52   }
53
54   @Override
55   public Color findColour(char res, int j, SequenceI seq,
56           String consensusResidue, float pid)
57   {
58     PairwiseScoreModelI sm = ScoreModels.getInstance().getBlosum62();
59
60     /*
61      * compare as upper case; note consensusResidue is 
62      * always computed as uppercase
63      */
64     if ('a' <= res && res <= 'z')
65     {
66       res -= ('a' - 'A');
67     }
68
69     if (Comparison.isGap(res) || consensusResidue == null)
70     {
71       return Color.white;
72     }
73
74     Color colour;
75
76     if (consensusResidue.indexOf(res) > -1)
77     {
78       colour = DARK_BLUE;
79     }
80     else
81     {
82       float score = 0;
83
84       for (char consensus : consensusResidue.toCharArray())
85       {
86         score += sm.getPairwiseScore(consensus, res);
87       }
88
89       if (score > 0)
90       {
91         colour = LIGHT_BLUE;
92       }
93       else
94       {
95         colour = Color.white;
96       }
97     }
98     return colour;
99   }
100
101   @Override
102   public boolean isPeptideSpecific()
103   {
104     return true;
105   }
106
107   @Override
108   public String getSchemeName()
109   {
110     return JalviewColourScheme.Blosum62.toString();
111   }
112
113   @Override
114   public boolean isSimple()
115   {
116     return false;
117   }
118 }