JAL-2629 fix hmmsearch/jackhmmer assigning incorrect evalues and scores
authortva <tva@10.205.251.175>
Wed, 10 Jul 2019 15:49:50 +0000 (16:49 +0100)
committertva <tva@10.205.251.175>
Wed, 10 Jul 2019 15:49:50 +0000 (16:49 +0100)
src/jalview/hmmer/HMMSearch.java
src/jalview/hmmer/JackHMMER.java

index 248af16..a06f186 100644 (file)
@@ -491,10 +491,11 @@ public class HMMSearch extends HmmerCommand
     while (!"  ------ inclusion threshold ------".equals(line)
             && !"".equals(line))
     {
-      SequenceI seq = seqs[index];
       Scanner scanner = new Scanner(line);
       String evalue = scanner.next();
       String score = scanner.next();
+      checkSequenceOrder(index, scanner);
+      SequenceI seq = seqs[index];
       addScoreAnnotations(evalue, score, seq);
       scanner.close();
       line = br.readLine();
@@ -536,4 +537,29 @@ public class HMMSearch extends HmmerCommand
     }
   }
 
+  private void checkSequenceOrder(int index, Scanner scanner)
+  {
+    String seqName = null;
+
+    for (int i = 0; i < 8; i++)
+    {
+      seqName = scanner.next();
+    }
+
+    if (!seqs[index].getName().equals(seqName))
+    {
+      SequenceI temp = seqs[index];
+
+      for (int j = 0; j < seqs.length; j++)
+      {
+        if (seqs[j].getName().equals(seqName))
+        {
+          seqs[index] = seqs[j];
+          seqs[j] = temp;
+          break;
+        }
+      }
+    }
+  }
+    
 }
index 7dbc08b..e6bb5f4 100644 (file)
@@ -328,11 +328,12 @@ public class JackHMMER extends HmmerCommand
     while (!"  ------ inclusion threshold ------".equals(line)
             && !"".equals(line))
     {
-      SequenceI seq = seqs[index];
 
       Scanner scanner = new Scanner(line);
       String evalue = scanner.next();
       evalue = scanner.next();
+      checkSequenceOrder(index, scanner);
+      SequenceI seq = seqs[index];
       String score = scanner.next();
       addScoreAnnotations(evalue, score, seq);
       scanner.close();
@@ -343,6 +344,31 @@ public class JackHMMER extends HmmerCommand
     br.close();
   }
 
+  private void checkSequenceOrder(int index, Scanner scanner)
+  {
+    String seqName = null;
+
+    for (int i = 0; i < 8; i++)
+    {
+      seqName = scanner.next();
+    }
+
+    if (!seqs[index + 1].getName().equals(seqName))
+    {
+      SequenceI temp = seqs[index + 1];
+
+      for (int j = 0; j < seqs.length; j++)
+      {
+        if (seqs[j].getName().equals(seqName))
+        {
+          seqs[index + 1] = seqs[j];
+          seqs[j] = temp;
+          break;
+        }
+      }
+    }
+  }
+
   protected void addScoreAnnotations(String eValue, String bitScore,
           SequenceI seq)
   {