import jalview.analysis.AAFrequency;
import jalview.analysis.Conservation;
import jalview.schemes.ColourSchemeI;
-import jalview.schemes.ResidueProperties;
import java.awt.Color;
import java.util.ArrayList;
}
/**
- * calculate residue conservation for group - but only if necessary.
+ * calculate residue conservation and colourschemes for group - but only if
+ * necessary. returns true if the calculation resulted in a visible change to
+ * group
*/
- public void recalcConservation()
+ public boolean recalcConservation()
+ {
+ return recalcConservation(false);
+ }
+
+ /**
+ * calculate residue conservation for group - but only if necessary. returns
+ * true if the calculation resulted in a visible change to group
+ *
+ * @param defer
+ * when set, colourschemes for this group are not refreshed after
+ * recalculation
+ */
+ public boolean recalcConservation(boolean defer)
{
if (cs == null && consensus == null && conservation == null)
{
- return;
+ return false;
}
+ // TODO: try harder to detect changes in state in order to minimise
+ // recalculation effort
+ boolean upd = false;
try
{
Hashtable cnsns[] = AAFrequency.calculate(sequences, startRes,
if (consensus != null)
{
_updateConsensusRow(cnsns, sequences.size());
+ upd = true;
}
if (cs != null)
{
cs.setConsensus(cnsns);
+ upd = true;
}
if ((conservation != null)
|| (cs != null && cs.conservationApplied()))
{
- Conservation c = new Conservation(groupName,
- ResidueProperties.propHash, 3, sequences, startRes,
- endRes + 1);
+ Conservation c = new Conservation(groupName, 3, sequences,
+ startRes, endRes + 1);
c.calculate();
c.verdict(false, consPercGaps);
if (conservation != null)
cs.setConservation(c);
}
}
+ // eager update - will cause a refresh of overview regardless
+ upd = true;
}
- if (cs != null)
+ if (cs != null && !defer)
{
+ // TODO: JAL-2034 should cs.alignmentChanged modify return state
cs.alignmentChanged(context != null ? context : this, null);
+ return true;
+ }
+ else
+ {
+ return upd;
}
} catch (java.lang.OutOfMemoryError err)
{
// TODO: catch OOM
System.out.println("Out of memory loading groups: " + err);
}
-
+ return upd;
}
private void _updateConservationRow(Conservation c)
/**
*
- * @return automatically calculated consensus row
+ * @return automatically calculated consensus row note: the row is a stub if a
+ * consensus calculation has not yet been performed on the group
*/
public AlignmentAnnotation getConsensus()
{