Use selection area with hidden columns in calculations
authoramwaterhouse <Andrew Waterhouse>
Tue, 18 Jul 2006 15:32:16 +0000 (15:32 +0000)
committeramwaterhouse <Andrew Waterhouse>
Tue, 18 Jul 2006 15:32:16 +0000 (15:32 +0000)
src/jalview/gui/AlignFrame.java
src/jalview/gui/AlignViewport.java
src/jalview/gui/AlignmentPanel.java
src/jalview/gui/ColumnSelection.java
src/jalview/gui/DasSourceBrowser.java
src/jalview/gui/PCAPanel.java
src/jalview/gui/PairwiseAlignPanel.java
src/jalview/gui/RedundancyPanel.java
src/jalview/gui/RotatableCanvas.java
src/jalview/gui/SeqPanel.java
src/jalview/gui/TreePanel.java

index c1f088b..05ba50c 100755 (executable)
@@ -347,9 +347,21 @@ public class AlignFrame
     }\r
     else\r
     {\r
-      String output = new FormatAdapter().formatSequences(format,\r
-          viewport.getAlignment().\r
-          getSequences());\r
+\r
+      String[] omitHidden = null;\r
+\r
+      if (viewport.hasHiddenColumns)\r
+      {\r
+        System.out.println("PROMPT USER HERE");\r
+        omitHidden = viewport.getSelectionAsString();\r
+      }\r
+\r
+      String output = new FormatAdapter().formatSequences(\r
+          format,\r
+          viewport.getSelectionAsNewSequence(),\r
+          omitHidden) ;\r
+\r
+\r
       if (output == null)\r
       {\r
         return false;\r
@@ -381,12 +393,20 @@ public class AlignFrame
   protected void outputText_actionPerformed(ActionEvent e)\r
   {\r
     CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
-    Desktop.addInternalFrame(cap,\r
-                             "Alignment output - " + e.getActionCommand(), 600,\r
-                             500);\r
-    cap.setText(new FormatAdapter().formatSequences(e.getActionCommand(),\r
-                                              viewport.getAlignment().\r
-                                              getSequences()));\r
+\r
+\r
+    String [] omitHidden = null;\r
+\r
+    if(viewport.hasHiddenColumns)\r
+    {\r
+      System.out.println("PROMPT USER HERE");\r
+      omitHidden = viewport.getSelectionAsString();\r
+    }\r
+\r
+    cap.setText(new FormatAdapter().formatSequences(\r
+        e.getActionCommand(),\r
+        viewport.getSelectionAsNewSequence(),\r
+        omitHidden));\r
   }\r
 \r
   /**\r
@@ -647,84 +667,40 @@ public class AlignFrame
     {\r
       return;\r
     }\r
-\r
-    SequenceGroup sg = viewport.getSelectionGroup();\r
-\r
-    Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
-\r
-    Hashtable orderedSeqs = new Hashtable();\r
-    SequenceI[] seqs = new SequenceI[sg.getSize(false)];\r
-\r
-    for (int i = 0; i < sg.getSize(false); i++)\r
+    SequenceI [] seqs;\r
+    if(viewport.getSelectionGroup()==null)\r
     {\r
-      SequenceI seq = sg.getSequenceAt(i);\r
-      int index = viewport.alignment.findIndex(seq);\r
-      orderedSeqs.put(index + "", seq);\r
+      seqs = viewport.alignment.getSequencesArray();\r
     }\r
-\r
-    int index = 0, startRes, endRes;\r
-    char ch;\r
-\r
-    for (int i = 0; i < sg.getSize(false); i++)\r
+    else\r
     {\r
-      SequenceI seq = null;\r
-\r
-      while (seq == null)\r
-      {\r
-        if (orderedSeqs.containsKey(index + ""))\r
-        {\r
-          seq = (SequenceI) orderedSeqs.get(index + "");\r
-          index++;\r
-\r
-          break;\r
-        }\r
-        else\r
-        {\r
-          index++;\r
-        }\r
-      }\r
+      seqs = viewport.getSelectionGroup().getSequencesInOrder(viewport.alignment);\r
+    }\r
 \r
-      //FIND START RES\r
-      //Returns residue following index if gap\r
-      startRes = seq.findPosition(sg.getStartRes());\r
+    Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
 \r
-      //FIND END RES\r
-      //Need to find the residue preceeding index if gap\r
-      endRes = 0;\r
+    FastaFile ff = new FastaFile();\r
+    ff.addJVSuffix( viewport.showJVSuffix );\r
 \r
-      for (int j = 0; j < sg.getEndRes() + 1 && j < seq.getLength(); j++)\r
-      {\r
-        ch = seq.getCharAt(j);\r
-        if (!jalview.util.Comparison.isGap( (ch)))\r
-        {\r
-          endRes++;\r
-        }\r
-      }\r
+    c.setContents(new StringSelection(ff.print(seqs)), Desktop.instance);\r
 \r
-      if (endRes > 0)\r
+    Vector hiddenColumns = null;\r
+    if(viewport.hasHiddenColumns && viewport.getSelectionGroup()!=null)\r
+    {\r
+      hiddenColumns =new Vector();\r
+      int hiddenOffset = viewport.getSelectionGroup().getStartRes();\r
+      for(int i=0; i<viewport.getColumnSelection().getHiddenColumns().size(); i++)\r
       {\r
-        endRes += seq.getStart() - 1;\r
-      }\r
+        int[] region = (int[])\r
+            viewport.getColumnSelection().getHiddenColumns().elementAt(i);\r
 \r
-      seqs[i] = new Sequence(seq.getName(),\r
-                             seq.getSequence(sg.getStartRes(), sg.getEndRes() + 1),\r
-                             startRes,\r
-                             endRes);\r
-      seqs[i].setDescription(seq.getDescription());\r
-      seqs[i].setDBRef(seq.getDBRef());\r
-      seqs[i].setSequenceFeatures(seq.getSequenceFeatures());\r
-      seqs[i].setDatasetSequence(seq.getDatasetSequence());\r
-      if(seq.getAnnotation()!=null)\r
-      {\r
-        for(int a=0; a<seq.getAnnotation().length; a++)\r
-          seqs[i].addAlignmentAnnotation(seq.getAnnotation()[a]);\r
+        hiddenColumns.addElement(new int[]{region[0]-hiddenOffset,\r
+                          region[1]-hiddenOffset});\r
       }\r
     }\r
-\r
-    FastaFile ff = new FastaFile();\r
-    ff.addJVSuffix( viewport.showJVSuffix );\r
-    c.setContents(new StringSelection( ff.print(seqs)), Desktop.instance);\r
-    Desktop.jalviewClipboard = new Object[]{seqs,  viewport.alignment.getDataset()};\r
+    Desktop.jalviewClipboard = new Object[]{ seqs,\r
+        viewport.alignment.getDataset(),\r
+        hiddenColumns};\r
   }\r
 \r
   /**\r
@@ -848,6 +824,18 @@ public class AlignFrame
        AlignFrame af = new AlignFrame(alignment);\r
        String newtitle = new String("Copied sequences");\r
 \r
+       if(Desktop.jalviewClipboard[2]!=null)\r
+         {\r
+           Vector hc = (Vector)Desktop.jalviewClipboard[2];\r
+           for(int i=0; i<hc.size(); i++)\r
+           {\r
+             int [] region = (int[]) hc.elementAt(i);\r
+             for(int j=region[0]; j<region[1]+1; j++)\r
+               af.viewport.getColumnSelection().addElement(j);\r
+             af.viewport.getColumnSelection().hideColumns(region[0], af.viewport);\r
+           }\r
+         }\r
+\r
 \r
        //>>>This is a fix for the moment, until a better solution is found!!<<<\r
        af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().transferSettings(\r
@@ -2129,10 +2117,7 @@ public class AlignFrame
       }\r
 \r
       title = title + " on region";\r
-      tp = new TreePanel(viewport,\r
-                         viewport.getSelectionGroup().getSequences(false),\r
-                         type, pwType,\r
-                         sg.getStartRes(), sg.getEndRes());\r
+      tp = new TreePanel(viewport, type, pwType);\r
     }\r
     else\r
     {\r
@@ -2149,10 +2134,7 @@ public class AlignFrame
         return;\r
       }\r
 \r
-      tp = new TreePanel(viewport,\r
-                         viewport.getAlignment().getSequences(), type, pwType,\r
-                         0,\r
-                         viewport.alignment.getWidth());\r
+      tp = new TreePanel(viewport, type, pwType);\r
     }\r
 \r
     addTreeMenuItem(tp, title);\r
@@ -2403,7 +2385,7 @@ public class AlignFrame
       if (nf.getTree() != null)\r
       {\r
         tp = new TreePanel(viewport,\r
-                           viewport.getAlignment().getSequences(), nf,\r
+                           nf,\r
                            "FromFile",\r
                            title);\r
 \r
index edbfde5..2e1a4e0 100755 (executable)
@@ -1143,4 +1143,106 @@ public class AlignViewport
     {\r
       return alignment.getHiddenSequences().adjustForHiddenSeqs(alignmentIndex);\r
     }\r
+\r
+    /**\r
+     * This method returns the a new SequenceI [] with\r
+     * the selection sequence and start and end points adjusted\r
+     * @return String[]\r
+     */\r
+    public SequenceI[] getSelectionAsNewSequence()\r
+    {\r
+      SequenceI[] sequences;\r
+\r
+      if (selectionGroup == null)\r
+        sequences = alignment.getSequencesArray();\r
+      else\r
+        sequences = selectionGroup.getSelectionAsNewSequences(alignment);\r
+\r
+      return sequences;\r
+    }\r
+\r
+\r
+    /**\r
+     * This method returns the visible selected area as text, as\r
+     * seen on the GUI, ie if columns are hidden they will not\r
+     * be returned in the result.\r
+     * Use this for calculating trees, PCA, redundancy etc on views\r
+     * which contain hidden columns.\r
+     * @return String[]\r
+     */\r
+    public String [] getSelectionAsString()\r
+    {\r
+      String [] selection = null;\r
+      SequenceI [] seqs= null;\r
+      int i, iSize;\r
+      int start = 0, end = 0;\r
+      if(selectionGroup!=null)\r
+      {\r
+        iSize = selectionGroup.getSize(false);\r
+        seqs = selectionGroup.getSequencesInOrder(alignment);\r
+        start = selectionGroup.getStartRes();\r
+        end = selectionGroup.getEndRes()+1;\r
+      }\r
+      else\r
+      {\r
+        iSize = alignment.getHeight();\r
+        seqs = alignment.getSequencesArray();\r
+        end = alignment.getWidth();\r
+      }\r
+\r
+      selection = new String[iSize];\r
+\r
+\r
+      for(i=0; i<iSize; i++)\r
+      {\r
+        if (hasHiddenColumns)\r
+        {\r
+             StringBuffer visibleSeq = new StringBuffer();\r
+             Vector regions = colSel.getHiddenColumns();\r
+\r
+             int blockStart = start, blockEnd=end;\r
+             int [] region;\r
+             int hideStart, hideEnd;\r
+\r
+             for (int j = 0; j < regions.size(); j++)\r
+             {\r
+               region = (int[]) regions.elementAt(j);\r
+               hideStart = region[0];\r
+               hideEnd = region[1];\r
+\r
+               if(hideStart < start)\r
+               {\r
+                 continue;\r
+               }\r
+\r
+               blockStart = Math.min(blockStart, hideEnd+1);\r
+               blockEnd = Math.min(blockEnd, hideStart);\r
+\r
+               if(blockStart>blockEnd)\r
+               {\r
+                  break;\r
+               }\r
+\r
+\r
+               visibleSeq.append(seqs[i].getSequence(blockStart, blockEnd));\r
+\r
+               blockStart = hideEnd+1;\r
+               blockEnd = end;\r
+             }\r
+\r
+             if(end>blockStart)\r
+               visibleSeq.append(seqs[i].getSequence(blockStart, end));\r
+\r
+             selection[i] = visibleSeq.toString();\r
+        }\r
+        else\r
+        {\r
+          selection[i] = seqs[i].getSequence(start, end);\r
+        }\r
+\r
+    //    System.out.println(seqs[i].getName()+"\t"+ selection[i]);\r
+      }\r
+\r
+      return selection;\r
+    }\r
 }\r
index 2451a96..8a08075 100755 (executable)
@@ -117,6 +117,10 @@ public class AlignmentPanel extends GAlignmentPanel
 \r
             break;\r
 \r
+            case KeyEvent.VK_B:\r
+              av.getSelectionAsString();\r
+              break;\r
+\r
           case KeyEvent.VK_DOWN:\r
             if(av.cursorMode)\r
             {\r
index 55c055c..1032c5b 100755 (executable)
@@ -171,6 +171,23 @@ public class ColumnSelection
                 selected.setElementAt(new Integer(temp - change), i);\r
             }\r
         }\r
+\r
+        if(hiddenColumns!=null)\r
+        {\r
+          for(int i=0; i<hiddenColumns.size(); i++)\r
+          {\r
+            int[] region = (int[]) hiddenColumns.elementAt(i);\r
+            if(region[0] > start)\r
+            {\r
+              region[0] -= change;\r
+              region[1] -= change;\r
+            }\r
+            if(region[0]<0)\r
+              region[0] = 0;\r
+            if(region[1] <0)\r
+             region[1] = 0;\r
+          }\r
+        }\r
     }\r
 \r
     /**\r
index 065fcdf..7875d7b 100755 (executable)
@@ -240,7 +240,7 @@ public class DasSourceBrowser extends GDasSourceBrowser
 \r
   public void run()\r
   {\r
-    System.out.println("das source browser running");\r
+\r
     addLocal.setVisible(false);\r
     refresh.setVisible(false);\r
     progressBar.setVisible(true);\r
index 64253b4..8c2ecc9 100755 (executable)
@@ -44,7 +44,8 @@ public class PCAPanel extends GPCAPanel implements Runnable
     int top;\r
     RotatableCanvas rc;\r
     AlignViewport av;\r
-    SequenceI [] seqs;\r
+    String  [] seqstrings;\r
+    SequenceI  [] seqs;\r
 \r
     /**\r
      * Creates a new PCAPanel object.\r
@@ -58,36 +59,26 @@ public class PCAPanel extends GPCAPanel implements Runnable
 \r
         boolean sameLength = true;\r
 \r
-        if ((av.getSelectionGroup() != null) &&\r
-                (av.getSelectionGroup().getSize(false) > 3))\r
+        seqstrings = av.getSelectionAsString();\r
+\r
+        if (av.getSelectionGroup() == null)\r
         {\r
-            seqs = new Sequence[av.getSelectionGroup().getSize(false)];\r
-            int length = av.getSelectionGroup().getSequenceAt(0).getLength();\r
-            for (int i = 0; i < av.getSelectionGroup().getSize(false); i++)\r
-            {\r
-                seqs[i] = av.getSelectionGroup().getSequenceAt(i);\r
-                if(seqs[i].getLength()!=length)\r
-                {\r
-                  sameLength = false;\r
-                  break;\r
-                }\r
-            }\r
+          seqs = av.alignment.getSequencesArray();\r
         }\r
         else\r
         {\r
-            seqs = new Sequence[av.getAlignment().getHeight()];\r
-            int length = av.alignment.getSequenceAt(0).getLength();\r
-\r
-            for (int i = 0; i < av.getAlignment().getHeight(); i++)\r
-            {\r
-                seqs[i] = av.getAlignment().getSequenceAt(i);\r
-                if(seqs[i].getLength()!=length)\r
-               {\r
-                 sameLength = false;\r
-                 break;\r
-               }\r
-\r
-            }\r
+          seqs = av.getSelectionGroup().getSequencesInOrder(av.alignment);\r
+        }\r
+\r
+        int length = seqs[0].getLength();\r
+\r
+        for (int i = 0; i < seqs.length; i++)\r
+        {\r
+          if (seqs[i].getLength() != length)\r
+          {\r
+            sameLength = false;\r
+            break;\r
+          }\r
         }\r
 \r
         if (!sameLength)\r
@@ -132,7 +123,7 @@ public class PCAPanel extends GPCAPanel implements Runnable
     public void run()\r
     {\r
       try{\r
-        pca = new PCA(seqs);\r
+        pca = new PCA(seqstrings);\r
         pca.run();\r
 \r
         // Now find the component coordinates\r
@@ -171,7 +162,6 @@ public class PCAPanel extends GPCAPanel implements Runnable
 \r
         rc.setPoints(points, pca.getM().rows);\r
         rc.repaint();\r
-        seqs = null;\r
       }\r
      catch(OutOfMemoryError er)\r
       { JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
@@ -265,6 +255,19 @@ public class PCAPanel extends GPCAPanel implements Runnable
       printer.start();\r
     }\r
 \r
+    public void originalSeqData_actionPerformed(ActionEvent e)\r
+    {\r
+      CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
+      for(int i=0; i<seqs.length; i++)\r
+          cap.appendText(seqs[i].getName()+"\t"\r
+                         +seqstrings[i]+"\n");\r
+\r
+      Desktop.addInternalFrame(cap, "Original Data",\r
+          400, 400);\r
+\r
+    }\r
+\r
+\r
 \r
     class PCAPrinter extends Thread implements Printable\r
     {\r
index 5e719f2..f52a1d8 100755 (executable)
@@ -37,8 +37,9 @@ import java.util.*;
  */\r
 public class PairwiseAlignPanel extends GPairwiseAlignPanel\r
 {\r
-    Vector sequences = new Vector();\r
+\r
     AlignViewport av;\r
+    Vector sequences;\r
 \r
     /**\r
      * Creates a new PairwiseAlignPanel object.\r
@@ -50,20 +51,24 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel
         super();\r
         this.av = av;\r
 \r
-        Vector selsubset = new Vector();\r
+        sequences = new Vector();\r
+\r
+        SequenceI [] seqs;\r
+        String []  seqStrings = av.getSelectionAsString();\r
 \r
-        for (int i = 0, j = av.getSelectionGroup().getSize(false); i < j; i++)\r
+        if(av.getSelectionGroup()==null)\r
         {\r
-            if (av.getAlignment().getSequences().contains(av.getSelectionGroup()\r
-                                                                .getSequenceAt(i)))\r
-            {\r
-                selsubset.add(av.getSelectionGroup().getSequenceAt(i));\r
-            }\r
+          seqs = av.alignment.getSequencesArray();\r
+        }\r
+        else\r
+        {\r
+          seqs = av.getSelectionGroup().getSequencesInOrder(av.alignment);\r
         }\r
 \r
-        float[][] scores = new float[selsubset.size()][selsubset.size()];\r
+\r
+        float[][] scores = new float[seqs.length][seqs.length];\r
         double totscore = 0;\r
-        int count = selsubset.size();\r
+        int count = seqs.length;\r
 \r
         int acount = 0;\r
         Sequence seq;\r
@@ -74,8 +79,9 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel
             {\r
                 acount++;\r
 \r
-                AlignSeq as = new AlignSeq((SequenceI) selsubset.elementAt(i),\r
-                        (SequenceI) selsubset.elementAt(j), "pep");\r
+                AlignSeq as = new AlignSeq(seqs[i], seqStrings[i],\r
+                        seqs[j], seqStrings[j], "pep");\r
+\r
                 as.calcScoreMatrix();\r
                 as.traceAlignment();\r
                 as.printAlignment(System.out);\r
@@ -91,8 +97,8 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel
 \r
                 seq = new Sequence(as.getS2().getName(),\r
                                    as.getAStr2(),\r
-                                   as.getS2().getStart(), as.getS2().getEnd()\r
-                    );\r
+                                   as.getS2().getStart(),\r
+                                   as.getS2().getEnd() );\r
                 sequences.add(seq);\r
             }\r
         }\r
@@ -106,7 +112,7 @@ public class PairwiseAlignPanel extends GPairwiseAlignPanel
             {\r
                 jalview.util.Format.print(System.out, "%s \n",\r
                     ("" + i) + " " +\r
-                    ((SequenceI) selsubset.elementAt(i)).getName());\r
+                    seqs[i].getName());\r
             }\r
 \r
             System.out.println("\n");\r
index 78d8424..b248294 100755 (executable)
@@ -43,7 +43,7 @@ public class RedundancyPanel extends GSliderPanel implements Runnable
     AlignmentPanel ap;\r
     Stack historyList = new Stack(); // simpler than synching with alignFrame.\r
     float [] redundancy;\r
-    Vector originalSequences;\r
+    SequenceI [] originalSequences;\r
     Hashtable originalColours;\r
     JInternalFrame frame;\r
 \r
@@ -116,63 +116,69 @@ public class RedundancyPanel extends GSliderPanel implements Runnable
 \r
         validate();\r
 \r
-        Vector sel = new Vector();\r
+        String[] omitHidden = null;\r
+\r
         SequenceGroup sg = ap.av.getSelectionGroup();\r
         int height;\r
-        originalSequences = new Vector();\r
+\r
         originalColours = new Hashtable();\r
+        int start, end;\r
 \r
         if ( (sg != null) && (sg.getSize(false) >= 1))\r
         {\r
-           height = sg.getSize(false);\r
-          for (int i = 0; i < sg.getSize(false); i++)\r
-          {\r
-            sel.addElement(sg.getSequenceAt(i));\r
-          }\r
+           originalSequences = sg.getSequencesInOrder(ap.av.alignment);\r
+           start = sg.getStartRes();\r
+           end = sg.getEndRes();\r
         }\r
         else\r
         {\r
-          height = ap.av.alignment.getHeight();\r
-          for (int i = 0; i < ap.av.alignment.getHeight(); i++)\r
-          {\r
-            sel.addElement(ap.av.alignment.getSequenceAt(i));\r
-          }\r
+          originalSequences = ap.av.alignment.getSequencesArray();\r
+          start = 0;\r
+          end = ap.av.alignment.getWidth();\r
         }\r
 \r
+        height = originalSequences.length;\r
+\r
         redundancy = new float[height];\r
         for (int i = 0; i < height; i++)\r
         {\r
           redundancy[i] = 0f;\r
         }\r
 \r
+        if (ap.av.hasHiddenColumns)\r
+        {\r
+          omitHidden = ap.av.getSelectionAsString();\r
+        }\r
+\r
 \r
        // long start = System.currentTimeMillis();\r
 \r
         float pid;\r
-        SequenceI seqi, seqj;\r
-        for (int i = 0; i < sel.size(); i++)\r
+        String seqi, seqj;\r
+        for (int i = 0; i < height; i++)\r
         {\r
-            originalSequences.addElement(sel.elementAt(i));\r
-            originalColours.put(sel.elementAt(i),\r
-                               ((SequenceI) sel.elementAt(i)).getColor());\r
+            originalColours.put(originalSequences[i],\r
+                               originalSequences[i].getColor());\r
 \r
             for (int j = 0; j < i; j++)\r
             {\r
               if(i==j)\r
                 continue;\r
 \r
-              seqi = (SequenceI) sel.elementAt(i);\r
-              seqj = (SequenceI) sel.elementAt(j);\r
-\r
-              if (sg != null)\r
-                pid = Comparison.PID( seqi,\r
-                                     seqj,\r
-                                     sg.getStartRes(), sg.getEndRes());\r
+              if(omitHidden==null)\r
+              {\r
+                seqi = originalSequences[i].getSequence(start, end);\r
+                seqj = originalSequences[j].getSequence(start, end);\r
+              }\r
               else\r
-                pid = Comparison.PID( seqi,  seqj );\r
+              {\r
+                seqi = omitHidden[i];\r
+                seqj = omitHidden[j];\r
+              }\r
 \r
+              pid = Comparison.PID( seqi,  seqj );\r
 \r
-              if(seqj.getLength() < seqi.getLength())\r
+              if(seqj.length() < seqi.length())\r
                 redundancy[j] = Math.max(pid, redundancy[j]);\r
               else\r
                 redundancy[i] = Math.max(pid, redundancy[i]);\r
@@ -180,7 +186,6 @@ public class RedundancyPanel extends GSliderPanel implements Runnable
             }\r
         }\r
 \r
-\r
         progress.setIndeterminate(false);\r
         progress.setVisible(false);\r
         progress = null;\r
@@ -191,7 +196,7 @@ public class RedundancyPanel extends GSliderPanel implements Runnable
         valueField.setVisible(true);\r
 \r
         validate();\r
-       // System.out.println("blob done "+ (System.currentTimeMillis()-start));\r
+       // System.out.println((System.currentTimeMillis()-start));\r
     }\r
 \r
     void sliderValueChanged()\r
@@ -204,9 +209,9 @@ public class RedundancyPanel extends GSliderPanel implements Runnable
       for(int i=0; i<redundancy.length; i++)\r
       {\r
         if (value > redundancy[i])\r
-           ((SequenceI)originalSequences.elementAt(i)).setColor(java.awt.Color.white);\r
+           originalSequences[i].setColor(java.awt.Color.white);\r
         else\r
-           ((SequenceI)originalSequences.elementAt(i)).setColor(java.awt.Color.red);\r
+          originalSequences[i].setColor(java.awt.Color.red);\r
       }\r
 \r
       PaintRefresher.Refresh(null,ap.av.alignment);\r
@@ -241,7 +246,7 @@ public class RedundancyPanel extends GSliderPanel implements Runnable
         {\r
           if (value <= redundancy[i])\r
           {\r
-            SequenceI seq = (SequenceI) originalSequences.elementAt(i);\r
+            SequenceI seq = originalSequences[i];\r
             ap.av.alignment.deleteSequence(seq);\r
             del.add(seq);\r
             if (sg != null)\r
@@ -269,9 +274,9 @@ public class RedundancyPanel extends GSliderPanel implements Runnable
 \r
     void resetColours()\r
     {\r
-      for(int i=0; i<originalSequences.size(); i++)\r
+      for(int i=0; i<originalSequences.length; i++)\r
       {\r
-        SequenceI seq = (SequenceI)originalSequences.elementAt(i);\r
+        SequenceI seq = originalSequences[i];\r
         seq.setColor( (java.awt.Color)originalColours.get(seq));\r
       }\r
 \r
index 8af3d65..ff16b04 100755 (executable)
@@ -22,8 +22,6 @@ import jalview.datamodel.*;
 \r
 import jalview.math.*;\r
 \r
-import jalview.util.*;\r
-\r
 import java.awt.*;\r
 import java.awt.event.*;\r
 \r
index 4135cb0..9d6b925 100755 (executable)
@@ -820,12 +820,10 @@ public class SeqPanel extends JPanel implements MouseListener,
             {\r
               if(startres>=y2)\r
               {\r
-                System.out.println("left of line");\r
                 fixedLeft = y2;\r
               }\r
               else\r
-             {\r
-               System.out.println("right of line");\r
+              {\r
                fixedRight = y2 - 1;\r
              }\r
             }\r
@@ -876,8 +874,15 @@ public class SeqPanel extends JPanel implements MouseListener,
 \r
             if (!blank)\r
             {\r
-              if(sg.getSize(false) == av.alignment.getHeight())\r
+              if(sg.getSize(false) == av.alignment.getHeight()  )\r
               {\r
+                if((av.hasHiddenColumns\r
+                    && startres<av.getColumnSelection().getHiddenBoundaryRight(startres)))\r
+                {\r
+                  endEditing();\r
+                  return;\r
+                }\r
+\r
                 //We can still insert gaps if the selectionGroup\r
                 //contains all the sequences\r
                 sg.setEndRes(sg.getEndRes()+startres-lastres);\r
index 1b01606..a25b01d 100755 (executable)
@@ -49,11 +49,8 @@ import java.beans.PropertyChangeEvent;
  */\r
 public class TreePanel extends GTreePanel\r
 {\r
-    SequenceI[] seq;\r
     String type;\r
     String pwtype;\r
-    int start;\r
-    int end;\r
     TreeCanvas treeCanvas;\r
     NJTree tree;\r
     AlignViewport av;\r
@@ -68,11 +65,10 @@ public class TreePanel extends GTreePanel
      * @param s DOCUMENT ME!\r
      * @param e DOCUMENT ME!\r
      */\r
-    public TreePanel(AlignViewport av, Vector seqVector, String type,\r
-                     String pwtype, int s, int e)\r
+    public TreePanel(AlignViewport av, String type, String pwtype)\r
     {\r
       super();\r
-      initTreePanel(av, seqVector, type, pwtype, s, e, null);\r
+      initTreePanel(av, type, pwtype, null);\r
 \r
       // We know this tree has distances. JBPNote TODO: prolly should add this as a userdefined default\r
       showDistances(true);\r
@@ -87,11 +83,13 @@ public class TreePanel extends GTreePanel
      * @param type DOCUMENT ME!\r
      * @param pwtype DOCUMENT ME!\r
      */\r
-    public TreePanel(AlignViewport av, Vector seqVector, NewickFile newtree,\r
-                     String type, String pwtype)\r
+    public TreePanel(AlignViewport av,\r
+                     NewickFile newtree,\r
+                     String type,\r
+                     String pwtype)\r
     {\r
       super();\r
-      initTreePanel(av, seqVector, type, pwtype, 0, seqVector.size(), newtree);\r
+      initTreePanel(av, type, pwtype, newtree);\r
     }\r
 \r
     public AlignmentI getAlignment()\r
@@ -100,20 +98,13 @@ public class TreePanel extends GTreePanel
     }\r
 \r
 \r
-    void initTreePanel(AlignViewport av, Vector seqVector, String type,\r
-                       String pwtype, int s, int e, NewickFile newTree)\r
+    void initTreePanel(AlignViewport av, String type,  String pwtype,\r
+                       NewickFile newTree)\r
     {\r
 \r
       this.type = type;\r
       this.pwtype = pwtype;\r
 \r
-      start = s;\r
-      end = e;\r
-\r
-      seq = new Sequence[seqVector.size()];\r
-      seqVector.toArray(seq);\r
-\r
-\r
       treeCanvas = new TreeCanvas(av, scrollPane);\r
       scrollPane.setViewportView(treeCanvas);\r
 \r
@@ -161,10 +152,36 @@ public class TreePanel extends GTreePanel
 \r
       public void run()\r
       {\r
+\r
         if(newtree!=null)\r
-          tree = new NJTree(seq, newtree);\r
+          tree = new NJTree(av.alignment.getSequencesArray(),\r
+                            newtree);\r
         else\r
-          tree = new NJTree(seq, type, pwtype, start, end);\r
+        {\r
+          int start, end;\r
+          SequenceI [] seqs;\r
+          String [] seqStrings = null;\r
+          if (av.hasHiddenColumns)\r
+          {\r
+            seqStrings = av.getSelectionAsString();\r
+          }\r
+\r
+          if(av.getSelectionGroup()==null)\r
+          {\r
+            start = 0;\r
+            end = av.alignment.getWidth();\r
+            seqs = av.alignment.getSequencesArray();\r
+          }\r
+          else\r
+          {\r
+            start = av.getSelectionGroup().getStartRes();\r
+            end = av.getSelectionGroup().getEndRes()+1;\r
+            seqs = av.getSelectionGroup().getSequencesInOrder(av.alignment);\r
+          }\r
+\r
+          tree = new NJTree(seqs, seqStrings, type, pwtype, start, end);\r
+        }\r
+\r
 \r
         tree.reCount(tree.getTopNode());\r
         tree.findHeight(tree.getTopNode());\r
@@ -292,6 +309,16 @@ public class TreePanel extends GTreePanel
         treeCanvas.startPrinting();\r
     }\r
 \r
+\r
+    public void originalSeqData_actionPerformed(ActionEvent e)\r
+    {\r
+      CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
+      cap.setText(tree.printOriginalSequenceData());\r
+      Desktop.addInternalFrame(cap, "Original Data",\r
+          400, 400);\r
+    }\r
+\r
+\r
     /**\r
      * DOCUMENT ME!\r
      *\r