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();
30 boolean canRun = true;
38 public HMMBuildThread(AlignFrame af)
41 if (af.getViewport().getSelectionGroup() != null)
43 group = af.getViewport().getSelectionGroup();
45 alignment = af.getViewport().getAlignment();
52 barID = System.currentTimeMillis();
53 af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
55 cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH);
56 if (alignment == null && group == null)
58 JOptionPane.showMessageDialog(af,
59 MessageManager.getString("label.no_sequence_data"));
64 hmmTemp = File.createTempFile("hmm", ".hmm");
65 hmmTemp.deleteOnExit();
66 stoTemp = File.createTempFile("output", ".sto");
67 stoTemp.deleteOnExit();
68 } catch (IOException e1)
78 List<SequenceI> seqs = alignment
79 .getHMMConsensusSequences(true);
80 cmds.setHmmSeqs(seqs);
83 array = group.getSelectionAsNewSequences(alignment);
87 if (!alignment.isAligned())
91 array = alignment.getSequencesArray();
93 SequenceI[] newArr = new SequenceI[array.length];
95 for (SequenceI seq : array)
97 newArr[index] = new Sequence(seq);
100 cmds.uniquifySequences(newArr);
101 cmds.exportData(newArr, stoTemp, null, null);
102 jalview.analysis.SeqsetUtils.deuniquify(cmds.hash, array);
104 } catch (FileNotFoundException e)
106 // TODO Auto-generated catch block
112 boolean ran = runCommand();
115 JvOptionPane.showInternalMessageDialog(af,
116 MessageManager.getString("warn.hmmbuild_failed"));
119 } catch (IOException | InterruptedException e)
121 // TODO Auto-generated catch block
128 } catch (IOException | InterruptedException e)
130 // TODO Auto-generated catch block
133 } catch (Exception e)
138 af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
146 private boolean runCommand() throws IOException, InterruptedException
148 File file = new File(cmds.HMMERFOLDER + "/binaries/hmmbuild.exe");
149 if (!file.canExecute())
153 String command = cmds.HMMERFOLDER + cmds.HMMBUILD + cmds.NAME
154 + af.getName() + cmds.SPACE;
155 if (!alignment.isNucleotide())
157 command += cmds.FORCEAMINO; // TODO check for rna
161 command += cmds.FORCEDNA;
164 command += hmmTemp.getAbsolutePath()
165 + cmds.SPACE + stoTemp.getAbsolutePath() + cmds.SPACE;
166 return cmds.runCommand(command);
169 private void importData() throws IOException, InterruptedException
171 cmds.addHMMConsensusSequences(af);
172 af.loadJalviewDataFile(hmmTemp.getAbsolutePath(), DataSourceType.FILE,
173 FileFormat.HMMER3, null);
178 public boolean canRun()