JAL-902 structure conservation row for applet
[jalview.git] / src / jalview / datamodel / SequenceGroup.java
index f045555..6bee416 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
  * 
@@ -91,6 +91,11 @@ public class SequenceGroup
    * consensus calculation property
    */
   private boolean showSequenceLogo = false;
+  /**
+   * flag indicating if logo should be rendered normalised
+   */
+  private boolean normaliseSequenceLogo;
+
 
   /**
    * @return the includeAllConsSymbols
@@ -440,7 +445,9 @@ public class SequenceGroup
   }
 
   /**
-   * Add s to this sequence group
+   * Add s to this sequence group. If aligment sequence is already contained in
+   * group, it will not be added again, but recalculation may happen if the flag
+   * is set.
    * 
    * @param s
    *          alignment sequence to be added
@@ -508,12 +515,15 @@ public class SequenceGroup
         }
         if (cs != null)
         {
-          cs.setConservation(c);
-
-          if (cs instanceof ClustalxColourScheme)
+          if (cs.conservationApplied())
           {
-            ((ClustalxColourScheme) cs)
-                    .resetClustalX(sequences, getWidth());
+            cs.setConservation(c);
+
+            if (cs instanceof ClustalxColourScheme)
+            {
+              ((ClustalxColourScheme) cs).resetClustalX(sequences,
+                      getWidth());
+            }
           }
         }
       }
@@ -794,9 +804,12 @@ public class SequenceGroup
   {
     return getSequencesInOrder(al, true);
   }
+
   /**
-   * return an array representing the intersection of the group with al, optionally returning an array the size of al.getHeight() 
-   * where nulls mark the non-intersected sequences
+   * return an array representing the intersection of the group with al,
+   * optionally returning an array the size of al.getHeight() where nulls mark
+   * the non-intersected sequences
+   * 
    * @param al
    * @param trim
    * @return null or array
@@ -993,6 +1006,20 @@ public class SequenceGroup
   private boolean showConsensusHistogram;
 
   /**
+   * set this alignmentAnnotation object as the one used to render consensus
+   * annotation
+   * 
+   * @param aan
+   */
+  public void setConsensus(AlignmentAnnotation aan)
+  {
+    if (consensus == null)
+    {
+      consensus = aan;
+    }
+  }
+
+  /**
    * 
    * @return automatically calculated consensus row
    */
@@ -1021,6 +1048,20 @@ public class SequenceGroup
   }
 
   /**
+   * set this alignmentAnnotation object as the one used to render consensus
+   * annotation
+   * 
+   * @param aan
+   */
+  public void setConservationRow(AlignmentAnnotation aan)
+  {
+    if (conservation == null)
+    {
+      conservation = aan;
+    }
+  }
+
+  /**
    * get the conservation annotation row for this group
    * 
    * @return autoCalculated annotation row
@@ -1131,4 +1172,17 @@ public class SequenceGroup
   {
     return showConsensusHistogram;
   }
+
+  /**
+   * set flag indicating if logo should be normalised when rendered
+   * @param norm
+   */
+  public void setNormaliseSequenceLogo(boolean norm)
+  {
+    normaliseSequenceLogo=norm;
+  }
+  public boolean isNormaliseSequenceLogo()
+  {
+    return normaliseSequenceLogo;
+  }
 }