import java.awt.*;
import jalview.analysis.*;
+import jalview.api.StructureSelectionManagerProvider;
import jalview.bin.*;
import jalview.schemes.*;
import jalview.structure.SelectionSource;
import jalview.structure.StructureSelectionManager;
+import jalview.structure.VamsasSource;
/**
* DOCUMENT ME!
*
* @author $author$
- * @version $Revision$
+ * @version $Revision: 1.141 $
*/
-public class AlignViewport implements SelectionSource
+public class AlignViewport implements SelectionSource, VamsasSource
{
private static final int RIGHT_JUSTIFY = 1;
try
{
- int aWidth = (alignment != null) ? alignment.getWidth() : 0; // null
+ int aWidth = (alignment != null) ? alignment.getWidth() : -1; // null
// pointer
// possibility
// here.
- if (aWidth < 0)
+ if (aWidth <= 0)
{
+ updatingConsensus = false;
+ UPDATING_CONSENSUS = false;
return;
}
}
/**
- * DOCUMENT ME!
*
- * @return DOCUMENT ME!
+ *
+ * @return null or the currently selected sequence region
*/
public SequenceGroup getSelectionGroup()
{
}
/**
- * DOCUMENT ME!
+ * Set the selection group for this window.
*
- * @param sg
- * DOCUMENT ME!
+ * @param sg - group holding references to sequences in this alignment view
+ *
*/
public void setSelectionGroup(SequenceGroup sg)
{
}
/**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
+ * GUI state
+ * @return true if conservation based shading is enabled
*/
public boolean getConservationSelected()
{
}
/**
- * DOCUMENT ME!
- *
+ * GUI state
* @param b
- * DOCUMENT ME!
+ * enable conservation based shading
*/
public void setConservationSelected(boolean b)
{
}
/**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
+ * GUI state
+ * @return true if percent identity threshold is applied to shading
*/
public boolean getAbovePIDThreshold()
{
}
/**
- * DOCUMENT ME!
+ * GUI state
*
- * @param b
- * DOCUMENT ME!
+ *
+ * @param b indicate if percent identity threshold is applied to shading
*/
public void setAbovePIDThreshold(boolean b)
{
{
if (alignment != null && alignment.getCodonFrames() != null)
{
- StructureSelectionManager.getStructureSelectionManager()
+ StructureSelectionManager.getStructureSelectionManager(Desktop.instance)
.removeMappings(alignment.getCodonFrames());
}
this.alignment = align;
if (alignment.getCodonFrames() != null)
{
- StructureSelectionManager.getStructureSelectionManager().addMappings(
+ StructureSelectionManager.getStructureSelectionManager(Desktop.instance).addMappings(
alignment.getCodonFrames());
}
}
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 new jalview.datamodel.CigarArray(alignment, (hasHiddenColumns ? colSel : null), (selectedRegionOnly ? selectionGroup : null));
}
/**
* boolean true to just return the selected view
* @return AlignmentView
*/
- jalview.datamodel.AlignmentView getAlignmentView(boolean selectedOnly)
+ public 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;
+ return getAlignmentView(selectedOnly, false);
+ }
+
+ /**
+ * 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
+ * @param markGroups
+ * boolean true to annotate the alignment view with groups on the alignment (and intersecting with selected region if selectedOnly is true)
+ * @return AlignmentView
+ */
+ public jalview.datamodel.AlignmentView getAlignmentView(boolean selectedOnly, boolean markGroups)
+ {
+ return new AlignmentView(alignment, colSel, selectionGroup, hasHiddenColumns, selectedOnly, markGroups);
}
/**
/**
* checks current SelectionGroup against record of last hash value, and
* updates record.
+ * @param b update the record of last hash value
*
- * @return true if SelectionGroup changed since last call
+ * @return true if SelectionGroup changed since last call (when b is true)
*/
- boolean isSelectionGroupChanged()
+ boolean isSelectionGroupChanged(boolean b)
{
- int hc = (selectionGroup == null) ? -1 : selectionGroup.hashCode();
- if (hc != sgrouphash)
+ int hc = (selectionGroup == null || selectionGroup.getSize()==0) ? -1 : selectionGroup.hashCode();
+ if (hc!=-1 && hc != sgrouphash)
{
- sgrouphash = hc;
+ if (b) {sgrouphash = hc;}
return true;
}
return false;
}
/**
- * checks current colsel against record of last hash value, and updates
+ * checks current colsel against record of last hash value, and optionally updates
* record.
- *
- * @return true if colsel changed since last call
+
+ * @param b update the record of last hash value
+ * @return true if colsel changed since last call (when b is true)
*/
- boolean isColSelChanged()
+ boolean isColSelChanged(boolean b)
{
- int hc = (colSel == null) ? -1 : colSel.hashCode();
- if (hc != colselhash)
+ int hc = (colSel == null || colSel.size()==0) ? -1 : colSel.hashCode();
+ if (hc!=-1 && hc != colselhash)
{
- colselhash = hc;
+ if (b) {colselhash = hc;}
return true;
}
return false;
public void sendSelection()
{
jalview.structure.StructureSelectionManager
- .getStructureSelectionManager().sendSelection(
+ .getStructureSelectionManager(Desktop.instance).sendSelection(
new SequenceGroup(getSelectionGroup()),
new ColumnSelection(getColumnSelection()), this);
}
}
}
}
+
+ public StructureSelectionManager getStructureSelectionManager()
+ {
+ return StructureSelectionManager.getStructureSelectionManager(Desktop.instance);
+ }
+
+ /**
+ *
+ * @param pdbEntries
+ * @return a series of SequenceI arrays, one for each PDBEntry, listing which sequence in the alignment holds a reference to it
+ */
+ public SequenceI[][] collateForPDB(PDBEntry[] pdbEntries)
+ {
+ ArrayList<SequenceI[]> seqvectors = new ArrayList<SequenceI[]>();
+ for (PDBEntry pdb: pdbEntries) {
+ ArrayList<SequenceI> seqs = new ArrayList<SequenceI>();
+ for (int i = 0; i < alignment.getHeight(); i++)
+ {
+ Vector pdbs = alignment.getSequenceAt(i)
+ .getDatasetSequence().getPDBId();
+ if (pdbs == null)
+ continue;
+ SequenceI sq;
+ for (int p = 0; p < pdbs.size(); p++)
+ {
+ PDBEntry p1 = (PDBEntry) pdbs.elementAt(p);
+ if (p1.getId().equals(pdb.getId()))
+ {
+ if (!seqs.contains(sq=alignment.getSequenceAt(i)))
+ seqs.add(sq);
+
+ continue;
+ }
+ }
+ }
+ seqvectors.add(seqs.toArray(new SequenceI[seqs.size()]));
+ }
+ return seqvectors.toArray(new SequenceI[seqvectors.size()][]);
+ }
}