\r
public class HiddenSequences\r
{\r
- Hashtable hiddenSequences;\r
+ public SequenceI [] hiddenSequences;\r
AlignmentI alignment;\r
\r
public HiddenSequences(AlignmentI al)\r
\r
public int getSize()\r
{\r
- return hiddenSequences == null ? 0 : hiddenSequences.size();\r
+ if(hiddenSequences==null)\r
+ {\r
+ System.out.println("H is null");\r
+ return 0;\r
+ }\r
+ int count = 0;\r
+ for(int i=0; i<hiddenSequences.length; i++)\r
+ if(hiddenSequences[i] !=null )\r
+ count ++;\r
+\r
+ return count;\r
}\r
\r
public int getWidth()\r
{\r
- Enumeration en = hiddenSequences.elements();\r
int width = 0;\r
- while(en.hasMoreElements())\r
+ for (int i = 0; i < hiddenSequences.length; i++)\r
+ if (hiddenSequences[i] != null && hiddenSequences[i].getLength()>width)\r
+ width = hiddenSequences[i].getLength();\r
+\r
+ return width;\r
+ }\r
+\r
+ /**\r
+ * Call this method if sequences are removed from the\r
+ * main alignment\r
+ */\r
+ public void adjustHeightSequenceDeleted(int seqIndex)\r
+ {\r
+ if(hiddenSequences==null)\r
{\r
- SequenceI seq = (SequenceI)en.nextElement();\r
- if(seq.getLength()>width)\r
- width = seq.getLength();\r
+ return;\r
}\r
- return width;\r
+\r
+ int alHeight = alignment.getHeight();\r
+\r
+ SequenceI [] tmp = new SequenceI [alHeight + getSize()];\r
+ int deletionIndex = adjustForHiddenSeqs(seqIndex);\r
+\r
+ for (int i = 0; i < hiddenSequences.length; i++)\r
+ {\r
+ if (i > deletionIndex)\r
+ tmp[i-1] = hiddenSequences[i];\r
+ else\r
+ tmp[i] = hiddenSequences[i];\r
+ }\r
+\r
+ hiddenSequences = tmp;\r
+\r
}\r
\r
+ /**\r
+ * Call this method if sequences are added to or removed from the\r
+ * main alignment\r
+ */\r
+ public void adjustHeightSequenceAdded()\r
+ {\r
+ if(hiddenSequences==null)\r
+ {\r
+ return;\r
+ }\r
+\r
+ int alHeight = alignment.getHeight();\r
+\r
+ SequenceI [] tmp = new SequenceI [alHeight + getSize()];\r
+ System.arraycopy(hiddenSequences,0,tmp,0,hiddenSequences.length);\r
+ hiddenSequences = tmp;\r
+ }\r
+\r
+\r
public void hideSequence(SequenceI sequence)\r
{\r
if(hiddenSequences==null)\r
- hiddenSequences = new Hashtable();\r
+ hiddenSequences = new SequenceI[alignment.getHeight()];\r
\r
int alignmentIndex = alignment.findIndex(sequence);\r
alignmentIndex = adjustForHiddenSeqs(alignmentIndex);\r
\r
- hiddenSequences.put(new Integer(alignmentIndex), sequence);\r
+ if(hiddenSequences[alignmentIndex]!=null)\r
+ System.out.println("ERROR!!!!!!!!!!!");\r
+\r
+ hiddenSequences[alignmentIndex] = sequence;\r
\r
alignment.deleteSequence(sequence);\r
}\r
public Vector showAll()\r
{\r
Vector revealedSeqs = new Vector();\r
- for(int i=0; i<alignment.getHeight()+hiddenSequences.size(); i++)\r
+ for(int i=0; i<hiddenSequences.length; i++)\r
{\r
- Vector tmp = showSequence(i);\r
- for(int t=0; t<tmp.size(); t++)\r
- revealedSeqs.addElement(tmp.elementAt(t));\r
+ if(hiddenSequences[i]!=null)\r
+ {\r
+ Vector tmp = showSequence(i);\r
+ for (int t = 0; t < tmp.size(); t++)\r
+ revealedSeqs.addElement(tmp.elementAt(t));\r
+ }\r
}\r
return revealedSeqs;\r
}\r
\r
int start = adjustForHiddenSeqs(alignmentIndex-1);\r
int end = adjustForHiddenSeqs(alignmentIndex);\r
+ if(end>=hiddenSequences.length)\r
+ end = hiddenSequences.length-1;\r
\r
for(int index = end; index > start; index--)\r
{\r
- SequenceI seq = (SequenceI)hiddenSequences.remove(new Integer(\r
- index));\r
-\r
+ SequenceI seq = hiddenSequences[index];\r
+ hiddenSequences[index] = null;\r
\r
if(seq!=null)\r
{\r
repSequence.showHiddenSequence(seq);\r
}\r
}\r
+\r
}\r
\r
return revealedSeqs;\r
}\r
\r
- public Hashtable getHiddenSequences()\r
- {\r
- return hiddenSequences;\r
- }\r
-\r
public SequenceI getHiddenSequence(int alignmentIndex)\r
{\r
- return (SequenceI)hiddenSequences.get(new Integer(alignmentIndex));\r
+ return hiddenSequences[alignmentIndex];\r
}\r
\r
public int findIndexWithoutHiddenSeqs(int alignmentIndex)\r
{\r
int index = 0;\r
int hiddenSeqs = 0;\r
+ if(hiddenSequences.length<=alignmentIndex)\r
+ System.out.println(alignmentIndex+" "+hiddenSequences.length);\r
+\r
while(index <= alignmentIndex)\r
{\r
- if(hiddenSequences.containsKey(new Integer(index)))\r
+ if(hiddenSequences[index]!=null)\r
{\r
hiddenSeqs ++;\r
}\r
public int adjustForHiddenSeqs(int alignmentIndex)\r
{\r
int index = 0;\r
- while(index <= alignmentIndex)\r
+ int hSize = hiddenSequences.length;\r
+ while(index <= alignmentIndex && index<hSize)\r
{\r
- if(hiddenSequences.containsKey(new Integer(index)))\r
- {\r
- alignmentIndex ++;\r
- }\r
+ if(hiddenSequences[index]!=null)\r
+ {\r
+ alignmentIndex ++;\r
+ }\r
index ++;\r
};\r
\r
return alignmentIndex ;\r
}\r
\r
+\r
public AlignmentI getFullAlignment()\r
{\r
- int isize = alignment.getHeight()+hiddenSequences.size();\r
+ int isize = hiddenSequences.length;\r
SequenceI [] seq = new Sequence[isize];\r
\r
- Enumeration en = hiddenSequences.keys();\r
- while(en.hasMoreElements())\r
- {\r
- Integer key = (Integer)en.nextElement();\r
- seq[key.intValue()] = (SequenceI)hiddenSequences.get(key);\r
- }\r
-\r
int index = 0;\r
- for(int i=0; i<isize; i++)\r
+ for(int i=0; i<hiddenSequences.length; i++)\r
{\r
- if(seq[i]!=null)\r
+ if(hiddenSequences[i]!=null)\r
+ seq[i] = hiddenSequences[i];\r
+ else\r
{\r
- continue;\r
+ seq[i] = alignment.getSequenceAt(index);\r
+ index++;\r
}\r
-\r
- seq[i] = alignment.getSequenceAt(index);\r
- index++;\r
}\r
\r
return new Alignment(seq);\r
\r
public boolean isHidden(SequenceI seq)\r
{\r
- return hiddenSequences.contains(seq);\r
+ for(int i=0; i<hiddenSequences.length; i++)\r
+ if(hiddenSequences[i] !=null && hiddenSequences[i]==seq)\r
+ return true;\r
+\r
+ return false;\r
}\r
}\r