X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fhmmer%2FHMMSearchThread.java;h=16c7c6843503d41fc7ddde666ba73cc4309bbc27;hb=bd6ce8f5f9fc8e5bc8a6188d15987ce0ffd2c1ee;hp=8adeb22ad5ba8113022692cd81f06fa2c0add452;hpb=dbdc8807d9059dacf65a087b7bcb8363be53fb8f;p=jalview.git diff --git a/src/jalview/hmmer/HMMSearchThread.java b/src/jalview/hmmer/HMMSearchThread.java index 8adeb22..16c7c68 100644 --- a/src/jalview/hmmer/HMMSearchThread.java +++ b/src/jalview/hmmer/HMMSearchThread.java @@ -1,6 +1,5 @@ package jalview.hmmer; -import jalview.bin.Cache; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; @@ -9,7 +8,6 @@ import jalview.datamodel.HiddenMarkovModel; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.gui.JvOptionPane; -import jalview.gui.Preferences; import jalview.io.DataSourceType; import jalview.io.FileParse; import jalview.io.StockholmFile; @@ -29,23 +27,22 @@ import java.util.Scanner; import javax.swing.JOptionPane; -public class HMMSearchThread implements Runnable +public class HMMSearchThread extends HmmerCommand implements Runnable { - /** + static final String HMMSEARCH = "hmmsearch"; + + /* * feature settings from view that job was associated with */ protected FeatureRendererSettings featureSettings = null; - /** - * Object containing frequently used commands. - */ - HMMERCommands cmds = new HMMERCommands(); + HiddenMarkovModel hmm; - AlignFrame af; + boolean newFrame; - HiddenMarkovModel hmm; + boolean realign = false; - boolean newFrame, realign = false, trim = false; + boolean trim = false; Integer numberOfSequences = null; @@ -63,11 +60,8 @@ public class HMMSearchThread implements Runnable File databaseFile = null; - - SequenceI[] seqs; - /** * Constructor for the HMMSearchThread. If create new frame is set to true, a * new frame will be created. @@ -107,7 +101,6 @@ public class HMMSearchThread implements Runnable barID = System.currentTimeMillis(); af.setProgressBar(MessageManager.getString("status.running_hmmsearch"), barID); - cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH); try { @@ -118,7 +111,7 @@ public class HMMSearchThread implements Runnable } try { - cmds.exportData(null, null, hmm, hmmTemp.getAbsoluteFile(), null); + exportData(null, null, hmm, hmmTemp.getAbsoluteFile(), null); } catch (IOException e1) { e1.printStackTrace(); @@ -145,8 +138,7 @@ public class HMMSearchThread implements Runnable e.printStackTrace(); } - af.setProgressBar(MessageManager.getString("status.running_hmmsearch"), - barID); + af.setProgressBar("", barID); } @@ -174,23 +166,18 @@ public class HMMSearchThread implements Runnable */ private boolean runCommand() throws IOException, InterruptedException { - Boolean dbFound = false; - String dbPath = ""; - File file = new File(cmds.HMMERFOLDER + "/hmmsearch"); - if (!file.canExecute()) + String binaryPath = getCommandRoot(HMMSEARCH); + if (binaryPath == null) { - file = new File(cmds.HMMERFOLDER + "/hmmsearch.exe"); - { - if (!file.canExecute()) - { - return false; - } - } + return false; } - String command = cmds.HMMERFOLDER + "/hmmsearch -o " + String command = binaryPath + " -o " + inputTableTemp.getAbsolutePath() + " -A " - + inputAlignmentTemp.getAbsolutePath() + cmds.SPACE; + + inputAlignmentTemp.getAbsolutePath() + SPACE; + + boolean dbFound = false; + String dbPath = ""; if (params != null) { for (ArgumentI arg : params) @@ -215,16 +202,16 @@ public class HMMSearchThread implements Runnable } break; case "Sequence E-value Cutoff": - command += "--incE " + arg.getValue() + cmds.SPACE; + command += "--incE " + arg.getValue() + SPACE; break; case "Sequence Score Threshold": - command += "-incT " + arg.getValue() + cmds.SPACE; + command += "-incT " + arg.getValue() + SPACE; break; case "Domain E-value Threshold": - command += "--incdomE " + arg.getValue() + cmds.SPACE; + command += "--incdomE " + arg.getValue() + SPACE; break; case "Domain Score Threshold": - command += "--incdomT " + arg.getValue() + cmds.SPACE; + command += "--incdomT " + arg.getValue() + SPACE; break; case "Trim Non-Matching Termini": trim = true; @@ -242,7 +229,7 @@ public class HMMSearchThread implements Runnable } } - if (dbFound == false || MessageManager.getString("label.this_alignment") + if (!dbFound || MessageManager.getString("label.this_alignment") .equals(dbPath)) { AlignmentI alignment = af.getViewport().getAlignment(); @@ -258,9 +245,9 @@ public class HMMSearchThread implements Runnable writer.close(); } - command += hmmTemp.getAbsolutePath() + cmds.SPACE + command += hmmTemp.getAbsolutePath() + SPACE + databaseFile.getAbsolutePath(); - return cmds.runCommand(command); + return runCommand(command); } /** @@ -271,55 +258,64 @@ public class HMMSearchThread implements Runnable { BufferedReader br = new BufferedReader( new FileReader(inputAlignmentTemp)); - if (br.readLine() == null) + try { - JOptionPane.showMessageDialog(af, - MessageManager.getString("label.no_sequences_found")); - return; - } - StockholmFile file = new StockholmFile(new FileParse( - inputAlignmentTemp.getAbsolutePath(), DataSourceType.FILE)); - seqs = file.getSeqsAsArray(); + if (br.readLine() == null) + { + JOptionPane.showMessageDialog(af, + MessageManager.getString("label.no_sequences_found")); + return; + } + StockholmFile file = new StockholmFile(new FileParse( + inputAlignmentTemp.getAbsolutePath(), DataSourceType.FILE)); + seqs = file.getSeqsAsArray(); - readTable(); + readTable(); - SequenceI[] hmmAndSeqs; - if (numberOfSequences != null && numberOfSequences < seqs.length) - { - hmmAndSeqs = new SequenceI[numberOfSequences + 1]; - } - else - { - hmmAndSeqs = new SequenceI[seqs.length + 1]; - } - hmmAndSeqs[0] = hmmSeq; + SequenceI[] hmmAndSeqs; + if (numberOfSequences != null && numberOfSequences < seqs.length) + { + hmmAndSeqs = new SequenceI[numberOfSequences + 1]; + } + else + { + hmmAndSeqs = new SequenceI[seqs.length + 1]; + } + hmmAndSeqs[0] = hmmSeq; - if (numberOfSequences != null && seqs.length > numberOfSequences) - { - System.arraycopy(seqs, 0, hmmAndSeqs, 1, numberOfSequences); - } - else - { - System.arraycopy(seqs, 0, hmmAndSeqs, 1, seqs.length); - } + if (numberOfSequences != null && seqs.length > numberOfSequences) + { + System.arraycopy(seqs, 0, hmmAndSeqs, 1, numberOfSequences); + } + else + { + System.arraycopy(seqs, 0, hmmAndSeqs, 1, seqs.length); + } - AlignmentI alignment = new Alignment(hmmAndSeqs); - AlignFrame frame = new AlignFrame(alignment, 1, 1); - frame.setSelectedHMMSequence(hmmSeq); - List alignArgs = new ArrayList<>(); - if (trim) + AlignmentI alignment = new Alignment(hmmAndSeqs); + AlignFrame frame = new AlignFrame(alignment, 1, 1); + frame.setSelectedHMMSequence(hmmSeq); + List alignArgs = new ArrayList<>(); + if (trim) + { + alignArgs.add(new BooleanOption( + MessageManager.getString("label.trim_termini"), + MessageManager.getString("label.trim_termini_desc"), true, + true, true, null)); + } + HMMAlignThread hmmalign = new HMMAlignThread(frame, true, alignArgs); + hmmalign.hmmalignWaitTillComplete(); + frame = null; + hmmTemp.delete(); + inputAlignmentTemp.delete(); + inputTableTemp.delete(); + } finally { - alignArgs.add(new BooleanOption( - MessageManager.getString("label.trim_termini"), - MessageManager.getString("label.trim_termini_desc"), true, - true, true, null)); + if (br != null) + { + br.close(); + } } - HMMAlignThread hmmalign = new HMMAlignThread(frame, true, alignArgs); - hmmalign.hmmalignWaitTillComplete(); - frame = null; - hmmTemp.delete(); - inputAlignmentTemp.delete(); - inputTableTemp.delete(); } /** @@ -342,7 +338,7 @@ public class HMMSearchThread implements Runnable } - public void readTable() throws IOException + void readTable() throws IOException { BufferedReader br = new BufferedReader(new FileReader(inputTableTemp)); String line = ""; @@ -360,26 +356,27 @@ public class HMMSearchThread implements Runnable && !"".equals(line)) { Scanner scanner = new Scanner(line); - - String str = scanner.next(); - Annotation[] annots = new Annotation[seqs[index].getLength()]; - for (Annotation an : annots) + + String str = scanner.next(); // full sequence eValue score + float eValue = Float.parseFloat(str); + int seqLength = seqs[index].getLength(); + Annotation[] annots = new Annotation[seqLength]; + for (int j = 0; j < seqLength; j++) { - an = new Annotation(Float.parseFloat(str)); + annots[j] = new Annotation(eValue); } AlignmentAnnotation annot = new AlignmentAnnotation("E-value", "Score", annots); annot.setScore(Double.parseDouble(str)); annot.setSequenceRef(seqs[index]); seqs[index].addAlignmentAnnotation(annot); - + scanner.close(); line = br.readLine(); index++; } - + br.close(); } - }