JAL-2629 fix hmmsearch/jackhmmer being unable to search through DB file
[jalview.git] / src / jalview / hmmer / JackHMMER.java
index 58b1b75..4435b14 100644 (file)
@@ -20,6 +20,7 @@ import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Hashtable;
 import java.util.List;
 import java.util.Scanner;
 
@@ -39,6 +40,10 @@ public class JackHMMER extends HmmerCommand
 
   private String databaseName;
 
+  boolean searchAlignment = true;
+
+  Hashtable sequencesHash;
+
   /**
    * Constructor for the JackhmmerThread
    * 
@@ -79,7 +84,7 @@ public class JackHMMER extends HmmerCommand
               ".txt");
 
       exportStockholm(new SequenceI[] { seq }, seqFile.getAbsoluteFile(),
-              null, true);
+              null);
 
       boolean ran = runCommand(searchOutputFile, hitsAlignmentFile,
               seqFile);
@@ -160,7 +165,6 @@ public class JackHMMER extends HmmerCommand
     String seqScoreCutoff = null;
     String domScoreCutoff = null;
     databaseName = "Alignment";
-    boolean searchAlignment = false;
 
     if (params != null)
     {
@@ -168,26 +172,16 @@ public class JackHMMER extends HmmerCommand
       {
         String name = arg.getName();
 
-        if (MessageManager.getString("action.search").equals(name))
-        {
-          searchAlignment = arg.getValue().equals(
-                  MessageManager.getString(JackHMMER.THIS_ALIGNMENT_KEY));
-        }
-        else if (MessageManager.getString(DATABASE_KEY).equals(name))
-        {
-          dbPath = arg.getValue();
-          int pos = dbPath.lastIndexOf(File.separator);
-          databaseName = dbPath.substring(pos + 1);
-          databaseFile = new File(dbPath);
-        }
-        else if (MessageManager.getString(REPORTING_CUTOFF_KEY)
+        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;
           }
@@ -218,6 +212,7 @@ public class JackHMMER extends HmmerCommand
             databaseName = dbPath.substring(pos + 1);
             databaseFile = new File(dbPath);
           }
+          searchAlignment = false;
         }
       }
     }
@@ -251,10 +246,9 @@ public class JackHMMER extends HmmerCommand
 
       deleteHmmSequences(copy);
 
-      // jackhmmer fails if file contains duplicate sequence names
-      renameDuplicates(copy.getSequencesArray());
+      sequencesHash = stashSequences(copy.getSequencesArray());
 
-      exportStockholm(copy.getSequencesArray(), databaseFile, null, true);
+      exportStockholm(copy.getSequencesArray(), databaseFile, null);
     }
 
     args.add(getFilePath(seqFile, true));
@@ -282,6 +276,11 @@ public class JackHMMER extends HmmerCommand
               inputAlignmentTemp.getAbsolutePath(), DataSourceType.FILE));
       seqs = file.getSeqsAsArray();
 
+      if (searchAlignment)
+      {
+        recoverSequences(sequencesHash, seqs);
+      }
+
       readTable(searchOutputFile);
 
       int seqCount = Math.min(seqs.length, seqsToReturn);
@@ -371,6 +370,7 @@ public class JackHMMER extends HmmerCommand
 
       annot.setSequenceRef(seq);
       seq.addAlignmentAnnotation(annot);
+
     } catch (NumberFormatException e)
     {
       System.err.println("Error parsing " + label + " from " + eValue