+ String description = isNaN ? null
+ : String.format("%.4f bits", value);
+ information.annotations[column] = new Annotation(
+ Character.toString(
+ Character.toUpperCase(hmmSeq.getCharAt(column))),
+ description, ' ', value);
+ }
+
+ information.graphMax = max;
+ return max;
+ }
+
+ /**
+ * Derive the occupancy count annotation
+ *
+ * @param occupancy
+ * the annotation row to add annotations to
+ * @param profiles
+ * the source consensus data
+ * @param startCol
+ * start column (inclusive)
+ * @param endCol
+ * end column (exclusive)
+ */
+ public static void completeGapAnnot(AlignmentAnnotation occupancy,
+ ProfilesI profiles, int startCol, int endCol, long nseq)
+ {
+ if (occupancy == null || occupancy.annotations == null
+ || occupancy.annotations.length < endCol)
+ {
+ /*
+ * called with a bad alignment annotation row
+ * wait for it to be initialised properly
+ */
+ return;
+ }
+ // always set ranges again
+ occupancy.graphMax = nseq;
+ occupancy.graphMin = 0;
+ double scale = 0.8 / nseq;
+ for (int i = startCol; i < endCol; i++)
+ {
+ ProfileI profile = profiles.get(i);
+ if (profile == null)
+ {
+ /*
+ * happens if sequences calculated over were
+ * shorter than alignment width
+ */
+ occupancy.annotations[i] = null;
+ return;