setAlignment(al);\r
init();\r
}\r
+ /**\r
+ * Create a new AlignViewport with hidden regions\r
+ * @param al AlignmentI\r
+ * @param hiddenColumns ColumnSelection\r
+ */\r
+ public AlignViewport(AlignmentI al, ColumnSelection hiddenColumns) {\r
+ setAlignment(al);\r
+ if (hiddenColumns!=null) {\r
+ this.colSel = hiddenColumns;\r
+ if (hiddenColumns.getHiddenColumns() != null)\r
+ hasHiddenColumns = true;\r
+ }\r
+ init();\r
+ }\r
\r
void init()\r
{\r
return increment;\r
}\r
\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param y DOCUMENT ME!\r
- *\r
- * @return DOCUMENT ME!\r
- */\r
- public int getIndex(int y)\r
- {\r
- int y1 = 0;\r
- int starty = getStartSeq();\r
- int endy = getEndSeq();\r
-\r
- for (int i = starty; i <= endy; i++)\r
- {\r
- if ((i < alignment.getHeight()) &&\r
- (alignment.getSequenceAt(i) != null))\r
- {\r
- int y2 = y1 + getCharHeight();\r
-\r
- if ((y >= y1) && (y <= y2))\r
- {\r
- return i;\r
- }\r
-\r
- y1 = y2;\r
- }\r
- else\r
- {\r
- return -1;\r
- }\r
- }\r
-\r
- return -1;\r
- }\r
\r
/**\r
* DOCUMENT ME!\r
if (colSel.size() < 1)\r
return;\r
\r
- while (colSel.size() > 0)\r
- {\r
- int column = ( (Integer) colSel.getSelected().firstElement()).intValue();\r
- colSel.hideColumns(column);\r
- }\r
+ colSel.hideSelectedColumns();\r
setSelectionGroup(null);\r
+\r
hasHiddenColumns = true;\r
}\r
\r
public void hideColumns(int start, int end)\r
{\r
if(start==end)\r
- end++;\r
-\r
- for(int i=start; i<end; i++)\r
- {\r
- colSel.addElement(i);\r
- colSel.hideColumns(i);\r
- }\r
-\r
+ colSel.hideColumns(start);\r
+ else\r
+ colSel.hideColumns(start, end);\r
setSelectionGroup(null);\r
hasHiddenColumns = true;\r
}\r
public void showColumn(int col)\r
{\r
colSel.revealHiddenColumns(col);\r
- if(colSel.size()<1)\r
+ if(colSel.getHiddenColumns()==null)\r
hasHiddenColumns = false;\r
}\r
\r
return sequences;\r
}\r
\r
+ /**\r
+ * This method returns the visible alignment as text, as\r
+ * seen on the GUI, ie if columns are hidden they will not\r
+ * be returned in the result.\r
+ * Use this for calculating trees, PCA, redundancy etc on views\r
+ * which contain hidden columns.\r
+ * @return String[]\r
+ */\r
+ public jalview.datamodel.CigarArray getViewAsCigars(boolean selectedRegionOnly)\r
+ {\r
+ CigarArray selection=null;\r
+ SequenceI [] seqs= null;\r
+ int i, iSize;\r
+ int start = 0, end = 0;\r
+ if(selectedRegionOnly && selectionGroup!=null)\r
+ {\r
+ iSize = selectionGroup.getSize(false);\r
+ seqs = selectionGroup.getSequencesInOrder(alignment);\r
+ start = selectionGroup.getStartRes();\r
+ end = selectionGroup.getEndRes(); // inclusive for start and end in SeqCigar constructor\r
+ }\r
+ else\r
+ {\r
+ iSize = alignment.getHeight();\r
+ seqs = alignment.getSequencesArray();\r
+ end = alignment.getWidth()-1;\r
+ }\r
+ SeqCigar[] selseqs = new SeqCigar[iSize];\r
+ for(i=0; i<iSize; i++)\r
+ {\r
+ selseqs[i] = new SeqCigar(seqs[i], start, end);\r
+ }\r
+ selection=new CigarArray(selseqs);\r
+ // now construct the CigarArray operations\r
+ if (hasHiddenColumns) {\r
+ Vector regions = colSel.getHiddenColumns();\r
+ int [] region;\r
+ int hideStart, hideEnd;\r
+ int last=start;\r
+ for (int j = 0; last<end & j < regions.size(); j++)\r
+ {\r
+ region = (int[]) regions.elementAt(j);\r
+ hideStart = region[0];\r
+ hideEnd = region[1];\r
+ // edit hidden regions to selection range\r
+ if(hideStart<last) {\r
+ if (hideEnd > last)\r
+ {\r
+ hideStart = last;\r
+ } else\r
+ continue;\r
+ }\r
\r
+ if (hideStart>end)\r
+ break;\r
+\r
+ if (hideEnd>end)\r
+ hideEnd=end;\r
+\r
+ if (hideStart>hideEnd)\r
+ break;\r
+ /**\r
+ * form operations...\r
+ */\r
+ if (last<hideStart)\r
+ selection.addOperation(CigarArray.M, hideStart-last);\r
+ selection.addOperation(CigarArray.D, 1+hideEnd-hideStart);\r
+ last = hideEnd+1;\r
+ }\r
+ // Final match if necessary.\r
+ if (last<end)\r
+ selection.addOperation(CigarArray.M, end-last);\r
+ } else {\r
+ selection.addOperation(CigarArray.M, end-start);\r
+ }\r
+ return selection;\r
+ }\r
+ /**\r
+ * return a compact representation of the current alignment selection to\r
+ * pass to an analysis function\r
+ * @param selectedOnly boolean true to just return the selected view\r
+ * @return AlignmentView\r
+ */\r
+ jalview.datamodel.AlignmentView getAlignmentView(boolean selectedOnly) {\r
+ // JBPNote:\r
+ // this is here because the AlignmentView constructor modifies the CigarArray\r
+ // object. Refactoring of Cigar and alignment view representation should\r
+ // be done to remove redundancy.\r
+ CigarArray aligview = getViewAsCigars(selectedOnly);\r
+ if (aligview!=null)\r
+ return new AlignmentView(aligview);\r
+ return null;\r
+ }\r
/**\r
* This method returns the visible alignment as text, as\r
* seen on the GUI, ie if columns are hidden they will not\r