JAL-2629 fix hmmsearch/jackhmmer assigning incorrect evalues and scores
[jalview.git] / src / jalview / hmmer / HMMSearch.java
index d2b469f..a06f186 100644 (file)
@@ -196,11 +196,13 @@ public class HMMSearch extends HmmerCommand
         else if (MessageManager.getString(REPORTING_CUTOFF_KEY)
                 .equals(name))
         {
-          if (CUTOFF_EVALUE.equals(arg.getValue()))
+          if (MessageManager.getString(CUTOFF_EVALUE)
+                  .equals(arg.getValue()))
           {
             useEvalueCutoff = true;
           }
-          else if (CUTOFF_SCORE.equals(arg.getValue()))
+          else if (MessageManager.getString(CUTOFF_SCORE)
+                  .equals(arg.getValue()))
           {
             useScoreCutoff = true;
           }
@@ -229,16 +231,11 @@ public class HMMSearch extends HmmerCommand
         }
         else if (MessageManager.getString(DATABASE_KEY).equals(name))
         {
-          dbFound = true;
-          dbPath = arg.getValue();
-          if (!MessageManager.getString(THIS_ALIGNMENT_KEY)
-                  .equals(dbPath))
+          databaseFile = new File(arg.getValue());
+          if (!arg.getValue().isEmpty())
           {
-            int pos = dbPath.lastIndexOf(File.separator);
-            databaseName = dbPath.substring(pos + 1);
-            databaseFile = new File(dbPath);
+            searchAlignment = false;
           }
-          searchAlignment = false;
         }
         else if (MessageManager.getString(RETURN_N_NEW_SEQ).equals(name))
         {
@@ -276,7 +273,10 @@ public class HMMSearch extends HmmerCommand
       AlignmentI copy = new Alignment(al);
       deleteHmmSequences(copy);
 
-      sequencesHash = stashSequences(copy.getSequencesArray());
+      if (searchAlignment)
+      {
+        sequencesHash = stashSequences(copy.getSequencesArray());
+      }
 
       exportStockholm(copy.getSequencesArray(), databaseFile, null);
 
@@ -387,9 +387,12 @@ public class HMMSearch extends HmmerCommand
         Desktop.addInternalFrame(alignFrame, ttl, AlignFrame.DEFAULT_WIDTH,
                 AlignFrame.DEFAULT_HEIGHT);
 
-        int nNew = checkForNewSequences();
-        JvOptionPane.showMessageDialog(af.alignPanel, nNew + " "
-                + MessageManager.getString("label.new_returned"));
+        if (returnNoOfNewSeqs)
+        {
+          int nNew = checkForNewSequences();
+          JvOptionPane.showMessageDialog(af.alignPanel, nNew + " "
+                  + MessageManager.getString("label.new_returned"));
+        }
 
       }
 
@@ -417,6 +420,7 @@ public class HMMSearch extends HmmerCommand
         if (resultSeq.getName().equals(aliSeq.getName()))
         {
           nNew--;
+          break;
         }
       }
     }
@@ -454,9 +458,12 @@ public class HMMSearch extends HmmerCommand
     HmmerCommand hmmalign = new HMMAlign(frame, alignArgs);
     hmmalign.run();
 
-    int nNew = checkForNewSequences();
-    JvOptionPane.showMessageDialog(frame.alignPanel,
-            nNew + " " + MessageManager.getString("label.new_returned"));
+    if (returnNoOfNewSeqs)
+    {
+      int nNew = checkForNewSequences();
+      JvOptionPane.showMessageDialog(frame.alignPanel,
+              nNew + " " + MessageManager.getString("label.new_returned"));
+    }
   }
 
   /**
@@ -484,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();
@@ -529,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;
+        }
+      }
+    }
+  }
+    
 }