public Color textColour2 = Color.white;
+ private boolean ignoreGapsInConsensusCalculation=true;
+
/**
* Creates a new SequenceGroup object.
*/
textColour2 = seqsel.textColour2;
thresholdTextColour = seqsel.thresholdTextColour;
width = seqsel.width;
+ ignoreGapsInConsensusCalculation = seqsel.ignoreGapsInConsensusCalculation;
if (seqsel.conserve!=null)
{
recalcConservation(); // safer than
*/
public void recalcConservation()
{
- if (cs == null)
+ if (cs == null && consensus == null && conservation == null)
{
return;
}
-
+
try
{
- cs.setConsensus(AAFrequency
- .calculate(sequences, startRes, endRes + 1));
-
+ Hashtable cnsns[] = AAFrequency.calculate(sequences, startRes, endRes + 1);
+ if (consensus != null)
+ {
+ _updateConsensusRow(cnsns);
+ }
+ if (cs!=null)
+ {
+ cs.setConsensus(cnsns);
+
if (cs instanceof ClustalxColourScheme)
{
((ClustalxColourScheme) cs).resetClustalX(sequences, getWidth());
}
+ }
- if (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, 25);
-
- cs.setConservation(c);
-
+ if (conservation!=null)
+ {
+ _updateConservationRow(c);
+ }
+ if (cs!=null)
+ {
+ cs.setConservation(c);
+
if (cs instanceof ClustalxColourScheme)
{
((ClustalxColourScheme) cs).resetClustalX(sequences, getWidth());
}
+ }
}
} catch (java.lang.OutOfMemoryError err)
{
}
+ private void _updateConservationRow(Conservation c)
+ {
+ if (conservation==null)
+ {
+ getConservation();
+ }
+ // preserve width if already set
+ int aWidth = (conservation.annotations!=null) ? (endRes<conservation.annotations.length ? conservation.annotations.length : endRes+1) : endRes+1;
+ c.completeAnnotations(conservation,null, aWidth);
+ }
+
+ private void _updateConsensusRow(Hashtable[] cnsns)
+ {
+ if (consensus==null)
+ {
+ getConsensus();
+ }
+ // preserve width if already set
+ int aWidth = (consensus.annotations!=null) ? (endRes<consensus.annotations.length ? consensus.annotations.length : endRes+1) : endRes+1;
+ consensus.annotations = null;
+ consensus.annotations = new Annotation[aWidth]; // should be alignment width
+
+ AAFrequency.completeConsensus(consensus,cnsns,startRes,endRes,ignoreGapsInConsensusCalculation); // TODO: setting container for ignoreGapsInConsensusCalculation);
+ }
+
/**
* DOCUMENT ME!
*
{
this.showUnconserved = displayNonconserved;
}
-
+ AlignmentAnnotation consensus=null,conservation=null;
+ /**
+ *
+ * @return automatically calculated consensus row
+ */
public AlignmentAnnotation getConsensus()
{
// TODO get or calculate and get consensus annotation row for this group
- this.conserve.getConsSequence();
- return null;
+ int aWidth = this.getWidth();
+ // pointer
+ // possibility
+ // here.
+ if (aWidth < 0)
+ {
+ return null;
+ }
+ if (consensus==null)
+ {
+ consensus = new AlignmentAnnotation("Consensus for "+getName(), "PID",
+ new Annotation[1], 0f, 100f, AlignmentAnnotation.BAR_GRAPH);
+ consensus.hasText = true;
+ consensus.autoCalculated = true;
+ consensus.groupRef = this;
+ }
+ return consensus;
+ }
+ /**
+ * get the conservation annotation row for this group
+ * @return autoCalculated annotation row
+ */
+ public AlignmentAnnotation getConservationRow() {
+ int ConsPercGaps = 25;
+ if (conservation == null) {
+ conservation = new AlignmentAnnotation("Conservation",
+ "Conservation of total alignment less than " + ConsPercGaps
+ + "% gaps", new Annotation[1], 0f, 11f,
+ AlignmentAnnotation.BAR_GRAPH);
+ conservation.hasText = true;
+ conservation.autoCalculated = true;
+ conservation.groupRef = this;
+ }
+
+ return conservation;
+ }
+
+ /**
+ *
+ * @return true if annotation rows have been instantiated for this group
+ */
+ public boolean hasAnnotationRows()
+ {
+ return consensus!=null || conservation!=null;
+ }
+
+ public SequenceI getConsensusSeq()
+ {
+ getConsensus();
+ StringBuffer seqs = new StringBuffer();
+ for (int i = 0; i < consensus.annotations.length; i++)
+ {
+ if (consensus.annotations[i] != null)
+ {
+ if (consensus.annotations[i].description.charAt(0) == '[')
+ {
+ seqs.append(consensus.annotations[i].description.charAt(1));
+ }
+ else
+ {
+ seqs.append(consensus.annotations[i].displayCharacter);
+ }
+ }
+ }
+
+ SequenceI sq = new Sequence("Group"+getName()+" Consensus", seqs.toString());
+ sq.setDescription("Percentage Identity Consensus "
+ + ((ignoreGapsInConsensusCalculation) ? " without gaps" : ""));
+ return sq;
+ }
+
+ public void setIgnoreGapsConsensus(boolean state)
+ {
+ if (this.ignoreGapsInConsensusCalculation!=state && consensus!=null)
+ {
+ ignoreGapsInConsensusCalculation = state;
+ recalcConservation();
+ }
+ ignoreGapsInConsensusCalculation = state;
}
}