X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fschemes%2FHmmerColourScheme.java;h=05c9b66f7e62004094e6cd00256bd2c93639b59e;hb=456e5c765ac1e85336fd9f9b1a35453069bb2298;hp=d31f0e18b2af3282c2eaf45341982e277979c658;hpb=787c729c03ee03aa76de75ccea53afb22e4c5927;p=jalview.git diff --git a/src/jalview/schemes/HmmerColourScheme.java b/src/jalview/schemes/HmmerColourScheme.java index d31f0e1..05c9b66 100644 --- a/src/jalview/schemes/HmmerColourScheme.java +++ b/src/jalview/schemes/HmmerColourScheme.java @@ -1,21 +1,22 @@ package jalview.schemes; +import jalview.api.AlignViewportI; import jalview.datamodel.AnnotatedCollectionI; import jalview.datamodel.HiddenMarkovModel; -import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceI; import jalview.util.ColorUtils; import jalview.util.Comparison; import java.awt.Color; +import java.util.List; import java.util.Map; /** * Base class for colour schemes based on a selected Hidden Markov Model. The - * colour is + * colour is with reference to an HMM consensus sequence and HMM profile * @@ -35,18 +36,26 @@ public abstract class HmmerColourScheme extends ResidueColourScheme { private static final Color INSERTION_COLOUR = new Color(230, 0, 0); // reddish + /* + * the aligned HMM consensus sequence to use as reference for colouring + */ + private SequenceI hmmSeq; + private HiddenMarkovModel hmm; private Map frequencies; /** - * Constructor given a Hidden Markov Model + * Constructor given a list of Hidden Markov Model consensus sequences. The + * first sequence provides the HMM profile from which we can read the emission + * probabilities that determine the colour. * - * @param markov + * @param hmmSeqs */ - public HmmerColourScheme(HiddenMarkovModel markov) + public HmmerColourScheme(List hmmSeqs) { - hmm = markov; + hmmSeq = hmmSeqs.isEmpty() ? null : hmmSeqs.get(0); + hmm = hmmSeq == null ? null : hmmSeq.getHMM(); } /** @@ -57,10 +66,10 @@ public abstract class HmmerColourScheme extends ResidueColourScheme } @Override - public Color findColour(char symbol, int position, SequenceI seq, + public Color findColour(char symbol, int column, SequenceI seq, String consensusResidue, float pid) { - return findColour(symbol, position); + return findColour(symbol, column); } /** @@ -82,6 +91,10 @@ public abstract class HmmerColourScheme extends ResidueColourScheme { return Color.white; } + if (Comparison.isGap(hmmSeq.getCharAt(column))) + { + return INSERTION_COLOUR; + } if (Character.isLowerCase(symbol)) { symbol = Character.toUpperCase(symbol); @@ -100,19 +113,22 @@ public abstract class HmmerColourScheme extends ResidueColourScheme { freq = frequencies.get(symbol); } - if (prob == 0D) - { - return INSERTION_COLOUR; - } - double value = Math.log(prob / freq.floatValue()); - Color colour = null; - if (value < 0) + + /* + * Orange if match emission probability is less than background probability + */ + double infoRatio = prob / freq.floatValue(); + Color colour = Color.ORANGE; + if (infoRatio >= 1) { - return Color.ORANGE; + /* + * log-scale graduated shade of blue if prob is greater than background + */ + float infoLog = (float) Math.log(infoRatio); + colour = ColorUtils.getGraduatedColour(infoLog, 0, Color.WHITE, + getMaxInformationScore(), Color.blue); } - colour = ColorUtils.getGraduatedColour((float) value, 0, Color.WHITE, - getMaxInformationScore(), Color.blue); return colour; } @@ -124,39 +140,24 @@ public abstract class HmmerColourScheme extends ResidueColourScheme */ abstract float getMaxInformationScore(); - @Override - public void alignmentChanged(AnnotatedCollectionI collection, - Map hiddenReps) - { - /* - * ? no need to do anything if alignment is adjusted - * since findColour() handles everything - */ - } - /** * Answers a new colour scheme instance based on the HMM of the first sequence * in ac that has an HMM */ @Override - public ColourSchemeI getInstance(AnnotatedCollectionI ac, - Map hiddenRepSequences) + public ColourSchemeI getInstance(AlignViewportI viewport, + AnnotatedCollectionI ac) { - SequenceI hmmSeq = ac.getHmmConsensus(); - HiddenMarkovModel model = hmmSeq == null ? null : hmmSeq.getHMM(); - - return newInstance(ac, model); + return newInstance(ac); } /** * Answers a new instance of the colour scheme for the given HMM * * @param ac - * @param model * @return */ - protected abstract HmmerColourScheme newInstance(AnnotatedCollectionI ac, - HiddenMarkovModel model); + protected abstract HmmerColourScheme newInstance(AnnotatedCollectionI ac); @Override public boolean isSimple() @@ -171,7 +172,7 @@ public abstract class HmmerColourScheme extends ResidueColourScheme @Override public boolean isApplicableTo(AnnotatedCollectionI ac) { - return ac.getHmmConsensus() != null; + return !ac.getHmmSequences().isEmpty(); } protected Map getFrequencies() @@ -189,4 +190,8 @@ public abstract class HmmerColourScheme extends ResidueColourScheme return hmm; } + protected SequenceI getHmmSequence() + { + return hmmSeq; + } }