8cd4270597fd4ee05ab739d167c930691cb92f53
[jalview.git] / src / jalview / hmmer / HMMAlignThread.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.FileLoader;
10 import jalview.util.MessageManager;
11
12 import java.io.FileNotFoundException;
13 import java.io.IOException;
14 import java.util.Map;
15
16 public class HMMAlignThread implements Runnable
17 {
18
19   AlignFrame af;
20
21   AlignmentI alignment;
22
23   HiddenMarkovModel hmm;
24
25   boolean newFrame;
26
27   long barID;
28
29   Map<Integer, SequenceI> hmmSeqs;
30
31   public HMMAlignThread(AlignFrame af, boolean createNewFrame)
32   {
33     this.af = af;
34     alignment = af.getViewport().getAlignment();
35     hmm = alignment.getSequenceAt(0).getHMM();
36     newFrame = createNewFrame;
37   }
38
39   @Override
40   public void run()
41   {
42     barID = System.currentTimeMillis();
43     af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
44             barID);
45
46     try
47     {
48       try
49       {
50         hmmSeqs = alignment.getHMMConsensusSequences(true);
51         HMMERCommands.exportData(alignment, true, true, hmm);
52       } catch (FileNotFoundException e)
53       {
54         // TODO Auto-generated catch block
55         e.printStackTrace();
56
57       }
58       try
59       {
60         runCommand();
61       } catch (IOException | InterruptedException e)
62       {
63         // TODO Auto-generated catch block
64         e.printStackTrace();
65       }
66       try
67       {
68         importData();
69       } catch (IOException | InterruptedException e)
70       {
71         // TODO Auto-generated catch block
72         e.printStackTrace();
73       }
74     } catch (Exception e)
75     {
76
77     } finally
78     {
79       af.setProgressBar(MessageManager.getString("status.running_hmmalign"),
80               barID);
81     }
82   }
83
84   private void runCommand() throws IOException, InterruptedException
85   {
86     String command = HMMERCommands.HMMALIGN;
87     if (!hmm.getFileHeader().contains("HMMER3/f"))
88     {
89       command += HMMERCommands.ALLCOL;
90     }
91     command += HMMERCommands.TRIM + HMMERCommands.OUTPUTALIGNMENT
92             + HMMERCommands.JALVIEWDIRECTORY + HMMERCommands.HMMBUFFER
93             + HMMERCommands.JALVIEWDIRECTORY
94             + HMMERCommands.ALIGNMENTBUFFER;
95     HMMERCommands.runCommand(command);
96   }
97
98   private void importData() throws IOException, InterruptedException
99   {
100     if (newFrame)
101     {
102       FileLoader loader = new FileLoader();
103       AlignFrame newAFrame = loader.LoadFileWaitTillLoaded(
104               HMMERCommands.ALIGNMENTINPUT, DataSourceType.FILE);
105       addSeqs(newAFrame);
106     }
107     else
108     {
109       af.getViewport().getAlignment().getSequences().clear();
110       af.loadJalviewDataFile(HMMERCommands.ALIGNMENTBUFFER,
111               DataSourceType.FILE, FileFormat.Stockholm, null);
112       addSeqs(af);
113     }
114   }
115
116   private void addSeqs(AlignFrame alignFrame)
117   {
118     for (Map.Entry<Integer, SequenceI> entry : hmmSeqs.entrySet())
119     {
120       SequenceI seq = entry.getValue();
121       Integer pos = entry.getKey();
122       HMMERCommands.addHMMConsensusSequence(alignFrame, seq, pos);
123     }
124   }
125
126   }
127
128