+ //Hide all sequences except the repSequence\r
+ SequenceI[] seqs = new SequenceI[sSize - 1];\r
+ int index = 0;\r
+ for (int i = 0; i < sSize; i++)\r
+ {\r
+ if (sg.getSequenceAt(i) != repSequence)\r
+ {\r
+ if (index == sSize - 1)\r
+ {\r
+ return;\r
+ }\r
+\r
+ seqs[index++] = sg.getSequenceAt(i);\r
+ }\r
+ }\r
+\r
+ hideSequence(seqs);\r
+\r
+ }\r
+\r
+ public void hideAllSelectedSeqs()\r
+ {\r
+ if (selectionGroup == null || selectionGroup.getSize()<1)\r
+ {\r
+ return;\r
+ }\r
+\r
+ SequenceI[] seqs = selectionGroup.getSequencesInOrder(alignment);\r
+\r
+ hideSequence(seqs);\r
+\r
+ setSelectionGroup(null);\r
+ }\r
+\r
+ public void hideSequence(SequenceI[] seq)\r
+ {\r
+ if (seq != null)\r
+ {\r
+ for (int i = 0; i < seq.length; i++)\r
+ {\r
+ alignment.getHiddenSequences().hideSequence(seq[i]);\r
+ }\r
+\r
+ hasHiddenRows = true;\r
+ firePropertyChange("alignment", null, alignment.getSequences());\r
+ }\r
+ }\r
+\r
+ public void showColumn(int col)\r
+ {\r
+ colSel.revealHiddenColumns(col);\r
+ if (colSel.getHiddenColumns() == null)\r
+ {\r
+ hasHiddenColumns = false;\r
+ }\r
+ }\r
+\r
+ public void showAllHiddenColumns()\r
+ {\r
+ colSel.revealAllHiddenColumns();\r
+ hasHiddenColumns = false;\r
+ }\r
+\r
+ public void showAllHiddenSeqs()\r
+ {\r
+ if (alignment.getHiddenSequences().getSize() > 0)\r
+ {\r
+ if (selectionGroup == null)\r
+ {\r
+ selectionGroup = new SequenceGroup();\r
+ selectionGroup.setEndRes(alignment.getWidth() - 1);\r
+ }\r
+ Vector tmp = alignment.getHiddenSequences().showAll(hiddenRepSequences);\r
+ for (int t = 0; t < tmp.size(); t++)\r
+ {\r
+ selectionGroup.addSequence(\r
+ (SequenceI) tmp.elementAt(t), false\r
+ );\r
+ }\r
+ firePropertyChange("alignment", null, alignment.getSequences());\r
+ hasHiddenRows = false;\r
+ hiddenRepSequences = null;\r
+ }\r
+ }\r
+\r
+ public int adjustForHiddenSeqs(int alignmentIndex)\r
+ {\r
+ return alignment.getHiddenSequences().adjustForHiddenSeqs(alignmentIndex);\r
+ }\r
+\r
+ /**\r
+ * This method returns the a new SequenceI [] with\r
+ * the selection sequence and start and end points adjusted\r
+ * @return String[]\r
+ */\r
+ public SequenceI[] getSelectionAsNewSequence()\r
+ {\r
+ SequenceI[] sequences;\r
+\r
+ if (selectionGroup == null)\r
+ {\r
+ sequences = alignment.getSequencesArray();\r
+ }\r
+ else\r
+ {\r
+ sequences = selectionGroup.getSelectionAsNewSequences(alignment);\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\r
+ 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();\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
+ {\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
+ {\r
+ if (hideEnd > last)\r
+ {\r
+ hideStart = last;\r
+ }\r
+ else\r
+ {\r
+ continue;\r
+ }\r
+ }\r
+\r
+ if (hideStart > end)\r
+ {\r
+ break;\r
+ }\r
+\r
+ if (hideEnd > end)\r
+ {\r
+ hideEnd = end;\r
+ }\r
+\r
+ if (hideStart > hideEnd)\r
+ {\r
+ break;\r
+ }\r
+ /**\r
+ * form operations...\r
+ */\r
+ if (last < hideStart)\r
+ {\r
+ selection.addOperation(CigarArray.M, hideStart - last);\r
+ }\r
+ selection.addOperation(CigarArray.D, 1 + hideEnd - hideStart);\r
+ last = hideEnd + 1;\r
+ }\r
+ // Final match if necessary.\r
+ if (last < end)\r
+ {\r
+ selection.addOperation(CigarArray.M, end - last + 1);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ selection.addOperation(CigarArray.M, end - start + 1);\r
+ }\r
+ return selection;\r
+ }\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
+ {\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
+ {\r
+ return new AlignmentView(aligview,\r
+ (selectedOnly && selectionGroup != null) ?\r
+ selectionGroup.getStartRes() : 0);\r
+ }\r
+ return null;\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 String[] getViewAsString(boolean selectedRegionOnly)\r
+ {\r
+ String[] 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();\r
+ seqs = selectionGroup.getSequencesInOrder(alignment);\r
+ start = selectionGroup.getStartRes();\r
+ end = selectionGroup.getEndRes() + 1;\r
+ }\r
+ else\r
+ {\r
+ iSize = alignment.getHeight();\r
+ seqs = alignment.getSequencesArray();\r
+ end = alignment.getWidth();\r
+ }\r
+\r
+ selection = new String[iSize];\r
+\r
+ for (i = 0; i < iSize; i++)\r
+ {\r
+ if (hasHiddenColumns)\r
+ {\r
+ StringBuffer visibleSeq = new StringBuffer();\r
+ Vector regions = colSel.getHiddenColumns();\r
+\r
+ int blockStart = start, blockEnd = end;\r
+ int[] region;\r
+ int hideStart, hideEnd;\r
+\r
+ for (int j = 0; j < regions.size(); j++)\r
+ {\r
+ region = (int[]) regions.elementAt(j);\r
+ hideStart = region[0];\r
+ hideEnd = region[1];\r
+\r
+ if (hideStart < start)\r
+ {\r
+ continue;\r
+ }\r
+\r
+ blockStart = Math.min(blockStart, hideEnd + 1);\r
+ blockEnd = Math.min(blockEnd, hideStart);\r
+\r
+ if (blockStart > blockEnd)\r
+ {\r
+ break;\r
+ }\r
+\r
+ visibleSeq.append(seqs[i].getSequence(blockStart, blockEnd));\r
+\r
+ blockStart = hideEnd + 1;\r
+ blockEnd = end;\r
+ }\r
+\r
+ if (end > blockStart)\r
+ {\r
+ visibleSeq.append(seqs[i].getSequence(blockStart, end));\r
+ }\r
+\r
+ selection[i] = visibleSeq.toString();\r
+ }\r
+ else\r
+ {\r
+ selection[i] = seqs[i].getSequenceAsString(start, end);\r
+ }\r
+ }\r
+\r
+ return selection;\r
+ }\r
+\r
+ public boolean getShowHiddenMarkers()\r
+ {\r
+ return showHiddenMarkers;\r
+ }\r
+\r
+ public void setShowHiddenMarkers(boolean show)\r
+ {\r
+ showHiddenMarkers = show;\r
+ }\r
+\r
+ public Color getSequenceColour(SequenceI seq)\r
+ {\r
+ if (sequenceColours == null || !sequenceColours.containsKey(seq))\r
+ {\r
+ return Color.white;\r
+ }\r
+ else\r
+ {\r
+ return (Color) sequenceColours.get(seq);\r
+ }\r
+ }\r
+\r
+ public void setSequenceColour(SequenceI seq, Color col)\r
+ {\r
+ if (sequenceColours == null)\r
+ {\r
+ sequenceColours = new Hashtable();\r
+ }\r
+\r
+ if (col == null)\r
+ {\r
+ sequenceColours.remove(seq);\r
+ }\r
+ else\r
+ {\r
+ sequenceColours.put(seq, col);\r
+ }\r
+ }\r
+\r
+ public String getSequenceSetId()\r
+ {\r
+ if (sequenceSetID == null)\r
+ {\r
+ sequenceSetID = alignment.hashCode() + "";\r
+ }\r
+\r
+ return sequenceSetID;\r
+ }\r
+\r
+ public void alignmentChanged(AlignmentPanel ap)\r
+ {\r
+ alignment.padGaps();\r
+\r
+ if (hconsensus != null && autocalculateConsensus)\r
+ {\r
+ updateConsensus(ap);\r
+ updateConservation(ap);\r
+ }\r
+\r
+ //Reset endRes of groups if beyond alignment width\r
+ int alWidth = alignment.getWidth();\r
+ Vector groups = alignment.getGroups();\r
+ if (groups != null)\r
+ {\r
+ for (int i = 0; i < groups.size(); i++)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup) groups.elementAt(i);\r
+ if (sg.getEndRes() > alWidth)\r
+ {\r
+ sg.setEndRes(alWidth - 1);\r
+ }\r
+ }\r
+ }\r
+\r
+ if (selectionGroup != null && selectionGroup.getEndRes() > alWidth)\r
+ {\r
+ selectionGroup.setEndRes(alWidth - 1);\r
+ }\r
+\r
+ resetAllColourSchemes();\r
+\r
+ //AW alignment.adjustSequenceAnnotations();\r
+ }\r
+\r
+ void resetAllColourSchemes()\r
+ {\r
+ ColourSchemeI cs = globalColourScheme;\r
+ if (cs != null)\r
+ {\r
+ if (cs instanceof ClustalxColourScheme)\r
+ {\r
+ ( (ClustalxColourScheme) cs).\r
+ resetClustalX(alignment.getSequences(),\r
+ alignment.getWidth());\r
+ }\r
+\r
+ cs.setConsensus(hconsensus);\r
+ if (cs.conservationApplied())\r
+ {\r
+ Alignment al = (Alignment) alignment;\r
+ Conservation c = new Conservation("All",\r
+ ResidueProperties.propHash, 3,\r
+ al.getSequences(), 0,\r
+ al.getWidth() - 1);\r
+ c.calculate();\r
+ c.verdict(false, ConsPercGaps);\r
+\r
+ cs.setConservation(c);\r
+ }\r
+ }\r
+\r
+ int s, sSize = alignment.getGroups().size();\r
+ for (s = 0; s < sSize; s++)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup) alignment.getGroups().elementAt(s);\r
+ if (sg.cs != null && sg.cs instanceof ClustalxColourScheme)\r
+ {\r
+ ( (ClustalxColourScheme) sg.cs).resetClustalX(\r
+ sg.getSequences(hiddenRepSequences), sg.getWidth());\r
+ }\r
+ sg.recalcConservation();\r
+ }\r
+ }\r