cf898635ef0f0972ae7b3ac70d169f2b5099c85f
[jalview.git] / src / jalview / hmmer / HMMBuildThread.java
1 package jalview.hmmer;
2
3 import jalview.bin.Cache;
4 import jalview.datamodel.AlignmentI;
5 import jalview.datamodel.HiddenMarkovModel;
6 import jalview.datamodel.SequenceI;
7 import jalview.gui.AlignFrame;
8 import jalview.gui.Preferences;
9 import jalview.io.DataSourceType;
10 import jalview.io.FileFormat;
11 import jalview.util.MessageManager;
12
13 import java.io.File;
14 import java.io.FileNotFoundException;
15 import java.io.IOException;
16 import java.util.Map;
17
18 public class HMMBuildThread implements Runnable
19 {
20   HMMERCommands cmds = new HMMERCommands();
21   AlignFrame af;
22   AlignmentI alignment;
23
24   long barID;
25
26   Map<Integer, SequenceI> hmmSeqs;
27   
28   public HMMBuildThread(AlignFrame af)
29   {
30     this.af = af;
31     alignment = af.getViewport().getAlignment();
32   }
33
34   @Override
35   public void run()
36   {
37     barID = System.currentTimeMillis();
38     af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
39             barID);
40     cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH);
41     try
42     {
43       cmds.HMMBUFFER = File.createTempFile("hmm", ".hmm").getAbsolutePath()
44               + cmds.SPACE;
45       cmds.ALIGNMENTBUFFER = File.createTempFile("output", ".sto")
46               .getAbsolutePath() + cmds.SPACE;
47     } catch (IOException e1)
48     {
49       e1.printStackTrace();
50     }
51
52     try
53     {
54     try
55     {
56         hmmSeqs = alignment.getHMMConsensusSequences(true);
57         cmds.exportData(alignment, true, false,
58                 new HiddenMarkovModel());
59     } catch (FileNotFoundException e)
60     {
61       // TODO Auto-generated catch block
62       e.printStackTrace();
63
64     }
65     try
66     {
67       runCommand();
68     } catch (IOException | InterruptedException e)
69     {
70       // TODO Auto-generated catch block
71       e.printStackTrace();
72     }
73     try
74     {
75       importData();
76     } catch (IOException | InterruptedException e)
77     {
78       // TODO Auto-generated catch block
79       e.printStackTrace();
80     }
81     } catch (Exception e)
82     {
83
84     } finally
85     {
86       af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
87               barID);
88     }
89   }
90
91   
92
93   
94   private void runCommand() throws IOException, InterruptedException
95   {
96     final String command = cmds.HMMERFOLDER + cmds.HMMBUILD + cmds.NAME
97             + af.getName() + cmds.SPACE + cmds.HMMBUFFER
98             + cmds.ALIGNMENTBUFFER;
99     cmds.runCommand(command);
100   }
101   
102   private void importData() throws IOException, InterruptedException
103   {
104     af.loadJalviewDataFile(cmds.HMMBUFFER, DataSourceType.FILE,
105             FileFormat.HMMER3, null);
106     for (Map.Entry<Integer, SequenceI> entry : hmmSeqs.entrySet())
107     {
108       SequenceI seq = entry.getValue();
109       Integer pos = entry.getKey();
110       cmds.addHMMConsensusSequence(af, seq, pos);
111     }
112     af.alignPanel.alignmentChanged();
113   }
114   
115   
116   
117  
118 }