X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fhmmer%2FHMMAlignThread.java;h=fadbdb15651d4f99991f9cdb7f0ad45b2a5704ec;hb=bd6ce8f5f9fc8e5bc8a6188d15987ce0ffd2c1ee;hp=1c2450c2d866ac8cbf0de82ee3624a926bffef33;hpb=97d3ad401eb2bc5dba791f31616b87d88ea47e41;p=jalview.git diff --git a/src/jalview/hmmer/HMMAlignThread.java b/src/jalview/hmmer/HMMAlignThread.java index 1c2450c..fadbdb1 100644 --- a/src/jalview/hmmer/HMMAlignThread.java +++ b/src/jalview/hmmer/HMMAlignThread.java @@ -1,5 +1,7 @@ package jalview.hmmer; +import jalview.analysis.AlignmentSorter; +import jalview.analysis.SeqsetUtils; import jalview.bin.Cache; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentI; @@ -11,37 +13,29 @@ import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.gui.Desktop; import jalview.gui.JvOptionPane; -import jalview.gui.Preferences; import jalview.gui.SplitFrame; import jalview.io.DataSourceType; import jalview.io.StockholmFile; import jalview.util.MessageManager; import jalview.viewmodel.seqfeatures.FeatureRendererSettings; +import jalview.ws.params.ArgumentI; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Map; import javax.swing.JInternalFrame; -import javax.swing.JOptionPane; -public class HMMAlignThread implements Runnable +public class HMMAlignThread extends HmmerCommand implements Runnable { + static final String HMMALIGN = "hmmalign"; - /** + /* * feature settings from view that job was associated with */ protected FeatureRendererSettings featureSettings = null; - /** - * Object containing frequently used commands. - */ - HMMERCommands cmds = new HMMERCommands(); - - AlignFrame af; - AlignmentI alignment; AlignmentI dataset; @@ -52,12 +46,12 @@ public class HMMAlignThread implements Runnable HiddenMarkovModel hmm; + List args; + boolean newFrame; long barID; - Map hmmSeqs; - File hmmTemp = null; File outTemp = null; @@ -75,7 +69,8 @@ public class HMMAlignThread implements Runnable * @param af * @param createNewFrame */ - public HMMAlignThread(AlignFrame af, boolean createNewFrame) + public HMMAlignThread(AlignFrame af, boolean createNewFrame, + List args) { this.af = af; alignment = af.getViewport().getAlignment(); @@ -85,6 +80,7 @@ public class HMMAlignThread implements Runnable } newFrame = createNewFrame; featureSettings = af.getFeatureRenderer().getSettings(); + this.args = args; } /** @@ -96,25 +92,12 @@ public class HMMAlignThread implements Runnable @Override public void run() { - if (af.getSelectedHMM() == null) - { - JOptionPane.showMessageDialog(af, - MessageManager.getString("warn.no_selected_hmm")); - return; - } - else - { - hmm = af.getSelectedHMM(); - } + + hmm = af.getSelectedHMM(); + barID = System.currentTimeMillis(); af.setProgressBar(MessageManager.getString("status.running_hmmalign"), barID); - cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH); - - // if (!alignment.isAligned()) - // { - // alignment.padGaps(); - // } prepareAlignment(); SequenceI[][] subAlignments = msa.getVisibleContigs('-'); allOrders = new ArrayList<>(); @@ -122,7 +105,7 @@ public class HMMAlignThread implements Runnable int job = 0; for (SequenceI[] seqs : subAlignments) { - cmds.uniquifySequences(seqs); + uniquifySequences(seqs); try { createTemporaryFiles(); @@ -132,8 +115,8 @@ public class HMMAlignThread implements Runnable } try { - cmds.exportData(seqs, outTemp.getAbsoluteFile(), hmm, - hmmTemp.getAbsoluteFile()); + exportData(seqs, outTemp.getAbsoluteFile(), hmm, + hmmTemp.getAbsoluteFile(), null); } catch (IOException e1) { e1.printStackTrace(); @@ -164,8 +147,7 @@ public class HMMAlignThread implements Runnable displayResults(newFrame); - af.setProgressBar(MessageManager.getString("status.running_hmmalign"), - barID); + af.setProgressBar("", barID); } @@ -176,16 +158,22 @@ public class HMMAlignThread implements Runnable */ private void createTemporaryFiles() throws IOException { - hmmTemp = File.createTempFile("hmm", ".hmm"); - hmmTemp.deleteOnExit(); - outTemp = File.createTempFile("output", ".sto"); - outTemp.deleteOnExit(); + if (hmmTemp == null) + { + hmmTemp = File.createTempFile("hmm", ".hmm"); + hmmTemp.deleteOnExit(); + } + if (outTemp == null) + { + outTemp = File.createTempFile("output", ".sto"); + outTemp.deleteOnExit(); + } inputTemp = File.createTempFile("input", ".sto"); inputTemp.deleteOnExit(); } /** - * Executes the hmmalign command in the command line. + * Executes the hmmalign command in the command line * * @return * @throws IOException @@ -193,42 +181,38 @@ public class HMMAlignThread implements Runnable */ private boolean runCommand() throws IOException, InterruptedException { - File file = new File(cmds.HMMERFOLDER + "/hmmalign"); - if (!file.canExecute()) - { - file = new File(cmds.HMMERFOLDER + "/hmmalign.exe"); - { - if (!file.canExecute()) - { - return false; - } - } + String binaryPath = getCommandRoot(HMMALIGN); + if (binaryPath == null) { + return false; } - String command = cmds.HMMERFOLDER + cmds.HMMALIGN; + String command = binaryPath + SPACE; + // todo parse version from ./hmmerbuild -h String version = Cache.getProperty("HMMER_VERSION"); if (!"3.1b2".equals(version)) { - command += cmds.ALLCOL; + // command += ALLCOL; // todo obsolete option? } - boolean trim = true; - String bool = Cache.getProperty("TRIM_TERMINI"); - if ("false".equals(bool)) + if (args != null) { - trim = false; - } - if (trim) - { - command += cmds.TRIM; + for (ArgumentI arg : args) + { + String name = arg.getName(); + switch (name) + { + case "Trim Non-Matching Termini": + command += "--trim"; + } + } } - command += " -o " + inputTemp.getAbsolutePath() + cmds.SPACE - + hmmTemp.getAbsolutePath() + cmds.SPACE + command += " -o " + inputTemp.getAbsolutePath() + SPACE + + hmmTemp.getAbsolutePath() + SPACE + outTemp.getAbsolutePath(); - return cmds.runCommand(command); + return runCommand(command); } /** * Imports the data from the temporary file to which the output of hmmalign is - * directed. + * directed. this is used for an internal job. * * @param index * The index of the 'job' (or region of an alignment). @@ -242,8 +226,8 @@ public class HMMAlignThread implements Runnable DataSourceType.FILE); SequenceI[] result = file.getSeqsAsArray(); AlignmentOrder msaorder = new AlignmentOrder(result); - jalview.analysis.AlignmentSorter.recoverOrder(result); - jalview.analysis.SeqsetUtils.deuniquify(cmds.hash, result); + AlignmentSorter.recoverOrder(result); + SeqsetUtils.deuniquify(hash, result); allOrders.add(msaorder); allResults[index] = result; hmmTemp.delete(); @@ -269,8 +253,7 @@ public class HMMAlignThread implements Runnable { AlignmentOrder[] arrOrders = allOrders .toArray(new AlignmentOrder[allOrders.size()]); - Object[] newview = msa.getUpdatedView(allResults, - arrOrders, '-'); + Object[] newview = msa.getUpdatedView(allResults, arrOrders, '-'); SequenceI[] alignment = (SequenceI[]) newview[0]; HiddenColumns hidden = (HiddenColumns) newview[1]; Alignment al = new Alignment(alignment); @@ -429,6 +412,4 @@ public class HMMAlignThread implements Runnable } } - } - - +}