3 import jalview.bin.Cache;
4 import jalview.datamodel.AlignmentI;
5 import jalview.datamodel.Sequence;
6 import jalview.datamodel.SequenceGroup;
7 import jalview.datamodel.SequenceI;
8 import jalview.gui.AlignFrame;
9 import jalview.gui.JvOptionPane;
10 import jalview.gui.Preferences;
11 import jalview.io.DataSourceType;
12 import jalview.io.FileFormat;
13 import jalview.util.MessageManager;
16 import java.io.FileNotFoundException;
17 import java.io.IOException;
18 import java.util.List;
20 import javax.swing.JOptionPane;
22 public class HMMBuildThread implements Runnable
24 HMMERCommands cmds = new HMMERCommands();
29 boolean forGroup = false;
30 boolean canRun = true;
38 public HMMBuildThread(AlignFrame af)
41 if (af.getViewport().getSelectionGroup() != null)
43 group = af.getViewport().getSelectionGroup();
46 alignment = af.getViewport().getAlignment();
53 barID = System.currentTimeMillis();
54 af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
56 cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH);
57 if (alignment == null && group == null)
59 JOptionPane.showMessageDialog(af,
60 MessageManager.getString("label.no_sequence_data"));
65 hmmTemp = File.createTempFile("hmm", ".hmm");
66 hmmTemp.deleteOnExit();
67 stoTemp = File.createTempFile("output", ".sto");
68 stoTemp.deleteOnExit();
69 } catch (IOException e1)
79 List<SequenceI> seqs = alignment
80 .getHMMConsensusSequences(true);
81 cmds.setHmmSeqs(seqs);
84 array = group.getSelectionAsNewSequences(alignment);
88 if (!alignment.isAligned())
92 array = alignment.getSequencesArray();
95 SequenceI[] newArr = new SequenceI[array.length];
97 for (SequenceI seq : array)
99 newArr[index] = new Sequence(seq);
103 cmds.uniquifySequences(newArr);
104 cmds.exportData(newArr, stoTemp, null, null);
105 jalview.analysis.SeqsetUtils.deuniquify(cmds.hash, array);
107 } catch (FileNotFoundException e)
109 // TODO Auto-generated catch block
115 boolean ran = runCommand();
118 JvOptionPane.showInternalMessageDialog(af,
119 MessageManager.getString("warn.hmmbuild_failed"));
122 } catch (IOException | InterruptedException e)
124 // TODO Auto-generated catch block
131 } catch (IOException | InterruptedException e)
133 // TODO Auto-generated catch block
136 } catch (Exception e)
141 af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
149 private boolean runCommand() throws IOException, InterruptedException
151 File file = new File(cmds.HMMERFOLDER + "/binaries/hmmbuild.exe");
152 if (!file.canExecute())
156 String command = cmds.HMMERFOLDER + cmds.HMMBUILD + cmds.NAME;
159 command += group.getName();
163 String name = af.getName();
170 command += cmds.SPACE;
171 if (!alignment.isNucleotide())
173 command += cmds.FORCEAMINO; // TODO check for rna
177 command += cmds.FORCEDNA;
180 command += hmmTemp.getAbsolutePath()
181 + cmds.SPACE + stoTemp.getAbsolutePath() + cmds.SPACE;
182 return cmds.runCommand(command);
185 private void importData() throws IOException, InterruptedException
187 cmds.addHMMConsensusSequences(af);
188 af.loadJalviewDataFile(hmmTemp.getAbsolutePath(), DataSourceType.FILE,
189 FileFormat.HMMER3, null);
194 public boolean canRun()