X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fhmmer%2FHMMBuildThread.java;h=63236ea0c157ef2cee1b9434b9f9bc86bc68d300;hb=401d9943c5fddb0327391f6b7682c19249007691;hp=c66e53df1490ac24b0037689ffa2aade3af8da72;hpb=02784d0cfac24efb32ac1d336dbeb0d3f9837118;p=jalview.git diff --git a/src/jalview/hmmer/HMMBuildThread.java b/src/jalview/hmmer/HMMBuildThread.java index c66e53d..63236ea 100644 --- a/src/jalview/hmmer/HMMBuildThread.java +++ b/src/jalview/hmmer/HMMBuildThread.java @@ -1,31 +1,49 @@ package jalview.hmmer; +import jalview.bin.Cache; import jalview.datamodel.AlignmentI; -import jalview.datamodel.HiddenMarkovModel; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; +import jalview.gui.JvOptionPane; +import jalview.gui.Preferences; import jalview.io.DataSourceType; import jalview.io.FileFormat; import jalview.util.MessageManager; +import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.util.Map; +import java.util.List; + +import javax.swing.JOptionPane; public class HMMBuildThread implements Runnable { - + HMMERCommands cmds = new HMMERCommands(); AlignFrame af; AlignmentI alignment; - long barID; + SequenceGroup group; + + boolean canRun = true; - Map hmmSeqs; + File hmmTemp = null; + + File stoTemp = null; + + long barID; public HMMBuildThread(AlignFrame af) { this.af = af; + if (af.getViewport().getSelectionGroup() != null) + { + group = af.getViewport().getSelectionGroup(); + } alignment = af.getViewport().getAlignment(); + } @Override @@ -34,14 +52,55 @@ public class HMMBuildThread implements Runnable barID = System.currentTimeMillis(); af.setProgressBar(MessageManager.getString("status.running_hmmbuild"), barID); + cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH); + if (alignment == null && group == null) + { + JOptionPane.showMessageDialog(af, + MessageManager.getString("label.no_sequence_data")); + return; + } + try + { + hmmTemp = File.createTempFile("hmm", ".hmm"); + hmmTemp.deleteOnExit(); + stoTemp = File.createTempFile("output", ".sto"); + stoTemp.deleteOnExit(); + } catch (IOException e1) + { + e1.printStackTrace(); + } try { try { - hmmSeqs = alignment.getHMMConsensusSequences(true); - HMMERCommands.exportData(alignment, true, false, - new HiddenMarkovModel()); + SequenceI[] array; + List seqs = alignment + .getHMMConsensusSequences(true); + cmds.setHmmSeqs(seqs); + if (group != null) + { + array = group.getSelectionAsNewSequences(alignment); + } + else + { + if (!alignment.isAligned()) + { + alignment.padGaps(); + } + array = alignment.getSequencesArray(); + } + SequenceI[] newArr = new SequenceI[array.length]; + int index = 0; + for (SequenceI seq : array) + { + newArr[index] = new Sequence(seq); + index++; + } + cmds.uniquifySequences(newArr); + cmds.exportData(newArr, stoTemp, null, null); + jalview.analysis.SeqsetUtils.deuniquify(cmds.hash, array); + } catch (FileNotFoundException e) { // TODO Auto-generated catch block @@ -50,7 +109,13 @@ public class HMMBuildThread implements Runnable } try { - runCommand(); + boolean ran = runCommand(); + if (!ran) + { + JvOptionPane.showInternalMessageDialog(af, + MessageManager.getString("warn.hmmbuild_failed")); + return; + } } catch (IOException | InterruptedException e) { // TODO Auto-generated catch block @@ -58,6 +123,7 @@ public class HMMBuildThread implements Runnable } try { + importData(); } catch (IOException | InterruptedException e) { @@ -66,7 +132,7 @@ public class HMMBuildThread implements Runnable } } catch (Exception e) { - + e.printStackTrace(); } finally { af.setProgressBar(MessageManager.getString("status.running_hmmbuild"), @@ -77,28 +143,42 @@ public class HMMBuildThread implements Runnable - private void runCommand() throws IOException, InterruptedException + private boolean runCommand() throws IOException, InterruptedException { - final String command = HMMERCommands.HMMBUILD + HMMERCommands.NAME - + af.getName() + HMMERCommands.SPACE - + HMMERCommands.JALVIEWDIRECTORY + HMMERCommands.HMMBUFFER - + HMMERCommands.JALVIEWDIRECTORY + HMMERCommands.ALIGNMENTBUFFER; - HMMERCommands.runCommand(command); + File file = new File(cmds.HMMERFOLDER + "/binaries/hmmbuild.exe"); + if (!file.canExecute()) + { + return false; + } + String command = cmds.HMMERFOLDER + cmds.HMMBUILD + cmds.NAME + + af.getName() + cmds.SPACE; + if (!alignment.isNucleotide()) + { + command += cmds.FORCEAMINO; // TODO check for rna + } + else + { + command += cmds.FORCEDNA; + } + + command += hmmTemp.getAbsolutePath() + + cmds.SPACE + stoTemp.getAbsolutePath() + cmds.SPACE; + return cmds.runCommand(command); } private void importData() throws IOException, InterruptedException { - af.loadJalviewDataFile(HMMERCommands.HMMBUFFER, DataSourceType.FILE, + cmds.addHMMConsensusSequences(af); + af.loadJalviewDataFile(hmmTemp.getAbsolutePath(), DataSourceType.FILE, FileFormat.HMMER3, null); - for (Map.Entry entry : hmmSeqs.entrySet()) - { - SequenceI seq = entry.getValue(); - Integer pos = entry.getKey(); - HMMERCommands.addHMMConsensusSequence(af, seq, pos); - } - af.alignPanel.alignmentChanged(); + hmmTemp.delete(); + stoTemp.delete(); } + public boolean canRun() + { + return canRun; + }