package uk.co.flax.biosolr.pdbe.phmmer; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import javax.json.Json; import javax.json.JsonReader; import org.junit.Test; public class TestPhmmerJob { private static final String RESULT_PATH = "result"; @Test public void testParsing() throws IOException, URISyntaxException { byte[] result = Files.readAllBytes(Paths.get(TestPhmmerJob.class.getResource(RESULT_PATH).toURI())); PhmmerClient client = mock(PhmmerClient.class); JsonReader reader = Json.createReader(new ByteArrayInputStream(result)); when(client.getResults(null, null)).thenReturn(reader.readObject()); PhmmerJob job = new PhmmerJob(client, null, null); PhmmerResults results = job.runJob(); assertEquals(116, results.getNumChains()); String[] pdbIds = new String[] { "1cms", "3cms", "4aa9", "5pep", "1psn", "1flh", "1f34", "3pep", "2psg", "1tzs", "1am5", "1avf", "1qdm", "1smr", "3vcm", "1bil", "1bbs", "3d91", "2i4q", "1g0v", "2x0b", "2fs4", "1dp5", "1fq4", "1lya", "4obz", "1b5f", "1uh7", "2apr", "3qrv", "1me6", "2r9b", "1lf3", "1pfz", "3f9q", "1lee", "2bju", "3o9l", "2anl", "1qs8", "1miq", "1ls5", "3liz", "1yg9", "3fns", "3qvc", "1mpp", "2asi", "3fv3", "1lya", "4obz", "2h6s", "3o9l", "1zap", "3emy", "1eag", "4b1c", "1j71", "1apt", "1ibq", "2ewy", "3zkm", "3zkg", "4b70", "4b0q", "4b1d", "4ewo", "2fdp", "1sgz", "4fs4", "3u6a", "1fkn", "4dpf", "3kmx", "2qk5", "2of0", "3r1g", "1ym2", "3udh", "2zjn", "3ixk", "2hm1", "3dm6", "1ym4", "4l7g", "3hvg", "1w50", "2zhr", "4fsl", "2wjo", "3l58", "2zdz", "3vv6", "3bra", "3tpr", "2zjk", "4x7i", "2va5", "2hiz", "3lpi", "2q11", "2q15", "2zji", "2vie", "1tqf", "3qi1", "2qzl", "3exo", "3tpj", "2zjh", "2qzx", "2zjj", "1e5o", "1izd", "1wkr", "1b5f" }; Set<String> pdbIdSet = new HashSet<>(Arrays.asList(pdbIds)); assertEquals(pdbIdSet, results.getPdbIds()); // values checked from http://www.ebi.ac.uk/Tools/hmmer/results/7B8EF2BA-5C4B-11E5-BB6E-2FF0D26C98AD/score Alignment a = results.getAlignments().get("3zkm").get("A"); assertEquals("BETA-SECRETASE 2", a.getDescription()); assertEquals("Homo sapiens", a.getSpecies()); assertEquals(78.2, a.getScore(), 0.1); assertEquals(16, a.getQuerySequenceStart()); assertEquals(227, a.getQuerySequenceEnd()); assertEquals(9, a.getTargetEnvelopeStart()); assertEquals(259, a.getTargetEnvelopeEnd()); assertEquals(18, a.getTargetSequenceStart()); assertEquals(240, a.getTargetSequenceEnd()); assertEquals(0.75, a.getBias(), 0.01); assertEquals(0.78, a.getAccuracy(), 0.01); assertEquals(31.6, a.getIdentityPercent(), 0.1); assertEquals(67, a.getIdentityCount()); assertEquals(57.1, a.getSimilarityPercent(), 0.1); assertEquals(121, a.getSimilarityCount()); assertEquals(74.0, a.getBitScore(), 0.1); assertEquals(7.9e-21, a.getEValue(), 1e-22); assertEquals(1.5e-19, a.getEValueInd(), 1e-20); assertEquals(6.6e-23, a.getEValueCond(), 1e-24); assertEquals("yfgkiylgtppqeftvlfdtgssdfwvpsiycksnacknhqrfdprksstfqnlgkplsihygtgsmqgilgydtvtvsn" + "ivdiqqtvglstqepgdvft..yaefdgilgmaypslaseys.ip.vfdnmmnrhlvaqdlfsvymdrng........qe" + "smltlgaidpsyytgslhwvpvtvqqywqftvdsvtisgvvv..ace..ggcqaildtgtsklvgpss", a.getQuerySequence()); assertEquals("y+ ++ +gtppq++ +l dtgss+f v fd ++sst+++ g +++ y gs g++g d vt+ " + " + v+++t ++ f +++gilg+ay +la s + fd+++ + ++fs+ m g " + " l lg i+ps y g + + p+ + y+q+ + + i g + c ++ +ai+d+gt+ l p ", a.getMatch()); assertEquals("YYLEMLIGTPPQKLQILVDTGSSNFAVAGTPH----SYIDTYFDTERSSTYRSKGFDVTVKYTQGSWTGFVGEDLVTIPK" + "GFNTSFLVNIATIFESENFFlpGIKWNGILGLAYATLAKPSSsLEtFFDSLVTQAN-IPNVFSMQMCGAGlpvagsgtNG" + "GSLVLGGIEPSLYKGDIWYTPIKEEWYYQIEILKLEIGGQSLnlDCReyNADKAIVDSGTTLLRLPQK", a.getTargetSequence()); assertEquals("888999*******************9976432....233467**************************************" + "**********9976665554114699***********9865425515677776655.46789888865441111111134" + "5899*********************************99764115643356789******98877765", a.getPosteriorProbability()); } }