JAL-3285 change method declaration in AAFrequency to match develop
[jalview.git] / src / jalview / analysis / AAFrequency.java
index 04f34dd..1fef08e 100755 (executable)
@@ -193,16 +193,14 @@ public class AAFrequency
    *          The alignment column on which the first profile is based.
    * @param end
    *          The alignment column on which the last profile is based.
-   * @param saveFullProfile
-   *          Flag for saving the counts for each profile
    * @param removeBelowBackground
-   *          Flag for removing any characters with a match emission probability
-   *          less than its background frequency
+   *          if true, symbols with a match emission probability less than
+   *          background frequency are ignored
    * @return
    */
   public static ProfilesI calculateHMMProfiles(final HiddenMarkovModel hmm,
-          int width, int start, int end, boolean saveFullProfile,
-          boolean removeBelowBackground, boolean infoLetterHeight)
+          int width, int start, int end, boolean removeBelowBackground,
+          boolean infoLetterHeight)
   {
     ProfileI[] result = new ProfileI[width];
     char[] symbols = hmm.getSymbols().toCharArray();
@@ -221,11 +219,7 @@ public class AAFrequency
       int gapCount = counts.getGapCount();
       ProfileI profile = new Profile(symbolCount, gapCount, maxCount,
               maxResidue);
-
-      if (saveFullProfile)
-      {
-        profile.setCounts(counts);
-      }
+      profile.setCounts(counts);
 
       result[column] = profile;
     }
@@ -344,20 +338,16 @@ public class AAFrequency
    * @param endCol
    *          end column (exclusive)
    * @param ignoreGaps
-   *          if true, normalise residue percentages 
+   *          if true, normalise residue percentages
    * @param showSequenceLogo
    *          if true include all information symbols, else just show modal
    *          residue
-   * @param nseq
-   *          number of sequences
    */
   public static float completeInformation(AlignmentAnnotation information,
-          ProfilesI profiles, int startCol, int endCol, long nseq,
-          float currentMax)
+          ProfilesI profiles, int startCol, int endCol)
   {
     // long now = System.currentTimeMillis();
-    if (information == null || information.annotations == null
-            || information.annotations.length < endCol)
+    if (information == null || information.annotations == null)
     {
       /*
        * called with a bad alignment annotation row 
@@ -368,44 +358,46 @@ public class AAFrequency
 
     float max = 0f;
     SequenceI hmmSeq = information.sequenceRef;
+
+    int seqLength = hmmSeq.getLength();
+    if (information.annotations.length < seqLength)
+    {
+      return 0;
+    }
+
     HiddenMarkovModel hmm = hmmSeq.getHMM();
 
     for (int column = startCol; column < endCol; column++)
     {
-      ProfileI profile = profiles.get(column);
-      if (profile == null)
+      if (column >= seqLength)
       {
-        /*
-         * happens if sequences calculated over were 
-         * shorter than alignment width
-         */
-        information.annotations[column] = null;
-        return 0f;
+        // hmm consensus sequence is shorter than the alignment
+        break;
       }
       
       float value = hmm.getInformationContent(column);
-      if (!Float.isNaN(value))
+      boolean isNaN = Float.isNaN(value);
+      if (!isNaN)
       {
         max = Math.max(max, value);
       }
 
-      String description = Float.isNaN(value) ? null
+      String description = isNaN ? null
               : String.format("%.4f bits", value);
       information.annotations[column] = new Annotation(
-              Character.toString(Character
-                      .toUpperCase(hmm.getConsensusAtAlignColumn(column))),
+              Character.toString(
+                      Character.toUpperCase(hmmSeq.getCharAt(column))),
               description, ' ', value);
     }
 
-    max = Math.max(max, currentMax);
     information.graphMax = max;
     return max;
   }
 
   /**
-   * Derive the gap count annotation row.
+   * Derive the occupancy count annotation
    * 
-   * @param gaprow
+   * @param occupancy
    *          the annotation row to add annotations to
    * @param profiles
    *          the source consensus data
@@ -414,11 +406,11 @@ public class AAFrequency
    * @param endCol
    *          end column (exclusive)
    */
-  public static void completeGapAnnot(AlignmentAnnotation gaprow,
+  public static void completeGapAnnot(AlignmentAnnotation occupancy,
           ProfilesI profiles, int startCol, int endCol, long nseq)
   {
-    if (gaprow == null || gaprow.annotations == null
-            || gaprow.annotations.length < endCol)
+    if (occupancy == null || occupancy.annotations == null
+            || occupancy.annotations.length < endCol)
     {
       /*
        * called with a bad alignment annotation row 
@@ -427,8 +419,8 @@ public class AAFrequency
       return;
     }
     // always set ranges again
-    gaprow.graphMax = nseq;
-    gaprow.graphMin = 0;
+    occupancy.graphMax = nseq;
+    occupancy.graphMin = 0;
     double scale = 0.8 / nseq;
     for (int i = startCol; i < endCol; i++)
     {
@@ -439,7 +431,7 @@ public class AAFrequency
          * happens if sequences calculated over were 
          * shorter than alignment width
          */
-        gaprow.annotations[i] = null;
+        occupancy.annotations[i] = null;
         return;
       }
 
@@ -447,7 +439,8 @@ public class AAFrequency
 
       String description = "" + gapped;
 
-      gaprow.annotations[i] = new Annotation("", description, '\0', gapped,
+      occupancy.annotations[i] = new Annotation("", description, '\0',
+              gapped,
               jalview.util.ColorUtils.bleachColour(Color.DARK_GRAY,
                       (float) scale * gapped));
     }