tidied up system.out messages and moved many to stderr.
[jalview.git] / src / jalview / datamodel / Alignment.java
index abc7cf6..d953598 100755 (executable)
@@ -11,8 +11,11 @@ public class Alignment implements AlignmentI
 \r
   protected Vector      sequences;\r
   protected Vector      groups = new Vector();\r
-  public    Hashtable[] cons;\r
-  protected char      gapCharacter = '-';\r
+  protected Vector   superGroup = new Vector();\r
+  protected char        gapCharacter = '-';\r
+  public AlignmentAnnotation [] annotations;\r
+\r
+  public boolean featuresAdded = false;\r
 \r
   /** Make an alignment from an array of Sequences.\r
   *\r
@@ -40,14 +43,11 @@ public class Alignment implements AlignmentI
   }\r
 \r
   /** Adds a sequence to the alignment.  Recalculates maxLength and size.\r
-   * Should put the new sequence in a sequence group!!!\r
    *\r
    * @param snew\r
    */\r
   public void addSequence(SequenceI snew) {\r
     sequences.addElement(snew);\r
-\r
-    ((SequenceGroup)groups.lastElement()).addSequence(snew);\r
   }\r
 \r
   public void addSequence(SequenceI[] seq) {\r
@@ -57,8 +57,7 @@ public class Alignment implements AlignmentI
   }\r
 \r
   /** Adds a sequence to the alignment.  Recalculates maxLength and size.\r
-   * Should put the new sequence in a sequence group!!!\r
-   *\r
+    *\r
    * @param snew\r
    */\r
   public void setSequenceAt(int i,SequenceI snew) {\r
@@ -66,8 +65,6 @@ public class Alignment implements AlignmentI
     deleteSequence(oldseq);\r
 \r
     sequences.setElementAt(snew,i);\r
-\r
-    ((SequenceGroup)groups.lastElement()).addSequence(snew);\r
   }\r
 \r
   public Vector getGroups() {\r
@@ -113,7 +110,7 @@ public class Alignment implements AlignmentI
         if (current.getLength() > i)\r
         {\r
            /* MC Should move this to a method somewhere */\r
-          if (current.getCharAt(i)!='-' && current.getCharAt(i)!='.' && current.getCharAt(i)!=' ')\r
+          if ( !jalview.util.Comparison.isGap(current.getCharAt(i)))\r
             delete = false;\r
 \r
         }\r
@@ -218,35 +215,34 @@ public class Alignment implements AlignmentI
   public Vector removeRedundancy(float threshold, Vector sel) {\r
     Vector del = new Vector();\r
 \r
-    for (int i=1; i < sel.size(); i++) {\r
-      for (int j = 0; j < i; j++) {\r
+    for (int i = 1; i < sel.size(); i++)\r
+    {\r
+      for (int j = 0; j < i; j++)\r
+      {\r
         // Only do the comparison if either have not been deleted\r
-        if (!del.contains((SequenceI)sel.elementAt(i)) ||\r
-            !del.contains((SequenceI)sel.elementAt(j))) {\r
+        if (!del.contains( (SequenceI) sel.elementAt(i)) ||\r
+            !del.contains( (SequenceI) sel.elementAt(j)))\r
+        {\r
 \r
-          float pid = Comparison.compare((SequenceI)sel.elementAt(j),\r
-                                         (SequenceI)sel.elementAt(i));\r
+          float pid = Comparison.compare( (SequenceI) sel.elementAt(j),\r
+                                         (SequenceI) sel.elementAt(i));\r
 \r
-          if (pid >= threshold) {\r
+          if (pid >= threshold)\r
+          {\r
             // Delete the shortest one\r
-            if (((SequenceI)sel.elementAt(j)).getSequence().length() >\r
-                ((SequenceI)sel.elementAt(i)).getSequence().length()) {\r
+            if ( ( (SequenceI) sel.elementAt(j)).getSequence().length() >\r
+                ( (SequenceI) sel.elementAt(i)).getSequence().length())\r
               del.addElement(sel.elementAt(i));\r
-              System.out.println("Deleting sequence " + ((SequenceI)sel.elementAt(i)).getName());\r
-            } else {\r
+            else\r
               del.addElement(sel.elementAt(i));\r
-              System.out.println("Deleting sequence " + ((SequenceI)sel.elementAt(i)).getName());\r
-            }\r
           }\r
         }\r
       }\r
     }\r
 \r
     // Now delete the sequences\r
-    for (int i=0; i < del.size(); i++) {\r
-      System.out.println("Deleting sequence " + ((SequenceI)del.elementAt(i)).getName());\r
+    for (int i=0; i < del.size(); i++)\r
       deleteSequence((SequenceI)del.elementAt(i));\r
-    }\r
 \r
     return del;\r
   }\r
@@ -295,10 +291,10 @@ public class Alignment implements AlignmentI
       len = getHeight()/2;\r
     } else {\r
       len = (getHeight()+1)/2;\r
-      System.out.println("Sort len is odd = " + len);\r
+      System.out.println("DEBUG:Sort len is odd = " + len); // log.\r
     }\r
     for (int i = 0; i < len; i++) {\r
-      System.out.println("Swapping " + seqs[i].getName() + " and " + seqs[getHeight()-i-1].getName());\r
+      System.out.println("DEBUG:Swapping " + seqs[i].getName() + " and " + seqs[getHeight()-i-1].getName()); // log.\r
       SequenceI tmp = seqs[i];\r
       sequences.setElementAt(seqs[getHeight()-i-1],i);\r
       sequences.setElementAt(tmp,getHeight()-i-1);\r
@@ -320,6 +316,26 @@ public class Alignment implements AlignmentI
 \r
     }\r
     return null;\r
+  }\r
+\r
+  public SequenceGroup [] findAllGroups(SequenceI s)\r
+  {\r
+\r
+    Vector temp = new Vector();\r
+\r
+    for (int i = 0; i < this.groups.size();i++)\r
+    {\r
+      SequenceGroup sg = (SequenceGroup)groups.elementAt(i);\r
+\r
+      if (sg.sequences.contains(s))\r
+       temp.addElement(sg);\r
+    }\r
+\r
+    SequenceGroup [] ret = new SequenceGroup[temp.size()];\r
+    for(int i=0; i<temp.size(); i++)\r
+      ret[i] = (SequenceGroup)temp.elementAt(i);\r
+\r
+    return ret;\r
 \r
   }\r
   /**    */\r
@@ -340,16 +356,45 @@ public class Alignment implements AlignmentI
     }\r
   }\r
 \r
+  public void addSuperGroup(SuperGroup sg)\r
+  {\r
+    superGroup.addElement(sg);\r
+  }\r
+\r
+  public void removeSuperGroup(SuperGroup sg)\r
+  {\r
+    superGroup.removeElement(sg);\r
+  }\r
+\r
+  public SuperGroup     getSuperGroup(SequenceGroup sg)\r
+  {\r
+    for (int i = 0; i < this.superGroup.size(); i++)\r
+    {\r
+      SuperGroup temp = (SuperGroup) superGroup.elementAt(i);\r
+      if (temp.sequenceGroups.contains(sg))\r
+        return temp;\r
+    }\r
+    return null;\r
+  }\r
+\r
   /**    */\r
   public void addGroup(SequenceGroup sg) {\r
-    groups.addElement(sg);\r
+    if(!groups.contains(sg))\r
+      groups.addElement(sg);\r
   }\r
 \r
-  /**    */\r
-  public SequenceGroup addGroup() {\r
-    SequenceGroup sg = new SequenceGroup();\r
-    groups.addElement(sg);\r
-    return sg;\r
+  public void deleteAllGroups()\r
+  {\r
+    groups.removeAllElements();\r
+    superGroup.removeAllElements();\r
+   int i=0;\r
+    while (i < sequences.size()) {\r
+     SequenceI s = getSequenceAt(i);\r
+     s.setColor(java.awt.Color.white);\r
+     i++;\r
+   }\r
+\r
+\r
   }\r
 \r
   /**    */\r
@@ -386,12 +431,14 @@ public class Alignment implements AlignmentI
   }\r
 \r
   /**    */\r
-  public int findIndex(SequenceI s) {\r
+  public int findIndex(SequenceI s)\r
+  {\r
     int i=0;\r
-    while (i < sequences.size()) {\r
-      if (s == getSequenceAt(i)) {\r
+    while (i < sequences.size())\r
+    {\r
+      if (s == getSequenceAt(i))\r
         return i;\r
-      }\r
+\r
       i++;\r
     }\r
     return -1;\r
@@ -434,12 +481,12 @@ public class Alignment implements AlignmentI
 \r
   public void setGapCharacter(char gc)\r
   {\r
-    char old = getGapCharacter();\r
     gapCharacter = gc;\r
     for (int i=0; i < sequences.size(); i++)\r
      {\r
        Sequence seq = (Sequence)sequences.elementAt(i);\r
-       seq.sequence = seq.sequence.replace(old, gc);\r
+       seq.sequence = seq.sequence.replace('.', gc);\r
+       seq.sequence = seq.sequence.replace('-', gc);\r
      }\r
   }\r
 \r
@@ -451,6 +498,61 @@ public class Alignment implements AlignmentI
   {\r
     return AAFrequency.calculate(sequences, 0, getWidth());\r
   }\r
+\r
+  public boolean isAligned()\r
+  {\r
+    int width = getWidth();\r
+    for (int i = 0; i < sequences.size(); i++)\r
+      if (getSequenceAt(i).getLength() != width)\r
+        return false;\r
+\r
+    return true;\r
+  }\r
+\r
+   public void deleteAnnotation(AlignmentAnnotation aa)\r
+   {\r
+     int aSize = 1;\r
+     if(annotations!=null)\r
+       aSize = annotations.length;\r
+\r
+     AlignmentAnnotation [] temp = new AlignmentAnnotation [aSize-1];\r
+\r
+     int tIndex = 0;\r
+     for (int i = 0; i < aSize; i++)\r
+      {\r
+        if(annotations[i]==aa)\r
+          continue;\r
+\r
+\r
+        temp[tIndex] = annotations[i];\r
+        tIndex++;\r
+      }\r
+\r
+     annotations = temp;\r
+\r
+   }\r
+\r
+  public void addAnnotation(AlignmentAnnotation aa)\r
+  {\r
+    int aSize = 1;\r
+    if(annotations!=null)\r
+      aSize = annotations.length+1;\r
+\r
+    AlignmentAnnotation [] temp = new AlignmentAnnotation [aSize];\r
+    int i=0;\r
+    if (aSize > 1)\r
+      for (i = 0; i < aSize-1; i++)\r
+        temp[i] = annotations[i];\r
+\r
+    temp[i] = aa;\r
+\r
+    annotations = temp;\r
+  }\r
+  public AlignmentAnnotation[] getAlignmentAnnotation()\r
+  {\r
+    return annotations;\r
+  }\r
+\r
 }\r
 \r
 \r