- SequenceI[] sequences;
-
- if (selectionGroup == null)
- {
- sequences = alignment.getSequencesArray();
- }
- else
- {
- sequences = selectionGroup.getSelectionAsNewSequences(alignment);
- }
-
- return sequences;
- }
-
- /**
- * This method returns the visible alignment as text, as
- * seen on the GUI, ie if columns are hidden they will not
- * be returned in the result.
- * Use this for calculating trees, PCA, redundancy etc on views
- * which contain hidden columns.
- * @return String[]
- */
- public jalview.datamodel.CigarArray getViewAsCigars(boolean
- selectedRegionOnly)
- {
- CigarArray selection = null;
- SequenceI[] seqs = null;
- int i, iSize;
- int start = 0, end = 0;
- if (selectedRegionOnly && selectionGroup != null)
- {
- iSize = selectionGroup.getSize();
- seqs = selectionGroup.getSequencesInOrder(alignment);
- start = selectionGroup.getStartRes();
- end = selectionGroup.getEndRes(); // inclusive for start and end in SeqCigar constructor
- }
- else
- {
- iSize = alignment.getHeight();
- seqs = alignment.getSequencesArray();
- end = alignment.getWidth() - 1;
- }
- SeqCigar[] selseqs = new SeqCigar[iSize];
- for (i = 0; i < iSize; i++)
- {
- selseqs[i] = new SeqCigar(seqs[i], start, end);
- }
- selection = new CigarArray(selseqs);
- // now construct the CigarArray operations
- if (hasHiddenColumns)
- {
- Vector regions = colSel.getHiddenColumns();
- int[] region;
- int hideStart, hideEnd;
- int last = start;
- for (int j = 0; last < end & j < regions.size(); j++)
- {
- region = (int[]) regions.elementAt(j);
- hideStart = region[0];
- hideEnd = region[1];
- // edit hidden regions to selection range
- if (hideStart < last)
- {
- if (hideEnd > last)
- {
- hideStart = last;
- }
- else
- {
- continue;
- }
- }
-
- if (hideStart > end)
- {
- break;
- }
-
- if (hideEnd > end)
- {
- hideEnd = end;
- }
-
- if (hideStart > hideEnd)
- {
- break;
- }
- /**
- * form operations...
- */
- if (last < hideStart)
- {
- selection.addOperation(CigarArray.M, hideStart - last);
- }
- selection.addOperation(CigarArray.D, 1 + hideEnd - hideStart);
- last = hideEnd + 1;
- }
- // Final match if necessary.
- if (last < end)
- {
- selection.addOperation(CigarArray.M, end - last + 1);
- }
- }
- else
- {
- selection.addOperation(CigarArray.M, end - start + 1);
- }
- return selection;
- }
-
- /**
- * return a compact representation of the current alignment selection to
- * pass to an analysis function
- * @param selectedOnly boolean true to just return the selected view
- * @return AlignmentView
- */
- jalview.datamodel.AlignmentView getAlignmentView(boolean selectedOnly)
- {
- // JBPNote:
- // this is here because the AlignmentView constructor modifies the CigarArray
- // object. Refactoring of Cigar and alignment view representation should
- // be done to remove redundancy.
- CigarArray aligview = getViewAsCigars(selectedOnly);
- if (aligview != null)
- {
- return new AlignmentView(aligview,
- (selectedOnly && selectionGroup != null) ?
- selectionGroup.getStartRes() : 0);
- }
- return null;
- }
-
- /**
- * This method returns the visible alignment as text, as
- * seen on the GUI, ie if columns are hidden they will not
- * be returned in the result.
- * Use this for calculating trees, PCA, redundancy etc on views
- * which contain hidden columns.
- * @return String[]
- */
- public String[] getViewAsString(boolean selectedRegionOnly)
- {
- String[] selection = null;
- SequenceI[] seqs = null;
- int i, iSize;
- int start = 0, end = 0;
- if (selectedRegionOnly && selectionGroup != null)
- {
- iSize = selectionGroup.getSize();
- seqs = selectionGroup.getSequencesInOrder(alignment);
- start = selectionGroup.getStartRes();
- end = selectionGroup.getEndRes() + 1;
- }
- else
- {
- iSize = alignment.getHeight();
- seqs = alignment.getSequencesArray();
- end = alignment.getWidth();
- }
-
- selection = new String[iSize];
-
- for (i = 0; i < iSize; i++)
- {
- if (hasHiddenColumns)
- {
- StringBuffer visibleSeq = new StringBuffer();
- Vector regions = colSel.getHiddenColumns();
-
- int blockStart = start, blockEnd = end;
- int[] region;
- int hideStart, hideEnd;
-
- for (int j = 0; j < regions.size(); j++)
- {
- region = (int[]) regions.elementAt(j);
- hideStart = region[0];
- hideEnd = region[1];
-
- if (hideStart < start)
- {
- continue;
- }
-
- blockStart = Math.min(blockStart, hideEnd + 1);
- blockEnd = Math.min(blockEnd, hideStart);
-
- if (blockStart > blockEnd)
- {
- break;
- }
-
- visibleSeq.append(seqs[i].getSequence(blockStart, blockEnd));
-
- blockStart = hideEnd + 1;
- blockEnd = end;
- }
-
- if (end > blockStart)
- {
- visibleSeq.append(seqs[i].getSequence(blockStart, end));
- }
-
- selection[i] = visibleSeq.toString();
- }
- else
- {
- selection[i] = seqs[i].getSequenceAsString(start, end);
- }
- }
-
- return selection;