JAL-3675 release notes for JAL-3750 JAL-3751
[jalview.git] / src / jalview / schemes / Blosum62ColourScheme.java
index 5eabc75..8188f4d 100755 (executable)
  */
 package jalview.schemes;
 
-import jalview.datamodel.AlignmentAnnotation;
+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;
-import java.util.Map;
 
 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()
@@ -44,72 +45,57 @@ public class Blosum62ColourScheme extends ResidueColourScheme
    * be coloured
    */
   @Override
-  public ColourSchemeI getInstance(AnnotatedCollectionI coll,
-          Map<SequenceI, SequenceCollectionI> hrs)
+  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 || consensus.get(j) == null
-            || (threshold != 0 && !aboveThreshold(res, j)))
+    if (Comparison.isGap(res) || consensusResidue == null)
     {
       return Color.white;
     }
 
-    Color currentColour;
+    Color colour;
 
-    if (!Comparison.isGap(res))
+    if (consensusResidue.indexOf(res) > -1)
+    {
+      colour = DARK_BLUE;
+    }
+    else
     {
-      /*
-       * test if this is the consensus (or joint consensus) residue
-       */
-      String max = consensus.get(j).getModalResidue();
+      float score = 0;
 
-      if (max.indexOf(res) > -1)
+      for (char consensus : consensusResidue.toCharArray())
       {
-        currentColour = DARK_BLUE;
+        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 = LIGHT_BLUE;
-        }
-        else
-        {
-          currentColour = Color.white;
-        }
+        colour = LIGHT_BLUE;
       }
-
-      if (conservationColouring)
+      else
       {
-        currentColour = applyConservation(currentColour, j);
+        colour = Color.white;
       }
     }
-    else
-    {
-      return Color.white;
-    }
-
-    return currentColour;
+    return colour;
   }
 
   @Override
@@ -124,24 +110,9 @@ public class Blosum62ColourScheme extends ResidueColourScheme
     return JalviewColourScheme.Blosum62.toString();
   }
 
-  /**
-   * Answers true if Conservation annotation is present, else false
-   */
   @Override
-  public boolean isApplicableTo(AnnotatedCollectionI ac)
+  public boolean isSimple()
   {
-    AlignmentAnnotation[] anns = ac.getAlignmentAnnotation();
-    if (anns == null)
-    {
-      return false;
-    }
-    for (AlignmentAnnotation ann : anns)
-    {
-      if ("Conservation".equals(ann.label))
-      {
-        return true;
-      }
-    }
     return false;
   }
 }