merge from 2_4_Release branch
[jalview.git] / src / jalview / datamodel / SequenceGroup.java
index 6ded8bd..dd842ea 100755 (executable)
@@ -1,17 +1,17 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
- *
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
+ * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * 
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
  * of the License, or (at your option) any later version.
- *
+ * 
  * This program 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 this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
@@ -27,29 +27,45 @@ import jalview.schemes.*;
 
 /**
  * Collects a set contiguous ranges on a set of sequences
+ * 
  * @author $author$
  * @version $Revision$
  */
 public class SequenceGroup
 {
   String groupName;
+
   String description;
+
   Conservation conserve;
+
   Vector aaFrequency;
+
   boolean displayBoxes = true;
+
   boolean displayText = true;
+
   boolean colourText = false;
+
   private Vector sequences = new Vector();
+
   int width = -1;
 
   /** DOCUMENT ME!! */
   public ColourSchemeI cs;
+
   int startRes = 0;
+
   int endRes = 0;
+
   public Color outlineColour = Color.black;
-  public Color idColour = null; 
+
+  public Color idColour = null;
+
   public int thresholdTextColour = 0;
+
   public Color textColour = Color.black;
+
   public Color textColour2 = Color.white;
 
   /**
@@ -62,20 +78,21 @@ public class SequenceGroup
 
   /**
    * Creates a new SequenceGroup object.
-   *
-   * @param sequences 
-   * @param groupName 
-   * @param scheme 
-   * @param displayBoxes 
-   * @param displayText 
-   * @param colourText 
-   * @param start first column of group
-   * @param end last column of group
+   * 
+   * @param sequences
+   * @param groupName
+   * @param scheme
+   * @param displayBoxes
+   * @param displayText
+   * @param colourText
+   * @param start
+   *                first column of group
+   * @param end
+   *                last column of group
    */
   public SequenceGroup(Vector sequences, String groupName,
-                       ColourSchemeI scheme, boolean displayBoxes,
-                       boolean displayText,
-                       boolean colourText, int start, int end)
+          ColourSchemeI scheme, boolean displayBoxes, boolean displayText,
+          boolean colourText, int start, int end)
   {
     this.sequences = sequences;
     this.groupName = groupName;
@@ -93,13 +110,13 @@ public class SequenceGroup
     int iSize = sequences.size();
     SequenceI[] seqs = new SequenceI[iSize];
     SequenceI[] inorder = getSequencesInOrder(align);
-    
-    for (int i = 0,ipos=0; i < inorder.length; i++)
+
+    for (int i = 0, ipos = 0; i < inorder.length; i++)
     {
       SequenceI seq = inorder[i];
 
-      seqs[ipos] = seq.getSubSequence(startRes, endRes+1);
-      if (seqs[ipos]!=null)
+      seqs[ipos] = seq.getSubSequence(startRes, endRes + 1);
+      if (seqs[ipos] != null)
       {
         seqs[ipos].setDescription(seq.getDescription());
         seqs[ipos].setDBRef(seq.getDBRef());
@@ -112,18 +129,19 @@ public class SequenceGroup
         if (seq.getAnnotation() != null)
         {
           AlignmentAnnotation[] alann = align.getAlignmentAnnotation();
-          // Only copy annotation that is either a score or referenced by the alignment's annotation vector
+          // Only copy annotation that is either a score or referenced by the
+          // alignment's annotation vector
           for (int a = 0; a < seq.getAnnotation().length; a++)
           {
             AlignmentAnnotation tocopy = seq.getAnnotation()[a];
-            if (alann!=null)
+            if (alann != null)
             {
-              boolean found=false;
-              for (int pos=0;pos<alann.length; pos++)
+              boolean found = false;
+              for (int pos = 0; pos < alann.length; pos++)
               {
-                if (alann[pos]==tocopy)
-                { 
-                  found=true;
+                if (alann[pos] == tocopy)
+                {
+                  found = true;
                   break;
                 }
               }
@@ -139,11 +157,13 @@ public class SequenceGroup
           }
         }
         ipos++;
-      } else {
+      }
+      else
+      {
         iSize--;
       }
     }
-    if (iSize!=inorder.length)
+    if (iSize != inorder.length)
     {
       SequenceI[] nseqs = new SequenceI[iSize];
       System.arraycopy(seqs, 0, nseqs, 0, iSize);
@@ -154,9 +174,10 @@ public class SequenceGroup
   }
 
   /**
-   * If sequence ends in gaps, the end residue can
-   * be correctly calculated here
-   * @param seq SequenceI
+   * If sequence ends in gaps, the end residue can be correctly calculated here
+   * 
+   * @param seq
+   *                SequenceI
    * @return int
    */
   public int findEndRes(SequenceI seq)
@@ -167,7 +188,7 @@ public class SequenceGroup
     for (int j = 0; j < endRes + 1 && j < seq.getLength(); j++)
     {
       ch = seq.getCharAt(j);
-      if (!jalview.util.Comparison.isGap( (ch)))
+      if (!jalview.util.Comparison.isGap((ch)))
       {
         eres++;
       }
@@ -201,8 +222,7 @@ public class SequenceGroup
           for (int h = 0; h < hsg.getSize(); h++)
           {
             seq2 = hsg.getSequenceAt(h);
-            if (seq2 != seq
-                && !allSequences.contains(seq2))
+            if (seq2 != seq && !allSequences.contains(seq2))
             {
               allSequences.addElement(seq2);
             }
@@ -232,9 +252,10 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param col DOCUMENT ME!
-   *
+   * 
+   * @param col
+   *                DOCUMENT ME!
+   * 
    * @return DOCUMENT ME!
    */
   public boolean adjustForRemoveLeft(int col)
@@ -265,9 +286,10 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param col DOCUMENT ME!
-   *
+   * 
+   * @param col
+   *                DOCUMENT ME!
+   * 
    * @return DOCUMENT ME!
    */
   public boolean adjustForRemoveRight(int col)
@@ -288,7 +310,7 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public String getName()
@@ -303,8 +325,9 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param name DOCUMENT ME!
+   * 
+   * @param name
+   *                DOCUMENT ME!
    */
   public void setName(String name)
   {
@@ -318,7 +341,7 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public Conservation getConservation()
@@ -328,8 +351,9 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param c DOCUMENT ME!
+   * 
+   * @param c
+   *                DOCUMENT ME!
    */
   public void setConservation(Conservation c)
   {
@@ -338,9 +362,11 @@ public class SequenceGroup
 
   /**
    * Add s to this sequence group
-   *
-   * @param s alignment sequence to be added
-   * @param recalc true means Group's conservation should be recalculated
+   * 
+   * @param s
+   *                alignment sequence to be added
+   * @param recalc
+   *                true means Group's conservation should be recalculated
    */
   public void addSequence(SequenceI s, boolean recalc)
   {
@@ -367,19 +393,19 @@ public class SequenceGroup
 
     try
     {
-      cs.setConsensus(AAFrequency.calculate(sequences, startRes, endRes + 1));
+      cs.setConsensus(AAFrequency
+              .calculate(sequences, startRes, endRes + 1));
 
       if (cs instanceof ClustalxColourScheme)
       {
-        ( (ClustalxColourScheme) cs).resetClustalX(sequences, getWidth());
+        ((ClustalxColourScheme) cs).resetClustalX(sequences, getWidth());
       }
 
       if (cs.conservationApplied())
       {
         Conservation c = new Conservation(groupName,
-                                          ResidueProperties.propHash, 3,
-                                          sequences,
-                                          startRes, endRes + 1);
+                ResidueProperties.propHash, 3, sequences, startRes,
+                endRes + 1);
         c.calculate();
         c.verdict(false, 25);
 
@@ -387,13 +413,12 @@ public class SequenceGroup
 
         if (cs instanceof ClustalxColourScheme)
         {
-          ( (ClustalxColourScheme) cs).resetClustalX(sequences,
-              getWidth());
+          ((ClustalxColourScheme) cs).resetClustalX(sequences, getWidth());
         }
       }
-    }
-    catch (java.lang.OutOfMemoryError err)
+    } catch (java.lang.OutOfMemoryError err)
     {
+      // TODO: catch OOM
       System.out.println("Out of memory loading groups: " + err);
     }
 
@@ -401,9 +426,11 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param s DOCUMENT ME!
-   * @param recalc DOCUMENT ME!
+   * 
+   * @param s
+   *                DOCUMENT ME!
+   * @param recalc
+   *                DOCUMENT ME!
    */
   public void addOrRemove(SequenceI s, boolean recalc)
   {
@@ -419,9 +446,11 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param s DOCUMENT ME!
-   * @param recalc DOCUMENT ME!
+   * 
+   * @param s
+   *                DOCUMENT ME!
+   * @param recalc
+   *                DOCUMENT ME!
    */
   public void deleteSequence(SequenceI s, boolean recalc)
   {
@@ -435,7 +464,7 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public int getStartRes()
@@ -445,7 +474,7 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public int getEndRes()
@@ -455,8 +484,9 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param i DOCUMENT ME!
+   * 
+   * @param i
+   *                DOCUMENT ME!
    */
   public void setStartRes(int i)
   {
@@ -465,8 +495,9 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param i DOCUMENT ME!
+   * 
+   * @param i
+   *                DOCUMENT ME!
    */
   public void setEndRes(int i)
   {
@@ -475,7 +506,7 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public int getSize()
@@ -485,9 +516,10 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param i DOCUMENT ME!
-   *
+   * 
+   * @param i
+   *                DOCUMENT ME!
+   * 
    * @return DOCUMENT ME!
    */
   public SequenceI getSequenceAt(int i)
@@ -497,8 +529,9 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param state DOCUMENT ME!
+   * 
+   * @param state
+   *                DOCUMENT ME!
    */
   public void setColourText(boolean state)
   {
@@ -507,7 +540,7 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public boolean getColourText()
@@ -517,8 +550,9 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param state DOCUMENT ME!
+   * 
+   * @param state
+   *                DOCUMENT ME!
    */
   public void setDisplayText(boolean state)
   {
@@ -527,7 +561,7 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public boolean getDisplayText()
@@ -537,8 +571,9 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param state DOCUMENT ME!
+   * 
+   * @param state
+   *                DOCUMENT ME!
    */
   public void setDisplayBoxes(boolean state)
   {
@@ -547,7 +582,7 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public boolean getDisplayBoxes()
@@ -557,7 +592,7 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public int getWidth()
@@ -565,7 +600,7 @@ public class SequenceGroup
     // MC This needs to get reset when characters are inserted and deleted
     if (sequences.size() > 0)
     {
-      width = ( (SequenceI) sequences.elementAt(0)).getLength();
+      width = ((SequenceI) sequences.elementAt(0)).getLength();
     }
 
     for (int i = 1; i < sequences.size(); i++)
@@ -583,8 +618,9 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
-   * @param c DOCUMENT ME!
+   * 
+   * @param c
+   *                DOCUMENT ME!
    */
   public void setOutlineColour(Color c)
   {
@@ -593,7 +629,7 @@ public class SequenceGroup
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public Color getOutlineColour()
@@ -602,10 +638,11 @@ public class SequenceGroup
   }
 
   /**
-   *
+   * 
    * returns the sequences in the group ordered by the ordering given by al
-   *
-   * @param al Alignment
+   * 
+   * @param al
+   *                Alignment
    * @return SequenceI[]
    */
   public SequenceI[] getSequencesInOrder(AlignmentI al)
@@ -636,7 +673,8 @@ public class SequenceGroup
   }
 
   /**
-   * @param idColour the idColour to set
+   * @param idColour
+   *                the idColour to set
    */
   public void setIdColour(Color idColour)
   {