X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequenceGroup.java;h=94e359a25a404b1f3e89ed3ba8bb36b593ddd9e7;hb=863467bf6c59c0bc5368c8f3a03d9d5a4f10700d;hp=871e4cf5d9410603870e2020da3ad3388deb3dca;hpb=01b6894c0a23ab88079f9f0f6a0786b5956f88a9;p=jalview.git
diff --git a/src/jalview/datamodel/SequenceGroup.java b/src/jalview/datamodel/SequenceGroup.java
index 871e4cf..94e359a 100755
--- a/src/jalview/datamodel/SequenceGroup.java
+++ b/src/jalview/datamodel/SequenceGroup.java
@@ -1,20 +1,19 @@
/*
- * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)
- * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * This file is part of Jalview.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with Jalview. If not, see .
*/
package jalview.datamodel;
@@ -31,7 +30,7 @@ import jalview.schemes.*;
* @author $author$
* @version $Revision$
*/
-public class SequenceGroup
+public class SequenceGroup implements AnnotatedCollectionI
{
String groupName;
@@ -46,23 +45,27 @@ public class SequenceGroup
boolean displayText = true;
boolean colourText = false;
+
/**
* after Olivier's non-conserved only character display
*/
- boolean showUnconserved = false;
-
+ boolean showNonconserved = false;
+
/**
* group members
*/
private Vector sequences = new Vector();
+
/**
* representative sequence for this group (if any)
*/
private SequenceI seqrep = null;
+
int width = -1;
/**
- * Colourscheme applied to group if any */
+ * Colourscheme applied to group if any
+ */
public ColourSchemeI cs;
int startRes = 0;
@@ -82,21 +85,21 @@ public class SequenceGroup
/**
* consensus calculation property
*/
- private boolean ignoreGapsInConsensus=true;
+ private boolean ignoreGapsInConsensus = true;
+
/**
* consensus calculation property
*/
- private boolean showConsensusProfile=false;
+ private boolean showSequenceLogo = false;
/**
* @return the includeAllConsSymbols
*/
- public boolean isIncludeAllConsSymbols()
+ public boolean isShowSequenceLogo()
{
- return showConsensusProfile;
+ return showSequenceLogo;
}
-
/**
* Creates a new SequenceGroup object.
*/
@@ -115,9 +118,9 @@ public class SequenceGroup
* @param displayText
* @param colourText
* @param start
- * first column of group
+ * first column of group
* @param end
- * last column of group
+ * last column of group
*/
public SequenceGroup(Vector sequences, String groupName,
ColourSchemeI scheme, boolean displayBoxes, boolean displayText,
@@ -133,20 +136,24 @@ public class SequenceGroup
endRes = end;
recalcConservation();
}
+
/**
* copy constructor
+ *
* @param seqsel
*/
public SequenceGroup(SequenceGroup seqsel)
{
- if (seqsel!=null)
+ if (seqsel != null)
{
- sequences=new Vector();
+ sequences = new Vector();
Enumeration sq = seqsel.sequences.elements();
- while (sq.hasMoreElements()) {
- sequences.addElement(sq.nextElement());
- };
- if (seqsel.groupName!=null)
+ while (sq.hasMoreElements())
+ {
+ sequences.addElement(sq.nextElement());
+ }
+ ;
+ if (seqsel.groupName != null)
{
groupName = new String(seqsel.groupName);
}
@@ -155,8 +162,8 @@ public class SequenceGroup
colourText = seqsel.colourText;
startRes = seqsel.startRes;
endRes = seqsel.endRes;
- cs =seqsel.cs;
- if (seqsel.description!=null)
+ cs = seqsel.cs;
+ if (seqsel.description != null)
description = new String(seqsel.description);
hidecols = seqsel.hidecols;
hidereps = seqsel.hidereps;
@@ -168,9 +175,9 @@ public class SequenceGroup
thresholdTextColour = seqsel.thresholdTextColour;
width = seqsel.width;
ignoreGapsInConsensus = seqsel.ignoreGapsInConsensus;
- if (seqsel.conserve!=null)
+ if (seqsel.conserve != null)
{
- recalcConservation(); // safer than
+ recalcConservation(); // safer than
// aaFrequency = (Vector) seqsel.aaFrequency.clone(); // ??
}
}
@@ -219,8 +226,8 @@ public class SequenceGroup
if (!found)
continue;
}
- AlignmentAnnotation newannot = new AlignmentAnnotation(seq
- .getAnnotation()[a]);
+ AlignmentAnnotation newannot = new AlignmentAnnotation(
+ seq.getAnnotation()[a]);
newannot.restrict(startRes, endRes);
newannot.setSequenceRef(seqs[ipos]);
newannot.adjustForAlignment();
@@ -248,7 +255,7 @@ public class SequenceGroup
* If sequence ends in gaps, the end residue can be correctly calculated here
*
* @param seq
- * SequenceI
+ * SequenceI
* @return int
*/
public int findEndRes(SequenceI seq)
@@ -325,7 +332,7 @@ public class SequenceGroup
* DOCUMENT ME!
*
* @param col
- * DOCUMENT ME!
+ * DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
@@ -359,7 +366,7 @@ public class SequenceGroup
* DOCUMENT ME!
*
* @param col
- * DOCUMENT ME!
+ * DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
@@ -398,7 +405,7 @@ public class SequenceGroup
* DOCUMENT ME!
*
* @param name
- * DOCUMENT ME!
+ * DOCUMENT ME!
*/
public void setName(String name)
{
@@ -425,7 +432,7 @@ public class SequenceGroup
* DOCUMENT ME!
*
* @param c
- * DOCUMENT ME!
+ * DOCUMENT ME!
*/
public void setConservation(Conservation c)
{
@@ -433,12 +440,14 @@ public class SequenceGroup
}
/**
- * Add s to this sequence group
+ * Add s to this sequence group. If aligment sequence is already contained in
+ * group, it will not be added again, but recalculation may happen if the flag
+ * is set.
*
* @param s
- * alignment sequence to be added
+ * alignment sequence to be added
* @param recalc
- * true means Group's conservation should be recalculated
+ * true means Group's conservation should be recalculated
*/
public void addSequence(SequenceI s, boolean recalc)
{
@@ -454,10 +463,11 @@ public class SequenceGroup
}
/**
- * Max Gaps Threshold for performing a conservation calculation
- * TODO: make this a configurable property - or global to an alignment view
+ * Max Gaps Threshold for performing a conservation calculation TODO: make
+ * this a configurable property - or global to an alignment view
*/
- private int consPercGaps=25;
+ private int consPercGaps = 25;
+
/**
* calculate residue conservation for group - but only if necessary.
*/
@@ -467,43 +477,49 @@ public class SequenceGroup
{
return;
}
-
+
try
{
- Hashtable cnsns[] = AAFrequency.calculate(sequences, startRes, endRes + 1, showConsensusProfile);
+ Hashtable cnsns[] = AAFrequency.calculate(sequences, startRes,
+ endRes + 1, showSequenceLogo);
if (consensus != null)
{
_updateConsensusRow(cnsns);
}
- if (cs!=null)
+ if (cs != null)
{
cs.setConsensus(cnsns);
-
- if (cs instanceof ClustalxColourScheme)
- {
- ((ClustalxColourScheme) cs).resetClustalX(sequences, getWidth());
- }
+
+ if (cs instanceof ClustalxColourScheme)
+ {
+ ((ClustalxColourScheme) cs).resetClustalX(sequences, getWidth());
+ }
}
- if ((conservation!=null) || (cs!=null && cs.conservationApplied()))
+ if ((conservation != null)
+ || (cs != null && cs.conservationApplied()))
{
Conservation c = new Conservation(groupName,
ResidueProperties.propHash, 3, sequences, startRes,
endRes + 1);
c.calculate();
c.verdict(false, consPercGaps);
- if (conservation!=null)
+ if (conservation != null)
{
_updateConservationRow(c);
}
- if (cs!=null)
+ if (cs != null)
{
- cs.setConservation(c);
-
- if (cs instanceof ClustalxColourScheme)
- {
- ((ClustalxColourScheme) cs).resetClustalX(sequences, getWidth());
- }
+ if (cs.conservationApplied())
+ {
+ cs.setConservation(c);
+
+ if (cs instanceof ClustalxColourScheme)
+ {
+ ((ClustalxColourScheme) cs).resetClustalX(sequences,
+ getWidth());
+ }
+ }
}
}
} catch (java.lang.OutOfMemoryError err)
@@ -516,41 +532,54 @@ public class SequenceGroup
private void _updateConservationRow(Conservation c)
{
- if (conservation==null)
+ if (conservation == null)
{
getConservation();
}
// update Labels
- conservation.label = "Conservation for "+getName();
- conservation.description = "Conservation for group "+getName()+" less than " + consPercGaps
- + "% gaps";
+ conservation.label = "Conservation for " + getName();
+ conservation.description = "Conservation for group " + getName()
+ + " less than " + consPercGaps + "% gaps";
// preserve width if already set
- int aWidth = (conservation.annotations!=null) ? (endRes=0)
+ while (--index >= 0)
{
seqs[index] = dummy[index];
dummy[index] = null;
@@ -808,7 +856,7 @@ public class SequenceGroup
/**
* @param idColour
- * the idColour to set
+ * the idColour to set
*/
public void setIdColour(Color idColour)
{
@@ -824,14 +872,17 @@ public class SequenceGroup
}
/**
- * 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)
+ * 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
@@ -840,39 +891,48 @@ public class SequenceGroup
{
return seqrep != null;
}
+
/**
* visibility of rows or represented rows covered by group
*/
- private boolean hidereps=false;
+ private boolean hidereps = false;
+
/**
- * set visibility of sequences covered by (if no sequence representative is defined)
- * or represented by this group.
+ * 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
+ * @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;
+ 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
@@ -881,58 +941,78 @@ public class SequenceGroup
{
return hidecols;
}
+
/**
- * create a new sequence group from the intersection of this group
- * with an alignment Hashtable of hidden representatives
+ * 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)
+ * @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);
- SequenceI[] insect=getSequencesInOrder(alignment);
+ SequenceI[] insect = getSequencesInOrder(alignment);
sgroup.sequences = new Vector();
- for (int s=0;insect!=null && s annot = new ArrayList();
+ for (SequenceI seq:(Vector)sequences)
+ {
+ for (AlignmentAnnotation al: seq.getAnnotation())
+ {
+ if (al.groupRef==this)
+ {
+ annot.add(al);
+ }
+ }
+ }
+ if (consensus!=null)
+ {
+ annot.add(consensus);
+ }
+ if (conservation!=null)
+ {
+ annot.add(conservation);
+ }
+ return annot.toArray(new AlignmentAnnotation[0]);
}
+}