JAL-1933 consensus calculation doesn’t depend on occupancy row being materialised
[jalview.git] / src / jalview / viewmodel / AlignmentViewport.java
index 3547757..0015299 100644 (file)
@@ -823,7 +823,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
   public void updateConsensus(final AlignmentViewPanel ap)
   {
     // see note in mantis : issue number 8585
-    if ((consensus == null || gapcounts == null) || !autoCalculateConsensus)
+    if (consensus == null || !autoCalculateConsensus)
     {
       return;
     }
@@ -1284,6 +1284,8 @@ public abstract class AlignmentViewport implements AlignViewportI,
 
   protected boolean showConsensus = true;
 
+  protected boolean showOccupancy = true;
+
   private Map<SequenceI, Color> sequenceColours = new HashMap<SequenceI, Color>();
 
   protected SequenceAnnotationOrder sortAnnotationsBy = null;
@@ -1893,21 +1895,17 @@ public abstract class AlignmentViewport implements AlignViewportI,
       consensus = new AlignmentAnnotation("Consensus", "PID",
               new Annotation[1], 0f, 100f, AlignmentAnnotation.BAR_GRAPH);
       initConsensus(consensus);
-      gapcounts = new AlignmentAnnotation("Occupancy",
-              "Number of aligned positions",
-              new Annotation[1], 0f, alignment.getHeight(),
-              AlignmentAnnotation.BAR_GRAPH);
-      initGapCounts(gapcounts);
+      initGapCounts();
 
       initComplementConsensus();
     }
   }
 
   /**
-   * If this is a protein alignment and there are mappings to cDNA, add the cDNA
-   * consensus annotation.
+   * If this is a protein alignment and there are mappings to cDNA, adds the
+   * cDNA consensus annotation and returns true, else returns false.
    */
-  public void initComplementConsensus()
+  public boolean initComplementConsensus()
   {
     if (!alignment.isNucleotide())
     {
@@ -1934,9 +1932,11 @@ public abstract class AlignmentViewport implements AlignViewportI,
                   "PID for cDNA", new Annotation[1], 0f, 100f,
                   AlignmentAnnotation.BAR_GRAPH);
           initConsensus(complementConsensus);
+          return true;
         }
       }
     }
+    return false;
   }
 
   private void initConsensus(AlignmentAnnotation aa)
@@ -1952,15 +1952,19 @@ public abstract class AlignmentViewport implements AlignViewportI,
 
   // these should be extracted from the view model - style and settings for
   // derived annotation
-  private void initGapCounts(AlignmentAnnotation counts)
+  private void initGapCounts()
   {
-    counts.hasText = false;
-    counts.autoCalculated = true;
-    counts.graph = AlignmentAnnotation.BAR_GRAPH;
-
-    if (showConsensus)
+    if (showOccupancy)
     {
-      alignment.addAnnotation(counts);
+      gapcounts = new AlignmentAnnotation("Occupancy",
+              "Number of aligned positions", new Annotation[1], 0f,
+              alignment.getHeight(), AlignmentAnnotation.BAR_GRAPH);
+      gapcounts.hasText = true;
+      gapcounts.autoCalculated = true;
+      gapcounts.scaleColLabel = true;
+      gapcounts.graph = AlignmentAnnotation.BAR_GRAPH;
+
+      alignment.addAnnotation(gapcounts);
     }
   }