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