package jalview.datamodel;
-import jalview.bin.Cache;
import jalview.io.HMMFile;
import jalview.schemes.ResidueProperties;
import jalview.util.Comparison;
*/
private Mapping mapToHmmConsensus;
+ // stores background frequencies of alignment from which this model came
+ private Map<Character, Float> backgroundFrequencies;
+
/**
* Constructor
*/
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
this.mapToHmmConsensus = hmm.mapToHmmConsensus;
}
else
{
- Cache.log.error("Error: HMM copied with change of mapped sequence");
+ // different dataset sequence e.g. after loading HMM from project
+ this.mapToHmmConsensus = new Mapping(sq.getDatasetSequence(),
+ hmm.mapToHmmConsensus.getMap());
}
}
int start = hasMap ? getNode(1).getResidueNumber() : 1;
int endResNo = hasMap ? getNode(nodes.size() - 1).getResidueNumber()
: (start + getLength() - 1);
- char[] sequence = new char[endResNo - start + 1];
+ char[] sequence = new char[endResNo];
int lastResNo = start - 1;
- int seqOffset = 0;
+ 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);
*/
while (resNo > lastResNo + 1)
{
- sequence[seqOffset++] = '-';
+ sequence[seqOffset++] = GAP_DASH;
lastResNo++;
gapCount++;
}
{
this.hmmSeq = hmmSeq;
}
+
+ public void setBackgroundFrequencies(Map<Character, Float> 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<Character, Float> getBackgroundFrequencies()
+ {
+ return backgroundFrequencies;
+ }
}