3 import jalview.bin.Cache;
4 import jalview.datamodel.Alignment;
5 import jalview.datamodel.AlignmentI;
6 import jalview.datamodel.HiddenMarkovModel;
7 import jalview.datamodel.SequenceI;
8 import jalview.gui.AlignFrame;
9 import jalview.gui.Desktop;
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.HashMap;
22 public class HMMAlignThread implements Runnable
24 HMMERCommands cmds = new HMMERCommands();
30 HiddenMarkovModel hmm;
36 Map<Integer, SequenceI> hmmSeqs;
42 File inputTemp = null;
44 public HMMAlignThread(AlignFrame af, boolean createNewFrame)
47 alignment = af.getViewport().getAlignment();
48 hmm = alignment.getSequenceAt(0).getHMM();
49 newFrame = createNewFrame;
55 barID = System.currentTimeMillis();
56 af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
58 cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH);
61 hmmTemp = File.createTempFile("hmm", ".hmm");
62 hmmTemp.deleteOnExit();
63 outTemp = File.createTempFile("output", ".sto");
64 outTemp.deleteOnExit();
65 inputTemp = File.createTempFile("input", ".sto");
66 inputTemp.deleteOnExit();
67 } catch (IOException e1)
69 // TODO Auto-generated catch block
77 hmmSeqs = alignment.getHMMConsensusSequences(true);
78 cmds.exportData(alignment, outTemp.getAbsoluteFile(), hmm,
79 hmmTemp.getAbsoluteFile());
80 } catch (FileNotFoundException e)
82 // TODO Auto-generated catch block
89 } catch (IOException | InterruptedException e)
91 // TODO Auto-generated catch block
97 } catch (IOException | InterruptedException e)
99 // TODO Auto-generated catch block
102 } catch (Exception e)
107 af.setProgressBar(MessageManager.getString("status.running_hmmalign"),
112 private void runCommand() throws IOException, InterruptedException
114 String command = cmds.HMMERFOLDER + cmds.HMMALIGN;
115 if (!hmm.getFileHeader().contains("HMMER3/f"))
117 command += cmds.ALLCOL;
119 command += cmds.TRIM + " -o" + inputTemp.getAbsolutePath() + cmds.SPACE
120 + hmmTemp.getAbsolutePath() + cmds.SPACE
121 + outTemp.getAbsolutePath();
122 cmds.runCommand(command);
125 private void importData() throws IOException, InterruptedException
129 FileLoader loader = new FileLoader();
130 AlignFrame aFrame = new AlignFrame(new Alignment(new SequenceI[1]),
131 AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
132 Desktop.addInternalFrame(aFrame, aFrame.getTitle(),
133 AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
135 af.getName() + "Aligned to " + hmm.getName() + "'s HMM");
136 af.getViewport().setAlignment(null);
138 aFrame.loadJalviewDataFile(inputTemp.getAbsolutePath(),
139 DataSourceType.FILE, FileFormat.Stockholm, null);
143 Map<Integer, SequenceI> copy = new HashMap<>(
145 addSeqs(aFrame, copy);
146 SequenceI seq = aFrame.getViewport().getAlignment()
148 seq.getHMM().mapToReferenceAnnotation(aFrame, seq);
149 addSeqs(af, hmmSeqs);
153 af.getViewport().getAlignment().getSequences().clear();
154 af.setIsRecurring(true);
155 af.loadJalviewDataFile(inputTemp.getAbsolutePath(),
156 DataSourceType.FILE, FileFormat.Stockholm, null);
157 af.setIsRecurring(false);
158 addSeqs(af, hmmSeqs);
165 private void addSeqs(AlignFrame alignFrame, Map<Integer, SequenceI> map)
167 for (Map.Entry<Integer, SequenceI> entry : map.entrySet())
169 SequenceI seq = entry.getValue();
170 Integer pos = entry.getKey();
171 cmds.addHMMConsensusSequence(alignFrame, seq, pos);