X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequenceGroup.java;h=49f270d363f1510bedcd151029cbee617ad6a165;hb=1ae0a3902856d19d5ccc3635ff8b630bdd62faf0;hp=dd842ea5a13209b81bc4c7def3a9a9341a53bd38;hpb=506d60f0e188723ddc91c26824b41ac7034df3fe;p=jalview.git diff --git a/src/jalview/datamodel/SequenceGroup.java b/src/jalview/datamodel/SequenceGroup.java index dd842ea..49f270d 100755 --- a/src/jalview/datamodel/SequenceGroup.java +++ b/src/jalview/datamodel/SequenceGroup.java @@ -46,12 +46,23 @@ public class SequenceGroup 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; @@ -104,6 +115,47 @@ public class SequenceGroup 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) { @@ -639,11 +691,12 @@ public class SequenceGroup /** * - * 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) { @@ -660,7 +713,20 @@ public class SequenceGroup seqs[index++] = al.getSequenceAt(i); } } - + if (index==0) + { + return null; + } + if (index=0) + { + seqs[index] = dummy[index]; + dummy[index] = null; + } + } return seqs; } @@ -680,4 +746,116 @@ public class SequenceGroup { 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; + } }