licencing and format applied (eclipse)
[jalview.git] / src / jalview / datamodel / Alignment.java
index 82bc8db..1312e22 100755 (executable)
@@ -22,17 +22,23 @@ import java.util.*;
 
 import jalview.analysis.*;
 
-/** Data structure to hold and manipulate a multiple sequence alignment
+/**
+ * Data structure to hold and manipulate a multiple sequence alignment
  */
-public class Alignment
-    implements AlignmentI
+public class Alignment implements AlignmentI
 {
   protected Alignment dataset;
+
   protected Vector sequences;
+
   protected Vector groups = new Vector();
+
   protected char gapCharacter = '-';
+
   protected int type = NUCLEOTIDE;
+
   public static final int PROTEIN = 0;
+
   public static final int NUCLEOTIDE = 1;
 
   /** DOCUMENT ME!! */
@@ -64,8 +70,9 @@ public class Alignment
 
   }
 
-  /** Make an alignment from an array of Sequences.
-   *
+  /**
+   * Make an alignment from an array of Sequences.
+   * 
    * @param sequences
    */
   public Alignment(SequenceI[] seqs)
@@ -75,20 +82,25 @@ public class Alignment
 
   /**
    * Make a new alignment from an array of SeqCigars
-   * @param seqs SeqCigar[]
+   * 
+   * @param seqs
+   *                SeqCigar[]
    */
   public Alignment(SeqCigar[] alseqs)
   {
-    SequenceI[] seqs = SeqCigar.createAlignmentSequences(alseqs, gapCharacter,
-        new ColumnSelection(), null);
+    SequenceI[] seqs = SeqCigar.createAlignmentSequences(alseqs,
+            gapCharacter, new ColumnSelection(), null);
     initAlignment(seqs);
   }
 
   /**
-   * Make a new alignment from an CigarArray
-   * JBPNote - can only do this when compactAlignment does not contain hidden regions.
-   * JBPNote - must also check that compactAlignment resolves to a set of SeqCigars - or construct them appropriately.
-   * @param compactAlignment CigarArray
+   * Make a new alignment from an CigarArray JBPNote - can only do this when
+   * compactAlignment does not contain hidden regions. JBPNote - must also check
+   * that compactAlignment resolves to a set of SeqCigars - or construct them
+   * appropriately.
+   * 
+   * @param compactAlignment
+   *                CigarArray
    */
   public static AlignmentI createAlignment(CigarArray compactAlignment)
   {
@@ -98,7 +110,7 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public Vector getSequences()
@@ -108,7 +120,7 @@ public class Alignment
 
   public SequenceI[] getSequencesArray()
   {
-    if (sequences==null)
+    if (sequences == null)
       return null;
     SequenceI[] reply = new SequenceI[sequences.size()];
     for (int i = 0; i < sequences.size(); i++)
@@ -120,9 +132,10 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
-   * @param i DOCUMENT ME!
-   *
+   * 
+   * @param i
+   *                DOCUMENT ME!
+   * 
    * @return DOCUMENT ME!
    */
   public SequenceI getSequenceAt(int i)
@@ -135,8 +148,9 @@ public class Alignment
     return null;
   }
 
-  /** Adds a sequence to the alignment.  Recalculates maxLength and size.
-   *
+  /**
+   * Adds a sequence to the alignment. Recalculates maxLength and size.
+   * 
    * @param snew
    */
   public void addSequence(SequenceI snew)
@@ -156,17 +170,22 @@ public class Alignment
         snew = adding;
       }
     }
-    if (sequences==null) {
-      initAlignment(new SequenceI[] { snew });
-    } else {
+    if (sequences == null)
+    {
+      initAlignment(new SequenceI[]
+      { snew });
+    }
+    else
+    {
       sequences.addElement(snew);
     }
-    if (hiddenSequences!=null)
+    if (hiddenSequences != null)
       hiddenSequences.adjustHeightSequenceAdded();
   }
 
-  /** Adds a sequence to the alignment.  Recalculates maxLength and size.
-   *
+  /**
+   * Adds a sequence to the alignment. Recalculates maxLength and size.
+   * 
    * @param snew
    */
   public void setSequenceAt(int i, SequenceI snew)
@@ -179,7 +198,7 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public Vector getGroups()
@@ -189,7 +208,7 @@ public class Alignment
 
   public void finalize()
   {
-    if(getDataset()!=null)
+    if (getDataset() != null)
       getDataset().removeAlignmentRef();
 
     dataset = null;
@@ -200,11 +219,12 @@ public class Alignment
   }
 
   /**
-   * decrement the alignmentRefs counter by one and call finalize if it goes to zero.
+   * decrement the alignmentRefs counter by one and call finalize if it goes to
+   * zero.
    */
   private void removeAlignmentRef()
   {
-    if (--alignmentRefs==0)
+    if (--alignmentRefs == 0)
     {
       finalize();
     }
@@ -212,8 +232,9 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
-   * @param s DOCUMENT ME!
+   * 
+   * @param s
+   *                DOCUMENT ME!
    */
   public void deleteSequence(SequenceI s)
   {
@@ -222,8 +243,9 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
-   * @param i DOCUMENT ME!
+   * 
+   * @param i
+   *                DOCUMENT ME!
    */
   public void deleteSequence(int i)
   {
@@ -252,9 +274,10 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
-   * @param s DOCUMENT ME!
-   *
+   * 
+   * @param s
+   *                DOCUMENT ME!
+   * 
    * @return DOCUMENT ME!
    */
   public SequenceGroup[] findAllGroups(SequenceI s)
@@ -336,33 +359,38 @@ public class Alignment
   /**    */
   public SequenceI findName(String name)
   {
-    return findName(name,false);
+    return findName(name, false);
   }
 
-  /* (non-Javadoc)
+  /*
+   * (non-Javadoc)
+   * 
    * @see jalview.datamodel.AlignmentI#findName(java.lang.String, boolean)
    */
   public SequenceI findName(String token, boolean b)
   {
     return findName(null, token, b);
   }
-  
-  /* (non-Javadoc)
-   * @see jalview.datamodel.AlignmentI#findName(SequenceI, java.lang.String, boolean)
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see jalview.datamodel.AlignmentI#findName(SequenceI, java.lang.String,
+   *      boolean)
    */
   public SequenceI findName(SequenceI startAfter, String token, boolean b)
   {
-  
+
     int i = 0;
-    SequenceI sq=null;
-    String sqname=null;
-    if (startAfter!=null)
+    SequenceI sq = null;
+    String sqname = null;
+    if (startAfter != null)
     {
       // try to find the sequence in the alignment
-      boolean matched=false;
-      while (i<sequences.size())
+      boolean matched = false;
+      while (i < sequences.size())
       {
-        if (getSequenceAt(i++)==startAfter)
+        if (getSequenceAt(i++) == startAfter)
         {
           matched = true;
           break;
@@ -370,7 +398,7 @@ public class Alignment
       }
       if (!matched)
       {
-        i=0;
+        i = 0;
       }
     }
     while (i < sequences.size())
@@ -378,7 +406,7 @@ public class Alignment
       sq = getSequenceAt(i);
       sqname = sq.getName();
       if (sqname.equals(token) // exact match
-          || (b && // allow imperfect matches - case varies 
+              || (b && // allow imperfect matches - case varies
               (sqname.equalsIgnoreCase(token))))
       {
         return getSequenceAt(i);
@@ -389,6 +417,7 @@ public class Alignment
 
     return null;
   }
+
   public SequenceI[] findSequenceMatch(String name)
   {
     Vector matches = new Vector();
@@ -433,7 +462,7 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public int getHeight()
@@ -443,7 +472,7 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public int getWidth()
@@ -463,8 +492,9 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
-   * @param gc DOCUMENT ME!
+   * 
+   * @param gc
+   *                DOCUMENT ME!
    */
   public void setGapCharacter(char gc)
   {
@@ -473,17 +503,14 @@ public class Alignment
     for (int i = 0; i < sequences.size(); i++)
     {
       Sequence seq = (Sequence) sequences.elementAt(i);
-      seq.setSequence(seq.getSequenceAsString()
-                      .replace('.', gc)
-                      .replace('-', gc)
-                      .replace(' ', gc)
-          );
+      seq.setSequence(seq.getSequenceAsString().replace('.', gc).replace(
+              '-', gc).replace(' ', gc));
     }
   }
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public char getGapCharacter()
@@ -493,7 +520,7 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public boolean isAligned()
@@ -510,7 +537,10 @@ public class Alignment
 
     return true;
   }
-  /* (non-Javadoc)
+
+  /*
+   * (non-Javadoc)
+   * 
    * @see jalview.datamodel.AlignmentI#deleteAnnotation(jalview.datamodel.AlignmentAnnotation)
    */
   public boolean deleteAnnotation(AlignmentAnnotation aa)
@@ -529,24 +559,24 @@ public class Alignment
 
     AlignmentAnnotation[] temp = new AlignmentAnnotation[aSize - 1];
 
-    boolean swap=false;
+    boolean swap = false;
     int tIndex = 0;
 
     for (int i = 0; i < aSize; i++)
     {
       if (annotations[i] == aa)
       {
-        swap=true;
+        swap = true;
         continue;
       }
-      if (tIndex<temp.length)
+      if (tIndex < temp.length)
         temp[tIndex++] = annotations[i];
     }
 
     if (swap)
     {
       annotations = temp;
-      if(aa.sequenceRef!=null)
+      if (aa.sequenceRef != null)
         aa.sequenceRef.removeAlignmentAnnotation(aa);
     }
     return swap;
@@ -554,8 +584,9 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
-   * @param aa DOCUMENT ME!
+   * 
+   * @param aa
+   *                DOCUMENT ME!
    */
   public void addAnnotation(AlignmentAnnotation aa)
   {
@@ -616,7 +647,7 @@ public class Alignment
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @return DOCUMENT ME!
    */
   public AlignmentAnnotation[] getAlignmentAnnotation()
@@ -678,10 +709,12 @@ public class Alignment
     }
     dataset.addAlignmentRef();
   }
+
   /**
    * reference count for number of alignments referencing this one.
    */
-  int alignmentRefs=0;
+  int alignmentRefs = 0;
+
   /**
    * increase reference count to this alignment.
    */
@@ -699,7 +732,7 @@ public class Alignment
   {
     boolean modified = false;
 
-    //Remove excess gaps from the end of alignment
+    // Remove excess gaps from the end of alignment
     int maxLength = -1;
 
     SequenceI current;
@@ -708,8 +741,8 @@ public class Alignment
       current = getSequenceAt(i);
       for (int j = current.getLength(); j > maxLength; j--)
       {
-        if (j > maxLength && !jalview.util.Comparison.isGap(
-            current.getCharAt(j)))
+        if (j > maxLength
+                && !jalview.util.Comparison.isGap(current.getCharAt(j)))
         {
           maxLength = j;
           break;
@@ -720,16 +753,14 @@ public class Alignment
     maxLength++;
 
     int cLength;
-    for (int i = 0; i < sequences.size();
-         i++)
+    for (int i = 0; i < sequences.size(); i++)
     {
       current = getSequenceAt(i);
       cLength = current.getLength();
 
       if (cLength < maxLength)
       {
-        current.insertCharAt(cLength,
-                             maxLength - cLength, gapCharacter);
+        current.insertCharAt(cLength, maxLength - cLength, gapCharacter);
         modified = true;
       }
       else if (current.getLength() > maxLength)
@@ -750,7 +781,7 @@ public class Alignment
     SeqCigar alseqs[] = new SeqCigar[sequences.size()];
     for (int i = 0; i < sequences.size(); i++)
     {
-      alseqs[i] = new SeqCigar( (SequenceI) sequences.elementAt(i));
+      alseqs[i] = new SeqCigar((SequenceI) sequences.elementAt(i));
     }
     CigarArray cal = new CigarArray(alseqs);
     cal.addOperation(CigarArray.M, getWidth());
@@ -759,15 +790,15 @@ public class Alignment
 
   public void setProperty(Object key, Object value)
   {
-    if(alignmentProperties==null)
+    if (alignmentProperties == null)
       alignmentProperties = new Hashtable();
 
-    alignmentProperties.put(key,value);
+    alignmentProperties.put(key, value);
   }
 
   public Object getProperty(Object key)
   {
-    if(alignmentProperties!=null)
+    if (alignmentProperties != null)
       return alignmentProperties.get(key);
     else
       return null;
@@ -777,26 +808,33 @@ public class Alignment
   {
     return alignmentProperties;
   }
-  AlignedCodonFrame[] codonFrameList=null;
-  /* (non-Javadoc)
+
+  AlignedCodonFrame[] codonFrameList = null;
+
+  /*
+   * (non-Javadoc)
+   * 
    * @see jalview.datamodel.AlignmentI#addCodonFrame(jalview.datamodel.AlignedCodonFrame)
    */
   public void addCodonFrame(AlignedCodonFrame codons)
   {
-    if (codons==null)
+    if (codons == null)
       return;
-    if (codonFrameList==null)
+    if (codonFrameList == null)
     {
-      codonFrameList = new AlignedCodonFrame[] { codons };
+      codonFrameList = new AlignedCodonFrame[]
+      { codons };
       return;
     }
-    AlignedCodonFrame[] t = new AlignedCodonFrame[codonFrameList.length+1];
+    AlignedCodonFrame[] t = new AlignedCodonFrame[codonFrameList.length + 1];
     System.arraycopy(codonFrameList, 0, t, 0, codonFrameList.length);
     t[codonFrameList.length] = codons;
     codonFrameList = t;
   }
 
-  /* (non-Javadoc)
+  /*
+   * (non-Javadoc)
+   * 
    * @see jalview.datamodel.AlignmentI#getCodonFrame(int)
    */
   public AlignedCodonFrame getCodonFrame(int index)
@@ -804,27 +842,31 @@ public class Alignment
     return codonFrameList[index];
   }
 
-  /* (non-Javadoc)
+  /*
+   * (non-Javadoc)
+   * 
    * @see jalview.datamodel.AlignmentI#getCodonFrame(jalview.datamodel.SequenceI)
    */
   public AlignedCodonFrame[] getCodonFrame(SequenceI seq)
   {
-    if (seq==null || codonFrameList==null)
+    if (seq == null || codonFrameList == null)
       return null;
-    Vector cframes=new Vector();
-    for (int f=0;f<codonFrameList.length; f++)
+    Vector cframes = new Vector();
+    for (int f = 0; f < codonFrameList.length; f++)
     {
       if (codonFrameList[f].involvesSequence(seq))
         cframes.addElement(codonFrameList[f]);
     }
-    if (cframes.size()==0)
+    if (cframes.size() == 0)
       return null;
     AlignedCodonFrame[] cfr = new AlignedCodonFrame[cframes.size()];
     cframes.copyInto(cfr);
     return cfr;
   }
 
-  /* (non-Javadoc)
+  /*
+   * (non-Javadoc)
+   * 
    * @see jalview.datamodel.AlignmentI#getCodonFrames()
    */
   public AlignedCodonFrame[] getCodonFrames()
@@ -832,23 +874,26 @@ public class Alignment
     return codonFrameList;
   }
 
-  /* (non-Javadoc)
+  /*
+   * (non-Javadoc)
+   * 
    * @see jalview.datamodel.AlignmentI#removeCodonFrame(jalview.datamodel.AlignedCodonFrame)
    */
   public boolean removeCodonFrame(AlignedCodonFrame codons)
   {
-    if (codons==null || codonFrameList==null)
+    if (codons == null || codonFrameList == null)
       return false;
-    boolean removed=false;
-    int i=0,iSize=codonFrameList.length;
-    while (i<iSize)
+    boolean removed = false;
+    int i = 0, iSize = codonFrameList.length;
+    while (i < iSize)
     {
-      if (codonFrameList[i]==codons)
+      if (codonFrameList[i] == codons)
       {
-        removed=true;
-        if (i+1<iSize)
+        removed = true;
+        if (i + 1 < iSize)
         {
-          System.arraycopy(codonFrameList,i+1,codonFrameList, i, iSize-i-1);
+          System.arraycopy(codonFrameList, i + 1, codonFrameList, i, iSize
+                  - i - 1);
         }
         iSize--;
       }