Merge branch 'JWS-27-jronn' into develop
authorjprocter <jprocter@compbio.dundee.ac.uk>
Mon, 4 Jun 2012 16:09:07 +0000 (17:09 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Mon, 4 Jun 2012 16:09:07 +0000 (17:09 +0100)
datamodel/compbio/data/sequence/FastaReader.java
datamodel/compbio/data/sequence/Score.java
datamodel/compbio/data/sequence/SequenceUtil.java
testsrc/compbio/data/sequence/FastaReaderTester.java
testsrc/compbio/data/sequence/SequenceUtilTester.java
testsrc/compbio/ws/server/RegistryWSTester.java
testsrc/testdata/complicated.fasta

index 1641d34..6c3e943 100644 (file)
@@ -22,6 +22,9 @@ import java.io.FileNotFoundException;
 import java.io.InputStream;\r
 import java.util.Iterator;\r
 import java.util.Scanner;\r
+import java.util.regex.MatchResult;\r
+\r
+import javax.vecmath.MismatchedSizeException;\r
 \r
 import compbio.util.Util;\r
 \r
@@ -67,7 +70,10 @@ import compbio.util.Util;
 public class FastaReader implements Iterator<FastaSequence> {\r
 \r
        private final Scanner input;\r
-\r
+       /**\r
+        * Delimiter for the scanner\r
+        */\r
+       private final String DELIM=">";\r
        /**\r
         * Header data can contain non-ASCII symbols and read in UTF8\r
         * \r
@@ -82,7 +88,7 @@ public class FastaReader implements Iterator<FastaSequence> {
         */\r
        public FastaReader(final String inputFile) throws FileNotFoundException {\r
                input = new Scanner(new File(inputFile), "UTF8");\r
-               input.useDelimiter("\\s*>");\r
+               input.useDelimiter(DELIM);\r
                Runtime.getRuntime().addShutdownHook(new Thread() {\r
 \r
                        @Override\r
@@ -104,7 +110,7 @@ public class FastaReader implements Iterator<FastaSequence> {
        public FastaReader(final InputStream inputStream)\r
                        throws FileNotFoundException {\r
                input = new Scanner(inputStream);\r
-               input.useDelimiter("\\s*>");\r
+               input.useDelimiter(DELIM);\r
        }\r
        /**\r
         * {@inheritDoc}\r
@@ -124,10 +130,17 @@ public class FastaReader implements Iterator<FastaSequence> {
         *             if the header or the sequence is missing\r
         * @throws IllegalStateException\r
         *             if the close method was called on this instance\r
+        *             @throws MismatchException - if there were no more FastaSequence's.\r
         */\r
        @Override\r
        public FastaSequence next() {\r
-               return FastaReader.toFastaSequence(input.next());\r
+               String fastaHeader=input.next();\r
+               while (fastaHeader.indexOf("\n")<0 && input.hasNext())\r
+               {\r
+                       fastaHeader = fastaHeader.concat(">");\r
+                       fastaHeader = fastaHeader.concat(input.next());\r
+               }\r
+               return FastaReader.toFastaSequence(fastaHeader);\r
        }\r
 \r
        /**\r
index ec4cadc..fed0ef0 100644 (file)
@@ -187,12 +187,13 @@ public class Score implements Comparable<Score> {
         * \r
         * <pre>\r
         * {@code\r
-        * #MethodName <space separated list of values>\r
+        * #MethodName [comma separated list of ranges] <space separated list of values>\r
         *        \r
         * For example:\r
         *       \r
         * #KABAT 0.2 0.3 0.2 0 0.645 0.333 1 1 0 0\r
         * #SMERFS 0.645 0.333 1 1 0 0 0.2 0.3 0.2 0\r
+        * #COILS 22-33, 44-56 0.121 3.212\r
         * }\r
         * </pre>\r
         * \r
@@ -212,17 +213,17 @@ public class Score implements Comparable<Score> {
                        throw new NullPointerException("Writer must be provided!");\r
                }\r
                for (Score score : scores) {\r
-                       writer.write("#" + score.method + " ");\r
+                       writer.write("#" + score.method);\r
                        int count = score.ranges.size();\r
                        for (Range range : score.ranges) {\r
                                count--;\r
-                               writer.write(range.toString());\r
+                               writer.write(" "+range.toString());\r
                                if (count != 0) {\r
-                                       writer.write(", ");\r
+                                       writer.write(",");\r
                                }\r
                        }\r
                        for (Float scoreVal : score.scores) {\r
-                               writer.write(NUMBER_FORMAT.format(scoreVal) + " ");\r
+                               writer.write(" "+NUMBER_FORMAT.format(scoreVal));\r
                        }\r
                        writer.write("\n");\r
                        writer.flush();\r
index 6e20988..14dedf4 100644 (file)
@@ -589,8 +589,8 @@ public final class SequenceUtil {
                         */\r
                        HashSet<Score> scores = new HashSet<Score>();\r
                        scores.add(new Score(DisemblResult.COILS, coils, coilsR));\r
-                       scores.add(new Score(DisemblResult.HOTLOOPS, hotloops, rem465R));\r
-                       scores.add(new Score(DisemblResult.REM465, rem, loopsR));\r
+                       scores.add(new Score(DisemblResult.REM465, rem, rem465R));\r
+                       scores.add(new Score(DisemblResult.HOTLOOPS, hotloops, loopsR));\r
                        results.put(sequenceName, scores);\r
 \r
                        scansingle.close();\r
index d57bbe5..3a3b747 100644 (file)
@@ -34,6 +34,9 @@ public class FastaReaderTester {
        static FastaSequence s3 = new FastaSequence(" 12 d t y wi               k       jbke    ",\r
                        "  KLSHHDCD" + "   N" + "    H" + "    HSKCTEPHCGNSHQML\n\rHRDP"\r
                                        + "    CCDQCQSWEAENWCASMRKAILF");\r
+       static FastaSequence s4 = new FastaSequence(" 12 d t>y wi->foo          k       jbke    ",\r
+                       "  KLSHHDCD" + "   N" + "    H" + "    HSKCTEPHCGNSHQML\n\rHRDP"\r
+                                       + "    CCDQCQSWEAENWCASMRKAILF");\r
        @Test()\r
        public void test() {\r
 \r
@@ -68,6 +71,7 @@ public class FastaReaderTester {
                Assert.assertEquals(FastaReaderTester.s1, list.get(1));\r
                Assert.assertEquals(FastaReaderTester.s2, list.get(2));\r
                Assert.assertEquals(FastaReaderTester.s3, list.get(3));\r
+               Assert.assertEquals(FastaReaderTester.s4, list.get(4));\r
 \r
        }\r
 }\r
index 2b2ca1a..e646c1e 100644 (file)
@@ -35,6 +35,7 @@ import java.util.Set;
 import org.testng.annotations.Test;\r
 \r
 import compbio.metadata.AllTestSuit;\r
+import compbio.runner.disorder.Disembl;\r
 \r
 public class SequenceUtilTester {\r
 \r
@@ -188,6 +189,35 @@ public class SequenceUtilTester {
        @Test\r
        public void testReadDisemblResults() {\r
 \r
+\r
+               Map<String, Map<String,Set<Range>>> _ranges=new HashMap<String, Map<String,Set<Range>>>();\r
+               Map<String, Set<Range>> ranges=new HashMap<String,Set<Range>>();\r
+               Map<String,Map<String, Float>>  _values=new HashMap<String, Map<String,Float>>();\r
+               Map<String, Float> values = new HashMap<String, Float>();\r
+               Set<Range> rset;\r
+               rset = new HashSet<Range>();\r
+               for (String[] se:new String[][] { { "34","41"},{"50","58"},{"83","91"},{"118","127"},{" 160","169"},{" 191","220"},{" 243","252"},{" 287","343"},{" 350","391"},{" 429","485"},{" 497","506"},{"539","547"}})\r
+               {\r
+                       rset.add(new Range(se));\r
+               }\r
+               ranges.put(DisemblResult.COILS.toString(), rset);\r
+               values.put(DisemblResult.COILS.toString(), Float.valueOf(0.86010f));\r
+               rset = new HashSet<Range>();\r
+               for (String[] se:new String[][] { { "355","368"}})\r
+               {\r
+                       rset.add(new Range(se));\r
+               }\r
+               ranges.put(DisemblResult.REM465.toString(), rset);\r
+               values.put(DisemblResult.REM465.toString(), Float.valueOf(0.88512f));\r
+               rset = new HashSet<Range>();\r
+               for (String[] se:new String[][] { { "190","204"}})\r
+               {\r
+                       rset.add(new Range(se));\r
+               }\r
+               ranges.put(DisemblResult.HOTLOOPS.toString(), rset);\r
+               values.put(DisemblResult.HOTLOOPS.toString(), Float.valueOf(0.37094f));\r
+               _ranges.put("Foobar_dundeefriends", ranges);\r
+               _values.put("Foobar_dundeefriends", values);\r
                FileInputStream fio;\r
                try {\r
                        fio = new FileInputStream(AllTestSuit.TEST_DATA_PATH\r
@@ -202,6 +232,13 @@ public class SequenceUtilTester {
                                                .contains(fs));\r
                                Set<Score> scores = aseqs.get(fs);\r
                                assertEquals(scores.size(), 3);\r
+                               for (Score sc:scores) {\r
+                                       if (_ranges.containsKey(fs))\r
+                                       {\r
+                                       assertEquals("Checking range for Method "+sc.getMethod(),_ranges.get(fs).get(sc.getMethod()), sc.getRanges());\r
+                                       assertEquals("Checking first value for Method "+sc.getMethod(), _values.get(fs).get(sc.getMethod()), sc.getScores().get(0));\r
+                                       }\r
+                               }\r
                        }\r
                        fio.close();\r
                } catch (FileNotFoundException e) {\r
@@ -215,7 +252,6 @@ public class SequenceUtilTester {
                        fail(e.getLocalizedMessage());\r
                }\r
        }\r
-\r
        /**\r
         * This test tests the loading of horizontally formatted Jronn output file\r
         * \r
@@ -302,19 +338,19 @@ public class SequenceUtilTester {
                        assertEquals(0, score.getRanges().size());\r
                        assertEquals(568, score.getScores().size());\r
                        assertEquals("Long", score.getMethod());\r
-                       \r
+\r
                        score = scores.get("Foobar");\r
                        assertNotNull(score);\r
                        assertEquals(0, score.getRanges().size());\r
                        assertEquals(481, score.getScores().size());\r
                        assertEquals("Long", score.getMethod());\r
-                       \r
+\r
                        score = scores.get("dundeefriends");\r
                        assertNotNull(score);\r
                        assertEquals(0, score.getRanges().size());\r
                        assertEquals(513, score.getScores().size());\r
                        assertEquals("Long", score.getMethod());\r
-                       \r
+\r
                } catch (IOException e) {\r
                        e.printStackTrace();\r
                        fail(e.getLocalizedMessage());\r
index 51bfa71..34f7b6c 100644 (file)
@@ -4,15 +4,27 @@ import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;\r
 import static org.testng.Assert.fail;\r
 \r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileNotFoundException;\r
+import java.io.IOException;\r
 import java.net.ConnectException;\r
 import java.util.Arrays;\r
+import java.util.List;\r
 import java.util.Set;\r
 \r
 import javax.xml.ws.WebServiceException;\r
 \r
 import org.testng.annotations.Test;\r
 \r
+import compbio.data.msa.MsaWS;\r
+import compbio.data.sequence.FastaSequence;\r
+import compbio.data.sequence.SequenceUtil;\r
 import compbio.metadata.AllTestSuit;\r
+import compbio.metadata.ChunkHolder;\r
+import compbio.metadata.JobStatus;\r
+import compbio.metadata.JobSubmissionException;\r
+import compbio.metadata.ResultNotAvailableException;\r
 import compbio.ws.client.Jws2Client;\r
 import compbio.ws.client.Services;\r
 import compbio.ws.client.WSTesterTester;\r
@@ -119,4 +131,92 @@ public class RegistryWSTester {
                        fail(e.getLocalizedMessage());\r
                }\r
        }\r
+\r
+       @Test(groups = {AllTestSuit.test_group_webservices})\r
+       public void testProgressReporting() {\r
+               MsaWS service = null;\r
+               try {\r
+                       service = (MsaWS) Jws2Client.connect(\r
+                                       "http://www.compbio.dundee.ac.uk/jabaws",\r
+                                       // "http://webserv1.cluster.lifesci.dundee.ac.uk:8089/jabaws",\r
+                                       Services.ProbconsWS);\r
+                       File input = new File(AllTestSuit.TEST_DATA_PATH_ABSOLUTE\r
+                                       + "200x500Protein.fasta");\r
+                       assertTrue(input.exists());\r
+                       List<FastaSequence> fs = SequenceUtil\r
+                                       .readFasta(new FileInputStream(input));\r
+                       String jobId = service.align(fs);\r
+                       Thread.sleep(5000);\r
+                       ChunkHolder pos = null;\r
+                       while (service.getJobStatus(jobId) == JobStatus.RUNNING) {\r
+                               if (pos == null) {\r
+                                       pos = service.pullExecStatistics(jobId, 0);\r
+                               } else {\r
+                                       pos = service.pullExecStatistics(jobId,\r
+                                                       pos.getNextPosition());\r
+                               }\r
+                               Thread.sleep(10);\r
+                               System.out.print(pos.getChunk());\r
+                       }\r
+                       System.out.println();\r
+                       System.out.println(service.getResult(jobId));\r
+               } catch (ConnectException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (WebServiceException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (ResultNotAvailableException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (FileNotFoundException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (IOException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (JobSubmissionException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               }\r
+       }\r
+\r
+       @Test(groups = {AllTestSuit.test_group_webservices})\r
+       public void testPullRunningJob() {\r
+               MsaWS service = null;\r
+               try {\r
+                       service = (MsaWS) Jws2Client.connect(\r
+                                       "http://webserv1.cluster.lifesci.dundee.ac.uk:8089/jabaws",\r
+                                       Services.ProbconsWS);\r
+                       String jobId = "@Probcons#158079030012566";\r
+                       ChunkHolder pos = null;\r
+                       while (service.getJobStatus(jobId) == JobStatus.RUNNING) {\r
+                               if (pos == null) {\r
+                                       pos = service.pullExecStatistics(jobId, 0);\r
+                               } else {\r
+                                       pos = service.pullExecStatistics(jobId,\r
+                                                       pos.getNextPosition());\r
+                               }\r
+                               Thread.sleep(10);\r
+                               System.out.print(pos.getChunk());\r
+                       }\r
+                       System.out.println();\r
+                       System.out.println(service.getResult(jobId));\r
+               } catch (ConnectException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (WebServiceException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (ResultNotAvailableException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               }\r
+       }\r
 }\r
index 3c891d6..e0a71d5 100644 (file)
@@ -20,4 +20,11 @@ EFITEA       WWGRWGAITFFHAH  ENKNEIQECSDQNLKE        SRTTCEIID   TCHLFTRHLDGW
    N\r
     H\r
     HSKCTEPHCGNSHQMLHRDP\r
-    CCDQCQSWEAENWCASMRKAILF
\ No newline at end of file
+    CCDQCQSWEAENWCASMRKAILF\r
+   > 12 d t>y wi->foo          k       jbke    \r
+  KLSHHDCD\r
+   N\r
+    H\r
+    HSKCTEPHCGNSHQMLHRDP\r
+    CCDQCQSWEAENWCASMRKAILF\r
+    
\ No newline at end of file