patch fixes JAL-1558
[jalview.git] / src / jalview / analysis / AAFrequency.java
index b24fff0..d028ade 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
- * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1)
+ * Copyright (C) 2014 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
@@ -14,6 +14,7 @@
  * 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/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.analysis;
 
@@ -181,8 +182,12 @@ public class AAFrequency
       percentage = ((float) maxCount * 100) / jSize;
       residueHash.put(PID_GAPS, new Float(percentage));
 
-      percentage = ((float) maxCount * 100) / nongap;
+      if (nongap>0) {
+        // calculate for non-gapped too
+        percentage = ((float) maxCount * 100) / nongap;
+      }
       residueHash.put(PID_NOGAPS, new Float(percentage));
+      
       result[i] = residueHash;
     }
   }
@@ -225,16 +230,22 @@ public class AAFrequency
       return;
     }
     String fmtstr="%3.1f";
-    int precision=2;
-    while (nseq>100) {
+    int precision=0;
+    while (nseq>=10) {
       precision++;
       nseq/=10;
     }
-    if (precision>2)
+    final Format fmt;
+    if (precision>1)
     {
-      fmtstr = "%"+(2+precision)+"."+precision+"f";
+      //if (precision>2)
+      {
+        fmtstr = "%"+(2+precision)+"."+(precision)+"f";
+      }
+      fmt = new Format(fmtstr);
+    } else {
+      fmt = null;
     }
-    Format fmt = new Format(fmtstr);
     for (int i = iStart; i < width; i++)
     {
       Hashtable hci;
@@ -280,7 +291,7 @@ public class AAFrequency
             tval = profile[0][alphabet[c]] * 100f
                     / profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];
             mouseOver += ((c == 0) ? "" : "; ") + alphabet[c] + " "
-                    + fmt.form(tval) + "%";
+                    + ((fmt!=null) ? fmt.form(tval) : ((int) tval)) + "%";
           }
         }
         else
@@ -303,7 +314,7 @@ public class AAFrequency
                       * 100f
                       / profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];
               mouseOver += ((p == 0) ? "" : "; ") + ((char[]) ca[c])[0]
-                      + " " + fmt.form(tval) + "%";
+                      + " " + ((fmt!=null) ? fmt.form(tval) : ((int) tval)) + "%";
               p++;
 
             }
@@ -313,7 +324,7 @@ public class AAFrequency
       }
       else
       {
-        mouseOver += (fmt.form(value) + "%");
+        mouseOver += ((fmt!=null) ? fmt.form(value) : ((int) value)) + "%";
       }
       consensus.annotations[i] = new Annotation(maxRes, mouseOver, ' ',
               value);