X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FHiddenMarkovModel.java;h=6b8b09562dcdc9011c9d910201630d068ed37c78;hb=bea1d9b563d2fea018de3dbde9112dd59149126e;hp=e9174744441847284b94c05f75fe28c4dee5e140;hpb=f452bcb5ddecb4378e952447031ddb076bdf8268;p=jalview.git diff --git a/src/jalview/datamodel/HiddenMarkovModel.java b/src/jalview/datamodel/HiddenMarkovModel.java index e917474..6b8b095 100644 --- a/src/jalview/datamodel/HiddenMarkovModel.java +++ b/src/jalview/datamodel/HiddenMarkovModel.java @@ -74,6 +74,9 @@ public class HiddenMarkovModel */ private Mapping mapToHmmConsensus; + // stores background frequencies of alignment from which this model came + private Map backgroundFrequencies; + /** * Constructor */ @@ -97,6 +100,7 @@ public class HiddenMarkovModel this.symbolIndexLookup = hmm.symbolIndexLookup; this.fileHeader = new String(hmm.fileHeader); this.hmmSeq = sq; + this.backgroundFrequencies = hmm.getBackgroundFrequencies(); if (sq.getDatasetSequence() == hmm.mapToHmmConsensus.getTo()) { // same dataset sequence e.g. after realigning search results @@ -520,18 +524,19 @@ public class HiddenMarkovModel int start = hasMap ? getNode(1).getResidueNumber() : 1; int endResNo = hasMap ? getNode(nodes.size() - 1).getResidueNumber() : (start + getLength() - 1); - char[] sequence = new char[endResNo + 1]; + char[] sequence = new char[endResNo]; int lastResNo = start - 1; int seqOffset = -1; int gapCount = 0; + for (int seqN = 0; seqN < start; seqN++) { sequence[seqN] = GAP_DASH; seqOffset++; } - + for (int nodeNo = 1; nodeNo < nodes.size(); nodeNo++) { HMMNode node = nodes.get(nodeNo); @@ -639,5 +644,29 @@ public class HiddenMarkovModel { this.hmmSeq = hmmSeq; } + + public void setBackgroundFrequencies(Map bkgdFreqs) + { + backgroundFrequencies = bkgdFreqs; + } + + public void setBackgroundFrequencies(ResidueCount bkgdFreqs) + { + backgroundFrequencies = new HashMap<>(); + + int total = bkgdFreqs.getTotalResidueCount(); + + for (char c : bkgdFreqs.getSymbolCounts().symbols) + { + backgroundFrequencies.put(c, bkgdFreqs.getCount(c) * 1f / total); + } + + } + + public Map getBackgroundFrequencies() + { + return backgroundFrequencies; + } + }