JAL-1432 updated copyright notices
[jalview.git] / src / jalview / viewmodel / AlignmentViewport.java
index f37e2bd..b33f451 100644 (file)
@@ -1,19 +1,20 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
- * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
- *
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
+ * 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
+ * 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.
- *
- * 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
+ *  
+ * 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/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.viewmodel;
 
@@ -41,6 +42,7 @@ import jalview.workers.ConsensusThread;
 import jalview.workers.StrucConsensusThread;
 
 import java.util.ArrayList;
+import java.util.BitSet;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
@@ -402,7 +404,8 @@ public abstract class AlignmentViewport implements AlignViewportI
     if (autoCalculateStrucConsensus && strucConsensus == null
             && alignment.isNucleotide() && alignment.hasRNAStructure())
     {
-
+      // secondary structure has been added - so init the consensus line
+      initRNAStructure();
     }
 
     // see note in mantis : issue number 8585
@@ -593,6 +596,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return null or the currently selected sequence region
    */
+  @Override
   public SequenceGroup getSelectionGroup()
   {
     return selectionGroup;
@@ -605,6 +609,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    *          - group holding references to sequences in this alignment view
    * 
    */
+  @Override
   public void setSelectionGroup(SequenceGroup sg)
   {
     selectionGroup = sg;
@@ -1053,6 +1058,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return array of references to sequence objects
    */
+  @Override
   public SequenceI[] getSequenceSelection()
   {
     SequenceI[] sequences = null;
@@ -1075,6 +1081,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return String[]
    */
+  @Override
   public jalview.datamodel.CigarArray getViewAsCigars(
           boolean selectedRegionOnly)
   {
@@ -1091,6 +1098,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    *          boolean true to just return the selected view
    * @return AlignmentView
    */
+  @Override
   public jalview.datamodel.AlignmentView getAlignmentView(
           boolean selectedOnly)
   {
@@ -1109,6 +1117,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    *          is true)
    * @return AlignmentView
    */
+  @Override
   public jalview.datamodel.AlignmentView getAlignmentView(
           boolean selectedOnly, boolean markGroups)
   {
@@ -1124,6 +1133,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return String[]
    */
+  @Override
   public String[] getViewAsString(boolean selectedRegionOnly)
   {
     String[] selection = null;
@@ -1318,62 +1328,80 @@ public abstract class AlignmentViewport implements AlignViewportI
     {
       if (!alignment.isNucleotide())
       {
-        if (showConservation)
-        {
-          if (conservation == null)
-          {
-            conservation = new AlignmentAnnotation("Conservation",
-                    "Conservation of total alignment less than "
-                            + getConsPercGaps() + "% gaps",
-                    new Annotation[1], 0f, 11f,
-                    AlignmentAnnotation.BAR_GRAPH);
-            conservation.hasText = true;
-            conservation.autoCalculated = true;
-            alignment.addAnnotation(conservation);
-          }
-        }
-        if (showQuality)
-        {
-          if (quality == null)
-          {
-            quality = new AlignmentAnnotation("Quality",
-                    "Alignment Quality based on Blosum62 scores",
-                    new Annotation[1], 0f, 11f,
-                    AlignmentAnnotation.BAR_GRAPH);
-            quality.hasText = true;
-            quality.autoCalculated = true;
-            alignment.addAnnotation(quality);
-          }
-        }
+        initConservation();
+        initQuality();
       }
       else
       {
-        if (alignment.hasRNAStructure())
-        {
-          strucConsensus = new AlignmentAnnotation("StrucConsensus", "PID",
-                  new Annotation[1], 0f, 100f,
-                  AlignmentAnnotation.BAR_GRAPH);
-          strucConsensus.hasText = true;
-          strucConsensus.autoCalculated = true;
-        }
+        initRNAStructure();
       }
+      initConsensus();
+    }
+  }
 
-      consensus = new AlignmentAnnotation("Consensus", "PID",
-              new Annotation[1], 0f, 100f, AlignmentAnnotation.BAR_GRAPH);
-      consensus.hasText = true;
-      consensus.autoCalculated = true;
+  private void initConsensus()
+  {
 
-      if (showConsensus)
+    consensus = new AlignmentAnnotation("Consensus", "PID",
+            new Annotation[1], 0f, 100f, AlignmentAnnotation.BAR_GRAPH);
+    consensus.hasText = true;
+    consensus.autoCalculated = true;
+
+    if (showConsensus)
+    {
+      alignment.addAnnotation(consensus);
+    }
+  }
+
+  private void initConservation()
+  {
+    if (showConservation)
+    {
+      if (conservation == null)
       {
-        alignment.addAnnotation(consensus);
-        if (strucConsensus != null)
-        {
-          alignment.addAnnotation(strucConsensus);
-        }
+        conservation = new AlignmentAnnotation("Conservation",
+                "Conservation of total alignment less than "
+                        + getConsPercGaps() + "% gaps",
+                new Annotation[1], 0f, 11f,
+                AlignmentAnnotation.BAR_GRAPH);
+        conservation.hasText = true;
+        conservation.autoCalculated = true;
+        alignment.addAnnotation(conservation);
+      }
+    }
+  }
+  private void initQuality()
+  {
+    if (showQuality)
+    {
+      if (quality == null)
+      {
+        quality = new AlignmentAnnotation("Quality",
+                "Alignment Quality based on Blosum62 scores",
+                new Annotation[1], 0f, 11f,
+                AlignmentAnnotation.BAR_GRAPH);
+        quality.hasText = true;
+        quality.autoCalculated = true;
+        alignment.addAnnotation(quality);
       }
     }
   }
+  private void initRNAStructure()
+  {
+    if (alignment.hasRNAStructure() && strucConsensus==null)
+    {
+      strucConsensus = new AlignmentAnnotation("StrucConsensus", "PID",
+              new Annotation[1], 0f, 100f,
+              AlignmentAnnotation.BAR_GRAPH);
+      strucConsensus.hasText = true;
+      strucConsensus.autoCalculated = true;
 
+      if (showConsensus)
+      {
+        alignment.addAnnotation(strucConsensus);
+      }
+    }
+  }
   /*
    * (non-Javadoc)
    * 
@@ -1387,7 +1415,7 @@ public abstract class AlignmentViewport implements AlignViewportI
     int charHeight = getCharHeight();
     if (aa != null)
     {
-      boolean graphgrp[] = null;
+      BitSet graphgrp = new BitSet();
       for (int i = 0; i < aa.length; i++)
       {
         if (aa[i] == null)
@@ -1401,17 +1429,13 @@ public abstract class AlignmentViewport implements AlignViewportI
         }
         if (aa[i].graphGroup > -1)
         {
-          if (graphgrp == null)
-          {
-            graphgrp = new boolean[aa.length];
-          }
-          if (graphgrp[aa[i].graphGroup])
+          if (graphgrp.get(aa[i].graphGroup))
           {
             continue;
           }
           else
           {
-            graphgrp[aa[i].graphGroup] = true;
+            graphgrp.set(aa[i].graphGroup);
           }
         }
         aa[i].height = 0;