boolean displayText = true;
boolean colourText = false;
-
+ /**
+ * after Olivier's non-conserved only character display
+ */
+ boolean showUnconserved = false;
+
+ /**
+ * group members
+ */
private Vector sequences = new Vector();
-
+ /**
+ * representative sequence for this group (if any)
+ */
+ private SequenceI seqrep = null;
int width = -1;
- /** DOCUMENT ME!! */
+ /**
+ * Colourscheme applied to group if any */
public ColourSchemeI cs;
int startRes = 0;
endRes = end;
recalcConservation();
}
+ /**
+ * copy constructor
+ * @param seqsel
+ */
+ public SequenceGroup(SequenceGroup seqsel)
+ {
+ if (seqsel!=null)
+ {
+ sequences=new Vector();
+ Enumeration sq = seqsel.sequences.elements();
+ while (sq.hasMoreElements()) {
+ sequences.addElement(sq.nextElement());
+ };
+ if (seqsel.groupName!=null)
+ {
+ groupName = new String(seqsel.groupName);
+ }
+ displayBoxes = seqsel.displayBoxes;
+ displayText = seqsel.displayText;
+ colourText = seqsel.colourText;
+ startRes = seqsel.startRes;
+ endRes = seqsel.endRes;
+ cs =seqsel.cs;
+ if (seqsel.description!=null)
+ description = new String(seqsel.description);
+ hidecols = seqsel.hidecols;
+ hidereps = seqsel.hidereps;
+ idColour = seqsel.idColour;
+ outlineColour = seqsel.outlineColour;
+ seqrep = seqsel.seqrep;
+ textColour = seqsel.textColour;
+ textColour2 = seqsel.textColour2;
+ thresholdTextColour = seqsel.thresholdTextColour;
+ width = seqsel.width;
+ if (seqsel.conserve!=null)
+ {
+ recalcConservation(); // safer than
+ // aaFrequency = (Vector) seqsel.aaFrequency.clone(); // ??
+ }
+ }
+ }
public SequenceI[] getSelectionAsNewSequences(AlignmentI align)
{
/**
*
- * returns the sequences in the group ordered by the ordering given by al
- *
+ * returns the sequences in the group ordered by the ordering given by al.
+ * this used to return an array with null entries regardless, new behaviour is below.
+ * TODO: verify that this does not affect use in applet or application
* @param al
* Alignment
- * @return SequenceI[]
+ * @return SequenceI[] intersection of sequences in group with al, ordered by al, or null if group does not intersect with al
*/
public SequenceI[] getSequencesInOrder(AlignmentI al)
{
seqs[index++] = al.getSequenceAt(i);
}
}
-
+ if (index==0)
+ {
+ return null;
+ }
+ if (index<seqs.length)
+ {
+ SequenceI[] dummy = seqs;
+ seqs = new SequenceI[index];
+ while (--index>=0)
+ {
+ seqs[index] = dummy[index];
+ dummy[index] = null;
+ }
+ }
return seqs;
}
{
this.idColour = idColour;
}
+
+ /**
+ * @return the representative sequence for this group
+ */
+ public SequenceI getSeqrep()
+ {
+ return seqrep;
+ }
+
+ /**
+ * set the representative sequence for this group.
+ * Note - this affects the interpretation of the Hidereps attribute.
+ * @param seqrep the seqrep to set (null means no sequence representative)
+ */
+ public void setSeqrep(SequenceI seqrep)
+ {
+ this.seqrep = seqrep;
+ }
+ /**
+ *
+ * @return true if group has a sequence representative
+ */
+ public boolean hasSeqrep()
+ {
+ return seqrep != null;
+ }
+ /**
+ * visibility of rows or represented rows covered by group
+ */
+ private boolean hidereps=false;
+ /**
+ * set visibility of sequences covered by (if no sequence representative is defined)
+ * or represented by this group.
+ * @param visibility
+ */
+ public void setHidereps(boolean visibility)
+ {
+ hidereps = visibility;
+ }
+ /**
+ *
+ * @return true if sequences represented (or covered) by this group should be hidden
+ */
+ public boolean isHidereps()
+ {
+ return hidereps;
+ }
+ /**
+ * visibility of columns intersecting this group
+ */
+ private boolean hidecols=false;
+ /**
+ * set intended visibility of columns covered by this group
+ * @param visibility
+ */
+ public void setHideCols(boolean visibility)
+ {
+ hidecols = visibility;
+ }
+ /**
+ *
+ * @return true if columns covered by group should be hidden
+ */
+ public boolean isHideCols()
+ {
+ return hidecols;
+ }
+ /**
+ * create a new sequence group from the intersection of this group
+ * with an alignment Hashtable of hidden representatives
+ *
+ * @param alignment (may not be null)
+ * @param hashtable (may be null)
+ * @return new group containing sequences common to this group and alignment
+ */
+ public SequenceGroup intersect(AlignmentI alignment, Hashtable hashtable)
+ {
+ SequenceGroup sgroup = new SequenceGroup(this);
+ Enumeration en = getSequences(hashtable).elements();
+ while (en.hasMoreElements())
+ {
+ SequenceI elem = (SequenceI) en.nextElement();
+ if (alignment.getSequences().contains(elem))
+ {
+ sgroup.addSequence(elem, false);
+ }
+ }
+ return sgroup;
+ }
+
+ /**
+ * @return the showUnconserved
+ */
+ public boolean getShowunconserved()
+ {
+ return showUnconserved;
+ }
+
+ /**
+ * @param showUnconserved the showUnconserved to set
+ */
+ public void setShowunconserved(boolean displayNonconserved)
+ {
+ this.showUnconserved = displayNonconserved;
+ }
+
+ public AlignmentAnnotation getConsensus()
+ {
+ // TODO get or calculate and get consensus annotation row for this group
+ this.conserve.getConsSequence();
+ return null;
+ }
}