--- /dev/null
+package jalview.ws.ebi;
+
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceI;
+import jalview.io.DataSourceType;
+import jalview.io.FileFormat;
+import jalview.io.FileParse;
+import jalview.io.FormatAdapter;
+
+import java.io.File;
+
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class HmmerJSONProcessTest {
+ public static File alignmentFragFile = new File(
+ "examples/testdata/hmmer3/alignment_frag.fa.gz");
+
+ private AlignmentI getSearchResultFragmentAlignment() throws Exception
+ {
+ AlignmentI alf = new FormatAdapter().readFile(
+ alignmentFragFile.getAbsolutePath(), DataSourceType.FILE,
+ FileFormat.Fasta);
+
+ return alf;
+ }
+
+ public static File alignmentResultFile = new File(
+ "examples/testdata/hmmer3/alignment_res.fa.gz");
+
+ private AlignmentI getSearchResultAlignment() throws Exception
+ {
+ AlignmentI alf = new FormatAdapter().readFile(
+ alignmentResultFile.getAbsolutePath(), DataSourceType.FILE,
+ FileFormat.Fasta);
+
+ return alf;
+ }
+
+ public static String hitTestFile = "examples/testdata/hmmer3/hit_fragment.json.gz",
+ hmmerResultFile = "examples/testdata/hmmer3/hmmeresult.json.gz";
+
+
+ @Test(groups = { "Functional" })
+ public void parseHitTest() throws Exception
+ {
+
+ Assert.assertTrue(new File(hitTestFile).exists(),
+ "Can't find test data.\n"
+ + hitTestFile);
+ JSONParser jp = new JSONParser();
+ // read JSON in same way - via fileparse
+ Object hitfragment = jp.parse(new FileParse(hitTestFile,
+ DataSourceType.FILE).getReader());
+ Assert.assertTrue((hitfragment instanceof JSONObject),
+ "Didn't find a JSON object map in " + hitTestFile);
+ AlignmentI searchResult = getSearchResultFragmentAlignment();
+
+ Assert.assertTrue(searchResult != null && searchResult.getHeight() > 0,
+ "Didn't read search result alignment from " + alignmentFragFile);
+
+ HmmerJSONProcessor hjsp = new HmmerJSONProcessor(searchResult);
+ hjsp.addHit((JSONObject) hitfragment, 1);
+ // check that
+ // scores, posterior probabilities and stuff exist.
+ }
+
+ @Test(groups = { "Functional" })
+ public void parseJsonResultTest() throws Exception
+ {
+
+ Assert.assertTrue(new File(hmmerResultFile).exists(),
+ "Can't find test data.\n" + hmmerResultFile);
+
+ AlignmentI searchResult = getSearchResultAlignment();
+
+ Assert.assertTrue(searchResult != null && searchResult.getHeight() > 0,
+ "Didn't read search result alignment from " + alignmentFragFile);
+
+ HmmerJSONProcessor hjsp = new HmmerJSONProcessor(searchResult);
+ hjsp.parseFrom(new FileParse(hmmerResultFile, DataSourceType.FILE));
+ AlignmentAnnotation[] aa = searchResult.getSequenceAt(5)
+ .getAnnotation();
+ Assert.assertNotNull(aa);
+ Assert.assertEquals(aa.length, 3,
+ "didn't get expected set of annotation.\n");
+ // DPTSERWFHGHLSGKEAEKLLTeKGKHGSFLVRESQSHPGDFVLSVRTgddkgesndgKSKVTHVMIR-CQELKYDVGGGERFDSLTDLVEHYKKNPmvet
+ // LGTVLQLKQP
+ // 5789*****************9799***********************999998888888********.99**************************9999
+ // 899999*999
+ // AlignmentAnnotation
+ // 101 == 8
+ String seq = "tLGT";
+ SequenceI s5 = searchResult.getSequenceAt(5);
+ Assert.assertEquals(
+ s5.getSubSequence(s5.findIndex(225), s5.findIndex(229))
+ .getSequenceAsString(),
+ seq);
+ int pos = s5.findIndex(226);
+ for (AlignmentAnnotation an : aa)
+ {
+ if (an.label.startsWith("Posterior"))
+ {
+ Assert.assertEquals(an.annotations[pos].value, 8f);
+
+ }
+ }
+ ;
+ // check that
+ // scores, posterior probabilities and stuff exist.
+ }
+ // Groovy test
+ // def al = Jalview.getAlignFrames()[0].getViewport().getAlignment()
+ // def jproc = new jalview.ws.ebi.HmmerJSONProcessor(al)
+ // jproc.parseFrom(new
+ // jalview.io.FileParse("examples/testdata/hmmer3/hmmeresult.json.gz","File"))
+ // jproc.updateView(Jalview.getAlignFrames()[0].getViewport())
+
+}