X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fhmmer%2FHMMBuildThread.java;h=4e3dc2e4b775341604fb4fefcb0a0bee2eb212f5;hb=bd6ce8f5f9fc8e5bc8a6188d15987ce0ffd2c1ee;hp=faba1839c9c7dc451413b6c27c414b4c32832244;hpb=6076783c7a50cc6d318b2478b10800aedb9288c4;p=jalview.git diff --git a/src/jalview/hmmer/HMMBuildThread.java b/src/jalview/hmmer/HMMBuildThread.java index faba183..4e3dc2e 100644 --- a/src/jalview/hmmer/HMMBuildThread.java +++ b/src/jalview/hmmer/HMMBuildThread.java @@ -1,16 +1,13 @@ package jalview.hmmer; - -import jalview.bin.Cache; +import jalview.analysis.SeqsetUtils; 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.AlignViewport; import jalview.gui.JvOptionPane; -import jalview.gui.Preferences; import jalview.io.DataSourceType; import jalview.io.FileParse; import jalview.io.HMMFile; @@ -25,17 +22,17 @@ import java.util.List; import javax.swing.JOptionPane; -public class HMMBuildThread implements Runnable +public class HMMBuildThread extends HmmerCommand implements Runnable { - HMMERCommands cmds = new HMMERCommands(); - AlignFrame af; - AlignViewport viewport; + boolean multiJob = false; + AlignmentI alignment; + SequenceGroup group; - List params; + List params; boolean forGroup = false; @@ -44,7 +41,7 @@ public class HMMBuildThread implements Runnable File stoTemp = null; long barID; - + /** * This is used for validation purposes. Do not use! * @@ -72,10 +69,9 @@ public class HMMBuildThread implements Runnable barID = System.currentTimeMillis(); if (af != null) { - af.setProgressBar(MessageManager.getString("status.running_hmmbuild"), - barID); + af.setProgressBar(MessageManager.getString("status.running_hmmbuild"), + barID); } - cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH); List groups = new ArrayList<>(); if (params != null) @@ -95,12 +91,20 @@ public class HMMBuildThread implements Runnable { alignment = viewport.getAlignment(); groups.addAll(viewport.getAlignment().getGroups()); + if (groups.size() > 0) + { + multiJob = true; + } break; } else if ("All groups".equals(value)) { alignment = null; groups = viewport.getAlignment().getGroups(); + if (groups.size() > 0) + { + multiJob = true; + } break; } else if ("Selected group".equals(value)) @@ -128,6 +132,10 @@ public class HMMBuildThread implements Runnable } } } + else if (viewport != null) + { + alignment = viewport.getAlignment(); + } if (alignment != null) { @@ -150,31 +158,29 @@ public class HMMBuildThread implements Runnable } } - if (af != null) { - af.setProgressBar(MessageManager.getString("status.running_hmmbuild"), - barID); + af.setProgressBar("", barID); } } private void runHMMBuild() { if (alignment == null && group == null) - { - JOptionPane.showMessageDialog(af, + { + JOptionPane.showMessageDialog(af, MessageManager.getString("warn.no_sequence_data")); - } - try - { - hmmTemp = File.createTempFile("hmm", ".hmm"); - hmmTemp.deleteOnExit(); - stoTemp = File.createTempFile("output", ".sto"); - stoTemp.deleteOnExit(); - } catch (IOException e1) - { - e1.printStackTrace(); - } + } + try + { + hmmTemp = File.createTempFile("hmm", ".hmm"); + hmmTemp.deleteOnExit(); + stoTemp = File.createTempFile("output", ".sto"); + stoTemp.deleteOnExit(); + } catch (IOException e1) + { + e1.printStackTrace(); + } try { @@ -201,28 +207,35 @@ public class HMMBuildThread implements Runnable array = alignment.getSequencesArray(); } - cmds.setHmmSeqs(seqs); - if (array.length < 1) - { + { if (af != null) { JOptionPane.showMessageDialog(af, MessageManager.getString("warn.no_sequence_data")); } return; - } - SequenceI[] newArr = new SequenceI[array.length]; - int index = 0; - for (SequenceI seq : array) - { - newArr[index] = new Sequence(seq); - index++; - } + } + 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); + uniquifySequences(newArr); + + if (forGroup) + { + exportData(newArr, stoTemp, null, null, group); + } + else + { + exportData(newArr, stoTemp, null, null, alignment); + } + + SeqsetUtils.deuniquify(hash, array); } catch (FileNotFoundException e) { @@ -232,11 +245,11 @@ public class HMMBuildThread implements Runnable } try { - boolean ran = runCommand(); - if (!ran) - { - return; - } + boolean ran = runCommand(); + if (!ran) + { + return; + } } catch (IOException | InterruptedException e) { // TODO Auto-generated catch block @@ -251,14 +264,12 @@ public class HMMBuildThread implements Runnable // TODO Auto-generated catch block e.printStackTrace(); } - } catch (Exception e) - { - e.printStackTrace(); + } catch (Exception e) + { + e.printStackTrace(); } } - - /** * Executes the hmmbuild command in the command line. * @@ -268,23 +279,12 @@ public class HMMBuildThread implements Runnable */ private boolean runCommand() throws IOException, InterruptedException { - File file = new File(cmds.HMMERFOLDER + "/hmmbuild"); - if (!file.canExecute()) + String binaryPath = getCommandRoot(HMMBUILD); + if (binaryPath == null) { - file = new File(cmds.HMMERFOLDER + "/hmmbuild.exe"); - { - if (!file.canExecute()) - { - if (af != null) - { - JvOptionPane.showInternalMessageDialog(af, - MessageManager.getString("warn.hmmbuild_failed")); - } - return false; - } - } + return false; } - String command = cmds.HMMERFOLDER + cmds.HMMBUILD + cmds.SPACE; + String command = binaryPath + SPACE; String name = null; if (params != null) @@ -296,52 +296,52 @@ public class HMMBuildThread implements Runnable { case "HMM Name": name = arg.getValue(); + name = name.trim(); break; case "Use Reference Annotation": command += "--hand "; break; } - } } - name = name.trim(); + if (forGroup && multiJob) + { + name = group.getName() + "_HMM"; + } if (name == null || "".equals(name)) { - if (forGroup) + if (af != null) { - name = group.getName(); - } - else - { - if (af != null) + if (af.getTitle().length() < 15) { name = af.getTitle(); } - if (name == null || "".equals(name)) - { - name = "Alignment"; - } } + if (name == null || "".equals(name)) + { + name = "Alignment"; + } + } - command += "-n " + name + cmds.SPACE; + command += "-n " + name.replace(' ', '_') + SPACE; if (!alignment.isNucleotide()) { - command += cmds.FORCEAMINO; // TODO check for rna + command += FORCEAMINO; // TODO check for rna } else { - command += cmds.FORCEDNA; + command += FORCEDNA; } - command += hmmTemp.getAbsolutePath() - + cmds.SPACE + stoTemp.getAbsolutePath() + cmds.SPACE; - return cmds.runCommand(command); + command += hmmTemp.getAbsolutePath() + SPACE + stoTemp.getAbsolutePath() + + SPACE; + return runCommand(command); } - + /** * Imports the .hmm file produced by hmmbuild. * @@ -350,17 +350,16 @@ public class HMMBuildThread implements Runnable */ private void importData() throws IOException, InterruptedException { - HMMFile file = new HMMFile(new FileParse(hmmTemp.getAbsolutePath(), - DataSourceType.FILE)); + HMMFile file = new HMMFile( + new FileParse(hmmTemp.getAbsolutePath(), DataSourceType.FILE)); SequenceI[] seqs = file.getSeqsAsArray(); SequenceI seq = seqs[0]; seq.createDatasetSequence(); - HiddenMarkovModel hmm = file.getHMM(); if (group != null) { seq.insertCharAt(0, group.getStartRes(), '-'); seq.insertCharAt(group.getEndRes() + 1, - alignment.getWidth() - group.getEndRes(), '-'); + alignment.getWidth() - group.getEndRes() - 1, '-'); seq.updateHMMMapping(); SequenceI topSeq = group.getSequencesInOrder(alignment)[0]; int topIndex = alignment.findIndex(topSeq); @@ -373,18 +372,21 @@ public class HMMBuildThread implements Runnable alignment.insertSequenceAt(0, seq); } - viewport.alignmentChanged(viewport.getAlignPanel()); - viewport.getAlignPanel().adjustAnnotationHeight(); - viewport.updateSequenceIdColours(); - - if (viewport.getAlignPanel().alignFrame.getSelectedHMM() == null) + if (viewport != null) { - viewport.getAlignPanel().alignFrame.setSelectedHMMSequence(seq); + viewport.alignmentChanged(viewport.getAlignPanel()); + viewport.getAlignPanel().adjustAnnotationHeight(); + viewport.updateSequenceIdColours(); + + if (viewport.getAlignPanel().alignFrame.getSelectedHMM() == null) + { + viewport.getAlignPanel().alignFrame.setSelectedHMMSequence(seq); + } } hmmTemp.delete(); stoTemp.delete(); } - + /** * Runs hmmbuild, and waits for the results to be imported before continuing */