package jalview.schemes; import jalview.datamodel.AnnotatedCollectionI; import jalview.datamodel.HiddenMarkovModel; import jalview.datamodel.ResidueCount; import java.util.HashMap; import java.util.Map; /** * An HMM colour scheme that uses local (alignment or sub-group) background * frequencies for residues * * @author tzvanaalten */ public class HmmerLocalBackground extends HmmerColourScheme { float logTotalCount; /** * Constructor given a Hidden Markov Model * * @param sg * * @param markov */ public HmmerLocalBackground(AnnotatedCollectionI sg, HiddenMarkovModel markov) { super(markov); countFrequencies(sg); } /** * Default constructor (required by ColourSchemes.loadColourSchemes) */ public HmmerLocalBackground() { } @Override public String getSchemeName() { return JalviewColourScheme.HMMERA.toString(); } /** * Counts and stores the relative frequency of every residue in the alignment * * @param sg */ public void countFrequencies(AnnotatedCollectionI sg) { Map freqs = new HashMap<>(); ResidueCount counts = new ResidueCount(sg.getSequences()); int total = counts.getTotalResidueCount(); // excludes gaps for (char symbol : counts.getSymbolCounts().symbols) { double freq = counts.getCount(symbol) / (double) total; freqs.put(symbol, (float) freq); } setFrequencies(freqs); logTotalCount = (float) Math.log(total); } @Override float getMaxInformationScore() { return logTotalCount; } @Override protected HmmerColourScheme newInstance(AnnotatedCollectionI ac, HiddenMarkovModel model) { return new HmmerLocalBackground(ac, model); } }