complete alignment annotation row procedure
[jalview.git] / src / jalview / analysis / Conservation.java
index 1f7913b..eb68cc4 100755 (executable)
@@ -18,6 +18,7 @@
  */
 package jalview.analysis;
 
+import java.awt.Color;
 import java.util.*;
 
 import jalview.datamodel.*;
@@ -591,4 +592,85 @@ public class Conservation
     qualityRange[0] = new Double(0);
     qualityRange[1] = new Double(newmax);
   }
+
+  /**
+   * complete the given consensus and quuality annotation rows
+   * @param conservation conservation annotation row
+   * @param quality2 (optional - may be null)
+   * @param alWidth extent of consensus
+   */
+  public void completeAnnotations(AlignmentAnnotation conservation,
+          AlignmentAnnotation quality2, int alWidth)
+  {
+    char[] sequence = getConsSequence().getSequence();
+    float minR;
+    float minG;
+    float minB;
+    float maxR;
+    float maxG;
+    float maxB;
+    minR = 0.3f;
+    minG = 0.0f;
+    minB = 0f;
+    maxR = 1.0f - minR;
+    maxG = 0.9f - minG;
+    maxB = 0f - minB; // scalable range for colouring both Conservation and
+                      // Quality
+
+    float min = 0f;
+    float max = 11f;
+    float qmin = 0f;
+    float qmax = 0f;
+
+    char c;
+
+    conservation.annotations = new Annotation[alWidth];
+
+    if (quality2 != null)
+    {
+      quality2.graphMax = qualityRange[1].floatValue();
+      quality2.annotations = new Annotation[alWidth];
+      qmin = qualityRange[0].floatValue();
+      qmax = qualityRange[1].floatValue();
+    }
+
+    for (int i = 0; i < alWidth; i++)
+    {
+      float value = 0;
+
+      c = sequence[i];
+
+      if (Character.isDigit(c))
+      {
+        value = (int) (c - '0');
+      }
+      else if (c == '*')
+      {
+        value = 11;
+      }
+      else if (c == '+')
+      {
+        value = 10;
+      }
+
+      float vprop = value - min;
+      vprop /= max;
+      conservation.annotations[i] = new Annotation(String.valueOf(c),
+              String.valueOf(value), ' ', value, new Color(minR
+                      + (maxR * vprop), minG + (maxG * vprop), minB
+                      + (maxB * vprop)));
+
+      // Quality calc
+      if (quality2 != null)
+      {
+        value = ((Double) quality.get(i)).floatValue();
+        vprop = value - qmin;
+        vprop /= qmax;
+        quality2.annotations[i] = new Annotation(" ", String
+                .valueOf(value), ' ', value, new Color(minR
+                + (maxR * vprop), minG + (maxG * vprop), minB
+                + (maxB * vprop)));
+      }
+    }
+  }
 }