JAL-2629 hmmsearch now works for different databases
[jalview.git] / src / jalview / hmmer / HMMSearchThread.java
index c723d2f..b67ef6f 100644 (file)
@@ -19,6 +19,7 @@ import jalview.ws.params.simple.BooleanOption;
 
 import java.io.File;
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -158,7 +159,6 @@ public class HMMSearchThread implements Runnable
     inputAlignmentTemp.deleteOnExit();
     inputTableTemp = File.createTempFile("buffer", ".sto");
     inputTableTemp.deleteOnExit();
-    databaseFile = new File("D:/Thomas/uniref50.fasta");
   }
 
   /**
@@ -170,6 +170,8 @@ public class HMMSearchThread implements Runnable
    */
   private boolean runCommand() throws IOException, InterruptedException
   {
+    Boolean dbFound = false;
+    String dbPath = "";
     File file = new File(cmds.HMMERFOLDER + "/hmmsearch");
     if (!file.canExecute())
     {
@@ -222,13 +224,36 @@ public class HMMSearchThread implements Runnable
           break;
         case "Trim Non-Matching Termini":
           trim = true;
-
+          break;
+        case "Database":
+          dbFound = true;
+          dbPath = arg.getValue();
+          if (!MessageManager.getString("label.this_alignment")
+                  .equals(dbPath))
+          {
+            databaseFile = new File(dbPath);
+          }
         }
-        
 
       }
     }
 
+    if (dbFound == false || MessageManager.getString("label.this_alignment")
+            .equals(dbPath))
+    {
+      AlignmentI alignment = af.getViewport().getAlignment();
+      AlignmentI copy = new Alignment(alignment);
+      copy.getHMMConsensusSequences(true);
+      StockholmFile stoFile = new StockholmFile(copy);
+      stoFile.setSeqs(copy.getSequencesArray());
+      String alignmentString = stoFile.print();
+      databaseFile = File.createTempFile("database", ".sto");
+      databaseFile.deleteOnExit();
+      PrintWriter writer = new PrintWriter(databaseFile);
+      writer.print(alignmentString);
+      writer.close();
+    }
+
     command += hmmTemp.getAbsolutePath() + cmds.SPACE
             + databaseFile.getAbsolutePath();
     return cmds.runCommand(command);
@@ -279,7 +304,6 @@ public class HMMSearchThread implements Runnable
     AlignmentI alignment = new Alignment(hmmAndSeqs);
     AlignFrame frame = new AlignFrame(alignment, 1, 1);
     frame.setSelectedHMMSequence(hmmSeq);
-    frame.getViewport().initInformation();
     List<ArgumentI> alignArgs = new ArrayList<>();
     if (trim)
     {