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
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
*/\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
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
* 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
* \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
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
*/\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
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
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
import org.testng.annotations.Test;\r
\r
import compbio.metadata.AllTestSuit;\r
+import compbio.runner.disorder.Disembl;\r
\r
public class SequenceUtilTester {\r
\r
@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
.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
fail(e.getLocalizedMessage());\r
}\r
}\r
-\r
/**\r
* This test tests the loading of horizontally formatted Jronn output file\r
* \r
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
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
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
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