JAL-3675 release notes for JAL-3750 JAL-3751
[jalview.git] / src / jalview / schemes / Blosum62ColourScheme.java
index 8d8eba0..8188f4d 100755 (executable)
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * Jalview is free software: you can redistribute it and/or
  * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
  *  
  * Jalview is distributed in the hope that it will be useful, but 
  * WITHOUT ANY WARRANTY; without even the implied warranty 
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  * PURPOSE.  See the GNU General Public License for more details.
  * 
- * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
  * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.schemes;
 
-import jalview.analysis.AAFrequency;
-
-import java.awt.Color;
-import java.util.Map;
-
+import jalview.analysis.scoremodels.ScoreModels;
+import jalview.api.AlignViewportI;
+import jalview.api.analysis.PairwiseScoreModelI;
 import jalview.datamodel.AnnotatedCollectionI;
-import jalview.datamodel.SequenceCollectionI;
 import jalview.datamodel.SequenceI;
+import jalview.util.Comparison;
+
+import java.awt.Color;
 
 public class Blosum62ColourScheme extends ResidueColourScheme
 {
+  private static final Color LIGHT_BLUE = new Color(204, 204, 255);
+
+  private static final Color DARK_BLUE = new Color(154, 154, 255);
+
   public Blosum62ColourScheme()
   {
     super();
   }
 
+  /**
+   * Returns a new instance of this colour scheme with which the given data may
+   * be coloured
+   */
+  @Override
+  public ColourSchemeI getInstance(AlignViewportI view,
+          AnnotatedCollectionI coll)
+  {
+    return new Blosum62ColourScheme();
+  }
+
   @Override
-  public Color findColour(char res, int j, SequenceI seq)
+  public Color findColour(char res, int j, SequenceI seq,
+          String consensusResidue, float pid)
   {
+    PairwiseScoreModelI sm = ScoreModels.getInstance().getBlosum62();
+
+    /*
+     * compare as upper case; note consensusResidue is 
+     * always computed as uppercase
+     */
     if ('a' <= res && res <= 'z')
     {
-      // TO UPPERCASE !!!
       res -= ('a' - 'A');
     }
 
-    if (consensus == null || j >= consensus.length || consensus[j] == null
-            || (threshold != 0 && !aboveThreshold(res, j)))
+    if (Comparison.isGap(res) || consensusResidue == null)
     {
       return Color.white;
     }
 
-    Color currentColour;
+    Color colour;
 
-    if (!jalview.util.Comparison.isGap(res))
+    if (consensusResidue.indexOf(res) > -1)
     {
-      String max = (String) consensus[j].get(AAFrequency.MAXRESIDUE);
+      colour = DARK_BLUE;
+    }
+    else
+    {
+      float score = 0;
 
-      if (max.indexOf(res) > -1)
+      for (char consensus : consensusResidue.toCharArray())
       {
-        currentColour = new Color(154, 154, 255);
+        score += sm.getPairwiseScore(consensus, res);
       }
-      else
+
+      if (score > 0)
       {
-        int c = 0;
-        int max_aa = 0;
-        int n = max.length();
-
-        do
-        {
-          c += ResidueProperties.getBLOSUM62(max.charAt(max_aa), res);
-        } while (++max_aa < n);
-
-        if (c > 0)
-        {
-          currentColour = new Color(204, 204, 255);
-        }
-        else
-        {
-          currentColour = Color.white;
-        }
+        colour = LIGHT_BLUE;
       }
-
-      if (conservationColouring)
+      else
       {
-        currentColour = applyConservation(currentColour, j);
+        colour = Color.white;
       }
     }
-    else
-    {
-      return Color.white;
-    }
+    return colour;
+  }
 
-    return currentColour;
+  @Override
+  public boolean isPeptideSpecific()
+  {
+    return true;
+  }
+
+  @Override
+  public String getSchemeName()
+  {
+    return JalviewColourScheme.Blosum62.toString();
   }
+
   @Override
-  public ColourSchemeI applyTo(AnnotatedCollectionI sg,
-          Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
-  { 
-    ColourSchemeI newcs = super.applyTo(sg, hiddenRepSequences);
-    return newcs;
+  public boolean isSimple()
+  {
+    return false;
   }
 }