3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertFalse;
5 import static org.testng.Assert.assertNotNull;
6 import static org.testng.Assert.assertTrue;
7 import static org.testng.Assert.fail;
9 import jalview.bin.Jalview;
10 import jalview.datamodel.AlignmentI;
11 import jalview.datamodel.HiddenMarkovModel;
12 import jalview.datamodel.SequenceI;
13 import jalview.gui.AlignFrame;
14 import jalview.gui.Desktop;
15 import jalview.io.HMMFile;
16 import jalview.util.MessageManager;
17 import jalview.ws.params.ArgumentI;
18 import jalview.ws.params.simple.Option;
20 import java.io.IOException;
21 import java.net.MalformedURLException;
22 import java.util.ArrayList;
23 import java.util.List;
25 import org.testng.annotations.AfterClass;
26 import org.testng.annotations.BeforeClass;
27 import org.testng.annotations.Test;
29 public class HMMERTest {
33 @BeforeClass(alwaysRun = true)
34 public void setUpBeforeClass() throws Exception
37 * NB: check HMMER_PATH in testProps.jvprops is valid for
38 * the machine on which this runs
42 { "-noquestionnaire", "-nonews", "-props",
43 "test/jalview/hmmer/testProps.jvprops", "-open",
44 "examples/uniref50.fa" });
45 frame = Desktop.getAlignFrames()[0];
48 @AfterClass(alwaysRun = true)
49 public static void tearDownAfterClass() throws Exception
51 Desktop.getInstance().closeAll_actionPerformed(null);
55 * Test with a dependency on locally installed hmmbuild binaries
57 * @throws MalformedURLException
60 @Test(groups = "External")
61 public void testHMMBuildThenHMMAlign()
62 throws MalformedURLException, IOException
68 List<SequenceI> hmms = frame.getViewport().getAlignment()
70 assertFalse(hmms.isEmpty());
73 * now run hmmalign - by default with respect to the added HMM profile
78 public void testHMMBuild()
81 * set up argument to run hmmbuild for the alignment
83 ArrayList<ArgumentI> params = new ArrayList<>();
84 String argName = MessageManager.getString("label.hmmbuild_for");
85 String argValue = MessageManager.getString("label.alignment");
87 new Option(argName, null, false, null, argValue, null, null));
89 HMMBuild builder = new HMMBuild(frame, params);
92 SequenceI seq = frame.getViewport().getAlignment().getSequenceAt(0);
93 HiddenMarkovModel hmm = seq.getHMM();
96 assertEquals(hmm.getLength(), 148);
97 assertEquals(hmm.getAlphabetType(), "amino");
98 assertEquals(hmm.getName(), "Alignment_HMM");
99 assertEquals(hmm.getProperty(HMMFile.EFF_NUMBER_OF_SEQUENCES),
103 public void testHMMAlign()
105 HmmerCommand thread = new HMMAlign(frame,
106 new ArrayList<ArgumentI>());
109 AlignFrame[] alignFrames = Desktop.getAlignFrames();
110 if (alignFrames == null)
112 fail("No align frame loaded");
116 * now have the original align frame, and another for realigned sequences
118 assertEquals(alignFrames.length, 2);
119 AlignmentI original = alignFrames[0].getViewport().getAlignment();
120 assertNotNull(original);
121 AlignmentI realigned = alignFrames[1].getViewport().getAlignment();
122 assertNotNull(realigned);
123 assertFalse(original.getHmmSequences().isEmpty());
124 assertFalse(realigned.getHmmSequences().isEmpty());
126 SequenceI ferCapan = original.findName("FER_CAPAN");
127 assertTrue(ferCapan.getSequenceAsString().startsWith("MA------SVSAT"));
129 SequenceI ferCapanRealigned = realigned.findName("FER_CAPAN");
130 assertTrue(ferCapanRealigned.getSequenceAsString()
131 .startsWith("-------m-A----SVSAT"));