TODO: \r
\r
-DONE: LocalExecutor service must be shutdown on web application undeploy event not on JVM shutdown. \r
-This is because JVM is still running even after web application is shut down!\r
-\r
-\r
-Good toString method for Limits (test with command line client -limits)\r
+Add globprot ws \r
+Add ronn ws\r
\r
-Add facility to distribute other results of the calculations like the trees and annotation file for probcons. \r
+USE CASE - TURN ALIGNMENT INTO PROFILE AND SEARCH SEQUENCE DATABASE USECASE\r
+- Receive user alignment \r
+- use hmmerbuild to turn it to profile\r
+- use hmmersearch to search the database \r
\r
-Use absolute path for web site download links as archives are not included into distro! \r
+#END OF - TURN ALIGNMENT INTO PROFILE AND SEARCH SEQUENCE DATABASE USECASE \r
\r
+New data model for representing psiblast,blast,phmmer,jackhmmer results\r
\r
-(later) Define limits for presets\r
+new parsers for the above programmes output (Stockholm MSA format?)\r
\r
-Add documentation on Presets, Parameters and Limits\r
+Think hard on what to do with large output files? \r
+e.g. serve the hits table in full, but retrieve alignments on demand.\r
+What actually neeeds to be sent? \r
\r
-Explain how to define a limit\r
+Add facility to distribute other results of the calculations like the trees and \r
+annotation file for probcons. \r
\r
-Rearrange web site docs - add links to the top of the page to the topics discussed below\r
+# END OF SEARCHING SEQUENCE DATABASE USECASE\r
\r
-Put the documentation for various executables online\r
-\r
-Pack the test cases and build file to run them in one of the distributives \r
+Good toString method for Limits (test with command line client -limits)\r
\r
-Add test for repeated result collection from cluster engine \r
+JABA DOCS\r
+(later) Define limits for presets - if required\r
+(later) Add documentation on Presets, Parameters and Limits\r
+(later) Explain how to define a limit\r
\r
-Add logging facility to WSTester so more details of the problem can be reported\r
+Add test for repeated result collection from cluster engine\r
\r
-Make left gradient image one-two characters larger + change "For developer ->For Developers"\r
+(low) Pack the test cases and build file to run them in one of the distributives \r
\r
-PART DONE: test local/cluster execution - test Load balancer\r
+(low) Add logging facility to WSTester so more details of the problem can be reported\r
\r
(low) Statistics collector for engines (number of operations/timing)\r
\r
\r
(later) Implement utility to rerun died tasks\r
\r
-(later) Progress bars - talk about (1. Proper time assessment vs low hustle option - dumping output to screen)\r
-\r
(later) Add recognition for executables for the different architectures\r
\r
(later) use Latch to manage engine reservations. Reservations for parallel jobs? \r
\r
DONE\r
+WILL NOT DO: Progress bars - needs assessing how long does it take to run a task\r
+DONE: LocalExecutor service must be shutdown on web application undeploy event not on JVM shutdown. \r
+ This is because JVM is still running even after web application is shut down!\r
+DONE: Use absolute path for web site download links as archives are not included into distro!\r
+DONE: Rearrange web site docs - add links to the top of the page to the topics discussed below\r
+DONE: Put the documentation for various executables online\r
+DONE: Make left gradient image one-two characters larger + change "For developer ->For Developers"\r
+DONE: test local/cluster execution - test Load balancer\r
DONE: Improve SimpleWS client so it can be scripted against: give user alignment and accept parameters\r
DONE: Make a configuration tester class (check that configuration files point to the executables, and they can be executed)\r
DONE: PUT CLIENT JAR INTO WEB-INF/LIB - most likely need to get rid of dist prefix in the build file\r
-DONE: Different packages for donwload and dundee. generic vs specific settings. \r
+DONE: Different packages for download and dundee. generic vs specific settings. \r
DONE: JAVADOC\r
DONE: Refactor EngineResourcesLeak tester to hide a map implementation!\r
DONE: Compile executables for linux in the most generic way\r
<!-- Distributive file names-->\r
<property name="distdir" value="website/archive"/>\r
<mkdir dir="${distdir}" />\r
+ <property name="datamodel" value="${distdir}/datamodel-1.0.jar"/>\r
<property name="min-jaba-client" value="${distdir}/min-jaba-client.jar"/>\r
<property name="full-jaba-client" value="${distdir}/full-jaba-client.jar"/>\r
<property name="jaba-source-jar" value="${distdir}/jaba-source.jar"/>\r
</target>\r
\r
\r
+ <target name="datamodel-jar" description="Pack data model classes" depends="compile">\r
+ <echo>Jar file: Minimal WS client jar</echo>\r
+ <delete file="${basedir}/${datamodel}"></delete>\r
+ <jar jarfile="${basedir}/${datamodel}">\r
+ <zipgroupfileset excludes="META-INF/*.SF" dir="${web.lib.path}" >\r
+ <include name="compbio-util-1.2.jar"/>\r
+ </zipgroupfileset>\r
+ <fileset dir="${basedir}/WEB-INF/classes/"> \r
+ <include name="compbio/data/sequence/*.class"/>\r
+ <include name="compbio/metadata/*.class"/>\r
+ </fileset>\r
+ <manifest>\r
+ <attribute name="Built-By" value="Peter Troshin" />\r
+ <attribute name="Class-Path" value="." />\r
+ <attribute name="Implementation-Title" value="Datamodel for Java Bioinformatics Analyses Web Services " />\r
+ <attribute name="Implementation-Vendor" value="Peter Troshin" />\r
+ <attribute name="Implementation-URL" value="http://www.compbio.dundee.ac.uk" />\r
+ </manifest>\r
+ </jar>\r
+ </target>\r
\r
\r
- <target name="minimal-jaba-client-jar" description="Pack metadata, data model, WS interfaces, a simple ws client class" depends="compile">\r
+ <target name="minimal-jaba-client-jar" description="Pack metadata, data model, WS interfaces, a simple ws client class" depends="compile, datamodel-jar">\r
<echo>Jar file: Minimal WS client jar</echo>\r
<delete file="${basedir}/${min-jaba-client}"></delete>\r
<jar jarfile="${basedir}/${min-jaba-client}">\r
- <zipgroupfileset excludes="META-INF/*.SF" dir="${web.lib.path}" >\r
- <include name="compbio-util-1.2.jar"/>\r
- </zipgroupfileset>\r
+ <zipgroupfileset excludes="META-INF/*.SF" dir="" includes="${datamodel}" />\r
<fileset dir="${basedir}/WEB-INF/classes/"> \r
- <include name="compbio/data/sequence/*.class"/>\r
- <include name="compbio/metadata/*.class"/>\r
<!-- This will include JAXWS artifacts. Alternatively they can be generated on the fly. -->\r
<include name="compbio/data/msa/**"/>\r
<include name="compbio/ws/client/**"/>\r
### Clustal configuration ###\r
local.clustalw.bin.windows=binaries/clustalw2.exe\r
local.clustalw.bin=binaries/src/clustalw/src/clustalw2\r
-#cluster.clustalw.bin=/homes/pvtroshin/workspace/clustengine/binaries/src/clustalw/src/clustalw2\r
+cluster.clustalw.bin=/homes/pvtroshin/workspace/JABA2/binaries/src/clustalw/src/clustalw2\r
# Parameters names which come from RunnerConfig -> Parameters.xml file ultimately are all lowercased in comparison!\r
# see engine.client.Util.getExecProperty() method for details \r
# So they are case insensitive. \r
clustalw.presets.file=conf/settings/ClustalPresets.xml\r
clustalw.parameters.file=conf/settings/ClustalParameters.xml\r
clustalw.limits.file=conf/settings/ClustalLimits.xml\r
-#clustalw.cluster.settings=-l h_cpu=24:00:00 -l h_vmem=6000M -l ram=6000M\r
+clustalw.cluster.settings=-l h_cpu=24:00:00 -l h_vmem=6000M -l ram=6000M\r
\r
### Muscle configuration ###\r
local.muscle.bin.windows=binaries/muscle.exe\r
local.muscle.bin=binaries/src/muscle/muscle\r
# Beware version of muscle on the cluster older and does not support some \r
# of the newer version attributed thus, will not work with Muscle.java wrapper!\r
-cluster.muscle.bin=/homes/pvtroshin/workspace/clustengine/binaries/src/muscle/muscle\r
+cluster.muscle.bin=/homes/pvtroshin/workspace/JABA2/binaries/src/muscle/muscle\r
#The environment variable MUSCLE_MXPATH can be used to specify a path where the matrices are stored\r
# e.g. MUSCLE_MXPATH#binaries/matrices - but need to privide absolute path!\r
muscle.-matrix.path=binaries/matrices\r
muscle.presets.file=conf/settings/MusclePresets.xml\r
muscle.parameters.file=conf/settings/MuscleParameters.xml\r
muscle.limits.file=conf/settings/MuscleLimits.xml\r
-#muscle.cluster.settings=-l h_cpu=24:00:00 -l h_vmem=6000M -l ram=6000M\r
+muscle.cluster.settings=-l h_cpu=24:00:00 -l h_vmem=6000M -l ram=6000M\r
\r
### Mafft configuration ###\r
#local.mafft.bin.windows=\r
local.mafft.bin=binaries/src/mafft/binaries/mafft\r
-#cluster.mafft.bin=/homes/pvtroshin/workspace/clustengine/binaries/src/mafft/core/mafft\r
+cluster.mafft.bin=/homes/pvtroshin/workspace/JABA2/binaries/src/mafft/core/mafft\r
mafft.bin.env=MAFFT_BINARIES#binaries/src/mafft/binaries;FASTA_4_MAFFT#binaries/src/fasta34/fasta34;\r
mafft.--aamatrix.path=binaries/matrices\r
mafft.presets.file=conf/settings/MafftPresets.xml\r
mafft.parameters.file=conf/settings/MafftParameters.xml\r
mafft.limits.file=conf/settings/MafftLimits.xml\r
-#mafft.cluster.settings=-l h_cpu=24:00:00 -l h_vmem=6000M -l ram=6000M\r
+mafft.cluster.settings=-l h_cpu=24:00:00 -l h_vmem=6000M -l ram=6000M\r
\r
### Tcoffee configuration ###\r
local.tcoffee.bin=binaries/src/tcoffee/t_coffee_source/t_coffee\r
-#cluster.tcoffee.bin=/homes/pvtroshin/workspace/clustengine/binaries/src/tcoffee/t_coffee_source/t_coffee\r
+cluster.tcoffee.bin=/homes/pvtroshin/workspace/JABA2/binaries/src/tcoffee/t_coffee_source/t_coffee\r
#/sw/bin/t_coffee\r
# Sub matrix support does not work \r
#tcoffee.-matrix.path=binaries/matrices\r
tcoffee.presets.file=conf/settings/TcoffeePresets.xml\r
tcoffee.parameters.file=conf/settings/TcoffeeParameters.xml\r
tcoffee.limits.file=conf/settings/TcoffeeLimits.xml\r
-#tcoffee.cluster.cpunum=4\r
-#tcoffee.cluster.settings=-q mpi -pe mpi 4 -l h_vmem=1700M -l ram=1700M -l h_cpu=24:00:00 \r
+tcoffee.cluster.cpunum=4\r
+tcoffee.cluster.settings=-q 64bit-pri.q -pe smp 4 -l h_vmem=1700M -l ram=1700M -l h_cpu=24:00:00 \r
\r
### Probcons configuration ###\r
#local.probcons.bin.windows=\r
local.probcons.bin=binaries/src/probcons/probcons\r
-#cluster.probcons.bin=/homes/pvtroshin/workspace/clustengine/binaries/src/probcons/probcons\r
+cluster.probcons.bin=/homes/pvtroshin/workspace/JABA2/binaries/src/probcons/probcons\r
#Probcons does not support matrix loading - unrecognised option reported! \r
probcons.parameters.file=conf/settings/ProbconsParameters.xml\r
probcons.limits.file=conf/settings/ProbconsLimits.xml\r
-#probcons.cluster.settings=-l h_cpu=24:00:00 -l h_vmem=6000M -l ram=6000M\r
+probcons.cluster.settings=-l h_cpu=24:00:00 -l h_vmem=6000M -l ram=6000M\r
+\r
+### Jronn configuration ### \r
+local.jronn.bin.windows=D:\\Java\\jdk1.6.0_14\\bin\\java.exe \r
+local.jronn.bin=/sw/java/latest/bin/java\r
+cluster.jronn.bin=/sw/java/latest/bin/java\r
+jronn.jar.file=binaries/jronn3.1.jar\r
+jronn.parameters.file=conf/settings/JronnParameters.xml\r
+jronn.limits.file=conf/settings/JronnLimits.xml\r
+jronn.jvm.options=-Xms32M -Xmx512M\r
+jronn.cluster.cpunum=4\r
+jronn.cluster.settings=-q 64bit-pri.q -pe smp 4 -l h_vmem=1700M -l ram=1700M -l h_cpu=24:00:00\r
\r
## CHANGE THIS (The root directory where to store all the log files) \r
-#logDir = .\r
+logDir = .\r
\r
## Uncomment to enable JWS2 activity logging to standard out (to the console if available)\r
## for possible log levels please refer to Log4j documentation http://logging.apache.org/log4j/1.2/manual.html \r
## FATAL - log fatal events only\r
\r
## Uncomment this if you would like the system to log messages into stdout\r
-#log4j.rootLogger=ERROR, stdout\r
-#log4j.appender.stdout=org.apache.log4j.ConsoleAppender\r
-#log4j.appender.stdout.Target=System.out\r
-#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout\r
-#log4j.appender.stdout.layout.ConversionPattern=%m%n\r
+log4j.rootLogger=ERROR, stdout\r
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender\r
+log4j.appender.stdout.Target=System.out\r
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout\r
+log4j.appender.stdout.layout.ConversionPattern=%m%n\r
\r
## Uncomment to enable JWS2 activity logging to the file\r
-#log4j.logger.compbio=ERROR, ACTIVITY\r
-#log4j.appender.ACTIVITY=org.apache.log4j.RollingFileAppender\r
-#log4j.appender.ACTIVITY.File=${logDir}/activity.log\r
-#log4j.appender.ACTIVITY.MaxFileSize=10MB\r
-#log4j.appender.ACTIVITY.MaxBackupIndex=10000\r
-#log4j.appender.ACTIVITY.layout=org.apache.log4j.PatternLayout\r
-#log4j.appender.ACTIVITY.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p %3x - %m%n\r
+log4j.logger.compbio=ERROR, ACTIVITY\r
+log4j.appender.ACTIVITY=org.apache.log4j.RollingFileAppender\r
+log4j.appender.ACTIVITY.File=${logDir}/activity.log\r
+log4j.appender.ACTIVITY.MaxFileSize=10MB\r
+log4j.appender.ACTIVITY.MaxBackupIndex=10000\r
+log4j.appender.ACTIVITY.layout=org.apache.log4j.PatternLayout\r
+log4j.appender.ACTIVITY.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p %3x - %m%n\r
\r
## Uncomment for separate local engine execution log (debugging only)\r
#log4j.logger.compbio.engine.local.LocalExecutorService=INFO, C\r
--- /dev/null
+<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>\r
+<limits>\r
+ <runnerClassName>compbio.runner.disorder.Jronn</runnerClassName>\r
+ <limit isDefault="true">\r
+ <seqNumber>2000</seqNumber>\r
+ <seqLength>2000</seqLength>\r
+ </limit>\r
+ <limit isDefault="false">\r
+ <preset># LocalEngineExecutionLimit #</preset>\r
+ <seqNumber>5</seqNumber>\r
+ <seqLength>500</seqLength>\r
+ </limit>\r
+</limits>\r
--- /dev/null
+<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>\r
+<runnerConfig>\r
+ <runnerClassName>compbio.runner.disorder.Jronn</runnerClassName>\r
+ <prmSeparator>=</prmSeparator>\r
+ <parameters>\r
+ <name>Disorder probability</name>\r
+ <description>The probability of disorder threshold</description>\r
+ <optionNames>-d</optionNames>\r
+ <furtherDetails>prog_docs/jronn.html</furtherDetails>\r
+ <defaultValue>0.53</defaultValue>\r
+ <validValue>\r
+ <type>Float</type>\r
+ <min>0.01</min>\r
+ <max>0.99</max>\r
+ </validValue>\r
+ </parameters>\r
+</runnerConfig>\r
--- /dev/null
+package compbio.data.sequence;\r
+\r
+import java.util.Arrays;\r
+\r
+public class AnnotatedSequence extends FastaSequence {\r
+\r
+ private final float[] annotation;\r
+\r
+ public AnnotatedSequence(String id, String sequence, float[] annotation) {\r
+ super(id, sequence);\r
+ this.annotation = annotation;\r
+ if (annotation == null || annotation.length != sequence.length()) {\r
+ throw new IllegalArgumentException("The length of the annotation ("\r
+ + ((annotation != null) ? annotation.length : "0")\r
+ + ") does not match the length of the sequence ("\r
+ + sequence.length() + ")!");\r
+ }\r
+ }\r
+\r
+ public AnnotatedSequence(FastaSequence fsequence, float[] annotation) {\r
+ this(fsequence.getId(), fsequence.getSequence(), annotation);\r
+ }\r
+\r
+ public float[] getAnnotation() {\r
+ return annotation;\r
+ }\r
+\r
+ @Override\r
+ public int hashCode() {\r
+ final int prime = 7;\r
+ int result = super.hashCode();\r
+ result = prime * result + Arrays.hashCode(annotation);\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (this == obj)\r
+ return true;\r
+ if (!super.equals(obj))\r
+ return false;\r
+ if (getClass() != obj.getClass())\r
+ return false;\r
+ AnnotatedSequence other = (AnnotatedSequence) obj;\r
+ if (!Arrays.equals(annotation, other.annotation))\r
+ return false;\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return super.toString() + "Annotation:\n "\r
+ + Arrays.toString(annotation) + "\n";\r
+ }\r
+\r
+}\r
-/* Copyright (c) 2009 Peter Troshin\r
+/* \r
+ * @(#)SequenceUtil.java 1.0 September 2009\r
+ * \r
+ * Copyright (c) 2009 Peter Troshin\r
* \r
- * JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0\r
+ * Jalview Web Services version: 2.0 \r
* \r
* This library is free software; you can redistribute it and/or modify it under the terms of the\r
* Apache License version 2 as published by the Apache Software Foundation\r
* License for more details.\r
* \r
* A copy of the license is in apache_license.txt. It is also available here:\r
- * @see: http://www.apache.org/licenses/LICENSE-2.0.txt\r
+ * see: http://www.apache.org/licenses/LICENSE-2.0.txt\r
* \r
* Any republication or derived work distributed in source code form\r
* must include this copyright and license notice.\r
import java.io.BufferedReader;\r
import java.io.BufferedWriter;\r
import java.io.Closeable;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
import java.io.IOException;\r
import java.io.InputStream;\r
import java.io.InputStreamReader;\r
/**\r
* Utility class for operations on sequences\r
* \r
- * @author pvtroshin\r
- * \r
- * Date September 2009\r
+ * @author Petr Troshin\r
+ * @version 1.0\r
*/\r
public final class SequenceUtil {\r
\r
/**\r
* @return true is the sequence contains only letters a,c, t, g, u\r
*/\r
- public static boolean isNucleotideSequence(FastaSequence s) {\r
- return isNonAmbNucleotideSequence(s.getSequence());\r
+ public static boolean isNucleotideSequence(final FastaSequence s) {\r
+ return SequenceUtil.isNonAmbNucleotideSequence(s.getSequence());\r
}\r
\r
/**\r
* (!) - B char\r
*/\r
public static boolean isNonAmbNucleotideSequence(String sequence) {\r
- sequence = cleanSequence(sequence);\r
- if (DIGIT.matcher(sequence).find()) {\r
+ sequence = SequenceUtil.cleanSequence(sequence);\r
+ if (SequenceUtil.DIGIT.matcher(sequence).find()) {\r
return false;\r
}\r
- if (NON_NUCLEOTIDE.matcher(sequence).find()) {\r
+ if (SequenceUtil.NON_NUCLEOTIDE.matcher(sequence).find()) {\r
return false;\r
/*\r
* System.out.format("I found the text starting at " +\r
* nonDNAmatcher.end());\r
*/\r
}\r
- Matcher DNAmatcher = NUCLEOTIDE.matcher(sequence);\r
+ final Matcher DNAmatcher = SequenceUtil.NUCLEOTIDE.matcher(sequence);\r
return DNAmatcher.find();\r
}\r
\r
*/\r
public static String cleanSequence(String sequence) {\r
assert sequence != null;\r
- final Matcher m = WHITE_SPACE.matcher(sequence);\r
+ final Matcher m = SequenceUtil.WHITE_SPACE.matcher(sequence);\r
sequence = m.replaceAll("").toUpperCase();\r
return sequence;\r
}\r
* @return cleaned up sequence\r
*/\r
public static String deepCleanSequence(String sequence) {\r
- sequence = cleanSequence(sequence);\r
- sequence = DIGIT.matcher(sequence).replaceAll("");\r
- sequence = NONWORD.matcher(sequence).replaceAll("");\r
- Pattern othernonSeqChars = Pattern.compile("[_-]+");\r
+ sequence = SequenceUtil.cleanSequence(sequence);\r
+ sequence = SequenceUtil.DIGIT.matcher(sequence).replaceAll("");\r
+ sequence = SequenceUtil.NONWORD.matcher(sequence).replaceAll("");\r
+ final Pattern othernonSeqChars = Pattern.compile("[_-]+");\r
sequence = othernonSeqChars.matcher(sequence).replaceAll("");\r
return sequence;\r
}\r
* @return true is the sequence is a protein sequence, false overwise\r
*/\r
public static boolean isProteinSequence(String sequence) {\r
- sequence = cleanSequence(sequence);\r
- if (isNonAmbNucleotideSequence(sequence)) {\r
+ sequence = SequenceUtil.cleanSequence(sequence);\r
+ if (SequenceUtil.isNonAmbNucleotideSequence(sequence)) {\r
return false;\r
}\r
- if (DIGIT.matcher(sequence).find()) {\r
+ if (SequenceUtil.DIGIT.matcher(sequence).find()) {\r
return false;\r
}\r
- if (NON_AA.matcher(sequence).find()) {\r
+ if (SequenceUtil.NON_AA.matcher(sequence).find()) {\r
return false;\r
}\r
- Matcher protmatcher = AA.matcher(sequence);\r
+ final Matcher protmatcher = SequenceUtil.AA.matcher(sequence);\r
return protmatcher.find();\r
}\r
\r
* protein or DNA\r
*/\r
public static boolean isAmbiguosProtein(String sequence) {\r
- sequence = cleanSequence(sequence);\r
- if (isNonAmbNucleotideSequence(sequence)) {\r
+ sequence = SequenceUtil.cleanSequence(sequence);\r
+ if (SequenceUtil.isNonAmbNucleotideSequence(sequence)) {\r
return false;\r
}\r
- if (DIGIT.matcher(sequence).find()) {\r
+ if (SequenceUtil.DIGIT.matcher(sequence).find()) {\r
return false;\r
}\r
- if (NON_AA.matcher(sequence).find()) {\r
+ if (SequenceUtil.NON_AA.matcher(sequence).find()) {\r
return false;\r
}\r
- if (AA.matcher(sequence).find()) {\r
+ if (SequenceUtil.AA.matcher(sequence).find()) {\r
return false;\r
}\r
- Matcher amb_prot = AMBIGUOUS_AA.matcher(sequence);\r
+ final Matcher amb_prot = SequenceUtil.AMBIGUOUS_AA.matcher(sequence);\r
return amb_prot.find();\r
}\r
\r
* - the maximum number of characters to write in one line\r
* @throws IOException\r
*/\r
- public static void writeFasta(OutputStream outstream,\r
- List<FastaSequence> sequences, int width) throws IOException {\r
- OutputStreamWriter writer = new OutputStreamWriter(outstream);\r
- BufferedWriter fastawriter = new BufferedWriter(writer);\r
- for (FastaSequence fs : sequences) {\r
- fastawriter.write(fs.getOnelineFasta());\r
+ public static void writeFasta(final OutputStream outstream,\r
+ final List<FastaSequence> sequences, final int width)\r
+ throws IOException {\r
+ final OutputStreamWriter writer = new OutputStreamWriter(outstream);\r
+ final BufferedWriter fastawriter = new BufferedWriter(writer);\r
+ for (final FastaSequence fs : sequences) {\r
+ fastawriter.write(fs.getFormatedSequence(width));\r
}\r
outstream.flush();\r
fastawriter.close();\r
* @return list of FastaSequence objects\r
* @throws IOException\r
*/\r
- public static List<FastaSequence> readFasta(InputStream inStream)\r
+ public static List<FastaSequence> readFasta(final InputStream inStream)\r
throws IOException {\r
- List<FastaSequence> seqs = new ArrayList<FastaSequence>();\r
- InputStreamReader inReader = new InputStreamReader(inStream);\r
- BufferedReader infasta = new BufferedReader(inReader);\r
- Pattern pattern = Pattern.compile("//s+");\r
+ final List<FastaSequence> seqs = new ArrayList<FastaSequence>();\r
+\r
+ final BufferedReader infasta = new BufferedReader(\r
+ new InputStreamReader(inStream, "UTF8"), 16000);\r
+ final Pattern pattern = Pattern.compile("//s+");\r
\r
String line;\r
String sname = "", seqstr = null;\r
do {\r
line = infasta.readLine();\r
- if (line == null || line.startsWith(">")) {\r
- if (seqstr != null)\r
+ if ((line == null) || line.startsWith(">")) {\r
+ if (seqstr != null) {\r
seqs.add(new FastaSequence(sname.substring(1), seqstr));\r
+ }\r
sname = line; // remove >\r
seqstr = "";\r
} else {\r
- String subseq = pattern.matcher(line).replaceAll("");\r
+ final String subseq = pattern.matcher(line).replaceAll("");\r
seqstr += subseq;\r
}\r
} while (line != null);\r
- inReader.close();\r
+\r
infasta.close();\r
return seqs;\r
}\r
* @param sequences\r
* @throws IOException\r
*/\r
- public static void writeFasta(OutputStream os, List<FastaSequence> sequences)\r
- throws IOException {\r
- OutputStreamWriter outWriter = new OutputStreamWriter(os);\r
- BufferedWriter fasta_out = new BufferedWriter(outWriter);\r
- for (FastaSequence fs : sequences) {\r
+ public static void writeFasta(final OutputStream os,\r
+ final List<FastaSequence> sequences) throws IOException {\r
+ final OutputStreamWriter outWriter = new OutputStreamWriter(os);\r
+ final BufferedWriter fasta_out = new BufferedWriter(outWriter);\r
+ for (final FastaSequence fs : sequences) {\r
fasta_out.write(fs.getOnelineFasta());\r
}\r
fasta_out.close();\r
outWriter.close();\r
}\r
\r
+ public static List<AnnotatedSequence> readJRonn(final File result)\r
+ throws IOException, UnknownFileFormatException {\r
+ InputStream input = new FileInputStream(result);\r
+ List<AnnotatedSequence> sequences = readJRonn(input);\r
+ input.close();\r
+ return sequences;\r
+ }\r
+\r
+ /**\r
+ * Reader for JRonn horizontal file format\r
+ * \r
+ * >Foobar\r
+ * \r
+ * M G D T T A G\r
+ * \r
+ * 0.48 0.42 0.42 0.48 0.52 0.53 0.54\r
+ * \r
+ * All values are tab delimited\r
+ * \r
+ * @param inStream\r
+ * @return\r
+ * @throws IOException\r
+ * @throws UnknownFileFormatException\r
+ */\r
+ public static List<AnnotatedSequence> readJRonn(final InputStream inStream)\r
+ throws IOException, UnknownFileFormatException {\r
+ final List<AnnotatedSequence> seqs = new ArrayList<AnnotatedSequence>();\r
+\r
+ final BufferedReader infasta = new BufferedReader(\r
+ new InputStreamReader(inStream, "UTF8"), 16000);\r
+\r
+ String line;\r
+ String sname = "";\r
+ do {\r
+ line = infasta.readLine();\r
+ if (line == null || line.isEmpty()) {\r
+ // skip empty lines\r
+ continue;\r
+ }\r
+ if (line.startsWith(">")) {\r
+ // read name\r
+ sname = line.trim().substring(1);\r
+ // read sequence line\r
+ line = infasta.readLine();\r
+ final String sequence = line.replace("\t", "");\r
+ // read annotation line\r
+ line = infasta.readLine();\r
+ String[] annotValues = line.split("\t");\r
+ float[] annotation = convertToNumber(annotValues);\r
+ if (annotation.length != sequence.length()) {\r
+ throw new UnknownFileFormatException(\r
+ "File does not look like Jronn horizontally formatted output file!\n"\r
+ + JRONN_WRONG_FORMAT_MESSAGE);\r
+ }\r
+ seqs.add(new AnnotatedSequence(sname, sequence, annotation));\r
+ }\r
+ } while (line != null);\r
+\r
+ infasta.close();\r
+ return seqs;\r
+ }\r
+\r
+ private static float[] convertToNumber(String[] annotValues)\r
+ throws UnknownFileFormatException {\r
+ float[] annotation = new float[annotValues.length];\r
+ try {\r
+ for (int i = 0; i < annotation.length; i++) {\r
+ annotation[i] = Float.parseFloat(annotValues[i]);\r
+ }\r
+ } catch (NumberFormatException e) {\r
+ throw new UnknownFileFormatException(JRONN_WRONG_FORMAT_MESSAGE, e\r
+ .getCause());\r
+ }\r
+ return annotation;\r
+ }\r
+\r
+ private static final String JRONN_WRONG_FORMAT_MESSAGE = "Jronn file must be in the following format:\n"\r
+ + ">sequence_name\n "\r
+ + "M V S\n"\r
+ + "0.43 0.22 0.65\n"\r
+ + "Where first line is the sequence name,\n"\r
+ + "second line is the tab delimited sequence,\n"\r
+ + "third line contains tab delimited disorder prediction values.\n"\r
+ + "No lines are allowed between these three. Additionally, the number of "\r
+ + "sequence residues must be equal to the number of the disorder values.";\r
+\r
/**\r
* Closes the Closable and logs the exception if any\r
* \r
\r
public abstract class SkeletalExecutable<T> implements Executable<T> {\r
\r
- private static final PropertyHelper ph = PropertyHelperManager\r
- .getPropertyHelper();\r
+ protected static final PropertyHelper ph = PropertyHelperManager\r
+ .getPropertyHelper();\r
\r
- private static Logger log = Logger.getLogger(SkeletalExecutable.class);\r
+ private static Logger log = Logger.getLogger(SkeletalExecutable.class);\r
\r
- protected String inputFile = "input.txt";\r
- protected String outputFile = "output.txt";\r
- protected String errorFile = "error.txt";\r
+ protected String inputFile = "input.txt";\r
+ protected String outputFile = "output.txt";\r
+ protected String errorFile = "error.txt";\r
\r
- private boolean isInputSet = false;\r
- private boolean isOutputSet = false;\r
- private boolean isErrorSet = false;\r
+ private boolean isInputSet = false;\r
+ private boolean isOutputSet = false;\r
+ private boolean isErrorSet = false;\r
\r
- /**\r
- * This has to allow duplicate parameters as different options may have the\r
- * same value e.g. Muscle -weight1 clustalw -weight2 clustalw\r
- */\r
- protected CommandBuilder<T> cbuilder;\r
-\r
- public SkeletalExecutable() {\r
- cbuilder = new CommandBuilder<T>(" ");\r
- }\r
+ /**\r
+ * This has to allow duplicate parameters as different options may have the\r
+ * same value e.g. Muscle -weight1 clustalw -weight2 clustalw\r
+ */\r
+ protected CommandBuilder<T> cbuilder;\r
\r
- public SkeletalExecutable(String parameterKeyValueDelimiter) {\r
- assert parameterKeyValueDelimiter != null;\r
- cbuilder = new CommandBuilder<T>(parameterKeyValueDelimiter);\r
- }\r
+ public SkeletalExecutable() {\r
+ cbuilder = new CommandBuilder<T>(" ");\r
+ }\r
\r
- public SkeletalExecutable<T> setInput(String inFile) {\r
- if (compbio.util.Util.isEmpty(inFile)) {\r
- throw new IllegalArgumentException("Input file must not be NULL");\r
- }\r
- this.inputFile = inFile;\r
- this.isInputSet = true;\r
- return this;\r
- }\r
+ public SkeletalExecutable(String parameterKeyValueDelimiter) {\r
+ assert parameterKeyValueDelimiter != null;\r
+ cbuilder = new CommandBuilder<T>(parameterKeyValueDelimiter);\r
+ }\r
\r
- public SkeletalExecutable<T> setOutput(String outFile) {\r
- if (compbio.util.Util.isEmpty(outFile)\r
- || PathValidator.isAbsolutePath(outFile)) {\r
- throw new IllegalArgumentException(\r
- "Output file must not be NULL and Absolute path could not be used! Please provide the filename only. Value provided: "\r
- + outFile);\r
- }\r
- this.outputFile = outFile;\r
- this.isOutputSet = true;\r
- return this;\r
+ public SkeletalExecutable<T> setInput(String inFile) {\r
+ if (compbio.util.Util.isEmpty(inFile)) {\r
+ throw new IllegalArgumentException("Input file must not be NULL");\r
}\r
-\r
- public SkeletalExecutable<T> setError(String errFile) {\r
- if (compbio.util.Util.isEmpty(errFile)\r
- || PathValidator.isAbsolutePath(errFile)) {\r
- throw new IllegalArgumentException(\r
- "Error file must not be NULL and Absolute path could not be used! Please provide the filename only. Value provided: "\r
- + errFile);\r
- }\r
- this.errorFile = errFile;\r
- this.isErrorSet = true;\r
- return this;\r
+ this.inputFile = inFile;\r
+ this.isInputSet = true;\r
+ return this;\r
+ }\r
+\r
+ public SkeletalExecutable<T> setOutput(String outFile) {\r
+ if (compbio.util.Util.isEmpty(outFile)\r
+ || PathValidator.isAbsolutePath(outFile)) {\r
+ throw new IllegalArgumentException(\r
+ "Output file must not be NULL and Absolute path could not be used! Please provide the filename only. Value provided: "\r
+ + outFile);\r
}\r
-\r
- @Override\r
- public CommandBuilder<T> getParameters(ExecProvider provider) {\r
- /*\r
- * Prevent modification of the parameters unintentionally. This is\r
- * important to preserve executable parameters intact as engine could\r
- * add things into the array as it see fit. For instance\r
- * ExecutableWrapper (part of local engines) add command line as the\r
- * first element of an array.\r
- */\r
- paramValueUpdater();\r
- return cbuilder;\r
+ this.outputFile = outFile;\r
+ this.isOutputSet = true;\r
+ return this;\r
+ }\r
+\r
+ public SkeletalExecutable<T> setError(String errFile) {\r
+ if (compbio.util.Util.isEmpty(errFile)\r
+ || PathValidator.isAbsolutePath(errFile)) {\r
+ throw new IllegalArgumentException(\r
+ "Error file must not be NULL and Absolute path could not be used! Please provide the filename only. Value provided: "\r
+ + errFile);\r
}\r
-\r
- @Override\r
- public Executable<T> addParameters(List<String> parameters) {\r
- cbuilder.addParams(parameters);\r
- return this;\r
- }\r
-\r
- public Executable<T> setParameter(String parameter) {\r
- cbuilder.setParam(parameter);\r
- return this;\r
- }\r
-\r
- /**\r
- * This is a generic method of changing values of the parameters with\r
- * properties\r
- * \r
- * This method iterates via commands for an executable finding matches from\r
- * the Executable.properties file and replacing values in CommandBuilder\r
- * with a combination of value from CommandBuilder to merge path from\r
- * properties\r
+ this.errorFile = errFile;\r
+ this.isErrorSet = true;\r
+ return this;\r
+ }\r
+\r
+ @Override\r
+ public CommandBuilder<T> getParameters(ExecProvider provider) {\r
+ /*\r
+ * Prevent modification of the parameters unintentionally. This is\r
+ * important to preserve executable parameters intact as engine could\r
+ * add things into the array as it see fit. For instance\r
+ * ExecutableWrapper (part of local engines) add command line as the\r
+ * first element of an array.\r
*/\r
- void paramValueUpdater() {\r
- for (Parameter command : cbuilder.getCommandList()) {\r
- if (command.value == null) {\r
- continue;\r
- }\r
- String propertyPath = compbio.engine.client.Util.getExecProperty(\r
- command.name + ".path", getType());\r
- if (Util.isEmpty(propertyPath)) {\r
- continue;\r
- }\r
- if (new File(command.value).isAbsolute()) {\r
- // Matrix can be found so no actions necessary\r
- // This method has been called already and the matrix name\r
- // is modified to contain full path // no further actions is\r
- // necessary\r
- continue;\r
- }\r
- String absMatrixPath = compbio.engine.client.Util\r
- .convertToAbsolute(propertyPath);\r
- command.value = absMatrixPath + File.separator + command.value;\r
- cbuilder.setParam(command);\r
- }\r
+ paramValueUpdater();\r
+ return cbuilder;\r
+ }\r
+\r
+ @Override\r
+ public Executable<T> addParameters(List<String> parameters) {\r
+ cbuilder.addParams(parameters);\r
+ return this;\r
+ }\r
+\r
+ public Executable<T> setParameter(String parameter) {\r
+ cbuilder.setParam(parameter);\r
+ return this;\r
+ }\r
+\r
+ /**\r
+ * This is a generic method of changing values of the parameters with\r
+ * properties\r
+ * \r
+ * This method iterates via commands for an executable finding matches from\r
+ * the Executable.properties file and replacing values in CommandBuilder\r
+ * with a combination of value from CommandBuilder to merge path from\r
+ * properties\r
+ */\r
+ void paramValueUpdater() {\r
+ for (Parameter command : cbuilder.getCommandList()) {\r
+ if (command.value == null) {\r
+ continue;\r
+ }\r
+ String propertyPath = compbio.engine.client.Util.getExecProperty(\r
+ command.name + ".path", getType());\r
+ if (Util.isEmpty(propertyPath)) {\r
+ continue;\r
+ }\r
+ if (new File(command.value).isAbsolute()) {\r
+ // Matrix can be found so no actions necessary\r
+ // This method has been called already and the matrix name\r
+ // is modified to contain full path // no further actions is\r
+ // necessary\r
+ continue;\r
+ }\r
+ String absMatrixPath = compbio.engine.client.Util\r
+ .convertToAbsolute(propertyPath);\r
+ command.value = absMatrixPath + File.separator + command.value;\r
+ cbuilder.setParam(command);\r
}\r
-\r
- /**\r
- * This method cannot really tell whether the files has actually been\r
- * created or not. It must be overridden as required.\r
- * \r
- * @see compbio.engine.client.Executable#getCreatedFiles()\r
- */\r
- @Override\r
- public List<String> getCreatedFiles() {\r
- return Arrays.asList(getOutput(), getError());\r
+ }\r
+\r
+ /**\r
+ * This method cannot really tell whether the files has actually been\r
+ * created or not. It must be overridden as required.\r
+ * \r
+ * @see compbio.engine.client.Executable#getCreatedFiles()\r
+ */\r
+ @Override\r
+ public List<String> getCreatedFiles() {\r
+ return Arrays.asList(getOutput(), getError());\r
+ }\r
+\r
+ @Override\r
+ public String getInput() {\r
+ return inputFile;\r
+ }\r
+\r
+ protected boolean isInputSet() {\r
+ return isInputSet;\r
+ }\r
+\r
+ protected boolean isOutputSet() {\r
+ return isOutputSet;\r
+ }\r
+\r
+ protected boolean isErrorSet() {\r
+ return isErrorSet;\r
+ }\r
+\r
+ @Override\r
+ public String getOutput() {\r
+ return outputFile;\r
+ }\r
+\r
+ @Override\r
+ public String getError() {\r
+ return errorFile;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ String value = "Input: " + this.getInput() + "\n";\r
+ value += "Output: " + this.getOutput() + "\n";\r
+ value += "Error: " + this.getError() + "\n";\r
+ value += "Class: " + this.getClass() + "\n";\r
+ value += "Params: " + cbuilder + "\n";\r
+ return value;\r
+ }\r
+\r
+ @Override\r
+ public Executable<?> loadRunConfiguration(RunConfiguration rconfig) {\r
+ if (!compbio.util.Util.isEmpty(rconfig.getOutput())) {\r
+ setOutput(rconfig.getOutput());\r
}\r
-\r
- @Override\r
- public String getInput() {\r
- return inputFile;\r
+ if (!compbio.util.Util.isEmpty(rconfig.getError())) {\r
+ setError(rconfig.getError());\r
}\r
-\r
- protected boolean isInputSet() {\r
- return isInputSet;\r
- }\r
-\r
- protected boolean isOutputSet() {\r
- return isOutputSet;\r
- }\r
-\r
- protected boolean isErrorSet() {\r
- return isErrorSet;\r
- }\r
-\r
- @Override\r
- public String getOutput() {\r
- return outputFile;\r
+ if (!compbio.util.Util.isEmpty(rconfig.getInput())) {\r
+ setInput(rconfig.getInput());\r
}\r
-\r
- @Override\r
- public String getError() {\r
- return errorFile;\r
+ this.cbuilder = (CommandBuilder<T>) rconfig.getParameters();\r
+ return this;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (obj == null) {\r
+ return false;\r
}\r
-\r
- @Override\r
- public String toString() {\r
- String value = "Input: " + this.getInput() + "\n";\r
- value += "Output: " + this.getOutput() + "\n";\r
- value += "Error: " + this.getError() + "\n";\r
- value += "Class: " + this.getClass() + "\n";\r
- value += "Params: " + cbuilder + "\n";\r
- return value;\r
+ if (!(obj instanceof SkeletalExecutable<?>)) {\r
+ return false;\r
}\r
-\r
- @Override\r
- public Executable<?> loadRunConfiguration(RunConfiguration rconfig) {\r
- if (!compbio.util.Util.isEmpty(rconfig.getOutput())) {\r
- setOutput(rconfig.getOutput());\r
- }\r
- if (!compbio.util.Util.isEmpty(rconfig.getError())) {\r
- setError(rconfig.getError());\r
- }\r
- if (!compbio.util.Util.isEmpty(rconfig.getInput())) {\r
- setInput(rconfig.getInput());\r
- }\r
- this.cbuilder = (CommandBuilder<T>) rconfig.getParameters();\r
- return this;\r
+ SkeletalExecutable<?> exec = (SkeletalExecutable<?>) obj;\r
+ if (!Util.isEmpty(this.inputFile) && !Util.isEmpty(exec.inputFile)) {\r
+ if (!this.inputFile.equals(exec.inputFile)) {\r
+ return false;\r
+ }\r
}\r
-\r
- @Override\r
- public boolean equals(Object obj) {\r
- if (obj == null) {\r
- return false;\r
- }\r
- if (!(obj instanceof SkeletalExecutable<?>)) {\r
- return false;\r
- }\r
- SkeletalExecutable<?> exec = (SkeletalExecutable<?>) obj;\r
- if (!Util.isEmpty(this.inputFile) && !Util.isEmpty(exec.inputFile)) {\r
- if (!this.inputFile.equals(exec.inputFile)) {\r
- return false;\r
- }\r
- }\r
- if (!Util.isEmpty(this.outputFile) && !Util.isEmpty(exec.outputFile)) {\r
- if (!this.outputFile.equals(exec.outputFile)) {\r
- return false;\r
- }\r
- }\r
- if (!Util.isEmpty(this.errorFile) && !Util.isEmpty(exec.errorFile)) {\r
- if (!this.errorFile.equals(exec.errorFile)) {\r
- return false;\r
- }\r
- }\r
- if (!this.cbuilder.equals(exec.cbuilder)) {\r
- return false;\r
- }\r
- return true;\r
+ if (!Util.isEmpty(this.outputFile) && !Util.isEmpty(exec.outputFile)) {\r
+ if (!this.outputFile.equals(exec.outputFile)) {\r
+ return false;\r
+ }\r
}\r
-\r
- @Override\r
- public int hashCode() {\r
- int code = inputFile.hashCode();\r
- code += outputFile.hashCode();\r
- code += errorFile.hashCode();\r
- code *= this.cbuilder.hashCode();\r
- return code;\r
+ if (!Util.isEmpty(this.errorFile) && !Util.isEmpty(exec.errorFile)) {\r
+ if (!this.errorFile.equals(exec.errorFile)) {\r
+ return false;\r
+ }\r
}\r
-\r
- public String getClusterSettings() {\r
- String settings = ph.getProperty(getType().getSimpleName()\r
- .toLowerCase()\r
- + ".cluster.settings");\r
- return settings == null ? "" : settings;\r
+ if (!this.cbuilder.equals(exec.cbuilder)) {\r
+ return false;\r
}\r
-\r
- public abstract Class<? extends Executable<?>> getType();\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public int hashCode() {\r
+ int code = inputFile.hashCode();\r
+ code += outputFile.hashCode();\r
+ code += errorFile.hashCode();\r
+ code *= this.cbuilder.hashCode();\r
+ return code;\r
+ }\r
+\r
+ public String getClusterSettings() {\r
+ String settings = ph.getProperty(getType().getSimpleName()\r
+ .toLowerCase()\r
+ + ".cluster.settings");\r
+ return settings == null ? "" : settings;\r
+ }\r
+\r
+ public abstract Class<? extends Executable<?>> getType();\r
\r
}\r
import org.apache.log4j.Logger;\r
\r
import compbio.data.sequence.Alignment;\r
+import compbio.data.sequence.AnnotatedSequence;\r
import compbio.data.sequence.ClustalAlignmentUtil;\r
import compbio.data.sequence.FastaSequence;\r
import compbio.data.sequence.SequenceUtil;\r
return ClustalAlignmentUtil.readClustalFile(cfile);\r
}\r
\r
+ public static final List<AnnotatedSequence> readJronnFile(\r
+ String workDirectory, String clustFile)\r
+ throws UnknownFileFormatException, IOException,\r
+ FileNotFoundException, NullPointerException {\r
+ assert !compbio.util.Util.isEmpty(workDirectory);\r
+ assert !compbio.util.Util.isEmpty(clustFile);\r
+ File cfile = new File(compbio.engine.client.Util.getFullPath(\r
+ workDirectory, clustFile));\r
+ log.trace("Jronn OUTPUT FILE PATH: " + cfile.getAbsolutePath());\r
+ if (!(cfile.exists() && cfile.length() > 0)) {\r
+ throw new FileNotFoundException("Result for the jobId "\r
+ + workDirectory + " with file name " + clustFile\r
+ + " is not found!");\r
+ }\r
+ return SequenceUtil.readJRonn(cfile);\r
+ }\r
+\r
public static void writeInput(List<FastaSequence> sequences,\r
ConfiguredExecutable<?> exec) {\r
\r
\r
package compbio.runner.disorder;\r
\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
import java.io.FileNotFoundException;\r
import java.io.IOException;\r
+import java.io.InputStream;\r
import java.util.Arrays;\r
import java.util.List;\r
\r
import org.apache.log4j.Logger;\r
\r
-import compbio.data.sequence.Alignment;\r
+import compbio.data.sequence.AnnotatedSequence;\r
+import compbio.data.sequence.SequenceUtil;\r
import compbio.data.sequence.UnknownFileFormatException;\r
import compbio.engine.client.Executable;\r
-import compbio.engine.client.PipedExecutable;\r
import compbio.engine.client.SkeletalExecutable;\r
import compbio.metadata.Limit;\r
import compbio.metadata.LimitsManager;\r
import compbio.metadata.ResultNotAvailableException;\r
import compbio.runner.Util;\r
\r
-public class RonnWrapper extends SkeletalExecutable<RonnWrapper> implements\r
- PipedExecutable<RonnWrapper> {\r
- /*\r
- * RONN does not accept stdin the file name must be defined as parameter It\r
- * can only analyse ONE sequence per run! (or may be not, but the results\r
- * gets overriden!) FASTA format is accepted.\r
- * \r
- * To run it do the following:\r
- * \r
- * 1) copy ronn executables and task file to work directory\r
- * \r
- * 2) execute run processes one by one for each sequence\r
- */\r
-\r
- private static final String command = "/homes/pvtroshin/soft/RONNv3_fasta/Ronn_runner.sh";\r
+/**\r
+ * Command line\r
+ * \r
+ * java -Xmx512 -jar jronn_v3.jar -i=test_seq.txt -n=1 -o=out.txt -s=stat.out\r
+ * \r
+ * @author pvtroshin\r
+ * \r
+ */\r
+public class Jronn extends SkeletalExecutable<Jronn> {\r
\r
- private static Logger log = Logger.getLogger(RonnWrapper.class);\r
+ private static Logger log = Logger.getLogger(Jronn.class);\r
\r
// Cache for Limits information\r
- private static LimitsManager<RonnWrapper> limits;\r
+ private static LimitsManager<Jronn> limits;\r
\r
public static final String KEY_VALUE_SEPARATOR = Util.SPACE;\r
+ public static final String STAT_FILE = "stat.txt";\r
+\r
+ public Jronn() {\r
+ addParameters(Arrays.asList("-jar", getLibPath(), "-n=1", "-s="\r
+ + STAT_FILE, "-f=H"));\r
+ }\r
\r
@SuppressWarnings("unchecked")\r
@Override\r
- public Alignment getResults(String workDirectory)\r
+ public List<AnnotatedSequence> getResults(String workDirectory)\r
throws ResultNotAvailableException {\r
+ List<AnnotatedSequence> sequences = null;\r
try {\r
- return Util.readClustalFile(workDirectory, getOutput());\r
+ InputStream inStream = new FileInputStream(new File(workDirectory,\r
+ getOutput()));\r
+ sequences = SequenceUtil.readJRonn(inStream);\r
+ inStream.close();\r
} catch (FileNotFoundException e) {\r
log.error(e.getMessage(), e.getCause());\r
throw new ResultNotAvailableException(e);\r
log.error(e.getMessage(), e.getCause());\r
throw new ResultNotAvailableException(e);\r
}\r
+ return sequences;\r
+ }\r
+\r
+ private static String getLibPath() {\r
+\r
+ String settings = ph.getProperty("jronn.jar.file");\r
+ if (compbio.util.Util.isEmpty(settings)) {\r
+ throw new NullPointerException(\r
+ "Please define jronn.jar.file property in Executable.properties file"\r
+ + "and initialize it with the location of jronn jar file");\r
+ }\r
+ if (new File(settings).isAbsolute()) {\r
+ // Jronn jar can be found so no actions necessary\r
+ // no further actions is necessary\r
+ return settings;\r
+ }\r
+ return compbio.engine.client.Util.convertToAbsolute(settings);\r
}\r
\r
@Override\r
}\r
\r
@Override\r
- public RonnWrapper setInput(String inFile) {\r
- String input = getInput();\r
+ public Jronn setInput(String inFile) {\r
super.setInput(inFile);\r
+ cbuilder.setParam("-i=" + inFile);\r
return this;\r
}\r
\r
@Override\r
- public Limit<RonnWrapper> getLimit(String presetName) {\r
+ public Jronn setOutput(String outFile) {\r
+ super.setOutput(outFile);\r
+ cbuilder.setParam("-o=" + outFile);\r
+ return this;\r
+ }\r
+\r
+ @Override\r
+ public Limit<Jronn> getLimit(String presetName) {\r
if (limits == null) {\r
limits = getLimits();\r
}\r
- Limit<RonnWrapper> limit = null;\r
+ Limit<Jronn> limit = null;\r
if (limits != null) {\r
// this returns default limit if preset is undefined!\r
limit = limits.getLimitByName(presetName);\r
}\r
\r
@Override\r
- public LimitsManager<RonnWrapper> getLimits() {\r
+ public LimitsManager<Jronn> getLimits() {\r
// synchronise on static field\r
synchronized (log) {\r
if (limits == null) {\r
public Class<? extends Executable<?>> getType() {\r
return this.getClass();\r
}\r
+\r
+ public static String getStatFile() {\r
+ return STAT_FILE;\r
+ }\r
}\r
\r
public class SequenceUtilTester {\r
\r
- @Test()\r
- public void testisNonAmbNucleotideSequence() {\r
- String dnaseq = "atgatTGACGCTGCTGatgtcgtgagtgga";\r
- assertTrue(SequenceUtil.isNonAmbNucleotideSequence(dnaseq));\r
- String dirtyDnaseq = "atgAGTggt\taGGTgc\ncgcACTgc gACtcgcGAt cgA ";\r
- assertTrue(SequenceUtil.isNonAmbNucleotideSequence(dirtyDnaseq));\r
- String nonDna = "atgfctgatgcatgcatgatgctga";\r
- assertFalse(SequenceUtil.isNonAmbNucleotideSequence(nonDna));\r
-\r
- nonDna = "atgc1tgatgcatgcatgatgctga";\r
- assertFalse(SequenceUtil.isNonAmbNucleotideSequence(nonDna));\r
-\r
- nonDna = "ARLGRVRWTQQRHAEAAVLLQQASDAAPEHPGIALWLGHALEDAGQAEAAAAAYTRAHQL";\r
- assertFalse(SequenceUtil.isNonAmbNucleotideSequence(nonDna));\r
- // String ambDna = "AGTCRYMKSWHBVDN"; // see IUPAC Nucleotide Code\r
- assertFalse(SequenceUtil.isNonAmbNucleotideSequence(nonDna));\r
-\r
- }\r
-\r
- @Test()\r
- public void testCleanSequence() {\r
- String dirtySeq = "atgAGTggt\taGGTgc\ncgcAC\rTgc gACtcgcGAt cgA ";\r
- assertEquals("atgAGTggtaGGTgccgcACTgcgACtcgcGAtcgA".toUpperCase(),\r
- SequenceUtil.cleanSequence(dirtySeq));\r
- }\r
-\r
- @Test()\r
- public void testDeepCleanSequence() {\r
- String dirtySeq = "a!t?g.A;GTggt\ta12GGTgc\ncgc23AC\rTgc gAC<>.,?!|\\|/t@cg-c¬GA=_+(0){]}[:£$&^*\"t cgA ";\r
- assertEquals("atgAGTggtaGGTgccgcACTgcgACtcgcGAtcgA".toUpperCase(),\r
- SequenceUtil.deepCleanSequence(dirtySeq));\r
+ @Test()\r
+ public void testisNonAmbNucleotideSequence() {\r
+ String dnaseq = "atgatTGACGCTGCTGatgtcgtgagtgga";\r
+ assertTrue(SequenceUtil.isNonAmbNucleotideSequence(dnaseq));\r
+ String dirtyDnaseq = "atgAGTggt\taGGTgc\ncgcACTgc gACtcgcGAt cgA ";\r
+ assertTrue(SequenceUtil.isNonAmbNucleotideSequence(dirtyDnaseq));\r
+ String nonDna = "atgfctgatgcatgcatgatgctga";\r
+ assertFalse(SequenceUtil.isNonAmbNucleotideSequence(nonDna));\r
+\r
+ nonDna = "atgc1tgatgcatgcatgatgctga";\r
+ assertFalse(SequenceUtil.isNonAmbNucleotideSequence(nonDna));\r
+\r
+ nonDna = "ARLGRVRWTQQRHAEAAVLLQQASDAAPEHPGIALWLGHALEDAGQAEAAAAAYTRAHQL";\r
+ assertFalse(SequenceUtil.isNonAmbNucleotideSequence(nonDna));\r
+ // String ambDna = "AGTCRYMKSWHBVDN"; // see IUPAC Nucleotide Code\r
+ assertFalse(SequenceUtil.isNonAmbNucleotideSequence(nonDna));\r
+\r
+ }\r
+\r
+ @Test()\r
+ public void testCleanSequence() {\r
+ String dirtySeq = "atgAGTggt\taGGTgc\ncgcAC\rTgc gACtcgcGAt cgA ";\r
+ assertEquals("atgAGTggtaGGTgccgcACTgcgACtcgcGAtcgA".toUpperCase(),\r
+ SequenceUtil.cleanSequence(dirtySeq));\r
+ }\r
+\r
+ @Test()\r
+ public void testDeepCleanSequence() {\r
+ String dirtySeq = "a!t?g.A;GTggt\ta12GGTgc\ncgc23AC\rTgc gAC<>.,?!|\\|/t@cg-c¬GA=_+(0){]}[:£$&^*\"t cgA ";\r
+ assertEquals("atgAGTggtaGGTgccgcACTgcgACtcgcGAtcgA".toUpperCase(),\r
+ SequenceUtil.deepCleanSequence(dirtySeq));\r
+ }\r
+\r
+ @Test()\r
+ public void testisProteinSequence() {\r
+ String dirtySeq = "atgAGTggt\taGGTgc\ncgcAC\rTgc gACtcgcGAt cgA ";\r
+ assertFalse(SequenceUtil.isProteinSequence(dirtySeq));\r
+ String notaSeq = "atgc1tgatgcatgcatgatgctga";\r
+ assertFalse(SequenceUtil.isProteinSequence(notaSeq));\r
+ String AAseq = "ARLGRVRWTQQRHAEAAVLLQQASDAAPEHPGIALWLGHALEDAGQAEAAAAAYTRAHQL";\r
+ assertTrue(SequenceUtil.isProteinSequence(AAseq));\r
+ AAseq += "XU";\r
+ assertFalse(SequenceUtil.isProteinSequence(AAseq));\r
+\r
+ }\r
+\r
+ @Test()\r
+ public void testReadWriteFasta() {\r
+\r
+ try {\r
+ FileInputStream fio = new FileInputStream(\r
+ AllTestSuit.TEST_DATA_PATH + "TO1381.fasta");\r
+ assertNotNull(fio);\r
+ List<FastaSequence> fseqs = SequenceUtil.readFasta(fio);\r
+ assertNotNull(fseqs);\r
+ assertEquals(3, fseqs.size());\r
+ assertEquals(3, fseqs.size());\r
+ fio.close();\r
+ FileOutputStream fou = new FileOutputStream(\r
+ AllTestSuit.TEST_DATA_PATH + "TO1381.fasta.written");\r
+ SequenceUtil.writeFasta(fou, fseqs);\r
+ fou.close();\r
+ FileOutputStream fou20 = new FileOutputStream(\r
+ AllTestSuit.TEST_DATA_PATH + "TO1381.fasta20.written");\r
+ SequenceUtil.writeFasta(fou20, fseqs, 20);\r
+ fou20.close();\r
+\r
+ } catch (FileNotFoundException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
}\r
-\r
- @Test()\r
- public void testisProteinSequence() {\r
- String dirtySeq = "atgAGTggt\taGGTgc\ncgcAC\rTgc gACtcgcGAt cgA ";\r
- assertFalse(SequenceUtil.isProteinSequence(dirtySeq));\r
- String notaSeq = "atgc1tgatgcatgcatgatgctga";\r
- assertFalse(SequenceUtil.isProteinSequence(notaSeq));\r
- String AAseq = "ARLGRVRWTQQRHAEAAVLLQQASDAAPEHPGIALWLGHALEDAGQAEAAAAAYTRAHQL";\r
- assertTrue(SequenceUtil.isProteinSequence(AAseq));\r
- AAseq += "XU";\r
- assertFalse(SequenceUtil.isProteinSequence(AAseq));\r
-\r
+ }\r
+\r
+ /**\r
+ * This test tests the loading of horizontally formatted Jronn output file\r
+ */\r
+ @Test\r
+ public void loadJronnFile() {\r
+\r
+ FileInputStream fio;\r
+ try {\r
+ fio = new FileInputStream(AllTestSuit.TEST_DATA_PATH + "jronn.out");\r
+ List<AnnotatedSequence> aseqs = SequenceUtil.readJRonn(fio);\r
+ assertNotNull(aseqs);\r
+ assertEquals(aseqs.size(), 3);\r
+ AnnotatedSequence aseq = aseqs.get(0);\r
+ assertNotNull(aseq);\r
+ assertNotNull(aseq.getAnnotation());\r
+ //System.out.println(aseq);\r
+ assertEquals(aseq.getAnnotation().length, aseq.getSequence()\r
+ .length());\r
+ fio.close();\r
+ } catch (FileNotFoundException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (UnknownFileFormatException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
}\r
\r
- @Test()\r
- public void testReadWriteFasta() {\r
-\r
- try {\r
- FileInputStream fio = new FileInputStream(\r
- AllTestSuit.TEST_DATA_PATH + "TO1381.fasta");\r
- assertNotNull(fio);\r
- List<FastaSequence> fseqs = SequenceUtil.readFasta(fio);\r
- assertNotNull(fseqs);\r
- assertEquals(3, fseqs.size());\r
- assertEquals(3, fseqs.size());\r
- fio.close();\r
- FileOutputStream fou = new FileOutputStream(\r
- AllTestSuit.TEST_DATA_PATH + "TO1381.fasta.written");\r
- SequenceUtil.writeFasta(fou, fseqs);\r
- fou.close();\r
- FileOutputStream fou20 = new FileOutputStream(\r
- AllTestSuit.TEST_DATA_PATH + "TO1381.fasta20.written");\r
- SequenceUtil.writeFasta(fou20, fseqs, 20);\r
- fou20.close();\r
-\r
- } catch (FileNotFoundException e) {\r
- e.printStackTrace();\r
- fail(e.getLocalizedMessage());\r
- } catch (IOException e) {\r
- e.printStackTrace();\r
- fail(e.getLocalizedMessage());\r
- }\r
- }\r
+ }\r
\r
}\r
--- /dev/null
+/* Copyright (c) 2009 Peter Troshin\r
+ * \r
+ * JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0 \r
+ * \r
+ * This library is free software; you can redistribute it and/or modify it under the terms of the\r
+ * Apache License version 2 as published by the Apache Software Foundation\r
+ * \r
+ * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without\r
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache \r
+ * License for more details.\r
+ * \r
+ * A copy of the license is in apache_license.txt. It is also available here:\r
+ * @see: http://www.apache.org/licenses/LICENSE-2.0.txt\r
+ * \r
+ * Any republication or derived work distributed in source code form\r
+ * must include this copyright and license notice.\r
+ */\r
+\r
+package compbio.runner.disorder;\r
+\r
+import static org.testng.Assert.assertEquals;\r
+import static org.testng.Assert.assertFalse;\r
+import static org.testng.Assert.assertNotNull;\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.text.ParseException;\r
+import java.util.List;\r
+\r
+import javax.xml.bind.ValidationException;\r
+\r
+import org.ggf.drmaa.DrmaaException;\r
+import org.ggf.drmaa.JobInfo;\r
+import org.testng.annotations.BeforeMethod;\r
+import org.testng.annotations.Test;\r
+\r
+import compbio.data.sequence.AnnotatedSequence;\r
+import compbio.engine.AsyncExecutor;\r
+import compbio.engine.Configurator;\r
+import compbio.engine.FilePuller;\r
+import compbio.engine.SyncExecutor;\r
+import compbio.engine.client.ConfExecutable;\r
+import compbio.engine.client.ConfiguredExecutable;\r
+import compbio.engine.client.Executable;\r
+import compbio.engine.client.RunConfiguration;\r
+import compbio.engine.cluster.drmaa.ClusterUtil;\r
+import compbio.engine.cluster.drmaa.JobRunner;\r
+import compbio.engine.cluster.drmaa.StatisticManager;\r
+import compbio.engine.local.LocalRunner;\r
+import compbio.metadata.AllTestSuit;\r
+import compbio.metadata.ChunkHolder;\r
+import compbio.metadata.JobExecutionException;\r
+import compbio.metadata.JobStatus;\r
+import compbio.metadata.JobSubmissionException;\r
+import compbio.metadata.LimitsManager;\r
+import compbio.metadata.PresetManager;\r
+import compbio.metadata.ResultNotAvailableException;\r
+import compbio.metadata.RunnerConfig;\r
+import compbio.util.FileWatcher;\r
+import compbio.util.SysPrefs;\r
+\r
+public class JronnTester {\r
+\r
+ public static String test_outfile = "TO1381.jronn.out"; // "/homes/pvtroshin/TO1381.clustal.cluster.out\r
+\r
+ private Jronn jronn;\r
+\r
+ @BeforeMethod(alwaysRun = true)\r
+ void init() {\r
+ jronn = new Jronn();\r
+ jronn.setInput(AllTestSuit.test_input).setOutput(test_outfile);\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_cluster,\r
+ AllTestSuit.test_group_runner })\r
+ public void testRunOnCluster() {\r
+ assertFalse(SysPrefs.isWindows,\r
+ "Cluster execution can only be in unix environment");\r
+ try {\r
+ ConfiguredExecutable<Jronn> confJronn = Configurator\r
+ .configureExecutable(jronn, Executable.ExecProvider.Cluster);\r
+ JobRunner runner = JobRunner.getInstance(confJronn);\r
+\r
+ assertNotNull(runner, "Runner is NULL");\r
+ runner.executeJob();\r
+ // assertNotNull("JobId is null", jobId1);\r
+ JobStatus status = runner.getJobStatus();\r
+ assertTrue(status == JobStatus.PENDING\r
+ || status == JobStatus.RUNNING,\r
+ "Status of the process is wrong!");\r
+ JobInfo info = runner.getJobInfo();\r
+ assertNotNull(info, "JobInfo is null");\r
+ StatisticManager sm = new StatisticManager(info);\r
+ assertNotNull(sm, "Statictic manager is null");\r
+ try {\r
+\r
+ String exits = sm.getExitStatus();\r
+ assertNotNull("Exit status is null", exits);\r
+ // cut 4 trailing zeros from the number\r
+ int exitsInt = ClusterUtil.CLUSTER_STAT_IN_SEC.parse(exits)\r
+ .intValue();\r
+ assertEquals(0, exitsInt);\r
+ System.out.println(sm.getAllStats());\r
+\r
+ } catch (ParseException e) {\r
+ e.printStackTrace();\r
+ fail("Parse Exception: " + e.getMessage());\r
+ }\r
+ assertFalse(runner.cleanup());\r
+ assertTrue(sm.hasExited());\r
+ assertFalse(sm.wasAborted());\r
+ assertFalse(sm.hasDump());\r
+ assertFalse(sm.hasSignaled());\r
+\r
+ } catch (JobSubmissionException e) {\r
+ e.printStackTrace();\r
+ fail("DrmaaException caught:" + e.getMessage());\r
+ } catch (JobExecutionException e) {\r
+ e.printStackTrace();\r
+ fail("DrmaaException caught:" + e.getMessage());\r
+ } catch (DrmaaException e) {\r
+ e.printStackTrace();\r
+ fail("DrmaaException caught:" + e.getMessage());\r
+ }\r
+ }\r
+\r
+ /**\r
+ * This tests fails from time to time depending on the cluster load or some\r
+ * other factors. Any client code has to adjust for this issue\r
+ */\r
+ @Test(enabled = false, groups = { AllTestSuit.test_group_cluster,\r
+ AllTestSuit.test_group_runner })\r
+ public void testRunOnClusterAsync() {\r
+ assertFalse(SysPrefs.isWindows,\r
+ "Cluster execution can only be in unix environment");\r
+ try {\r
+ ConfiguredExecutable<Jronn> confJronn = Configurator\r
+ .configureExecutable(jronn, Executable.ExecProvider.Cluster);\r
+ AsyncExecutor aengine = Configurator.getAsyncEngine(confJronn);\r
+ String jobId = aengine.submitJob(confJronn);\r
+ assertNotNull(jobId, "Runner is NULL");\r
+ // let drmaa to start\r
+ Thread.sleep(500);\r
+ JobStatus status = aengine.getJobStatus(jobId);\r
+ while (status != JobStatus.FINISHED\r
+ || status != JobStatus.UNDEFINED) {\r
+ System.out.println("Job Status: " + status);\r
+ Thread.sleep(1000);\r
+ status = aengine.getJobStatus(jobId);\r
+ }\r
+ } catch (JobSubmissionException e) {\r
+ e.printStackTrace();\r
+ fail("DrmaaException caught:" + e.getMessage());\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ fail(e.getMessage());\r
+ }\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner })\r
+ public void testRunLocally() {\r
+ try {\r
+ ConfiguredExecutable<Jronn> confJronn = Configurator\r
+ .configureExecutable(jronn, Executable.ExecProvider.Local);\r
+\r
+ // For local execution use relative\r
+ LocalRunner lr = new LocalRunner(confJronn);\r
+ lr.executeJob();\r
+ ConfiguredExecutable<?> al1 = lr.waitForResult();\r
+ assertNotNull(al1.getResults());\r
+ List<AnnotatedSequence> al2 = confJronn.getResults();\r
+ assertNotNull(al2);\r
+ assertEquals(al2.size(), 3);\r
+ assertEquals(al1.getResults(), al2);\r
+ } catch (JobSubmissionException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (ResultNotAvailableException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (JobExecutionException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ }\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner })\r
+ public void readStatistics() {\r
+ try {\r
+ ConfiguredExecutable<Jronn> confJronn = Configurator\r
+ .configureExecutable(jronn, Executable.ExecProvider.Local);\r
+ // For local execution use relavive\r
+\r
+ AsyncExecutor sexec = Configurator.getAsyncEngine(confJronn);\r
+ String jobId = sexec.submitJob(confJronn);\r
+ FilePuller fw = FilePuller.newFilePuller(confJronn\r
+ .getWorkDirectory()\r
+ + File.separator + Jronn.getStatFile(),\r
+ FileWatcher.MIN_CHUNK_SIZE_BYTES);\r
+ int count = 0;\r
+ long position = 0;\r
+ fw.waitForFile(4);\r
+ while (!(sexec.getJobStatus(jobId) == JobStatus.FINISHED\r
+ || sexec.getJobStatus(jobId) == JobStatus.FAILED || sexec\r
+ .getJobStatus(jobId) == JobStatus.UNDEFINED)\r
+ || fw.hasMoreData()) {\r
+ ChunkHolder ch = fw.pull(position);\r
+ String chunk = ch.getChunk();\r
+ position = ch.getNextPosition();\r
+ System.out.print(chunk);\r
+ count++;\r
+ }\r
+ assertTrue(count > 1);\r
+ ConfiguredExecutable<?> al = sexec.getResults(jobId);\r
+ assertNotNull(al.getResults());\r
+ } catch (JobSubmissionException e) {\r
+ e.printStackTrace();\r
+ fail(e.getMessage());\r
+ } catch (ResultNotAvailableException e) {\r
+ e.printStackTrace();\r
+ fail(e.getMessage());\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ fail(e.getMessage());\r
+ }\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner })\r
+ public void testPersistance() {\r
+ try {\r
+ Jronn jronn = new Jronn();\r
+ jronn.setError("errrr.txt").setInput(AllTestSuit.test_input)\r
+ .setOutput("outtt.txt");\r
+ assertEquals(jronn.getInput(), AllTestSuit.test_input);\r
+ assertEquals(jronn.getError(), "errrr.txt");\r
+ assertEquals(jronn.getOutput(), "outtt.txt");\r
+ ConfiguredExecutable<Jronn> cJronn = Configurator\r
+ .configureExecutable(jronn, Executable.ExecProvider.Local);\r
+\r
+ SyncExecutor sexec = Configurator.getSyncEngine(cJronn);\r
+ sexec.executeJob();\r
+ ConfiguredExecutable<?> al = sexec.waitForResult();\r
+ assertNotNull(al.getResults());\r
+ // Save run configuration\r
+ assertTrue(cJronn.saveRunConfiguration());\r
+\r
+ // See if loaded configuration is the same as saved\r
+ RunConfiguration loadedRun = RunConfiguration\r
+ .load(new FileInputStream(new File(cJronn\r
+ .getWorkDirectory(), RunConfiguration.rconfigFile)));\r
+ assertEquals(\r
+ ((ConfExecutable<Jronn>) cJronn).getRunConfiguration(),\r
+ loadedRun);\r
+ // Load run configuration as ConfExecutable\r
+ ConfiguredExecutable<Jronn> resurrectedCMuscle = (ConfiguredExecutable<Jronn>) cJronn\r
+ .loadRunConfiguration(new FileInputStream(new File(cJronn\r
+ .getWorkDirectory(), RunConfiguration.rconfigFile)));\r
+ assertNotNull(resurrectedCMuscle);\r
+ assertEquals(resurrectedCMuscle.getExecutable().getInput(),\r
+ AllTestSuit.test_input);\r
+ assertEquals(resurrectedCMuscle.getExecutable().getError(),\r
+ "errrr.txt");\r
+ assertEquals(resurrectedCMuscle.getExecutable().getOutput(),\r
+ "outtt.txt");\r
+ // See in details whether executables are the same\r
+ assertEquals(resurrectedCMuscle.getExecutable(), jronn);\r
+\r
+ ConfiguredExecutable<Jronn> resJronn = Configurator\r
+ .configureExecutable(resurrectedCMuscle.getExecutable(),\r
+ Executable.ExecProvider.Local);\r
+\r
+ sexec = Configurator.getSyncEngine(resJronn,\r
+ Executable.ExecProvider.Local);\r
+ sexec.executeJob();\r
+ al = sexec.waitForResult();\r
+ assertNotNull(al);\r
+\r
+ } catch (JobSubmissionException e) {\r
+ e.printStackTrace();\r
+ fail(e.getMessage());\r
+ } catch (JobExecutionException e) {\r
+ e.printStackTrace();\r
+ fail(e.getMessage());\r
+ } catch (FileNotFoundException e) {\r
+ e.printStackTrace();\r
+ fail(e.getMessage());\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ fail(e.getMessage());\r
+ } catch (ResultNotAvailableException e) {\r
+ e.printStackTrace();\r
+ fail(e.getMessage());\r
+ }\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner })\r
+ public void testConfigurationLoading() {\r
+ try {\r
+ RunnerConfig<Jronn> jronnConfig = ConfExecutable\r
+ .getRunnerOptions(Jronn.class);\r
+ assertNotNull(jronnConfig);\r
+ assertTrue(jronnConfig.getArguments().size() > 0);\r
+\r
+ PresetManager<Jronn> jronnPresets = ConfExecutable\r
+ .getRunnerPresets(Jronn.class);\r
+ assertNotNull(jronnPresets);\r
+ assertTrue(jronnPresets.getPresets().size() > 0);\r
+ jronnPresets.validate(jronnConfig);\r
+\r
+ LimitsManager<Jronn> jronnLimits = ConfExecutable\r
+ .getRunnerLimits(Jronn.class);\r
+ assertNotNull(jronnLimits);\r
+ assertTrue(jronnLimits.getLimits().size() > 0);\r
+ jronnLimits.validate(jronnPresets);\r
+\r
+ } catch (FileNotFoundException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (ValidationException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+\r
+>Foobar_dundeefriends\r
+M T A D G P R E L L Q L R A A V R H R P Q D F V A W L M L A D A E L G M G D T T A G E M A V Q R G L A L H P G H P E A V A R L G R V R W T Q Q R H A E A A V L L Q Q A S D A A P E H P G I A L W L G H A L E D A G Q A E A A A A A Y T R A H Q L L P E E P Y I T A Q L L N W R R R L C D W R A L D V L S A Q V R A A V A Q G V G A V E P F A F L S E D A S A A E Q L A C A R T R A Q A I A A S V R P L A P T R V R S K G P L R V G F V S N G F G A H P T G L L T V A L F E A L Q R R Q P D L Q M H L F A T S G D D G S T L R T R L A Q A S T L H D V T A L G H L A T A K H I R H H G I D L L F D L R G W G G G G R P E V F A L R P A P V Q V N W L A Y P G T S G A P W M D Y V L G D A F A L P P A L E P F Y S E H V L R L Q G A F Q P S D T S R V V A E P P S R T Q C G L P E Q G V V L C C F N N S Y K L N P Q S M A R M L A V L R E V P D S V L W L L S G P G E A D A R L R A F A H A Q G V D A Q R L V F M P K L P H P Q Y L A R Y R H A D L F L D T H P Y N A H T T A S D A L W T G C P V L T T P G E T F A A R V A G S L N H H L G L D E M N V A D D A A F V A K A V A L A S D P A A L T A L H A R V D V L R R E S G V F E M D G F A D D F G A L L Q A L A R R H G W L G I \r
+0.39 0.42 0.46 0.45 0.44 0.42 0.41 0.4 0.4 0.39 0.37 0.37 0.37 0.37 0.38 0.38 0.38 0.38 0.38 0.37 0.36 0.35 0.35 0.34 0.35 0.36 0.37 0.37 0.38 0.41 0.43 0.44 0.45 0.45 0.46 0.46 0.46 0.46 0.47 0.49 0.51 0.51 0.52 0.52 0.52 0.52 0.52 0.51 0.5 0.48 0.49 0.48 0.49 0.48 0.48 0.49 0.5 0.49 0.49 0.47 0.46 0.45 0.45 0.45 0.44 0.43 0.44 0.44 0.46 0.47 0.49 0.49 0.5 0.52 0.52 0.51 0.5 0.49 0.49 0.5 0.52 0.53 0.53 0.55 0.54 0.54 0.53 0.51 0.48 0.46 0.45 0.43 0.41 0.4 0.4 0.4 0.42 0.43 0.43 0.43 0.44 0.44 0.44 0.46 0.46 0.46 0.46 0.47 0.47 0.47 0.47 0.48 0.48 0.48 0.48 0.46 0.45 0.44 0.42 0.39 0.37 0.35 0.32 0.31 0.3 0.28 0.26 0.26 0.25 0.24 0.23 0.23 0.23 0.23 0.24 0.24 0.25 0.26 0.27 0.29 0.3 0.32 0.34 0.34 0.36 0.37 0.38 0.4 0.41 0.42 0.42 0.42 0.42 0.42 0.42 0.43 0.43 0.44 0.44 0.45 0.45 0.45 0.46 0.46 0.47 0.48 0.48 0.5 0.51 0.53 0.54 0.56 0.57 0.57 0.58 0.58 0.58 0.57 0.58 0.58 0.59 0.59 0.59 0.59 0.59 0.59 0.59 0.58 0.59 0.59 0.6 0.6 0.59 0.59 0.59 0.6 0.6 0.6 0.59 0.58 0.58 0.59 0.59 0.58 0.57 0.55 0.53 0.51 0.49 0.45 0.43 0.42 0.4 0.38 0.36 0.34 0.33 0.34 0.34 0.33 0.32 0.3 0.29 0.29 0.28 0.29 0.29 0.29 0.3 0.32 0.34 0.36 0.38 0.41 0.42 0.43 0.43 0.44 0.45 0.46 0.48 0.49 0.52 0.55 0.58 0.58 0.59 0.58 0.58 0.58 0.57 0.56 0.55 0.56 0.55 0.54 0.53 0.52 0.51 0.5 0.49 0.47 0.45 0.44 0.45 0.45 0.46 0.46 0.45 0.45 0.44 0.44 0.44 0.44 0.45 0.45 0.45 0.44 0.44 0.44 0.44 0.43 0.42 0.4 0.39 0.38 0.37 0.38 0.38 0.38 0.37 0.36 0.37 0.36 0.36 0.36 0.37 0.37 0.37 0.36 0.36 0.37 0.38 0.39 0.39 0.4 0.4 0.4 0.39 0.38 0.38 0.36 0.35 0.34 0.34 0.33 0.33 0.33 0.33 0.32 0.31 0.31 0.3 0.3 0.3 0.3 0.3 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.37 0.37 0.38 0.4 0.42 0.42 0.43 0.44 0.44 0.44 0.44 0.45 0.46 0.47 0.49 0.5 0.52 0.52 0.54 0.56 0.58 0.6 0.62 0.63 0.63 0.63 0.64 0.65 0.65 0.65 0.64 0.62 0.59 0.57 0.54 0.51 0.49 0.46 0.44 0.41 0.39 0.37 0.35 0.32 0.31 0.29 0.27 0.26 0.28 0.29 0.29 0.3 0.3 0.3 0.3 0.3 0.31 0.3 0.3 0.3 0.3 0.29 0.29 0.29 0.3 0.3 0.3 0.28 0.27 0.27 0.28 0.28 0.28 0.29 0.3 0.31 0.33 0.34 0.35 0.36 0.37 0.39 0.39 0.39 0.39 0.38 0.38 0.39 0.38 0.38 0.38 0.39 0.4 0.39 0.38 0.38 0.38 0.37 0.36 0.35 0.33 0.34 0.34 0.35 0.35 0.35 0.35 0.34 0.34 0.34 0.32 0.3 0.31 0.31 0.31 0.31 0.32 0.33 0.32 0.33 0.32 0.32 0.32 0.34 0.34 0.35 0.36 0.37 0.38 0.4 0.42 0.43 0.44 0.44 0.45 0.44 0.44 0.45 0.46 0.47 0.47 0.47 0.47 0.46 0.48 0.48 0.49 0.48 0.48 0.45 0.43 0.41 0.39 0.38 0.38 0.38 0.39 0.39 0.38 0.38 0.37 0.36 0.36 0.34 0.33 0.33 0.34 0.34 0.36 0.38 0.39 0.4 0.41 0.42 0.42 0.41 0.41 0.42 0.43 0.44 0.44 0.45 0.45 0.44 0.43 0.42 0.41 0.4 0.39 0.37 0.36 0.36 0.35 0.35 0.34 0.33 0.32 0.32 0.32 0.32 0.33 0.33 0.33 0.32 0.31 0.3 0.29 0.29 0.29 0.3 0.3 0.29 0.28 0.27 0.26 0.26 0.25 0.25 0.23 0.21 0.21 0.2 0.21 0.22 0.22 0.23 0.24 0.23 0.2 0.18 0.16 0.15 0.15 \r
+>Foobar\r
+M G D T T A G E M A V Q R G L A L H Q Q R H A E A A V L L Q Q A S D A A P E H P G I A L W L H A L E D A G Q A E A A A A Y T R A H Q L L P E E P Y I T A Q L L N A V A Q G V G A V E P F A F L S E D A S A A E S V R P L A P T R V R S K G P L R V G F V S N G F G A H P T G L L T V A L F E A L Q R R Q P D L Q M H L F A T S G D D G S T L R T R L A Q A S T L H D V T A L G H L A T A K H I R H H G I D L L F D L R G W G G G G R P E V F A L R P A P V Q V N W L A Y P G T S G A P W M D Y V L G D A F A L P P A L E P F Y S E H V L R L Q G A F Q P S D T S R V V A E P P S R T Q C G L P E Q G V V L C C F N N S Y K L N P Q S M A R M L A V L R E V P D S V L W L L S G P G E A D A R L R A F A H A Q G V D A Q R L V F M P K L P H P Q Y L A R Y R H A D L F L D T H P Y N A H T T A S D A L W T G C P V L T T P G E T F A A R V A G S L N H H L G L D E M N V A D D A A F V A K A V A L A S D P A A L T A L H A R V D V L R R E S G V F E M D G F A D D F G A L L Q A L A R R H G W L G I \r
+0.48 0.42 0.42 0.48 0.52 0.53 0.54 0.53 0.52 0.5 0.49 0.49 0.49 0.48 0.47 0.47 0.47 0.49 0.51 0.53 0.54 0.55 0.55 0.54 0.53 0.52 0.51 0.5 0.51 0.52 0.51 0.51 0.52 0.52 0.52 0.51 0.5 0.48 0.45 0.45 0.43 0.43 0.42 0.42 0.43 0.45 0.47 0.47 0.47 0.47 0.47 0.46 0.47 0.47 0.49 0.48 0.47 0.47 0.47 0.47 0.46 0.46 0.46 0.45 0.44 0.42 0.41 0.41 0.41 0.41 0.4 0.4 0.39 0.39 0.4 0.4 0.39 0.38 0.38 0.38 0.38 0.38 0.38 0.38 0.39 0.41 0.42 0.42 0.43 0.44 0.44 0.44 0.46 0.46 0.48 0.5 0.52 0.55 0.57 0.59 0.6 0.61 0.62 0.63 0.63 0.63 0.63 0.63 0.64 0.64 0.64 0.63 0.62 0.61 0.61 0.61 0.59 0.57 0.55 0.53 0.51 0.49 0.45 0.43 0.42 0.4 0.38 0.36 0.34 0.33 0.34 0.34 0.33 0.32 0.3 0.29 0.29 0.28 0.29 0.29 0.29 0.3 0.32 0.34 0.36 0.38 0.41 0.42 0.43 0.43 0.44 0.45 0.46 0.48 0.49 0.52 0.55 0.58 0.58 0.59 0.58 0.58 0.58 0.57 0.56 0.55 0.56 0.55 0.54 0.53 0.52 0.51 0.5 0.49 0.47 0.45 0.44 0.45 0.45 0.46 0.46 0.45 0.45 0.44 0.44 0.44 0.44 0.45 0.45 0.45 0.44 0.44 0.44 0.44 0.43 0.42 0.4 0.39 0.38 0.37 0.38 0.38 0.38 0.37 0.36 0.37 0.36 0.36 0.36 0.37 0.37 0.37 0.36 0.36 0.37 0.38 0.39 0.39 0.4 0.4 0.4 0.39 0.38 0.38 0.36 0.35 0.34 0.34 0.33 0.33 0.33 0.33 0.32 0.31 0.31 0.3 0.3 0.3 0.3 0.3 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.37 0.37 0.38 0.4 0.42 0.42 0.43 0.44 0.44 0.44 0.44 0.45 0.46 0.47 0.49 0.5 0.52 0.52 0.54 0.56 0.58 0.6 0.62 0.63 0.63 0.63 0.64 0.65 0.65 0.65 0.64 0.62 0.59 0.57 0.54 0.51 0.49 0.46 0.44 0.41 0.39 0.37 0.35 0.32 0.31 0.29 0.27 0.26 0.28 0.29 0.29 0.3 0.3 0.3 0.3 0.3 0.31 0.3 0.3 0.3 0.3 0.29 0.29 0.29 0.3 0.3 0.3 0.28 0.27 0.27 0.28 0.28 0.28 0.29 0.3 0.31 0.33 0.34 0.35 0.36 0.37 0.39 0.39 0.39 0.39 0.38 0.38 0.39 0.38 0.38 0.38 0.39 0.4 0.39 0.38 0.38 0.38 0.37 0.36 0.35 0.33 0.34 0.34 0.35 0.35 0.35 0.35 0.34 0.34 0.34 0.32 0.3 0.31 0.31 0.31 0.31 0.32 0.33 0.32 0.33 0.32 0.32 0.32 0.34 0.34 0.35 0.36 0.37 0.38 0.4 0.42 0.43 0.44 0.44 0.45 0.44 0.44 0.45 0.46 0.47 0.47 0.47 0.47 0.46 0.48 0.48 0.49 0.48 0.48 0.45 0.43 0.41 0.39 0.38 0.38 0.38 0.39 0.39 0.38 0.38 0.37 0.36 0.36 0.34 0.33 0.33 0.34 0.34 0.36 0.38 0.39 0.4 0.41 0.42 0.42 0.41 0.41 0.42 0.43 0.44 0.44 0.45 0.45 0.44 0.43 0.42 0.41 0.4 0.39 0.37 0.36 0.36 0.35 0.35 0.34 0.33 0.32 0.32 0.32 0.32 0.33 0.33 0.33 0.32 0.31 0.3 0.29 0.29 0.29 0.3 0.3 0.29 0.28 0.27 0.26 0.26 0.25 0.25 0.23 0.21 0.21 0.2 0.21 0.22 0.22 0.23 0.24 0.23 0.2 0.18 0.16 0.15 0.15 \r
+\r
+\r
+>dundeefriends\r
+M T A D G P R E L L Q L R A A V R H R P Q D V A W L M L A D A E L G M G D T T A G E M A V Q R G L A L H P G H P E A V A R L G R V R W T Q Q R H A E A A V L L Q Q A S D A A P E H P G I A L W L G H A L E D H Q L L P E E P Y I T A Q L D V L S A Q V R A A V A Q G V G A V E P F A F L S E D A S A A E Q L A C A R T R A Q A I A A S V R P L A P T R V R S K G P L R V G F V S N G F G A H P T G L L T V A L F E A L Q R R Q P D L Q M H L F A T S G D D G S T L R T R L A Q A S T L H D V T A L G H L A T A K H I R H H G I D L L F D L R G W G G G G R P E V F A L R P A P V Q V N W L A Y P G T S G A P W M D Y V L G D A F A L P P A L E P F Y S E H V L R L Q G A F Q P S D T S R V V A E P P S R T Q C G L P E Q G V V L C C F N N S Y K L N P Q S M A R M L A V L R E V P D S V L W L L S G P G E A D A R L R A F A H A Q G V D A Q R L V F M P K L P H P Q Y L A R Y R H A D L F L D T H P Y N A H T T A S D A L W T G C P V L T T P G E T F A A R V A G S L N H H L G L D E M N V A D D A A F V A K A V A L A S D P A A L T A L H A R V D V L R R E S I \r
+0.39 0.42 0.46 0.45 0.44 0.42 0.4 0.37 0.37 0.36 0.35 0.34 0.33 0.33 0.32 0.32 0.32 0.32 0.31 0.3 0.29 0.28 0.28 0.28 0.29 0.3 0.32 0.32 0.35 0.38 0.39 0.41 0.42 0.44 0.45 0.44 0.45 0.47 0.49 0.5 0.51 0.52 0.52 0.52 0.52 0.52 0.51 0.5 0.48 0.49 0.48 0.49 0.48 0.48 0.49 0.5 0.49 0.49 0.47 0.46 0.45 0.45 0.45 0.44 0.43 0.44 0.44 0.46 0.47 0.49 0.49 0.5 0.52 0.52 0.51 0.5 0.49 0.49 0.5 0.52 0.53 0.53 0.55 0.54 0.54 0.53 0.52 0.49 0.46 0.44 0.43 0.41 0.41 0.4 0.4 0.41 0.42 0.41 0.4 0.39 0.38 0.37 0.37 0.37 0.35 0.34 0.35 0.35 0.35 0.36 0.36 0.37 0.38 0.38 0.39 0.38 0.39 0.38 0.39 0.4 0.4 0.41 0.41 0.42 0.42 0.42 0.43 0.44 0.44 0.45 0.45 0.45 0.46 0.45 0.46 0.46 0.47 0.48 0.48 0.5 0.51 0.53 0.54 0.56 0.57 0.57 0.58 0.58 0.58 0.57 0.58 0.58 0.59 0.59 0.59 0.59 0.59 0.59 0.59 0.58 0.59 0.59 0.6 0.6 0.59 0.59 0.59 0.6 0.6 0.6 0.59 0.58 0.58 0.59 0.59 0.58 0.57 0.55 0.53 0.51 0.49 0.45 0.43 0.42 0.4 0.38 0.36 0.34 0.33 0.34 0.34 0.33 0.32 0.3 0.29 0.29 0.28 0.29 0.29 0.29 0.3 0.32 0.34 0.36 0.38 0.41 0.42 0.43 0.43 0.44 0.45 0.46 0.48 0.49 0.52 0.55 0.58 0.58 0.59 0.58 0.58 0.58 0.57 0.56 0.55 0.56 0.55 0.54 0.53 0.52 0.51 0.5 0.49 0.47 0.45 0.44 0.45 0.45 0.46 0.46 0.45 0.45 0.44 0.44 0.44 0.44 0.45 0.45 0.45 0.44 0.44 0.44 0.44 0.43 0.42 0.4 0.39 0.38 0.37 0.38 0.38 0.38 0.37 0.36 0.37 0.36 0.36 0.36 0.37 0.37 0.37 0.36 0.36 0.37 0.38 0.39 0.39 0.4 0.4 0.4 0.39 0.38 0.38 0.36 0.35 0.34 0.34 0.33 0.33 0.33 0.33 0.32 0.31 0.31 0.3 0.3 0.3 0.3 0.3 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.37 0.37 0.38 0.4 0.42 0.42 0.43 0.44 0.44 0.44 0.44 0.45 0.46 0.47 0.49 0.5 0.52 0.52 0.54 0.56 0.58 0.6 0.62 0.63 0.63 0.63 0.64 0.65 0.65 0.65 0.64 0.62 0.59 0.57 0.54 0.51 0.49 0.46 0.44 0.41 0.39 0.37 0.35 0.32 0.31 0.29 0.27 0.26 0.28 0.29 0.29 0.3 0.3 0.3 0.3 0.3 0.31 0.3 0.3 0.3 0.3 0.29 0.29 0.29 0.3 0.3 0.3 0.28 0.27 0.27 0.28 0.28 0.28 0.29 0.3 0.31 0.33 0.34 0.35 0.36 0.37 0.39 0.39 0.39 0.39 0.38 0.38 0.39 0.38 0.38 0.38 0.39 0.4 0.39 0.38 0.38 0.38 0.37 0.36 0.35 0.33 0.34 0.34 0.35 0.35 0.35 0.35 0.34 0.34 0.34 0.32 0.3 0.31 0.31 0.31 0.31 0.32 0.33 0.32 0.33 0.32 0.32 0.32 0.34 0.34 0.35 0.36 0.37 0.38 0.4 0.42 0.43 0.44 0.44 0.45 0.44 0.44 0.45 0.46 0.47 0.47 0.47 0.47 0.46 0.48 0.48 0.49 0.48 0.48 0.45 0.43 0.41 0.39 0.38 0.38 0.38 0.39 0.39 0.38 0.38 0.37 0.36 0.36 0.34 0.33 0.33 0.34 0.34 0.36 0.38 0.39 0.4 0.41 0.42 0.42 0.41 0.41 0.42 0.43 0.44 0.44 0.45 0.45 0.44 0.43 0.42 0.41 0.39 0.39 0.38 0.38 0.38 0.37 0.35 0.35 0.34 0.33 0.31 0.3 0.3 0.29 0.28 0.28 0.28 0.26 0.25 \r
+\r