From 7c05496d1da22f21ce5ae1a199afb9b16c8777ea Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Tue, 18 Jul 2006 15:32:16 +0000 Subject: [PATCH] Use selection area with hidden columns in calculations --- src/jalview/gui/AlignFrame.java | 152 ++++++++++++++----------------- src/jalview/gui/AlignViewport.java | 102 +++++++++++++++++++++ src/jalview/gui/AlignmentPanel.java | 4 + src/jalview/gui/ColumnSelection.java | 17 ++++ src/jalview/gui/DasSourceBrowser.java | 2 +- src/jalview/gui/PCAPanel.java | 61 +++++++------ src/jalview/gui/PairwiseAlignPanel.java | 36 +++++--- src/jalview/gui/RedundancyPanel.java | 73 ++++++++------- src/jalview/gui/RotatableCanvas.java | 2 - src/jalview/gui/SeqPanel.java | 13 ++- src/jalview/gui/TreePanel.java | 67 ++++++++++---- 11 files changed, 339 insertions(+), 190 deletions(-) diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index c1f088b..05ba50c 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -347,9 +347,21 @@ public class AlignFrame } else { - String output = new FormatAdapter().formatSequences(format, - viewport.getAlignment(). - getSequences()); + + String[] omitHidden = null; + + if (viewport.hasHiddenColumns) + { + System.out.println("PROMPT USER HERE"); + omitHidden = viewport.getSelectionAsString(); + } + + String output = new FormatAdapter().formatSequences( + format, + viewport.getSelectionAsNewSequence(), + omitHidden) ; + + if (output == null) { return false; @@ -381,12 +393,20 @@ public class AlignFrame protected void outputText_actionPerformed(ActionEvent e) { CutAndPasteTransfer cap = new CutAndPasteTransfer(); - Desktop.addInternalFrame(cap, - "Alignment output - " + e.getActionCommand(), 600, - 500); - cap.setText(new FormatAdapter().formatSequences(e.getActionCommand(), - viewport.getAlignment(). - getSequences())); + + + String [] omitHidden = null; + + if(viewport.hasHiddenColumns) + { + System.out.println("PROMPT USER HERE"); + omitHidden = viewport.getSelectionAsString(); + } + + cap.setText(new FormatAdapter().formatSequences( + e.getActionCommand(), + viewport.getSelectionAsNewSequence(), + omitHidden)); } /** @@ -647,84 +667,40 @@ public class AlignFrame { return; } - - SequenceGroup sg = viewport.getSelectionGroup(); - - Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); - - Hashtable orderedSeqs = new Hashtable(); - SequenceI[] seqs = new SequenceI[sg.getSize(false)]; - - for (int i = 0; i < sg.getSize(false); i++) + SequenceI [] seqs; + if(viewport.getSelectionGroup()==null) { - SequenceI seq = sg.getSequenceAt(i); - int index = viewport.alignment.findIndex(seq); - orderedSeqs.put(index + "", seq); + seqs = viewport.alignment.getSequencesArray(); } - - int index = 0, startRes, endRes; - char ch; - - for (int i = 0; i < sg.getSize(false); i++) + else { - SequenceI seq = null; - - while (seq == null) - { - if (orderedSeqs.containsKey(index + "")) - { - seq = (SequenceI) orderedSeqs.get(index + ""); - index++; - - break; - } - else - { - index++; - } - } + seqs = viewport.getSelectionGroup().getSequencesInOrder(viewport.alignment); + } - //FIND START RES - //Returns residue following index if gap - startRes = seq.findPosition(sg.getStartRes()); + Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); - //FIND END RES - //Need to find the residue preceeding index if gap - endRes = 0; + FastaFile ff = new FastaFile(); + ff.addJVSuffix( viewport.showJVSuffix ); - for (int j = 0; j < sg.getEndRes() + 1 && j < seq.getLength(); j++) - { - ch = seq.getCharAt(j); - if (!jalview.util.Comparison.isGap( (ch))) - { - endRes++; - } - } + c.setContents(new StringSelection(ff.print(seqs)), Desktop.instance); - if (endRes > 0) + Vector hiddenColumns = null; + if(viewport.hasHiddenColumns && viewport.getSelectionGroup()!=null) + { + hiddenColumns =new Vector(); + int hiddenOffset = viewport.getSelectionGroup().getStartRes(); + for(int i=0; i>>This is a fix for the moment, until a better solution is found!!<<< af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().transferSettings( @@ -2129,10 +2117,7 @@ public class AlignFrame } title = title + " on region"; - tp = new TreePanel(viewport, - viewport.getSelectionGroup().getSequences(false), - type, pwType, - sg.getStartRes(), sg.getEndRes()); + tp = new TreePanel(viewport, type, pwType); } else { @@ -2149,10 +2134,7 @@ public class AlignFrame return; } - tp = new TreePanel(viewport, - viewport.getAlignment().getSequences(), type, pwType, - 0, - viewport.alignment.getWidth()); + tp = new TreePanel(viewport, type, pwType); } addTreeMenuItem(tp, title); @@ -2403,7 +2385,7 @@ public class AlignFrame if (nf.getTree() != null) { tp = new TreePanel(viewport, - viewport.getAlignment().getSequences(), nf, + nf, "FromFile", title); diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index edbfde5..2e1a4e0 100755 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -1143,4 +1143,106 @@ public class AlignViewport { return alignment.getHiddenSequences().adjustForHiddenSeqs(alignmentIndex); } + + /** + * This method returns the a new SequenceI [] with + * the selection sequence and start and end points adjusted + * @return String[] + */ + public SequenceI[] getSelectionAsNewSequence() + { + SequenceI[] sequences; + + if (selectionGroup == null) + sequences = alignment.getSequencesArray(); + else + sequences = selectionGroup.getSelectionAsNewSequences(alignment); + + return sequences; + } + + + /** + * This method returns the visible selected area as text, as + * seen on the GUI, ie if columns are hidden they will not + * be returned in the result. + * Use this for calculating trees, PCA, redundancy etc on views + * which contain hidden columns. + * @return String[] + */ + public String [] getSelectionAsString() + { + String [] selection = null; + SequenceI [] seqs= null; + int i, iSize; + int start = 0, end = 0; + if(selectionGroup!=null) + { + iSize = selectionGroup.getSize(false); + seqs = selectionGroup.getSequencesInOrder(alignment); + start = selectionGroup.getStartRes(); + end = selectionGroup.getEndRes()+1; + } + else + { + iSize = alignment.getHeight(); + seqs = alignment.getSequencesArray(); + end = alignment.getWidth(); + } + + selection = new String[iSize]; + + + for(i=0; iblockEnd) + { + break; + } + + + visibleSeq.append(seqs[i].getSequence(blockStart, blockEnd)); + + blockStart = hideEnd+1; + blockEnd = end; + } + + if(end>blockStart) + visibleSeq.append(seqs[i].getSequence(blockStart, end)); + + selection[i] = visibleSeq.toString(); + } + else + { + selection[i] = seqs[i].getSequence(start, end); + } + + // System.out.println(seqs[i].getName()+"\t"+ selection[i]); + } + + return selection; + } } diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 2451a96..8a08075 100755 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -117,6 +117,10 @@ public class AlignmentPanel extends GAlignmentPanel break; + case KeyEvent.VK_B: + av.getSelectionAsString(); + break; + case KeyEvent.VK_DOWN: if(av.cursorMode) { diff --git a/src/jalview/gui/ColumnSelection.java b/src/jalview/gui/ColumnSelection.java index 55c055c..1032c5b 100755 --- a/src/jalview/gui/ColumnSelection.java +++ b/src/jalview/gui/ColumnSelection.java @@ -171,6 +171,23 @@ public class ColumnSelection selected.setElementAt(new Integer(temp - change), i); } } + + if(hiddenColumns!=null) + { + for(int i=0; i start) + { + region[0] -= change; + region[1] -= change; + } + if(region[0]<0) + region[0] = 0; + if(region[1] <0) + region[1] = 0; + } + } } /** diff --git a/src/jalview/gui/DasSourceBrowser.java b/src/jalview/gui/DasSourceBrowser.java index 065fcdf..7875d7b 100755 --- a/src/jalview/gui/DasSourceBrowser.java +++ b/src/jalview/gui/DasSourceBrowser.java @@ -240,7 +240,7 @@ public class DasSourceBrowser extends GDasSourceBrowser public void run() { - System.out.println("das source browser running"); + addLocal.setVisible(false); refresh.setVisible(false); progressBar.setVisible(true); diff --git a/src/jalview/gui/PCAPanel.java b/src/jalview/gui/PCAPanel.java index 64253b4..8c2ecc9 100755 --- a/src/jalview/gui/PCAPanel.java +++ b/src/jalview/gui/PCAPanel.java @@ -44,7 +44,8 @@ public class PCAPanel extends GPCAPanel implements Runnable int top; RotatableCanvas rc; AlignViewport av; - SequenceI [] seqs; + String [] seqstrings; + SequenceI [] seqs; /** * Creates a new PCAPanel object. @@ -58,36 +59,26 @@ public class PCAPanel extends GPCAPanel implements Runnable boolean sameLength = true; - if ((av.getSelectionGroup() != null) && - (av.getSelectionGroup().getSize(false) > 3)) + seqstrings = av.getSelectionAsString(); + + if (av.getSelectionGroup() == null) { - seqs = new Sequence[av.getSelectionGroup().getSize(false)]; - int length = av.getSelectionGroup().getSequenceAt(0).getLength(); - for (int i = 0; i < av.getSelectionGroup().getSize(false); i++) - { - seqs[i] = av.getSelectionGroup().getSequenceAt(i); - if(seqs[i].getLength()!=length) - { - sameLength = false; - break; - } - } + seqs = av.alignment.getSequencesArray(); } else { - seqs = new Sequence[av.getAlignment().getHeight()]; - int length = av.alignment.getSequenceAt(0).getLength(); - - for (int i = 0; i < av.getAlignment().getHeight(); i++) - { - seqs[i] = av.getAlignment().getSequenceAt(i); - if(seqs[i].getLength()!=length) - { - sameLength = false; - break; - } - - } + seqs = av.getSelectionGroup().getSequencesInOrder(av.alignment); + } + + int length = seqs[0].getLength(); + + for (int i = 0; i < seqs.length; i++) + { + if (seqs[i].getLength() != length) + { + sameLength = false; + break; + } } if (!sameLength) @@ -132,7 +123,7 @@ public class PCAPanel extends GPCAPanel implements Runnable public void run() { try{ - pca = new PCA(seqs); + pca = new PCA(seqstrings); pca.run(); // Now find the component coordinates @@ -171,7 +162,6 @@ public class PCAPanel extends GPCAPanel implements Runnable rc.setPoints(points, pca.getM().rows); rc.repaint(); - seqs = null; } catch(OutOfMemoryError er) { JOptionPane.showInternalMessageDialog(Desktop.desktop, @@ -265,6 +255,19 @@ public class PCAPanel extends GPCAPanel implements Runnable printer.start(); } + public void originalSeqData_actionPerformed(ActionEvent e) + { + CutAndPasteTransfer cap = new CutAndPasteTransfer(); + for(int i=0; i= 1)) { - height = sg.getSize(false); - for (int i = 0; i < sg.getSize(false); i++) - { - sel.addElement(sg.getSequenceAt(i)); - } + originalSequences = sg.getSequencesInOrder(ap.av.alignment); + start = sg.getStartRes(); + end = sg.getEndRes(); } else { - height = ap.av.alignment.getHeight(); - for (int i = 0; i < ap.av.alignment.getHeight(); i++) - { - sel.addElement(ap.av.alignment.getSequenceAt(i)); - } + originalSequences = ap.av.alignment.getSequencesArray(); + start = 0; + end = ap.av.alignment.getWidth(); } + height = originalSequences.length; + redundancy = new float[height]; for (int i = 0; i < height; i++) { redundancy[i] = 0f; } + if (ap.av.hasHiddenColumns) + { + omitHidden = ap.av.getSelectionAsString(); + } + // long start = System.currentTimeMillis(); float pid; - SequenceI seqi, seqj; - for (int i = 0; i < sel.size(); i++) + String seqi, seqj; + for (int i = 0; i < height; i++) { - originalSequences.addElement(sel.elementAt(i)); - originalColours.put(sel.elementAt(i), - ((SequenceI) sel.elementAt(i)).getColor()); + originalColours.put(originalSequences[i], + originalSequences[i].getColor()); for (int j = 0; j < i; j++) { if(i==j) continue; - seqi = (SequenceI) sel.elementAt(i); - seqj = (SequenceI) sel.elementAt(j); - - if (sg != null) - pid = Comparison.PID( seqi, - seqj, - sg.getStartRes(), sg.getEndRes()); + if(omitHidden==null) + { + seqi = originalSequences[i].getSequence(start, end); + seqj = originalSequences[j].getSequence(start, end); + } else - pid = Comparison.PID( seqi, seqj ); + { + seqi = omitHidden[i]; + seqj = omitHidden[j]; + } + pid = Comparison.PID( seqi, seqj ); - if(seqj.getLength() < seqi.getLength()) + if(seqj.length() < seqi.length()) redundancy[j] = Math.max(pid, redundancy[j]); else redundancy[i] = Math.max(pid, redundancy[i]); @@ -180,7 +186,6 @@ public class RedundancyPanel extends GSliderPanel implements Runnable } } - progress.setIndeterminate(false); progress.setVisible(false); progress = null; @@ -191,7 +196,7 @@ public class RedundancyPanel extends GSliderPanel implements Runnable valueField.setVisible(true); validate(); - // System.out.println("blob done "+ (System.currentTimeMillis()-start)); + // System.out.println((System.currentTimeMillis()-start)); } void sliderValueChanged() @@ -204,9 +209,9 @@ public class RedundancyPanel extends GSliderPanel implements Runnable for(int i=0; i redundancy[i]) - ((SequenceI)originalSequences.elementAt(i)).setColor(java.awt.Color.white); + originalSequences[i].setColor(java.awt.Color.white); else - ((SequenceI)originalSequences.elementAt(i)).setColor(java.awt.Color.red); + originalSequences[i].setColor(java.awt.Color.red); } PaintRefresher.Refresh(null,ap.av.alignment); @@ -241,7 +246,7 @@ public class RedundancyPanel extends GSliderPanel implements Runnable { if (value <= redundancy[i]) { - SequenceI seq = (SequenceI) originalSequences.elementAt(i); + SequenceI seq = originalSequences[i]; ap.av.alignment.deleteSequence(seq); del.add(seq); if (sg != null) @@ -269,9 +274,9 @@ public class RedundancyPanel extends GSliderPanel implements Runnable void resetColours() { - for(int i=0; i=y2) { - System.out.println("left of line"); fixedLeft = y2; } else - { - System.out.println("right of line"); + { fixedRight = y2 - 1; } } @@ -876,8 +874,15 @@ public class SeqPanel extends JPanel implements MouseListener, if (!blank) { - if(sg.getSize(false) == av.alignment.getHeight()) + if(sg.getSize(false) == av.alignment.getHeight() ) { + if((av.hasHiddenColumns + && startres