X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FRedundancyPanel.java;h=5423dc96e02598a42b843b47256bee816224958c;hb=76b6b31c53b099a3034e0622ec78d4c2b455a309;hp=78d842450b161d11cacf8f114cc20de3b1d49764;hpb=df9b85c1cf39894039018499fe802406cc37f209;p=jalview.git diff --git a/src/jalview/gui/RedundancyPanel.java b/src/jalview/gui/RedundancyPanel.java index 78d8424..5423dc9 100755 --- a/src/jalview/gui/RedundancyPanel.java +++ b/src/jalview/gui/RedundancyPanel.java @@ -43,9 +43,9 @@ public class RedundancyPanel extends GSliderPanel implements Runnable AlignmentPanel ap; Stack historyList = new Stack(); // simpler than synching with alignFrame. float [] redundancy; - Vector originalSequences; - Hashtable originalColours; + SequenceI [] originalSequences; JInternalFrame frame; + Vector redundantSeqs; /** * Creates a new RedundancyPanel object. @@ -53,10 +53,11 @@ public class RedundancyPanel extends GSliderPanel implements Runnable * @param ap DOCUMENT ME! * @param af DOCUMENT ME! */ - public RedundancyPanel(AlignmentPanel ap, AlignFrame af) + public RedundancyPanel(final AlignmentPanel ap, AlignFrame af) { this.ap = ap; this.af = af; + redundantSeqs = new Vector(); slider.addChangeListener(new ChangeListener() { @@ -69,7 +70,7 @@ public class RedundancyPanel extends GSliderPanel implements Runnable applyButton.setText("Remove"); allGroupsCheck.setVisible(false); - slider.setMinimum(60); + slider.setMinimum(0); slider.setMaximum(100); slider.setValue(100); @@ -84,7 +85,7 @@ public class RedundancyPanel extends GSliderPanel implements Runnable { public void internalFrameClosing(InternalFrameEvent evt) { - resetColours(); + ap.idPanel.idCanvas.setHighlighted(null); } } ); @@ -116,63 +117,66 @@ public class RedundancyPanel extends GSliderPanel implements Runnable validate(); - Vector sel = new Vector(); + String[] omitHidden = null; + SequenceGroup sg = ap.av.getSelectionGroup(); int height; - originalSequences = new Vector(); - originalColours = new Hashtable(); + + int start, end; if ( (sg != null) && (sg.getSize(false) >= 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.getViewAsString(sg!=null); + } + // 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()); 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 +184,6 @@ public class RedundancyPanel extends GSliderPanel implements Runnable } } - progress.setIndeterminate(false); progress.setVisible(false); progress = null; @@ -191,7 +194,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,13 +207,13 @@ public class RedundancyPanel extends GSliderPanel implements Runnable for(int i=0; i redundancy[i]) - ((SequenceI)originalSequences.elementAt(i)).setColor(java.awt.Color.white); - else - ((SequenceI)originalSequences.elementAt(i)).setColor(java.awt.Color.red); - } + redundantSeqs.remove(originalSequences[i]); + else if(!redundantSeqs.contains(originalSequences[i])) + redundantSeqs.add(originalSequences[i]); - PaintRefresher.Refresh(null,ap.av.alignment); + } + ap.idPanel.idCanvas.setHighlighted(redundantSeqs); } /** @@ -241,7 +244,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) @@ -267,16 +270,6 @@ public class RedundancyPanel extends GSliderPanel implements Runnable af.updateEditMenuBar(); } - void resetColours() - { - for(int i=0; i