From 0452450533728e478ef8c893ea2cb3483c740fb3 Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Tue, 23 Jan 2007 17:05:19 +0000 Subject: [PATCH] Hidden representatives moved from sequence to viewport --- src/jalview/analysis/AlignmentSorter.java | 2 +- src/jalview/analysis/Finder.java | 12 +++--- src/jalview/appletgui/APopupMenu.java | 52 ++++++++++++------------ src/jalview/appletgui/AlignFrame.java | 41 ++++++++++--------- src/jalview/appletgui/AlignViewport.java | 40 +++++++++++++++--- src/jalview/appletgui/Finder.java | 6 +-- src/jalview/appletgui/IdCanvas.java | 4 +- src/jalview/appletgui/PairwiseAlignPanel.java | 2 +- src/jalview/appletgui/RedundancyPanel.java | 2 +- src/jalview/appletgui/RotatableCanvas.java | 4 +- src/jalview/appletgui/ScalePanel.java | 2 +- src/jalview/appletgui/SeqCanvas.java | 6 +-- src/jalview/appletgui/SeqPanel.java | 36 +++++++---------- src/jalview/appletgui/TreeCanvas.java | 4 +- src/jalview/datamodel/Alignment.java | 40 +++--------------- src/jalview/datamodel/HiddenSequences.java | 26 +++++------- src/jalview/datamodel/Sequence.java | 30 +------------- src/jalview/datamodel/SequenceGroup.java | 39 ++++++------------ src/jalview/datamodel/SequenceI.java | 5 --- src/jalview/gui/AlignFrame.java | 42 +++++++++---------- src/jalview/gui/AlignViewport.java | 48 ++++++++++++++++++---- src/jalview/gui/AlignmentPanel.java | 2 +- src/jalview/gui/FeatureSettings.java | 4 +- src/jalview/gui/Finder.java | 6 +-- src/jalview/gui/IdCanvas.java | 16 ++++---- src/jalview/gui/Jalview2XML.java | 29 ++++++++----- src/jalview/gui/Jalview2XML_V1.java | 2 +- src/jalview/gui/PopupMenu.java | 54 ++++++++++++------------- src/jalview/gui/RedundancyPanel.java | 2 +- src/jalview/gui/RotatableCanvas.java | 4 +- src/jalview/gui/ScalePanel.java | 2 +- src/jalview/gui/SeqCanvas.java | 6 +-- src/jalview/gui/SeqPanel.java | 36 +++++++---------- src/jalview/gui/TreeCanvas.java | 4 +- 34 files changed, 295 insertions(+), 315 deletions(-) diff --git a/src/jalview/analysis/AlignmentSorter.java b/src/jalview/analysis/AlignmentSorter.java index 24f2ddf..778142c 100755 --- a/src/jalview/analysis/AlignmentSorter.java +++ b/src/jalview/analysis/AlignmentSorter.java @@ -198,7 +198,7 @@ public class AlignmentSorter { SequenceGroup sg2 = (SequenceGroup) groups.elementAt(j); - if (sg.getSize(false) > sg2.getSize(false)) + if (sg.getSize() > sg2.getSize()) { groups.insertElementAt(sg, j); diff --git a/src/jalview/analysis/Finder.java b/src/jalview/analysis/Finder.java index e24a6c0..c385ac8 100644 --- a/src/jalview/analysis/Finder.java +++ b/src/jalview/analysis/Finder.java @@ -22,7 +22,7 @@ public class Finder { this.alignment=alignment; this.selection = selection; } - + public Finder(AlignmentI alignment, SequenceGroup selectionGroup, int seqIndex, int resIndex) { this(alignment, selectionGroup); this.seqIndex=seqIndex; @@ -45,7 +45,7 @@ public class Finder { { int res = Integer.parseInt(searchString); found = true; - if (selection == null || selection.getSize(false) < 1) + if (selection == null || selection.getSize() < 1) { seq = (Sequence) alignment.getSequenceAt(0); } @@ -65,10 +65,10 @@ public class Finder { int end = alignment.getHeight(); - + if (selection != null) { - if ((selection.getSize(false) < 1) || + if ((selection.getSize() < 1) || ((selection.getEndRes() - selection.getStartRes()) < 2)) { selection = null; @@ -79,7 +79,7 @@ public class Finder { { seq = (Sequence) alignment.getSequenceAt(seqIndex); - if ((selection != null) && !selection.getSequences(false).contains(seq)) + if ((selection != null) && !selection.getSequences(null).contains(seq)) { seqIndex++; resIndex = 0; @@ -97,7 +97,7 @@ public class Finder { { item = item.substring(0, selection.getEndRes() + 1); } - + ///Shall we ignore gaps???? - JBPNote: Add Flag for forcing this or not StringBuffer noGapsSB = new StringBuffer(); int insertCount = 0; diff --git a/src/jalview/appletgui/APopupMenu.java b/src/jalview/appletgui/APopupMenu.java index a1e99ff..0c0f562 100755 --- a/src/jalview/appletgui/APopupMenu.java +++ b/src/jalview/appletgui/APopupMenu.java @@ -106,7 +106,7 @@ public class APopupMenu SequenceGroup sg = ap.av.getSelectionGroup(); - if (sg != null && sg.getSize(false)>0) + if (sg != null && sg.getSize()>0) { showText.setState(sg.getDisplayText()); showColourText.setState(sg.getColourText()); @@ -307,7 +307,7 @@ public class APopupMenu } ChangeCaseCommand caseCommand = new ChangeCaseCommand( - description, sg.getSequencesAsArray(true), startEnd, caseChange + description, sg.getSequencesAsArray(ap.av.hiddenRepSequences), startEnd, caseChange ); ap.alignFrame.addHistoryItem(caseCommand); @@ -529,7 +529,8 @@ public class APopupMenu protected void clustalColour_actionPerformed() { SequenceGroup sg = getGroup(); - sg.cs = new ClustalxColourScheme(sg.getSequences(true), ap.av.alignment.getWidth()); + sg.cs = new ClustalxColourScheme(sg.getSequences(ap.av.hiddenRepSequences), + ap.av.alignment.getWidth()); refresh(); } @@ -589,7 +590,7 @@ public class APopupMenu if (abovePIDColour.getState()) { - sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av.hiddenRepSequences), 0, ap.av.alignment.getWidth())); int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup().getName()); @@ -617,7 +618,7 @@ public class APopupMenu { SequenceGroup sg = getGroup(); sg.cs = new PIDColourScheme(); - sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av.hiddenRepSequences), 0, ap.av.alignment.getWidth())); refresh(); } @@ -628,7 +629,7 @@ public class APopupMenu sg.cs = new Blosum62ColourScheme(); - sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, + sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av.hiddenRepSequences), 0, ap.av.alignment.getWidth())); refresh(); @@ -651,7 +652,7 @@ public class APopupMenu Conservation c = new Conservation("Group", ResidueProperties.propHash, 3, - sg.getSequences(true), 0, + sg.getSequences(ap.av.hiddenRepSequences), 0, ap.av.alignment.getWidth()); c.calculate(); @@ -711,34 +712,33 @@ public class APopupMenu void hideSequences(boolean representGroup) { SequenceGroup sg = ap.av.getSelectionGroup(); - if(sg==null || sg.getSize(false)<1) + if(sg==null || sg.getSize()<1) { ap.av.hideSequence(new SequenceI[]{seq}); return; } - int gsize = sg.getSize(false); - SequenceI [] hseqs; + ap.av.setSelectionGroup(null); - hseqs = new SequenceI[ representGroup ? gsize-1 : gsize ]; + if (representGroup) + { + ap.av.hideRepSequences(seq, sg); - int index = 0; - for(int i=0; i -1; i--) { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.getSequences(true).contains(seq)) + if (!sg.getSequences(viewport.hiddenRepSequences).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i + 1); - if (sg.getSequences(true).contains(temp)) + if (sg.getSequences(viewport.hiddenRepSequences).contains(temp)) { continue; } @@ -967,7 +967,7 @@ public void itemStateChanged(ItemEvent evt) SequenceGroup sg = viewport.getSelectionGroup(); copiedSequences = new StringBuffer(); Hashtable orderedSeqs = new Hashtable(); - for (int i = 0; i < sg.getSize(false); i++) + for (int i = 0; i < sg.getSize(); i++) { SequenceI seq = sg.getSequenceAt(i); int index = viewport.alignment.findIndex(seq); @@ -996,7 +996,7 @@ public void itemStateChanged(ItemEvent evt) copiedHiddenColumns = null; - for (int i = 0; i < sg.getSize(false); i++) + for (int i = 0; i < sg.getSize(); i++) { SequenceI seq = null; @@ -1161,7 +1161,7 @@ public void itemStateChanged(ItemEvent evt) Vector seqs = new Vector(); SequenceI seq; - for (int i = 0; i < sg.getSize(false); i++) + for (int i = 0; i < sg.getSize(); i++) { seq = sg.getSequenceAt(i); seqs.addElement(seq); @@ -1169,7 +1169,7 @@ public void itemStateChanged(ItemEvent evt) // If the cut affects all sequences, remove highlighted columns - if (sg.getSize(false) == viewport.alignment.getHeight()) + if (sg.getSize() == viewport.alignment.getHeight()) { viewport.getColumnSelection().removeElements(sg.getStartRes(), sg.getEndRes() + 1); @@ -1267,7 +1267,7 @@ public void itemStateChanged(ItemEvent evt) SequenceI [] seqs; if(viewport.getSelectionGroup()!=null) - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.hiddenRepSequences); else seqs = viewport.alignment.getSequencesArray(); @@ -1326,7 +1326,7 @@ public void itemStateChanged(ItemEvent evt) SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.hiddenRepSequences); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes(); } @@ -1365,7 +1365,7 @@ public void itemStateChanged(ItemEvent evt) SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.hiddenRepSequences); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes(); } @@ -1557,7 +1557,9 @@ public void itemStateChanged(ItemEvent evt) } if (cs instanceof ClustalxColourScheme) { - sg.cs = new ClustalxColourScheme(sg.getSequences(true), sg.getWidth()); + sg.cs = new ClustalxColourScheme( + sg.getSequences(viewport.hiddenRepSequences), + sg.getWidth()); } else { @@ -1577,7 +1579,8 @@ public void itemStateChanged(ItemEvent evt) || cs instanceof Blosum62ColourScheme) { sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus()); - sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0, sg.getWidth())); + sg.cs.setConsensus(AAFrequency.calculate( + sg.getSequences(viewport.hiddenRepSequences), 0, sg.getWidth())); } else sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus()); @@ -1586,7 +1589,7 @@ public void itemStateChanged(ItemEvent evt) { Conservation c = new Conservation("Group", ResidueProperties.propHash, 3, - sg.getSequences(true), 0, + sg.getSequences(viewport.hiddenRepSequences), 0, viewport.alignment.getWidth() - 1); c.calculate(); c.verdict(false, viewport.ConsPercGaps); @@ -1692,7 +1695,7 @@ public void itemStateChanged(ItemEvent evt) public void pairwiseAlignmentMenuItem_actionPerformed() { if (viewport.getSelectionGroup()!=null - && viewport.getSelectionGroup().getSize(false) > 1) + && viewport.getSelectionGroup().getSize() > 1) { Frame frame = new Frame(); frame.add(new PairwiseAlignPanel(alignPanel)); @@ -1722,8 +1725,8 @@ public void itemStateChanged(ItemEvent evt) } if ( (viewport.getSelectionGroup() != null && - viewport.getSelectionGroup().getSize(false) < 4 && - viewport.getSelectionGroup().getSize(false) > 0) + viewport.getSelectionGroup().getSize() < 4 && + viewport.getSelectionGroup().getSize() > 0) || viewport.getAlignment().getHeight() < 4) { return; @@ -1782,7 +1785,7 @@ public void itemStateChanged(ItemEvent evt) } if ( (viewport.getSelectionGroup() != null && - viewport.getSelectionGroup().getSize(false) > 1) + viewport.getSelectionGroup().getSize() > 1) || (viewport.getSelectionGroup() == null && viewport.alignment.getHeight() > 1)) { diff --git a/src/jalview/appletgui/AlignViewport.java b/src/jalview/appletgui/AlignViewport.java index ad7113a..88a0b0f 100755 --- a/src/jalview/appletgui/AlignViewport.java +++ b/src/jalview/appletgui/AlignViewport.java @@ -111,6 +111,8 @@ public class AlignViewport String sequenceSetID; + Hashtable hiddenRepSequences; + public AlignViewport(AlignmentI al, JalviewLite applet) { this.applet = applet; @@ -951,6 +953,33 @@ public class AlignViewport hasHiddenColumns = true; } + public void hideRepSequences(SequenceI repSequence, SequenceGroup sg) + { + int sSize = sg.getSize(); + if(sSize < 2) + return; + + if(hiddenRepSequences==null) + hiddenRepSequences = new Hashtable(); + + hiddenRepSequences.put(repSequence, sg); + + //Hide all sequences except the repSequence + SequenceI [] seqs = new SequenceI[sSize-1]; + int index = 0; + for(int i=0; i= 1)) + if ( (sg != null) && (sg.getSize() >= 1)) { originalSequences = sg.getSequencesInOrder(ap.av.alignment); start = sg.getStartRes(); diff --git a/src/jalview/appletgui/RotatableCanvas.java b/src/jalview/appletgui/RotatableCanvas.java index f411a63..36e0859 100755 --- a/src/jalview/appletgui/RotatableCanvas.java +++ b/src/jalview/appletgui/RotatableCanvas.java @@ -382,7 +382,7 @@ public class RotatableCanvas if (av.getSelectionGroup() != null) { - if (av.getSelectionGroup().getSequences(false).contains( ( (SequencePoint) points. + if (av.getSelectionGroup().getSequences(null).contains( ( (SequencePoint) points. elementAt(i)).sequence)) { g.setColor(Color.gray); @@ -577,7 +577,7 @@ public class RotatableCanvas { if (av != null) { - if (!av.getSelectionGroup().getSequences(false).contains(sp.sequence)) + if (!av.getSelectionGroup().getSequences(null).contains(sp.sequence)) { av.getSelectionGroup().addSequence(sp.sequence, true); } diff --git a/src/jalview/appletgui/ScalePanel.java b/src/jalview/appletgui/ScalePanel.java index bfa0531..9cde175 100755 --- a/src/jalview/appletgui/ScalePanel.java +++ b/src/jalview/appletgui/ScalePanel.java @@ -112,7 +112,7 @@ public class ScalePanel av.hideColumns(res, res); if (av.getSelectionGroup() != null && - av.getSelectionGroup().getSize(false) == av.alignment.getHeight()) + av.getSelectionGroup().getSize() == av.alignment.getHeight()) av.setSelectionGroup(null); ap.repaint(); diff --git a/src/jalview/appletgui/SeqCanvas.java b/src/jalview/appletgui/SeqCanvas.java index dc7911d..3af9fb9 100755 --- a/src/jalview/appletgui/SeqCanvas.java +++ b/src/jalview/appletgui/SeqCanvas.java @@ -671,12 +671,12 @@ public class SeqCanvas } if ( (sx <= (endRes - startRes) * av.charWidth) && - group.getSequences(false). + group.getSequences(null). contains(av.alignment.getSequenceAt(i))) { if ( (bottom == -1) && (i >= alHeight || - !group.getSequences(false).contains( + !group.getSequences(null).contains( av.alignment.getSequenceAt(i + 1)))) { bottom = sy + av.charHeight; @@ -685,7 +685,7 @@ public class SeqCanvas if (!inGroup) { if ( ( (top == -1) && (i == 0)) || - !group.getSequences(false).contains( + !group.getSequences(null).contains( av.alignment.getSequenceAt(i - 1))) { top = sy; diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index feda697..89e2086 100755 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -215,7 +215,7 @@ public class SeqPanel SequenceGroup sg = av.selectionGroup; //Find the top and bottom of this group int min = av.alignment.getHeight(), max = 0; - for(int i=0; i max) @@ -251,7 +251,7 @@ public class SeqPanel else { // Now add any sequences between min and max - sg.getSequences(false).removeAllElements(); + sg.getSequences(null).removeAllElements(); for (int i = min; i < max; i++) { sg.addSequence(av.alignment.getSequenceAt(i), false); @@ -730,24 +730,18 @@ public class SeqPanel boolean fixedColumns = false; SequenceGroup sg = av.getSelectionGroup(); + SequenceI seq = av.alignment.getSequenceAt(startseq); if (!groupEditing && av.hasHiddenRows) { - if (av.alignment.getSequenceAt(startseq).getHiddenSequences() != null) + if (av.hiddenRepSequences!=null + && av.hiddenRepSequences.containsKey(seq)) { + sg = (SequenceGroup)av.hiddenRepSequences.get(seq); groupEditing = true; - } - } - - //No group, but the sequence may represent a group - if (groupEditing - && sg == null - && av.alignment.getSequenceAt(startseq).getHiddenSequences() == null) - { - groupEditing = false; + } } - SequenceI seq = av.alignment.getSequenceAt(startseq); StringBuffer message = new StringBuffer(); if (groupEditing) { @@ -776,7 +770,7 @@ public class SeqPanel //Are we editing within a selection group? if (groupEditing - || (sg != null && sg.getSequences(true).contains(seq))) + || (sg != null && sg.getSequences(av.hiddenRepSequences).contains(seq))) { fixedColumns = true; @@ -784,9 +778,7 @@ public class SeqPanel //but the sequence represents a group if (sg == null) { - sg = new SequenceGroup(null, null, false, false, false, 0, - av.alignment.getWidth()-1); - sg.addSequence(av.alignment.getSequenceAt(startseq), false); + sg = (SequenceGroup) av.hiddenRepSequences.get(seq); } fixedLeft = sg.getStartRes(); @@ -845,7 +837,7 @@ public class SeqPanel if (groupEditing) { - Vector vseqs = sg.getSequences(true); + Vector vseqs = sg.getSequences(av.hiddenRepSequences); int g, groupSize = vseqs.size(); SequenceI[] groupSeqs = new SequenceI[groupSize]; for (g = 0; g < groupSeqs.length; g++) @@ -893,7 +885,7 @@ public class SeqPanel if (!blank) { - if(sg.getSize(false) == av.alignment.getHeight() ) + if(sg.getSize() == av.alignment.getHeight() ) { if((av.hasHiddenColumns && startres res || stretchGroup.getEndRes() < res) { @@ -1245,7 +1237,7 @@ public class SeqPanel if (stretchGroup.cs instanceof ClustalxColourScheme) { ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX( - stretchGroup.getSequences(true), + stretchGroup.getSequences(av.hiddenRepSequences), stretchGroup.getWidth()); } @@ -1355,7 +1347,7 @@ public class SeqPanel Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq); - if (stretchGroup.getSequences(false).contains(nextSeq)) + if (stretchGroup.getSequences(null).contains(nextSeq)) { stretchGroup.deleteSequence(seq, false); } diff --git a/src/jalview/appletgui/TreeCanvas.java b/src/jalview/appletgui/TreeCanvas.java index 0d80535..2801351 100755 --- a/src/jalview/appletgui/TreeCanvas.java +++ b/src/jalview/appletgui/TreeCanvas.java @@ -185,7 +185,7 @@ public class TreeCanvas // Colour selected leaves differently SequenceGroup selected = av.getSelectionGroup(); if (selected != null && - selected.getSequences(false).contains( (SequenceI) node.element())) + selected.getSequences(null).contains( (SequenceI) node.element())) { g.setColor(Color.gray); @@ -584,7 +584,7 @@ public class TreeCanvas { Conservation c = new Conservation("Group", ResidueProperties.propHash, 3, - sg.getSequences(false), + sg.getSequences(null), sg.getStartRes(), sg.getEndRes()); diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index 9a2db89..552a5f8 100755 --- a/src/jalview/datamodel/Alignment.java +++ b/src/jalview/datamodel/Alignment.java @@ -203,7 +203,7 @@ public class Alignment implements AlignmentI { SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - if (sg.getSequences(false).contains(s)) + if (sg.getSequences(null).contains(s)) { return sg; } @@ -227,14 +227,14 @@ public class Alignment implements AlignmentI for (int i = 0; i < gSize; i++) { SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - if(sg==null || sg.getSequences(false)==null) + if(sg==null || sg.getSequences(null)==null) { this.deleteGroup(sg); gSize--; continue; } - if (sg.getSequences(false).contains(s)) + if (sg.getSequences(null).contains(s)) { temp.addElement(sg); } @@ -259,9 +259,7 @@ public class Alignment implements AlignmentI { if(hiddenSequences.getSize()>0) { - //We're not going to make groups of - //Hidden sequences - int i, iSize = sg.getSize(false); + int i, iSize = sg.getSize(); for (i = 0; i < iSize; i++) { if (!sequences.contains(sg.getSequenceAt(i))) @@ -272,7 +270,7 @@ public class Alignment implements AlignmentI } } - if (sg.getSize(true) < 1) + if (sg.getSize() < 1) return; } @@ -660,34 +658,6 @@ public class Alignment implements AlignmentI { return hiddenSequences; } - SequenceI [] getVisibleAndRepresentedSeqs() - { - if(hiddenSequences==null || hiddenSequences.getSize()<1) - return getSequencesArray(); - - Vector seqs = new Vector(); - SequenceI seq; - SequenceGroup hidden; - for (int i = 0; i < sequences.size(); i++) - { - seq = (SequenceI) sequences.elementAt(i); - seqs.addElement(seq); - hidden = seq.getHiddenSequences(); - if(hidden!=null) - { - for(int j=0; j0) - repSequence = alignment.getSequenceAt(alignmentIndex-1); - - if(repSequence!=null - && repSequence.getHiddenSequences()==null) - repSequence = null; + if(repSequence !=null && + hiddenReps!=null + && hiddenReps.containsKey(repSequence)) + { + hiddenReps.remove(repSequence); + revealedSeqs.addElement(repSequence); + } int start = adjustForHiddenSeqs(alignmentIndex-1); int end = adjustForHiddenSeqs(alignmentIndex); @@ -168,11 +167,6 @@ public class HiddenSequences } else System.out.println(seq.getName()+" has been deleted whilst hidden"); - - if (repSequence != null) - { - repSequence.showHiddenSequence(seq); - } } } diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index 39d6880..02fc543 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -30,7 +30,6 @@ import java.util.*; */ public class Sequence implements SequenceI { - SequenceI datasetSequence; String name; private char [] sequence; @@ -48,10 +47,6 @@ public class Sequence implements SequenceI /** DOCUMENT ME!! */ public SequenceFeature[] sequenceFeatures; - /** This array holds hidden sequences - * of which this sequence is the representitive member of a group - */ - SequenceGroup hiddenSequences; /** * Creates a new Sequence object. @@ -690,32 +685,11 @@ public class Sequence implements SequenceI this.annotation.addElement(annotation); } - public SequenceGroup getHiddenSequences() - { - return hiddenSequences; - } - public void addHiddenSequence(SequenceI seq) - { - if (hiddenSequences == null) - { - hiddenSequences = new SequenceGroup(); - } - hiddenSequences.addSequence(seq, false); - } - - public void showHiddenSequence(SequenceI seq) - { - hiddenSequences.deleteSequence(seq, false); - if (hiddenSequences.getSize(false) < 1) - { - hiddenSequences = null; - } - } /** * test if this is a valid candidate for another - * sequence's dataset sequence. - * + * sequence's dataset sequence. + * */ private boolean isValidDatasetSequence() { if (datasetSequence!=null) diff --git a/src/jalview/datamodel/SequenceGroup.java b/src/jalview/datamodel/SequenceGroup.java index f640ebb..76a350f 100755 --- a/src/jalview/datamodel/SequenceGroup.java +++ b/src/jalview/datamodel/SequenceGroup.java @@ -178,25 +178,27 @@ public class SequenceGroup return eres; } - public Vector getSequences(boolean includeHidden) + public Vector getSequences(Hashtable hiddenReps) { - if(!includeHidden) + if(hiddenReps == null) return sequences; else { Vector allSequences = new Vector(); - SequenceI seq; + SequenceI seq, seq2; for (int i = 0; i < sequences.size(); i++) { seq = (SequenceI) sequences.elementAt(i); allSequences.addElement(seq); - if (seq.getHiddenSequences() != null) + if (hiddenReps.containsKey(seq) ) { - for (int h = 0; h < seq.getHiddenSequences().getSize(false); h++) + SequenceGroup hsg = (SequenceGroup)hiddenReps.get(seq); + for (int h = 0; h < hsg.getSize(); h++) { - allSequences.addElement( - seq.getHiddenSequences().getSequenceAt(h) - ); + seq2 = hsg.getSequenceAt(h); + if (seq2 != seq + && !allSequences.contains(seq2)) + allSequences.addElement(seq2); } } } @@ -205,9 +207,9 @@ public class SequenceGroup } } - public SequenceI[] getSequencesAsArray(boolean includeHidden) + public SequenceI[] getSequencesAsArray(Hashtable hiddenReps) { - Vector tmp = getSequences(includeHidden); + Vector tmp = getSequences(hiddenReps); if(tmp==null) return null; SequenceI [] result = new SequenceI[tmp.size()]; @@ -452,24 +454,9 @@ public class SequenceGroup * * @return DOCUMENT ME! */ - public int getSize(boolean includeHidden) + public int getSize() { - if(!includeHidden) return sequences.size(); - else - { - int total = sequences.size(); - SequenceI seq; - for (int i = 0; i < sequences.size(); i++) - { - seq = (SequenceI) sequences.elementAt(i); - if (seq.getHiddenSequences() != null) - { - total += seq.getHiddenSequences().getSize(false); - } - } - return total; - } } /** diff --git a/src/jalview/datamodel/SequenceI.java b/src/jalview/datamodel/SequenceI.java index c5fdbda..96c6cbf 100755 --- a/src/jalview/datamodel/SequenceI.java +++ b/src/jalview/datamodel/SequenceI.java @@ -259,12 +259,7 @@ public interface SequenceI public void addAlignmentAnnotation(AlignmentAnnotation annotation); - public SequenceGroup getHiddenSequences(); - public void addHiddenSequence(SequenceI seq); - - public void showHiddenSequence(SequenceI seq); - /** * Derive a sequence (using this one's dataset or as the dataset) * @return duplicate sequence with valid dataset sequence diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index bb722a5..1f2b37b 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -310,7 +310,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener SequenceGroup sg = viewport.getSelectionGroup(); if (toggleSeqs) { - if (sg != null && sg.getSize(false) != viewport.alignment.getHeight()) + if (sg != null && sg.getSize() != viewport.alignment.getHeight()) { hideSelSequences_actionPerformed(null); hide = true; @@ -1082,14 +1082,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.getSequences(false).contains(seq)) + if (!sg.getSequences(null).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i - 1); - if (sg.getSequences(false).contains(temp)) + if (sg.getSequences(null).contains(temp)) { continue; } @@ -1104,14 +1104,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.getSequences(false).contains(seq)) + if (!sg.getSequences(null).contains(seq)) { continue; } SequenceI temp = viewport.alignment.getSequenceAt(i + 1); - if (sg.getSequences(false).contains(temp)) + if (sg.getSequences(null).contains(temp)) { continue; } @@ -1435,7 +1435,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener Vector seqs = new Vector(); SequenceI seq; - for (int i = 0; i < sg.getSize(false); i++) + for (int i = 0; i < sg.getSize(); i++) { seq = sg.getSequenceAt(i); seqs.addElement(seq); @@ -1443,7 +1443,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener // If the cut affects all sequences, remove highlighted columns - if (sg.getSize(false) == viewport.alignment.getHeight()) + if (sg.getSize() == viewport.alignment.getHeight()) { viewport.getColumnSelection().removeElements(sg.getStartRes(), sg.getEndRes() + 1); @@ -1608,7 +1608,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener SequenceI [] seqs; if(viewport.getSelectionGroup()!=null) - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.hiddenRepSequences); else seqs = viewport.alignment.getSequencesArray(); @@ -1671,7 +1671,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.hiddenRepSequences); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes(); } @@ -1715,7 +1715,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { - seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + seqs = viewport.getSelectionGroup().getSequencesAsArray(viewport.hiddenRepSequences); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes(); } @@ -2230,7 +2230,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener if (cs instanceof ClustalxColourScheme) { sg.cs = new ClustalxColourScheme( - sg.getSequences(true), sg.getWidth()); + sg.getSequences(viewport.hiddenRepSequences), sg.getWidth()); } else if (cs instanceof UserColourScheme) { @@ -2255,7 +2255,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener viewport.getIgnoreGapsConsensus()); sg.cs.setConsensus(AAFrequency.calculate( - sg.getSequences(true), sg.getStartRes(), + sg.getSequences(viewport.hiddenRepSequences), sg.getStartRes(), sg.getEndRes()+1)); } else @@ -2266,7 +2266,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { Conservation c = new Conservation("Group", ResidueProperties.propHash, 3, - sg.getSequences(true), + sg.getSequences(viewport.hiddenRepSequences), sg.getStartRes(), sg.getEndRes()+1); c.calculate(); @@ -2518,7 +2518,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e) { if ( (viewport.getSelectionGroup() == null) || - (viewport.getSelectionGroup().getSize(false) < 2)) + (viewport.getSelectionGroup().getSize() < 2)) { JOptionPane.showInternalMessageDialog(this, "You must select at least 2 sequences.", @@ -2541,8 +2541,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener public void PCAMenuItem_actionPerformed(ActionEvent e) { if ( ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize(false) < 4) && - (viewport.getSelectionGroup().getSize(false) > 0)) || + (viewport.getSelectionGroup().getSize() < 4) && + (viewport.getSelectionGroup().getSize() > 0)) || (viewport.getAlignment().getHeight() < 4)) { JOptionPane.showInternalMessageDialog(this, @@ -2622,7 +2622,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener TreePanel tp; if (viewport.getSelectionGroup() != null) { - if (viewport.getSelectionGroup().getSize(false) < 3) { + if (viewport.getSelectionGroup().getSize() < 3) { JOptionPane.showMessageDialog(Desktop.desktop, "You need to have more than two sequences selected to build a tree!", "Not enough sequences", @@ -2634,9 +2634,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener SequenceGroup sg = viewport.getSelectionGroup(); /* Decide if the selection is a column region */ - while (s < sg.getSize(false)) + while (s < sg.getSize()) { - if ( ( (SequenceI) sg.getSequences(false).elementAt(s++)).getLength() < + if ( ( (SequenceI) sg.getSequences(null).elementAt(s++)).getLength() < sg.getEndRes()) { JOptionPane.showMessageDialog(Desktop.desktop, @@ -2779,7 +2779,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener AlignmentView msa = null; if ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize(false) > 1)) + (viewport.getSelectionGroup().getSize() > 1)) { // JBPNote UGLY! To prettify, make SequenceGroup and Alignment conform to some common interface! /*SequenceGroup seqs = viewport.getSelectionGroup(); @@ -2821,7 +2821,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener AlignmentView seqs = null; if ( (viewport.getSelectionGroup() != null) && - (viewport.getSelectionGroup().getSize(false) > 0)) + (viewport.getSelectionGroup().getSize() > 0)) { seqs = viewport.getAlignmentView(true); } diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index 05ba166..be7f8f4 100755 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -120,6 +120,8 @@ public class AlignViewport boolean rightAlignIds = false; + Hashtable hiddenRepSequences; + /** * Creates a new AlignViewport object. @@ -1262,6 +1264,33 @@ public class AlignViewport hasHiddenColumns = true; } + public void hideRepSequences(SequenceI repSequence, SequenceGroup sg) + { + int sSize = sg.getSize(); + if(sSize < 2) + return; + + if(hiddenRepSequences==null) + hiddenRepSequences = new Hashtable(); + + hiddenRepSequences.put(repSequence, sg); + + //Hide all sequences except the repSequence + SequenceI [] seqs = new SequenceI[sSize-1]; + int index = 0; + for(int i=0; i0) { if(selectionGroup==null) @@ -1332,7 +1363,7 @@ public class AlignViewport selectionGroup = new SequenceGroup(); selectionGroup.setEndRes(alignment.getWidth()-1); } - Vector tmp = alignment.getHiddenSequences().showAll(); + Vector tmp = alignment.getHiddenSequences().showAll(hiddenRepSequences); for(int t=0; t0) + && af.getViewport().getSelectionGroup().getSize()>0) { - iSize = af.getViewport().getSelectionGroup().getSize(false); + iSize = af.getViewport().getSelectionGroup().getSize(); dataset = new SequenceI[iSize]; seqs = af.getViewport().getSelectionGroup(). getSequencesInOrder( diff --git a/src/jalview/gui/Finder.java b/src/jalview/gui/Finder.java index f3a0d45..0e340dc 100755 --- a/src/jalview/gui/Finder.java +++ b/src/jalview/gui/Finder.java @@ -172,7 +172,7 @@ public class Finder extends GFinder { int res = Integer.parseInt(searchString); found = true; - if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize(false) < 1) + if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize() < 1) { seq = (Sequence) av.getAlignment().getSequenceAt(0); } @@ -195,7 +195,7 @@ public class Finder extends GFinder if (selection != null) { - if ((selection.getSize(false) < 1) || + if ((selection.getSize() < 1) || ((selection.getEndRes() - selection.getStartRes()) < 2)) { selection = null; @@ -206,7 +206,7 @@ public class Finder extends GFinder { seq = (Sequence) av.alignment.getSequenceAt(seqIndex); - if ((selection != null) && !selection.getSequences(false).contains(seq)) + if ((selection != null) && !selection.getSequences(null).contains(seq)) { seqIndex++; resIndex = 0; diff --git a/src/jalview/gui/IdCanvas.java b/src/jalview/gui/IdCanvas.java index d1f130b..168b50d 100755 --- a/src/jalview/gui/IdCanvas.java +++ b/src/jalview/gui/IdCanvas.java @@ -82,7 +82,7 @@ public class IdCanvas extends JPanel gg.setColor(Color.white); } else if ((av.getSelectionGroup() != null) && - av.getSelectionGroup().getSequences(false).contains(s)) + av.getSelectionGroup().getSequences(null).contains(s)) { gg.setColor(Color.lightGray); gg.fillRect(0, ((i - starty) * charHeight) + ypos, getWidth(), @@ -271,14 +271,14 @@ public class IdCanvas extends JPanel { for (int i = starty; i < alheight; i++) { + SequenceI s = av.alignment.getSequenceAt(i); if (av.hasHiddenRows) { - setHiddenFont(i); + setHiddenFont(s); } else gg.setFont(italic); - SequenceI s = av.alignment.getSequenceAt(i); drawIdString(gg, s, i, 0, ypos); } @@ -310,7 +310,7 @@ public class IdCanvas extends JPanel if (av.hasHiddenRows) { - setHiddenFont(i); + setHiddenFont(sequence); } // Selected sequence colours @@ -321,7 +321,7 @@ public class IdCanvas extends JPanel currentTextColor = Color.white; } else if ( (av.getSelectionGroup() != null) && - av.getSelectionGroup().getSequences(false).contains( + av.getSelectionGroup().getSequences(null).contains( sequence)) { currentColor = Color.lightGray; @@ -419,7 +419,7 @@ public class IdCanvas extends JPanel } } - void setHiddenFont(int i) + void setHiddenFont(SequenceI seq) { Font italic = new Font(av.getFont().getName(), Font.ITALIC, av.getFont().getSize()); @@ -427,8 +427,8 @@ public class IdCanvas extends JPanel av.getFont().getSize()); - if (av.alignment.getSequenceAt(i)!=null - && av.alignment.getSequenceAt(i).getHiddenSequences() != null) + if (av.hiddenRepSequences!=null && + av.hiddenRepSequences.containsKey(seq)) gg.setFont(bold); else gg.setFont(italic); diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index f1f7db1..6652aea 100755 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -263,16 +263,20 @@ public class Jalview2XML { jseq.setHidden(av.alignment.getHiddenSequences().isHidden(jds)); - if(jal.getSequenceAt(i).getHiddenSequences()!=null) + if(av.hiddenRepSequences!=null + && av.hiddenRepSequences.containsKey(jal.getSequenceAt(i))) { - jalview.datamodel.SequenceI [] reps = - jal.getSequenceAt(i).getHiddenSequences().getSequencesInOrder(jal); + jalview.datamodel.SequenceI[] reps = + ( (jalview.datamodel.SequenceGroup) + av.hiddenRepSequences.get( + jal.getSequenceAt(i))).getSequencesInOrder(jal); for(int h=0; h