JAL-2629 implement hmmbuild
[jalview.git] / src / jalview / hmmer / HMMERCommands.java
1 package jalview.hmmer;
2
3 import jalview.datamodel.AlignmentI;
4 import jalview.datamodel.HiddenMarkovModel;
5 import jalview.datamodel.SequenceI;
6 import jalview.gui.AlignFrame;
7 import jalview.io.DataSourceType;
8 import jalview.io.FileFormat;
9 import jalview.io.StockholmFile;
10
11 import java.io.BufferedReader;
12 import java.io.IOException;
13 import java.io.InputStreamReader;
14 import java.io.PrintWriter;
15 import java.util.List;
16
17 public class HMMERCommands
18 {
19   // Path of hmmer binaries directory
20   private static final String HMMERFOLDER = "H:/Documents/";
21
22   private static final String HMMALIGN = HMMERFOLDER + "hmmalign";
23
24   private static final String HMMBUILD = HMMERFOLDER + "hmmbuild";
25
26   private static final String HMMSEARCH = HMMERFOLDER + "hmmsearch";
27
28   private static final String JALVIEWDIRECTORY = "C:/Users/TZVanaalten/git/jalview/";
29
30   private static final String HMMBUFFER = "src/jalview/hmmer/hmm_buffer.hmm";
31
32   private static final String ALIGNMENTBUFFER = "src/jalview/hmmer/alignment_buffer.sto";
33
34   private static final String OUTPUTALIGNMENT = "-o " + ALIGNMENTBUFFER;
35
36   private static final String SPACE = " ";
37
38   public static void hmmBuild(AlignFrame af)
39           throws IOException, InterruptedException
40   {
41     HiddenMarkovModel hmm = null;
42     AlignmentI alignment = af.getViewport().getAlignment();
43     List<SequenceI> list = alignment.getSequences();
44     SequenceI[] array = new SequenceI[list.size()];
45     list.toArray(array);
46     StockholmFile file = new StockholmFile(alignment);
47     file.setSeqs(array);
48     String output = file.print();
49     PrintWriter writer = new PrintWriter(ALIGNMENTBUFFER);
50     writer.println(output);
51     writer.close();
52     final String command = HMMBUILD + SPACE + JALVIEWDIRECTORY + HMMBUFFER
53             + SPACE
54             + JALVIEWDIRECTORY + ALIGNMENTBUFFER;
55
56     runCommand(command);
57
58     af.loadJalviewDataFile(HMMBUFFER, DataSourceType.FILE,
59             FileFormat.HMMER3, null);
60   }
61
62   private static void runCommand(String command)
63           throws IOException, InterruptedException
64   {
65     final Process p = Runtime.getRuntime().exec(command);
66
67     new Thread(new Runnable()
68     {
69       @Override
70       public void run()
71       {
72         BufferedReader input = new BufferedReader(
73                 new InputStreamReader(p.getInputStream()));
74         String line = null;
75
76         try
77         {
78           while ((line = input.readLine()) != null)
79           {
80             System.out.println(line);
81           }
82         } catch (IOException e)
83         {
84           e.printStackTrace();
85         }
86       }
87     }).start();
88
89     p.waitFor();
90   }
91 }