From 52c2c3879d5dc5e7b4ba7916f1ea964f83551f95 Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Thu, 12 Oct 2006 13:18:40 +0000 Subject: [PATCH] HiddenSequences now array, not hashtable --- src/jalview/datamodel/Alignment.java | 12 +-- src/jalview/datamodel/AlignmentI.java | 1 + src/jalview/datamodel/HiddenSequences.java | 147 +++++++++++++++++++--------- 3 files changed, 108 insertions(+), 52 deletions(-) diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index e4bc25e..5f60530 100755 --- a/src/jalview/datamodel/Alignment.java +++ b/src/jalview/datamodel/Alignment.java @@ -146,8 +146,9 @@ public class Alignment implements AlignmentI getDataset().addSequence(ds); } } - sequences.addElement(snew); + + hiddenSequences.adjustHeightSequenceAdded(); } @@ -310,13 +311,7 @@ public class Alignment implements AlignmentI */ public void deleteSequence(SequenceI s) { - for (int i = 0; i < getHeight(); i++) - { - if (getSequenceAt(i) == s) - { - deleteSequence(i); - } - } + deleteSequence(findIndex(s)); } /** @@ -327,6 +322,7 @@ public class Alignment implements AlignmentI public void deleteSequence(int i) { sequences.removeElementAt(i); + hiddenSequences.adjustHeightSequenceDeleted(i); } diff --git a/src/jalview/datamodel/AlignmentI.java b/src/jalview/datamodel/AlignmentI.java index aca108d..71ba3e0 100755 --- a/src/jalview/datamodel/AlignmentI.java +++ b/src/jalview/datamodel/AlignmentI.java @@ -107,6 +107,7 @@ public interface AlignmentI */ public void deleteSequence(int i); + /** * Deletes all residues in every sequence of alignment within given columns. * diff --git a/src/jalview/datamodel/HiddenSequences.java b/src/jalview/datamodel/HiddenSequences.java index 0a588a2..e244dd7 100755 --- a/src/jalview/datamodel/HiddenSequences.java +++ b/src/jalview/datamodel/HiddenSequences.java @@ -23,7 +23,7 @@ import java.util.*; public class HiddenSequences { - Hashtable hiddenSequences; + public SequenceI [] hiddenSequences; AlignmentI alignment; public HiddenSequences(AlignmentI al) @@ -33,31 +33,88 @@ public class HiddenSequences public int getSize() { - return hiddenSequences == null ? 0 : hiddenSequences.size(); + if(hiddenSequences==null) + { + System.out.println("H is null"); + return 0; + } + int count = 0; + for(int i=0; iwidth) + width = hiddenSequences[i].getLength(); + + return width; + } + + /** + * Call this method if sequences are removed from the + * main alignment + */ + public void adjustHeightSequenceDeleted(int seqIndex) + { + if(hiddenSequences==null) { - SequenceI seq = (SequenceI)en.nextElement(); - if(seq.getLength()>width) - width = seq.getLength(); + return; } - return width; + + int alHeight = alignment.getHeight(); + + SequenceI [] tmp = new SequenceI [alHeight + getSize()]; + int deletionIndex = adjustForHiddenSeqs(seqIndex); + + for (int i = 0; i < hiddenSequences.length; i++) + { + if (i > deletionIndex) + tmp[i-1] = hiddenSequences[i]; + else + tmp[i] = hiddenSequences[i]; + } + + hiddenSequences = tmp; + } + /** + * Call this method if sequences are added to or removed from the + * main alignment + */ + public void adjustHeightSequenceAdded() + { + if(hiddenSequences==null) + { + return; + } + + int alHeight = alignment.getHeight(); + + SequenceI [] tmp = new SequenceI [alHeight + getSize()]; + System.arraycopy(hiddenSequences,0,tmp,0,hiddenSequences.length); + hiddenSequences = tmp; + } + + public void hideSequence(SequenceI sequence) { if(hiddenSequences==null) - hiddenSequences = new Hashtable(); + hiddenSequences = new SequenceI[alignment.getHeight()]; int alignmentIndex = alignment.findIndex(sequence); alignmentIndex = adjustForHiddenSeqs(alignmentIndex); - hiddenSequences.put(new Integer(alignmentIndex), sequence); + if(hiddenSequences[alignmentIndex]!=null) + System.out.println("ERROR!!!!!!!!!!!"); + + hiddenSequences[alignmentIndex] = sequence; alignment.deleteSequence(sequence); } @@ -65,11 +122,14 @@ public class HiddenSequences public Vector showAll() { Vector revealedSeqs = new Vector(); - for(int i=0; i=hiddenSequences.length) + end = hiddenSequences.length-1; for(int index = end; index > start; index--) { - SequenceI seq = (SequenceI)hiddenSequences.remove(new Integer( - index)); - + SequenceI seq = hiddenSequences[index]; + hiddenSequences[index] = null; if(seq!=null) { @@ -105,28 +166,27 @@ public class HiddenSequences repSequence.showHiddenSequence(seq); } } + } return revealedSeqs; } - public Hashtable getHiddenSequences() - { - return hiddenSequences; - } - public SequenceI getHiddenSequence(int alignmentIndex) { - return (SequenceI)hiddenSequences.get(new Integer(alignmentIndex)); + return hiddenSequences[alignmentIndex]; } public int findIndexWithoutHiddenSeqs(int alignmentIndex) { int index = 0; int hiddenSeqs = 0; + if(hiddenSequences.length<=alignmentIndex) + System.out.println(alignmentIndex+" "+hiddenSequences.length); + while(index <= alignmentIndex) { - if(hiddenSequences.containsKey(new Integer(index))) + if(hiddenSequences[index]!=null) { hiddenSeqs ++; } @@ -139,40 +199,35 @@ public class HiddenSequences public int adjustForHiddenSeqs(int alignmentIndex) { int index = 0; - while(index <= alignmentIndex) + int hSize = hiddenSequences.length; + while(index <= alignmentIndex && index