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.io.FileLoader;
14 import jalview.util.MessageManager;
17 import java.io.FileNotFoundException;
18 import java.io.IOException;
19 import java.util.List;
21 import javax.swing.JOptionPane;
23 public class HMMBuildThread implements Runnable
25 HMMERCommands cmds = new HMMERCommands();
30 boolean forGroup = false;
31 boolean canRun = true;
39 public HMMBuildThread(AlignFrame af)
42 if (af.getViewport().getSelectionGroup() != null)
44 group = af.getViewport().getSelectionGroup();
47 alignment = af.getViewport().getAlignment();
54 barID = System.currentTimeMillis();
55 af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
57 cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH);
58 if (alignment == null && group == null)
60 JOptionPane.showMessageDialog(af,
61 MessageManager.getString("warn.no_sequence_data"));
66 hmmTemp = File.createTempFile("hmm", ".hmm");
67 hmmTemp.deleteOnExit();
68 stoTemp = File.createTempFile("output", ".sto");
69 stoTemp.deleteOnExit();
70 } catch (IOException e1)
80 List<SequenceI> seqs = alignment
81 .getHMMConsensusSequences(true);
82 cmds.setHmmSeqs(seqs);
85 array = group.getSelectionAsNewSequences(alignment);
89 if (!alignment.isAligned())
93 array = alignment.getSequencesArray();
97 JOptionPane.showMessageDialog(af,
98 MessageManager.getString("warn.no_sequence_data"));
101 SequenceI[] newArr = new SequenceI[array.length];
103 for (SequenceI seq : array)
105 newArr[index] = new Sequence(seq);
109 cmds.uniquifySequences(newArr);
110 cmds.exportData(newArr, stoTemp, null, null);
111 jalview.analysis.SeqsetUtils.deuniquify(cmds.hash, array);
113 } catch (FileNotFoundException e)
115 // TODO Auto-generated catch block
121 boolean ran = runCommand();
124 JvOptionPane.showInternalMessageDialog(af,
125 MessageManager.getString("warn.hmmbuild_failed"));
128 } catch (IOException | InterruptedException e)
130 // TODO Auto-generated catch block
137 } catch (IOException | InterruptedException e)
139 // TODO Auto-generated catch block
142 } catch (Exception e)
147 af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
155 private boolean runCommand() throws IOException, InterruptedException
157 File file = new File(cmds.HMMERFOLDER + "/hmmbuild");
158 if (!file.canExecute())
160 file = new File(cmds.HMMERFOLDER + "/hmmbuild.exe");
162 if (!file.canExecute())
168 String command = cmds.HMMERFOLDER + cmds.HMMBUILD + cmds.NAME;
171 command += group.getName();
175 String name = af.getName();
182 command += cmds.SPACE;
183 if (!alignment.isNucleotide())
185 command += cmds.FORCEAMINO; // TODO check for rna
189 command += cmds.FORCEDNA;
192 command += hmmTemp.getAbsolutePath()
193 + cmds.SPACE + stoTemp.getAbsolutePath() + cmds.SPACE;
194 return cmds.runCommand(command);
197 private void importData() throws IOException, InterruptedException
199 cmds.addHMMConsensusSequences(af);
200 FileLoader loader = new FileLoader();
201 loader.LoadFileOntoAlignmentWaitTillLoaded(af.getViewport(),
202 hmmTemp.getAbsolutePath(), DataSourceType.FILE,
208 public boolean canRun()