JAL-3291 issue fixed, passing tests added
[jalview.git] / src / jalview / datamodel / HiddenMarkovModel.java
index 3c2c437..e917474 100644 (file)
@@ -1,6 +1,5 @@
 package jalview.datamodel;
 
-import jalview.bin.Cache;
 import jalview.io.HMMFile;
 import jalview.schemes.ResidueProperties;
 import jalview.util.Comparison;
@@ -100,11 +99,14 @@ public class HiddenMarkovModel
     this.hmmSeq = sq;
     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());
     }
   }
 
@@ -518,12 +520,18 @@ 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 - start + 1];
+    char[] sequence = new char[endResNo + 1];
 
     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);
@@ -534,7 +542,7 @@ public class HiddenMarkovModel
        */
       while (resNo > lastResNo + 1)
       {
-        sequence[seqOffset++] = '-';
+        sequence[seqOffset++] = GAP_DASH;
         lastResNo++;
         gapCount++;
       }