JAL-1517 source formatting
[jalview.git] / src / jalview / analysis / AAFrequency.java
index 656cdcb..69d32cb 100755 (executable)
@@ -1,19 +1,22 @@
 /*
- * 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.2)
+ * Copyright (C) 2014 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.analysis;
 
@@ -91,7 +94,7 @@ public class AAFrequency
     Hashtable residueHash;
     int maxCount, nongap, i, j, v, jSize = sequences.length;
     String maxResidue;
-    char c;
+    char c = '-';
     float percentage;
 
     int[] values = new int[255];
@@ -143,25 +146,31 @@ public class AAFrequency
           values['-']++;
         }
       }
-
-      for (v = 'A'; v < 'Z'; v++)
+      if (jSize == 1)
+      {
+        maxResidue = String.valueOf(c);
+        maxCount = 1;
+      }
+      else
       {
-        if (values[v] < 2 || values[v] < maxCount)
+        for (v = 'A'; v < 'Z'; v++)
         {
-          continue;
-        }
+          if (values[v] < 2 || values[v] < maxCount)
+          {
+            continue;
+          }
 
-        if (values[v] > maxCount)
-        {
-          maxResidue = String.valueOf((char) v);
-        }
-        else if (values[v] == maxCount)
-        {
-          maxResidue += String.valueOf((char) v);
+          if (values[v] > maxCount)
+          {
+            maxResidue = String.valueOf((char) v);
+          }
+          else if (values[v] == maxCount)
+          {
+            maxResidue += String.valueOf((char) v);
+          }
+          maxCount = values[v];
         }
-        maxCount = values[v];
       }
-
       if (maxResidue.length() == 0)
       {
         maxResidue = "-";
@@ -178,8 +187,13 @@ 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;
     }
   }
@@ -195,7 +209,7 @@ public class AAFrequency
    * @param width
    * @param ignoreGapsInConsensusCalculation
    * @param includeAllConsSymbols
-   * @param nseq 
+   * @param nseq
    */
   public static void completeConsensus(AlignmentAnnotation consensus,
           Hashtable[] hconsensus, int iStart, int width,
@@ -203,8 +217,9 @@ public class AAFrequency
           boolean includeAllConsSymbols, long nseq)
   {
     completeConsensus(consensus, hconsensus, iStart, width,
-            ignoreGapsInConsensusCalculation, includeAllConsSymbols, null, nseq); // new
-                                                                            // char[]
+            ignoreGapsInConsensusCalculation, includeAllConsSymbols, null,
+            nseq); // new
+    // char[]
     // { 'A', 'C', 'G', 'T', 'U' });
   }
 
@@ -221,17 +236,26 @@ public class AAFrequency
       // initialised properly
       return;
     }
-    String fmtstr="%3.1f";
-    int precision=2;
-    while (nseq>100) {
+    String fmtstr = "%3.1f";
+    int precision = 0;
+    while (nseq >= 10)
+    {
       precision++;
-      nseq/=10;
+      nseq /= 10;
+    }
+    final Format fmt;
+    if (precision > 1)
+    {
+      // if (precision>2)
+      {
+        fmtstr = "%" + (2 + precision) + "." + (precision) + "f";
+      }
+      fmt = new Format(fmtstr);
     }
-    if (precision>2)
+    else
     {
-      fmtstr = "%"+(2+precision)+"."+precision+"f";
+      fmt = null;
     }
-    Format fmt = new Format(fmtstr);
     for (int i = iStart; i < width; i++)
     {
       Hashtable hci;
@@ -277,7 +301,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
@@ -300,7 +324,9 @@ 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++;
 
             }
@@ -310,7 +336,8 @@ public class AAFrequency
       }
       else
       {
-        mouseOver += (fmt.form(value) + "%");
+        mouseOver += ((fmt != null) ? fmt.form(value) : ((int) value))
+                + "%";
       }
       consensus.annotations[i] = new Annotation(maxRes, mouseOver, ' ',
               value);