import jalview.io.StockholmFile;
import java.io.BufferedReader;
+import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
+import java.util.Hashtable;
import java.util.List;
+/**
+ * Contains multiple commands and methods frequently used to run hmmbuild,
+ * hmmalign and hmmsearch
+ *
+ * @author TZVanaalten
+ *
+ */
public class HMMERCommands
{
// Path of hmmer binaries directory
- static final String HMMERFOLDER = "H:/Documents/";
+ String HMMERFOLDER = "/Documents/";
- static final String HMMALIGN = HMMERFOLDER + "hmmalign ";
+ public String JALVIEWDIRECTORY = System.getProperty("user.dir")
+ + "/";
- static final String HMMBUILD = HMMERFOLDER + "hmmbuild ";
+ public final String HMMALIGN = "/hmmalign ";
- static final String HMMSEARCH = HMMERFOLDER + "hmmsearch ";
+ public final String HMMBUILD = "/hmmbuild ";
- static final String JALVIEWDIRECTORY = "C:/Users/TZVanaalten/git/jalview/";
+ public final String HMMSEARCH = "/hmmsearch ";
- static final String HMMBUFFER = "src/jalview/hmmer/hmm_buffer.hmm ";
+ public String OUTPUTALIGNMENT;
- static final String ALIGNMENTBUFFER = "src/jalview/hmmer/alignment_buffer.sto ";
+ public final String NAME = "-n ";
- static final String ALIGNMENTINPUT = "src/jalview/hmmer/alignment_input.sto ";
+ public final String SPACE = " ";
- static final String OUTPUTALIGNMENT = "-o " + JALVIEWDIRECTORY
- + ALIGNMENTINPUT;
+ public final String ALLCOL = "--allcol ";
- static final String NAME = "-n ";
+ public final String TRIM = "--trim ";
- static final String SPACE = " ";
+ public final String FORCEAMINO = "--amino ";
- static final String ALLCOL = "--allcol ";
+ public final String FORCEDNA = "--dna ";
- static final String TRIM = "--trim ";
+ public final String FORCERNA = "--rna ";
+ Hashtable hash = new Hashtable();
+
+ List<SequenceI> hmmSeqs;
/**
- * Runs a command in the terminal.
+ * Uniquifies the sequences when exporting and stores their details in a
+ * hashtable.
+ *
+ * @param seqs
+ */
+ public void uniquifySequences(SequenceI[] seqs)
+ {
+ hash = jalview.analysis.SeqsetUtils.uniquify(seqs, true);
+ }
+
+ /**
+ * Recover the sequence data lost by uniquifying.
+ *
+ * @param seqs
+ */
+ public void recoverSequenceNames(SequenceI[] seqs)
+ {
+ jalview.analysis.SeqsetUtils.deuniquify(hash, seqs);
+ }
+
+ /**
+ * Runs a command in the command line.
*
* @param command
* @throws IOException
* @throws InterruptedException
*/
- public static void runCommand(String command)
+ public boolean runCommand(String command)
throws IOException, InterruptedException
{
+ try
+ {
final Process p = Runtime.getRuntime().exec(command);
new Thread(new Runnable()
}).start();
p.waitFor();
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
}
/**
- * Exports an alignment to the buffer location in Jalview.
+ * Exports an alignment and/or HMM to the specified file.
*
* @param alignment
* @throws IOException
*/
- public static void exportData(AlignmentI alignment,
- boolean exportAlignment, boolean exportHMM, HiddenMarkovModel hmm)
+ public void exportData(SequenceI[] seqs,
+ File stoLocation, HiddenMarkovModel hmm, File hmmLocation)
throws IOException
{
- if (exportAlignment)
+ if (seqs != null)
{
- List<SequenceI> list = alignment.getSequences();
- SequenceI[] array = new SequenceI[list.size()];
- list.toArray(array);
- StockholmFile file = new StockholmFile(new Alignment(array));
- file.setSeqs(array);
- String output = file.print();
- PrintWriter writer = new PrintWriter(ALIGNMENTBUFFER);
+ StockholmFile file = new StockholmFile(new Alignment(seqs));
+ String output = file.print(seqs, false);
+ PrintWriter writer = new PrintWriter(stoLocation);
writer.println(output);
writer.close();
}
- if (exportHMM)
+ if (hmm != null)
{
HMMFile file = new HMMFile(hmm);
- file.exportFile(HMMBUFFER);
+ PrintWriter writer = new PrintWriter(hmmLocation);
+ writer.print(file.print());
+ writer.close();
}
}
- public static void addHMMConsensusSequence(AlignFrame af, SequenceI seq,
- Integer position)
+ /**
+ * Adds any HMM sequences removed before submitting the alignment as a job
+ * back into the alignment.
+ *
+ * @param af
+ */
+ public void addHMMConsensusSequences(AlignFrame af)
{
- seq.getHMM().initHMMSequence(af, position);
AlignmentI al = af.getViewport().getAlignment();
+ if (hmmSeqs == null || hmmSeqs.size() < 1)
+ {
+ return;
+ }
+ for (SequenceI seq : hmmSeqs)
+ {
+ Integer position = seq.getPreviousPosition();
+ al.getSequences().add(position, seq);
+ }
af.getViewport().setAlignment(al);
af.alignPanel.adjustAnnotationHeight();
af.getViewport().updateSequenceIdColours();
af.buildSortByAnnotationScoresMenu();
+ af.getViewport().initInformation();
}
+ /**
+ * Returns the list of HMM sequences removed
+ *
+ * @return
+ */
+ public List<SequenceI> getHmmSeqs()
+ {
+ return hmmSeqs;
+ }
+ /**
+ * Sets the list of removed HMM sequences
+ *
+ * @param hmmSeqs
+ */
+ public void setHmmSeqs(List<SequenceI> hmmSeqs)
+ {
+ this.hmmSeqs = hmmSeqs;
+ }
}