JAL-2145 JAL-1551 formatting
[jalview.git] / src / jalview / analysis / Conservation.java
index 4d64685..7b3ce25 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * 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.
  * 
  */
 package jalview.analysis;
 
-import java.awt.Color;
-import java.util.*;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceI;
 
-import jalview.datamodel.*;
+import java.awt.Color;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Vector;
 
 /**
  * Calculates conservation values for a given set of sequences
@@ -71,6 +77,8 @@ public class Conservation
 
   int[][] cons2;
 
+  private String[] consSymbs;
+
   /**
    * Creates a new Conservation object.
    * 
@@ -106,7 +114,7 @@ public class Conservation
     {
       for (s = 0; s < sSize; s++)
       {
-        sarray[s] = (SequenceI) sequences.get(s);
+        sarray[s] = sequences.get(s);
         if (sarray[s].getLength() > maxLength)
         {
           maxLength = sarray[s].getLength();
@@ -227,10 +235,7 @@ public class Conservation
               c = '-';
             }
 
-            if (!canonicaliseAa && 'a' <= c && c <= 'z')
-            {
-              c -= (32); // 32 = 'a' - 'A'
-            }
+            c = toUpperCase(c);
           }
           values[c]++;
         }
@@ -272,8 +277,7 @@ public class Conservation
                 resultHash.put(type, ht.get("-"));
               }
             }
-            else if (((Integer) resultHash.get(type)).equals((Integer) ht
-                    .get(res)) == false)
+            else if (((Integer) resultHash.get(type)).equals(ht.get(res)) == false)
             {
               resultHash.put(type, new Integer(-1));
             }
@@ -319,6 +323,7 @@ public class Conservation
       }
       else
       {
+        c = toUpperCase(c);
         nres++;
 
         if (nres == 1)
@@ -340,6 +345,22 @@ public class Conservation
   }
 
   /**
+   * Returns the upper-cased character if between 'a' and 'z', else the
+   * unchanged value
+   * 
+   * @param c
+   * @return
+   */
+  char toUpperCase(char c)
+  {
+    if ('a' <= c && c <= 'z')
+    {
+      c -= (32); // 32 = 'a' - 'A'
+    }
+    return c;
+  }
+
+  /**
    * Calculates the conservation sequence
    * 
    * @param consflag
@@ -366,17 +387,17 @@ public class Conservation
     {
       consString.append('-');
     }
-
+    consSymbs = new String[end - start + 1];
     for (int i = start; i <= end; i++)
     {
       gapcons = countConsNGaps(i);
       totGaps = gapcons[1];
-      pgaps = ((float) totGaps * 100) / (float) sequences.length;
+      pgaps = ((float) totGaps * 100) / sequences.length;
+      consSymbs[i - start] = new String();
 
       if (percentageGaps > pgaps)
       {
         resultHash = total[i - start];
-
         // Now find the verdict
         count = 0;
         enumeration = resultHash.keys();
@@ -385,12 +406,12 @@ public class Conservation
         {
           type = (String) enumeration.nextElement();
           result = (Integer) resultHash.get(type);
-
           // Do we want to count +ve conservation or +ve and -ve cons.?
           if (consflag)
           {
             if (result.intValue() == 1)
             {
+              consSymbs[i - start] = type + " " + consSymbs[i - start];
               count++;
             }
           }
@@ -398,6 +419,17 @@ public class Conservation
           {
             if (result.intValue() != -1)
             {
+              {
+                if (result.intValue() == 0)
+                {
+                  consSymbs[i - start] = consSymbs[i - start] + " !" + type;
+                }
+                else
+                {
+                  consSymbs[i - start] = type + " " + consSymbs[i - start];
+                }
+              }
+
               count++;
             }
           }
@@ -669,7 +701,7 @@ public class Conservation
 
       if (Character.isDigit(c))
       {
-        value = (int) (c - '0');
+        value = c - '0';
       }
       else if (c == '*')
       {
@@ -682,10 +714,12 @@ public class Conservation
 
       float vprop = value - min;
       vprop /= max;
+      int consp = i - start;
+      String conssym = (value > 0 && consp > -1 && consp < consSymbs.length) ? consSymbs[consp]
+              : "";
       conservation.annotations[i] = new Annotation(String.valueOf(c),
-              String.valueOf(value), ' ', value, new Color(minR
-                      + (maxR * vprop), minG + (maxG * vprop), minB
-                      + (maxB * vprop)));
+              conssym, ' ', value, new Color(minR + (maxR * vprop), minG
+                      + (maxG * vprop), minB + (maxB * vprop)));
 
       // Quality calc
       if (quality2 != null)