JAL-2629 uniquify all hmmer command sequence outputs
[jalview.git] / src / jalview / hmmer / JackHMMER.java
index 1731439..e532ab7 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,8 @@ public class JackHMMER extends HmmerCommand
 
   private String databaseName;
 
+  Hashtable sequencesHash;
+
   /**
    * Constructor for the JackhmmerThread
    * 
@@ -72,13 +75,14 @@ public class JackHMMER extends HmmerCommand
 
     try
     {
-      File seqFile = FileUtils.createTempFile("seq", ".fa");
+      File seqFile = FileUtils.createTempFile("seq", ".sto");
       File hitsAlignmentFile = FileUtils.createTempFile("hitAlignment",
               ".sto");
       File searchOutputFile = FileUtils.createTempFile("searchOutput",
               ".txt");
 
-      exportSequence(seq, seqFile.getAbsoluteFile());
+      exportStockholm(new SequenceI[] { seq }, seqFile.getAbsoluteFile(),
+              null);
 
       boolean ran = runCommand(searchOutputFile, hitsAlignmentFile,
               seqFile);
@@ -244,11 +248,15 @@ public class JackHMMER extends HmmerCommand
        * no external database specified for search, so
        * export current alignment as 'database' to search
        */
-      databaseFile = FileUtils.createTempFile("database", ".fa");
+      databaseFile = FileUtils.createTempFile("database", ".sto");
       AlignmentI al = af.getViewport().getAlignment();
       AlignmentI copy = new Alignment(al);
+
       deleteHmmSequences(copy);
-      exportFasta(copy, databaseFile);
+
+      sequencesHash = stashSequences(copy.getSequencesArray());
+
+      exportStockholm(copy.getSequencesArray(), databaseFile, null);
     }
 
     args.add(getFilePath(seqFile, true));
@@ -276,6 +284,8 @@ public class JackHMMER extends HmmerCommand
               inputAlignmentTemp.getAbsolutePath(), DataSourceType.FILE));
       seqs = file.getSeqsAsArray();
 
+      recoverSequences(sequencesHash, seqs);
+
       readTable(searchOutputFile);
 
       int seqCount = Math.min(seqs.length, seqsToReturn);
@@ -361,7 +371,7 @@ public class JackHMMER extends HmmerCommand
       annot.setEValue(dEValue);
 
       double dBitScore = Double.parseDouble(bitScore);
-      annot.setEValue(dBitScore);
+      annot.setBitScore(dBitScore);
 
       annot.setSequenceRef(seq);
       seq.addAlignmentAnnotation(annot);