3 import jalview.bin.Cache;
4 import jalview.datamodel.AlignmentI;
5 import jalview.datamodel.AlignmentOrder;
6 import jalview.datamodel.HiddenMarkovModel;
7 import jalview.datamodel.SequenceI;
8 import jalview.gui.AlignFrame;
9 import jalview.gui.Preferences;
10 import jalview.io.DataSourceType;
11 import jalview.io.FileFormat;
12 import jalview.io.FileLoader;
13 import jalview.util.MessageManager;
15 import java.io.FileNotFoundException;
16 import java.io.IOException;
17 import java.util.HashMap;
20 public class HMMAlignThread implements Runnable
27 HiddenMarkovModel hmm;
33 Map<Integer, SequenceI> hmmSeqs;
35 public HMMAlignThread(AlignFrame af, boolean createNewFrame)
38 alignment = af.getViewport().getAlignment();
39 hmm = alignment.getSequenceAt(0).getHMM();
40 newFrame = createNewFrame;
46 barID = System.currentTimeMillis();
47 af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
49 HMMERCommands.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH);
54 hmmSeqs = alignment.getHMMConsensusSequences(true);
55 HMMERCommands.exportData(alignment, true, true, hmm);
56 } catch (FileNotFoundException e)
58 // TODO Auto-generated catch block
65 } catch (IOException | InterruptedException e)
67 // TODO Auto-generated catch block
73 } catch (IOException | InterruptedException e)
75 // TODO Auto-generated catch block
83 af.setProgressBar(MessageManager.getString("status.running_hmmalign"),
88 private void runCommand() throws IOException, InterruptedException
90 String command = HMMERCommands.HMMERFOLDER + HMMERCommands.HMMALIGN;
91 if (!hmm.getFileHeader().contains("HMMER3/f"))
93 command += HMMERCommands.ALLCOL;
95 command += HMMERCommands.TRIM + HMMERCommands.OUTPUTALIGNMENT
96 + HMMERCommands.JALVIEWDIRECTORY + HMMERCommands.HMMBUFFER
97 + HMMERCommands.JALVIEWDIRECTORY
98 + HMMERCommands.ALIGNMENTBUFFER;
99 HMMERCommands.runCommand(command);
102 private void importData() throws IOException, InterruptedException
106 FileLoader loader = new FileLoader();
107 AlignmentOrder order = new AlignmentOrder(alignment);
108 AlignFrame newAFrame = loader.LoadFileWaitTillLoaded(
109 HMMERCommands.ALIGNMENTINPUT, DataSourceType.FILE);
110 Map<Integer, SequenceI> copy = new HashMap<>(
112 addSeqs(newAFrame, copy);
113 SequenceI seq = newAFrame.getViewport().getAlignment()
115 hmm.mapToReferenceAnnotation(newAFrame, seq);
116 addSeqs(af, hmmSeqs);
120 af.getViewport().getAlignment().getSequences().clear();
121 af.setIsRecurring(true);
122 af.loadJalviewDataFile(HMMERCommands.ALIGNMENTBUFFER,
123 DataSourceType.FILE, FileFormat.Stockholm, null);
124 af.setIsRecurring(false);
125 addSeqs(af, hmmSeqs);
129 private void addSeqs(AlignFrame alignFrame, Map<Integer, SequenceI> map)
131 for (Map.Entry<Integer, SequenceI> entry : map.entrySet())
133 SequenceI seq = entry.getValue();
134 Integer pos = entry.getKey();
135 HMMERCommands.addHMMConsensusSequence(alignFrame, seq, pos);