Basic Testing Setup, no getResults method yet
authorDaniel Barton <daluke.barton@gmail.com>
Sat, 3 Aug 2013 11:18:32 +0000 (12:18 +0100)
committerDaniel Barton <daluke.barton@gmail.com>
Sat, 3 Aug 2013 11:18:32 +0000 (12:18 +0100)
conf/Executable.properties
conf/settings/RNAalifoldParameters.xml [new file with mode: 0644]
log/log4j.properties
runner/compbio/runner/structure/RNAalifold.java
testsrc/compbio/metadata/AllTestSuit.java
testsrc/compbio/runner/structure/RNAalifoldParametersTester.java [new file with mode: 0644]
testsrc/compbio/runner/structure/RNAalifoldTester.java
testsrc/testdata/RNAalifoldParameters.xml [new file with mode: 0644]
testsrc/testdata/unfolded_RF00031.aln [new file with mode: 0644]

index 55ffc28..7944081 100644 (file)
@@ -198,4 +198,5 @@ aacon.presets.file=conf/settings/AAConPresets.xml
 #####                                  RNAALIFOLD CONFIGURATION                         ######\r
 # just the windows binary at the moment\r
 local.rnaalifold.bin.windows=binaries/windows/ViennaRNA/RNAalifold.exe\r
+rnaalifold.parameters.file=conf/settings/RNAalifoldParamteres.xml\r
 \r
diff --git a/conf/settings/RNAalifoldParameters.xml b/conf/settings/RNAalifoldParameters.xml
new file mode 100644 (file)
index 0000000..b0e8df0
--- /dev/null
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
+<runnerConfig>
+       <runnerClassName>compbio.runner.structure.RNAalifold</runnerClassName>
+       <options isRequired='false'>
+               <name>Endgaps</name>
+               <description>Score pairs with endgaps same as gap-gap pairs</description>
+               <optionNames>-E</optionNames>
+               <optionNames>--endgaps</optionNames>
+               <defaultValue>-E</defaultValue>
+       </options>
+       <options isRequired='false'>
+               <name>Most Informative Sequence</name>
+               <description>Ouput Set of nucleotides with frequency > average</description>
+               <optionNames>--mis</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>Partition Function</name>
+               <description>Output partition function and probability matrix</description>
+               <optionNames>-p</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>color</name>
+               <description>Consensus structure plot is colored</description>
+               <optionNames>--color</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>Alignment</name>
+               <description>Output structure annotated alignment</description>
+               <optionNames>--aln</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>No Postscript</name>      
+               <description>Do not produce postscript output</description>
+               <optionNames>--noPS</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>Partition Function</name>
+               <description>Output partition function and probability matrix</description>
+               <optionNames>-p</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>Circular</name>
+               <description>Assume circular RNA molecule</description>
+               <optionNames>-c</optionNames>
+               <optionNames>--circ</optionNames>
+               <defaultValue>-c</defaultValue>
+       </options>
+       <!--  Not Currently available with circular structures (-c) -->
+       <options isRequired='false'>
+               <name>G-Quadruplex</name>
+               <description>Incorporate G-Quadruplex formation into prediction algorithm</description>
+               <optionNames>-g</optionNames>
+               <optionNames>--gquad</optionNames>
+               <defaultValue>-g</defaultValue>
+       </options>
+       <options isRequired='false'>
+               <name>Dangling End Preset</name>
+               <description>dangling energies will be added for the bases adjacent to a helix on both sides</description>
+               <optionNames>-d2</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>No LP</name>
+               <description>Produce Structures without lonely pairs</description>
+               <optionNames>--noLP</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>No GU</name>
+               <description>Do not allow GU pairs</description>
+               <optionNames>--noGU</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>No Closing GU</name>
+               <description>Do not allow GU pairs at the end of sequences</description>
+               <optionNames>--noClosingGU</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>old</name>
+               <description>Use old energy evaluation, treating gaps as characters</description>
+               <optionNames>--old</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>Ribosum Scoring</name>
+               <description>Use Ribosum Scoring Matrix</description>
+               <optionNames>-r</optionNames>
+               <optionNames>--ribosum_scoring</optionNames>
+               <defaultValue>-r</defaultValue>
+       </options>
+<!-- Constraints are entered on the command line followed by the input .aln file
+        Causing problems for a batch RNAalifold execution system -->
+<!--  
+       <option isRequired='false'>
+               <name>Constraints</name>
+               <description>Structures calculated subject to constraints</description>
+               <optionNames>-C</optionNames>
+               <validValue>
+                       <type>String</type>
+               </validValue>
+       </option> -->
+       <parameters isRequired='false'>
+               <name>MEA structure</name>
+               <description>Maximum Expected Accuracy Structure</description>
+               <optionNames>--MEA</optionNames>
+               <defaultValue>1</defaultValue>
+               <validValue>
+                       <type>Float</type>
+               </validValue>
+       </parameters>
+<!--  ?Will Jabaws recognize that arguments for the following params must
+be of the form -s INT and &dash-stochBT=INT -->
+       <parameters isRequired='false'>
+               <name>Stochastic Backtrack</name>
+               <description>Compute a number of random structures</description>
+               <optionNames>-s</optionNames>
+               <!-- Having multiple optionNames requires a default value but
+                       in a parameter defaultValue refers to the argument -->
+<!--           <optionNames>-stochBT</optionNames> -->
+               <defaultValue>5</defaultValue>  <!-- arbitrary -->
+               <validValue>
+                       <type>Int</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>stochBT_en</name>
+               <description>Print Backtrack structures</description>
+               <optionNames>--stochBT_en</optionNames>
+               <defaultValue>5</defaultValue>  <!-- arbitrary -->
+               <validValue>
+                       <type>Int</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>scaling factor</name>
+               <description>In calculating pf use scale*mfe as estimate for ensemble free energy]</description>
+               <optionNames>-S</optionNames>
+<!--           <optionNames>-pfScale</optionNames> -->
+               <defaultValue>1.07</defaultValue>
+               <validValue>
+                       <type>Float</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>bppmThreshold</name>
+               <description>Threshold for base pair probabilities</description>
+               <optionNames>--bppmThreshold</optionNames>
+               <defaultValue>1e-6</defaultValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>Temperature</name>
+               <description>Rescale Energy parameterss to Temperature</description>
+               <optionNames>-T</optionNames>
+<!--           <optionNames>-temp</optionNames> -->
+               <defaultValue>37</defaultValue>
+               <validValue>
+                       <type>Double</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>Dangling End</name>
+               <description>How to treat Dangling End energies for bases adjacent to helices</description>
+               <optionNames>-d</optionNames>
+<!--           <optionNames>-dangles</optionNames> -->
+               <defaultValue>2</defaultValue>
+               <validValue>
+                       <type>Int</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>cfactor</name>
+               <description>weight of covariance term</description>
+               <optionNames>--cfactor</optionNames>
+               <defaultValue>1.0</defaultValue>
+               <validValue>
+                       <type>Double</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>nfactor</name>
+               <description>penalty for non-compatible sequences in covariance term</description>      
+               <optionNames>--nfactor</optionNames>
+               <defaultValue>1.0</defaultValue>
+               <validValue>
+                       <type>Double</type>
+               </validValue>
+       </parameters>
+       
+<!--    How to deal with default/possible values for parameter files? -->
+<!--   <parameters isRequired='false'> -->
+<!--           <name>Ribosum File</name> -->
+<!--           <description>Use Specified Ribosum Matrix</description> -->
+<!--           <optionNames>-R</optionNames> -->
+<!--           <optionNames>-ribosum_file</optionNames> --> <!-- commentx2 -->
+<!--   </parameters> -->
+<!--   <parameters isRequired='false'> -->
+<!--           <name>Paramfile</name> -->
+<!--           <description>Use Energy parameters from a file</description> -->
+<!--           <optionNames>-P</optionNames> -->
+<!--           <optionNames>-paramFile</optionNames> --> <!-- commentx2 -->
+<!--           <validValue> -->
+<!--                   <type>String</type> -->
+<!--           </validValue> -->
+<!--   </parameters> -->
+       
+       <parameters isRequired='false'>
+               <name>Allow Pairs</name>
+               <descrition>allow pairs in addition to AU, GC and GU</descrition>
+               <optionNames>--nsp</optionNames>
+               <defaultValue>-GA</defaultValue>
+               <validValue>
+                       <type>String</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>betaScale</name>
+               <description>Set scaling of Boltzmann factors</description>
+               <optionNames>--betaScale</optionNames>
+               <defaultValue>1.0</defaultValue>
+               <validValue>
+                       <type>Double</type>
+               </validValue>
+       </parameters>
+</runnerConfig>
\ No newline at end of file
index cd2a406..316f154 100644 (file)
 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE\r
 \r
 ## Uncomment this if you would like the system to log messages into stdout\r
-#log4j.rootLogger=TRACE, rootfile\r
-#log4j.appender.rootfile=org.apache.log4j.RollingFileAppender\r
-#log4j.appender.rootfile.File=JABAWSLogFilename.log\r
-#log4j.appender.rootfile.Target=System.out\r
-#log4j.appender.rootfile.layout=org.apache.log4j.PatternLayout\r
-#log4j.appender.rootfile.layout.ConversionPattern=%t %d %m%n\r
+log4j.rootLogger=INFO, rootfile, stdout\r
+log4j.appender.rootfile=org.apache.log4j.RollingFileAppender\r
+log4j.appender.rootfile.File=JABAWSLogFilename.log\r
+log4j.appender.rootfile.layout=org.apache.log4j.PatternLayout\r
+log4j.appender.rootfile.layout.ConversionPattern=%-5p [%t]: %m%n\r
+\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=%-5p [%t]  %-45C: %m%n\r
 \r
 ## Uncomment to enable JWS2 activity logging to the file\r
 #log4j.logger.compbio=TRACE, ACTIVITY\r
@@ -50,18 +54,18 @@ org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE
 #log4j.appender.stdout.layout.ConversionPattern=%m%n\r
 #log4j.rootLogger=info, stdout\r
 \r
-log4j.rootLogger=ERROR, R\r
-log4j.appender.R=org.apache.log4j.FileAppender\r
-log4j.appender.R.File=${catalina.base}/logs/JABAWSErrorFile.log\r
-log4j.appender.R.layout=org.apache.log4j.PatternLayout\r
-log4j.appender.R.layout.ConversionPattern=%m%n %d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - \r
+#log4j.rootLogger=ERROR, R\r
+#log4j.appender.R=org.apache.log4j.FileAppender\r
+#log4j.appender.R.File=${catalina.base}/logs/JABAWSErrorFile.log\r
+#log4j.appender.R.layout=org.apache.log4j.PatternLayout\r
+#log4j.appender.R.layout.ConversionPattern=%m%n %d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - \r
 \r
-# %d{ABSOLUTE} %5p %c{1}:%L -\r
-log4j.logger.compbio=WARN, B\r
-log4j.appender.B=org.apache.log4j.FileAppender\r
-log4j.appender.B.File=${catalina.base}/logs/engine.log\r
-log4j.appender.B.layout=org.apache.log4j.PatternLayout\r
-log4j.appender.B.layout.ConversionPattern=%m%n %d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - \r
+## %d{ABSOLUTE} %5p %c{1}:%L -\r
+#log4j.logger.compbio=WARN, B\r
+#log4j.appender.B=org.apache.log4j.FileAppender\r
+#log4j.appender.B.File=${catalina.base}/logs/engine.log\r
+#log4j.appender.B.layout=org.apache.log4j.PatternLayout\r
+#log4j.appender.B.layout.ConversionPattern=%m%n %d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - \r
 \r
 # %d{ABSOLUTE} %5p %c{1}:%L -\r
 #log4j.logger.compbio.engine.local.LocalExecutorService=INFO, C\r
index 43a0975..ff89fcb 100644 (file)
@@ -1,7 +1,5 @@
 package compbio.runner.structure;
 
-import java.util.Scanner; //temp
-import java.io.File; //temp
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -12,40 +10,39 @@ import org.apache.log4j.Logger;
 
 import compbio.data.sequence.Alignment;
 import compbio.data.sequence.UnknownFileFormatException;
+import compbio.engine.client.PipedExecutable;
 import compbio.engine.client.SkeletalExecutable;
 import compbio.metadata.ResultNotAvailableException;
 import compbio.runner.Util;
 
-public class RNAalifold extends SkeletalExecutable<RNAalifold> {
+public class RNAalifold extends SkeletalExecutable<RNAalifold> 
+               implements PipedExecutable<RNAalifold> {
+       
+       
+       
+       private static Logger log = Logger.getLogger(RNAalifold.class);
+
        
        @SuppressWarnings("unchecked")
        @Override
-       //temp
+       // PlaceHolder method
        public String getResults(String resultFile)
                        throws ResultNotAvailableException {
-               Scanner s;
-               try {
-                       System.out.println("testfrom RNAalifold.getResults");
-                       s = new Scanner(new File(resultFile));
-                       System.out.println(s.nextLine());
-                       return "null";
-               } catch (FileNotFoundException e) {
-                       System.out.println("file not found");
-                       throw new ResultNotAvailableException(e);
-               } 
+               return "null";
        }
 
        
        @Override
        public RNAalifold setOutput(String outFile) {
-               System.out.println("Set ouput file: " + outFile.toString());
+               log.info("Set ouput file: " + outFile.toString());
                super.setOutput(outFile);
                return this;
        }
        
        @Override
        public RNAalifold setInput(String inFile) {
-               System.out.println("Set input file: " + inFile.toString());
+               log.info("Set input file: " + inFile.toString());
+               cbuilder.setLast(inFile);
                super.setInput(inFile);
                return this;
        }
index efbdcce..bbb7fbd 100644 (file)
@@ -73,6 +73,6 @@ public class AllTestSuit {
 \r
        public static final String test_input_large = AllTestSuit.TEST_DATA_PATH_ABSOLUTE + "1000x3000Dna.fasta";\r
        \r
-       public static final String test_input_rna = AllTestSuit.TEST_DATA_PATH_ABSOLUTE + "unfolded_RF00031.aln";\r
+       public static final String test_input_aln = AllTestSuit.TEST_DATA_PATH_ABSOLUTE + "unfolded_RF00031.aln";\r
 \r
 }\r
diff --git a/testsrc/compbio/runner/structure/RNAalifoldParametersTester.java b/testsrc/compbio/runner/structure/RNAalifoldParametersTester.java
new file mode 100644 (file)
index 0000000..9c15537
--- /dev/null
@@ -0,0 +1,202 @@
+package compbio.runner.structure;
+
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.ValidationException;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import compbio.engine.Configurator;
+import compbio.engine.client.ConfiguredExecutable;
+import compbio.engine.client.Executable.ExecProvider;
+import compbio.engine.conf.RunnerConfigMarshaller;
+import compbio.engine.local.ExecutableWrapper;
+import compbio.engine.local.LocalRunner;
+import compbio.metadata.AllTestSuit;
+import compbio.metadata.JobExecutionException;
+import compbio.metadata.JobSubmissionException;
+import compbio.metadata.Option;
+import compbio.metadata.Parameter;
+import compbio.metadata.Preset;
+import compbio.metadata.PresetManager;
+import compbio.metadata.ResultNotAvailableException;
+import compbio.metadata.RunnerConfig;
+import compbio.runner.OptionCombinator;
+import compbio.runner.structure.RNAalifold;
+import compbio.util.FileUtil;
+
+
+public class RNAalifoldParametersTester {
+
+       
+       // should be: AllTestSuit.TEST_DATA_PATH + "RNAalifoldParameters.xml"
+       static final String rnaalifoldConfigFile = 
+                       AllTestSuit.TEST_DATA_PATH + "RNAalifoldParameters.xml";
+       public static String test_outfile = "rnaalifold.out.txt";
+
+       private static Logger log = Logger
+                       .getLogger(AllTestSuit.RUNNER_TEST_LOGGER);
+       
+       static {
+               log.setLevel(Level.INFO);
+       }
+       
+       RunnerConfig<RNAalifold> rnaalifoldConfig = null;
+       OptionCombinator rnaalifoldOpc = null;
+       
+       @BeforeMethod(groups = { AllTestSuit.test_group_runner })
+       @SuppressWarnings("unchecked")
+       public void setup() {
+               try {
+                       RunnerConfigMarshaller<RNAalifold> rnaalifoldmarsh = 
+                                       new RunnerConfigMarshaller<RNAalifold>(RunnerConfig.class);
+                       rnaalifoldConfig = rnaalifoldmarsh.read(new FileInputStream(new File(
+                                       rnaalifoldConfigFile)), RunnerConfig.class);
+                       rnaalifoldOpc = new OptionCombinator(rnaalifoldConfig);
+                       
+                       log.info("Num options: " + rnaalifoldOpc.getAllOptions().size());
+                       log.info("Num params: " + rnaalifoldOpc.getAllParameters().size());
+                       
+                       
+               } catch (JAXBException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               } catch (FileNotFoundException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               }
+       }
+       
+       @Test
+       public void testConfiguration() {
+               try {
+                       this.rnaalifoldConfig.validate();
+               } catch (ValidationException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               } catch (IllegalStateException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               }
+       }
+
+       @Test(groups = { AllTestSuit.test_group_runner })
+       public void testDefaultParameters() {
+               RNAalifold rnaalifold = new RNAalifold();
+               rnaalifold.setInput(AllTestSuit.test_input_aln).setOutput(test_outfile);
+
+               try {
+                       // For local execution use relavive
+                       ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator
+                                       .configureExecutable(rnaalifold);
+                       LocalRunner lr = new LocalRunner(confRNAalifold);
+                       lr.executeJob();
+                       confRNAalifold = (ConfiguredExecutable<RNAalifold>) lr.waitForResult();
+                       assertNotNull(confRNAalifold.getResults());
+               } catch (JobSubmissionException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               } catch (JobExecutionException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               } catch (ResultNotAvailableException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               }
+       }
+       
+       @Test(groups = { AllTestSuit.test_group_runner })
+       public void testOptions() {
+               test(rnaalifoldOpc.getAllOptions());
+       }
+
+       @Test(groups = { AllTestSuit.test_group_runner })
+       public void testParameters() {
+               List<Parameter<?>> params = rnaalifoldOpc.getAllParameters();
+               Collections.shuffle(params);
+               test(params);
+       }
+
+       @Test(groups = { AllTestSuit.test_group_runner })
+       public void testArguments() {
+               List<Option<?>> options = rnaalifoldOpc.getAllOptions();
+               options.addAll(rnaalifoldOpc.getAllParameters());
+               Collections.shuffle(options);
+               test(options);
+       }
+       
+       void test(Map<Parameter<?>, String> paramValue) {
+               List<Parameter<?>> paramList = new ArrayList<Parameter<?>>(paramValue
+                               .keySet());
+               for (int i = 0; i < paramValue.size(); i++) {
+                       List<String> args = rnaalifoldOpc.parametersToCommandString(paramList, 
+                                       paramValue);
+                       singleTest(args);
+                       Collections.shuffle(paramList);
+               }
+               log.info("NUMBER OF COMBINATION TESTED: " + paramValue.size());
+       }
+       
+       void test(List<? extends Option<?>> params) {
+               for (int i = 0; i < params.size(); i++) {
+                       List<String> args = rnaalifoldOpc.argumentsToCommandString(params);
+                       singleTest(args);
+                       Collections.shuffle(params);
+               }
+               log.info("NUMBER OF COMBINATION TESTED: " + params.size());
+       }
+       
+       void singleTest(List<String> params) {
+               try {
+                       log.info("Using arguments: " + params);
+                       RNAalifold rnaalifold = new RNAalifold();
+                       rnaalifold.setInput(AllTestSuit.test_input_aln).setOutput(test_outfile);
+                       
+                       ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator
+                                       .configureExecutable(rnaalifold, ExecProvider.Local);
+                       // Add options to the executable
+                       confRNAalifold.addParameters(params);
+                       LocalRunner lr = new LocalRunner(confRNAalifold);
+                       lr.executeJob();
+                       confRNAalifold = (ConfiguredExecutable<RNAalifold>) lr.waitForResult();
+                       assertNotNull(confRNAalifold.getResults());
+                       File errors = new File(confRNAalifold.getWorkDirectory(),
+                                       ExecutableWrapper.PROC_ERR_FILE);
+                       if (errors.length() != 0) {
+                               log.error("PROBLEMS:\n " + FileUtil.readFileToString(errors));
+                       }
+                       assertTrue(errors.length() == 0, "Run with arguments : " + params
+                                       + " FAILED!");
+                       Collections.shuffle(params);
+               } catch (JobSubmissionException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               } catch (JobExecutionException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               } catch (IOException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               } catch (ResultNotAvailableException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               }
+       }
+       
+}
index 6a5056a..123f4b2 100644 (file)
@@ -16,6 +16,7 @@ import java.text.ParseException;
 
 import javax.xml.bind.ValidationException;
 
+import org.apache.log4j.*;
 import org.ggf.drmaa.DrmaaException;
 import org.ggf.drmaa.JobInfo;
 import org.testng.annotations.BeforeMethod;
@@ -46,26 +47,61 @@ import compbio.metadata.LimitsManager;
 import compbio.metadata.PresetManager;
 import compbio.metadata.ResultNotAvailableException;
 import compbio.metadata.RunnerConfig;
+import compbio.runner.msa.ClustalW;
 import compbio.runner.structure.RNAalifold;
 
 public class RNAalifoldTester {
 
+       private static Logger log = Logger
+                       .getLogger(AllTestSuit.RUNNER_TEST_LOGGER);
+       
+       
        private RNAalifold rnaalifold;
        
+       static final String rnaalifoldConfigFile = AllTestSuit.TEST_DATA_PATH
+                       + "RNAalifoldParameters.xml";
        public static String test_outfile = "rnaalifold.out";
        
+       @Test(groups = { AllTestSuit.test_group_runner })
+       public void testRunLocally() {
+               RNAalifold rnaalifold = new RNAalifold();
+               rnaalifold.setInput(AllTestSuit.test_input).setOutput(test_outfile);
+               try{
+                       
+                       ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator
+                                       .configureExecutable(rnaalifold, Executable.ExecProvider.Local);
+                       LocalRunner lr = new LocalRunner(confRNAalifold);
+                       lr.executeJob();
+                       confRNAalifold = (ConfiguredExecutable<RNAalifold>) lr.waitForResult();
+                       // getResults method still to come 
+                       assertNotNull(confRNAalifold.getResults()); 
+               } catch (JobSubmissionException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               } catch (JobExecutionException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               } catch (ResultNotAvailableException e) {
+                       e.printStackTrace();
+                       fail(e.getLocalizedMessage());
+               }
+       }
+       
+       
        public static void main(String[] args) throws JobSubmissionException,
                        JobExecutionException, InterruptedException {
+
                
-               System.out.println("Run RNAalifold.main()");
-               
+               log.warn("Logger test :- Run RNAalifold.main()");
+
                RNAalifold rnaalifold = new RNAalifold();
-               rnaalifold.setInput(AllTestSuit.test_input_rna).setOutput("test_outfile");
+               rnaalifold.setInput(AllTestSuit.test_input_aln).setOutput("test_outfile.txt");
                
                ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator
                                        .configureExecutable(rnaalifold);
                AsyncExecutor lr = new AsyncLocalRunner();
                lr.submitJob(confRNAalifold);
+               
                Thread.sleep(3000);
                LocalExecutorService.shutDown();
                
diff --git a/testsrc/testdata/RNAalifoldParameters.xml b/testsrc/testdata/RNAalifoldParameters.xml
new file mode 100644 (file)
index 0000000..b0e8df0
--- /dev/null
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
+<runnerConfig>
+       <runnerClassName>compbio.runner.structure.RNAalifold</runnerClassName>
+       <options isRequired='false'>
+               <name>Endgaps</name>
+               <description>Score pairs with endgaps same as gap-gap pairs</description>
+               <optionNames>-E</optionNames>
+               <optionNames>--endgaps</optionNames>
+               <defaultValue>-E</defaultValue>
+       </options>
+       <options isRequired='false'>
+               <name>Most Informative Sequence</name>
+               <description>Ouput Set of nucleotides with frequency > average</description>
+               <optionNames>--mis</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>Partition Function</name>
+               <description>Output partition function and probability matrix</description>
+               <optionNames>-p</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>color</name>
+               <description>Consensus structure plot is colored</description>
+               <optionNames>--color</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>Alignment</name>
+               <description>Output structure annotated alignment</description>
+               <optionNames>--aln</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>No Postscript</name>      
+               <description>Do not produce postscript output</description>
+               <optionNames>--noPS</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>Partition Function</name>
+               <description>Output partition function and probability matrix</description>
+               <optionNames>-p</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>Circular</name>
+               <description>Assume circular RNA molecule</description>
+               <optionNames>-c</optionNames>
+               <optionNames>--circ</optionNames>
+               <defaultValue>-c</defaultValue>
+       </options>
+       <!--  Not Currently available with circular structures (-c) -->
+       <options isRequired='false'>
+               <name>G-Quadruplex</name>
+               <description>Incorporate G-Quadruplex formation into prediction algorithm</description>
+               <optionNames>-g</optionNames>
+               <optionNames>--gquad</optionNames>
+               <defaultValue>-g</defaultValue>
+       </options>
+       <options isRequired='false'>
+               <name>Dangling End Preset</name>
+               <description>dangling energies will be added for the bases adjacent to a helix on both sides</description>
+               <optionNames>-d2</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>No LP</name>
+               <description>Produce Structures without lonely pairs</description>
+               <optionNames>--noLP</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>No GU</name>
+               <description>Do not allow GU pairs</description>
+               <optionNames>--noGU</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>No Closing GU</name>
+               <description>Do not allow GU pairs at the end of sequences</description>
+               <optionNames>--noClosingGU</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>old</name>
+               <description>Use old energy evaluation, treating gaps as characters</description>
+               <optionNames>--old</optionNames>
+       </options>
+       <options isRequired='false'>
+               <name>Ribosum Scoring</name>
+               <description>Use Ribosum Scoring Matrix</description>
+               <optionNames>-r</optionNames>
+               <optionNames>--ribosum_scoring</optionNames>
+               <defaultValue>-r</defaultValue>
+       </options>
+<!-- Constraints are entered on the command line followed by the input .aln file
+        Causing problems for a batch RNAalifold execution system -->
+<!--  
+       <option isRequired='false'>
+               <name>Constraints</name>
+               <description>Structures calculated subject to constraints</description>
+               <optionNames>-C</optionNames>
+               <validValue>
+                       <type>String</type>
+               </validValue>
+       </option> -->
+       <parameters isRequired='false'>
+               <name>MEA structure</name>
+               <description>Maximum Expected Accuracy Structure</description>
+               <optionNames>--MEA</optionNames>
+               <defaultValue>1</defaultValue>
+               <validValue>
+                       <type>Float</type>
+               </validValue>
+       </parameters>
+<!--  ?Will Jabaws recognize that arguments for the following params must
+be of the form -s INT and &dash-stochBT=INT -->
+       <parameters isRequired='false'>
+               <name>Stochastic Backtrack</name>
+               <description>Compute a number of random structures</description>
+               <optionNames>-s</optionNames>
+               <!-- Having multiple optionNames requires a default value but
+                       in a parameter defaultValue refers to the argument -->
+<!--           <optionNames>-stochBT</optionNames> -->
+               <defaultValue>5</defaultValue>  <!-- arbitrary -->
+               <validValue>
+                       <type>Int</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>stochBT_en</name>
+               <description>Print Backtrack structures</description>
+               <optionNames>--stochBT_en</optionNames>
+               <defaultValue>5</defaultValue>  <!-- arbitrary -->
+               <validValue>
+                       <type>Int</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>scaling factor</name>
+               <description>In calculating pf use scale*mfe as estimate for ensemble free energy]</description>
+               <optionNames>-S</optionNames>
+<!--           <optionNames>-pfScale</optionNames> -->
+               <defaultValue>1.07</defaultValue>
+               <validValue>
+                       <type>Float</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>bppmThreshold</name>
+               <description>Threshold for base pair probabilities</description>
+               <optionNames>--bppmThreshold</optionNames>
+               <defaultValue>1e-6</defaultValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>Temperature</name>
+               <description>Rescale Energy parameterss to Temperature</description>
+               <optionNames>-T</optionNames>
+<!--           <optionNames>-temp</optionNames> -->
+               <defaultValue>37</defaultValue>
+               <validValue>
+                       <type>Double</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>Dangling End</name>
+               <description>How to treat Dangling End energies for bases adjacent to helices</description>
+               <optionNames>-d</optionNames>
+<!--           <optionNames>-dangles</optionNames> -->
+               <defaultValue>2</defaultValue>
+               <validValue>
+                       <type>Int</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>cfactor</name>
+               <description>weight of covariance term</description>
+               <optionNames>--cfactor</optionNames>
+               <defaultValue>1.0</defaultValue>
+               <validValue>
+                       <type>Double</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>nfactor</name>
+               <description>penalty for non-compatible sequences in covariance term</description>      
+               <optionNames>--nfactor</optionNames>
+               <defaultValue>1.0</defaultValue>
+               <validValue>
+                       <type>Double</type>
+               </validValue>
+       </parameters>
+       
+<!--    How to deal with default/possible values for parameter files? -->
+<!--   <parameters isRequired='false'> -->
+<!--           <name>Ribosum File</name> -->
+<!--           <description>Use Specified Ribosum Matrix</description> -->
+<!--           <optionNames>-R</optionNames> -->
+<!--           <optionNames>-ribosum_file</optionNames> --> <!-- commentx2 -->
+<!--   </parameters> -->
+<!--   <parameters isRequired='false'> -->
+<!--           <name>Paramfile</name> -->
+<!--           <description>Use Energy parameters from a file</description> -->
+<!--           <optionNames>-P</optionNames> -->
+<!--           <optionNames>-paramFile</optionNames> --> <!-- commentx2 -->
+<!--           <validValue> -->
+<!--                   <type>String</type> -->
+<!--           </validValue> -->
+<!--   </parameters> -->
+       
+       <parameters isRequired='false'>
+               <name>Allow Pairs</name>
+               <descrition>allow pairs in addition to AU, GC and GU</descrition>
+               <optionNames>--nsp</optionNames>
+               <defaultValue>-GA</defaultValue>
+               <validValue>
+                       <type>String</type>
+               </validValue>
+       </parameters>
+       <parameters isRequired='false'>
+               <name>betaScale</name>
+               <description>Set scaling of Boltzmann factors</description>
+               <optionNames>--betaScale</optionNames>
+               <defaultValue>1.0</defaultValue>
+               <validValue>
+                       <type>Double</type>
+               </validValue>
+       </parameters>
+</runnerConfig>
\ No newline at end of file
diff --git a/testsrc/testdata/unfolded_RF00031.aln b/testsrc/testdata/unfolded_RF00031.aln
new file mode 100644 (file)
index 0000000..69a7850
--- /dev/null
@@ -0,0 +1,126 @@
+CLUSTAL
+
+B.taurus.1/1-64       C-UUGCGUU--AAUGAGAACAGAAACG-UAAA--CUAUAA-CCUAG-G---------GGU
+D.melanogaster.3/1-68 G-UGGCGCU--UAUGACGCAGUUGUCU-UAAA-CUCGAAC--UCGA-GC--------GGG
+D.melanogaster.2/1-63 C-AUUCAACU-UAUGAGGAUUAUUUCU-UAAA-GGCCUCU---GGC--U-------CGGA
+D.melanogaster.1/1-65 G-AGCC-CU---AUGAUCGAUGAUUGG-CAAA-UCCUCUC--GAGG--A-------ACCG
+R.norvegicus.7/1-66   C-CGGCACU--CAUGACGGUCUGCCUG-AAAA-CCAGCCC--GCUG-GU--------GGG
+R.norvegicus.6/1-67   G-CCGCUUC---AUGACAGGAAGGACU-GAAA-UGUCUCA-AAGAC--C-----UGUGGU
+R.norvegicus.5/1-62   G-UUUUUCC---AUGACGGUGUUUCCUCUAAA--UUUAC----AUG-----------GAG
+R.norvegicus.4/1-61   G-UCAGAUG---AUGACGGCCUGUGCA-GAAA-CCCCCAC-GUGGG--C--------UGC
+R.norvegicus.3/1-67   U-UUGCAUU--AAUGAGGAUUACACAG-AAAA-CCUUUGU--UAAGGGU--------UUG
+R.norvegicus.2/1-64   G-UUACAUU--GAUGAGAACAGAAACA-UAAA--CUAUGA-CCUAG-G---------GGU
+R.norvegicus.1/1-61   A-UAUUUGUU-UAUGAUGGUCACAGUG-UAAA--GUUCA----CAC-----------AGC
+O.aries.1/1-68        G-ACGCUUC---AUGACAGGAAGGACU-GAAA-UGUCUCU-UGGAC-GC------CUGGU
+M.musculus.9/1-66     C-CGGCACU--CAUGAAGGUCUGCUUG-AAAA-CCAGCCU--GCUG-GU--------GGG
+M.musculus.8/1-67     U-UUGCAUU--AAUGAGGAUUACACAG-AAAA-CCUUUGU--UAAG-GA-------CUUG
+O.niloticus.3/1-65    G-UGUCUCU---GUGAAGUUCGGUUUU-UAAA-AGGGUCA---UCC--A-------GAAA
+M.musculus.7/1-64     G-UGUCUCU---AUGAAGGAGGGGCCC-GAAG-CCCUUGU---GGG--C--------GGG
+O.niloticus.2/1-61    U-GUUUAUU--AAUGACGGCUACAGAU-UAAA--CCUUU----AGC-----------CUC
+M.musculus.6/1-61     G-UCAGAUG---AUGAUGGCCUGGGCA-GAAA-CCCCAUG--UGGG--C--------CGC
+O.niloticus.1/1-59    G-UUUCUCA---GUGAAGGCUACAGAU-UAAA--CCUCU----GGC-----------CUC
+M.musculus.5/1-66     G-CCGCUUC---AUGACAGGAAGGACU-GAAA-UGUCUUA---GAC--C-----UGUGGU
+M.musculus.4/1-65     G-UGUGCGA---AUGAUAACUACUGAC-GAAA-GAGCUGU-CUGCU--C-------AGUC
+M.musculus.3/1-64     G-GUUCUUC--CAUGAUGGUGUUUCCUCUAAA--UUUGC----ACG-----------GAG
+M.musculus.2/1-64     G-UUACAUU--AAUGAGAACAGAAACA-UAAA--CUAUGA-CCUAG-G---------GGU
+M.musculus.1/1-64     G-UCACCGA---AUGAUCUGCUCUGGU-CAAA-UCCUUCU---AUG--C------CAGCC
+C.elegans.1/1-64      G-AGGCAGCUUUGUGACGACCUUUGGC-UAAA-CUCCAUC--GUGA-GC--------GCC
+H.sapiens.15/1-63     U-UUUCAUC--UAUGAGGGUGUUUCCUCUAAA--CCUACG---AGG-----------GAG
+H.sapiens.14/1-62     C-ACUGCUG---AUGACGAACUAUCUC-UAAC-UGGUCUU--GACC--A-------CGAG
+H.sapiens.13/1-64     G-UCACUGC---AUGAUCCGCUCUGGU-CAAA-CCCUUCC---AGG--C------CAGCC
+H.sapiens.12/1-67     C-UCUGUUA---AUGACGUCUCUCCCUCUAAA-CCCCAUU-AAGGA--C--------UGG
+D.rerio.1/1-66        A-UGUGGUCUUUAUGAAGGCAGGUGCA-GAAA-CUAUGCA---CUA-GU--------GGU
+H.sapiens.11/1-63     G-CCGGAUG---AUGACGACCUGGGUG-GAAA-CCUACCC-UGUGG--G--------CAC
+H.sapiens.10/1-62     C-CGGCACU--CAUGACGGCCUGCCUG-CAAA--CCUGC----UGG--U--------GGG
+S.mansoni.1/1-67      C-UCGCUAU---AUGACGAUGGCAAUC-UCAA--AUGUU----CAU--U--------GGU
+S.scrofa.4/1-64       C-UGGCACC--CAUGACAGUCUGCCUA-AAAA-CCAGCC----CUG-GU--------GGG
+S.scrofa.3/1-63       A-UUUUAUC--CAUGAAAGUGUUUCCUCUAAA--CCUAU----GUG-----------GAG
+S.scrofa.2/1-65       C-UGGCACC--CAUGACAGUCUGCCUA-AAAA-CCAGCCC---CUG-GU--------GGG
+S.scrofa.1/1-68       G-ACGCUUC---AUGACAGGAAGGACU-GAAA-UGUCUUG-UGGAC-GC------CUGGU
+H.sapiens.9/1-58      U-AUUUGUU--UAUGAUGGCCACAGCC-UAAA--GUACA----CAC-----------GGC
+H.sapiens.8/1-67      U-UUGCUUU--AAUGAGAAUAGAAACG-UAAA--CUAUGA-CCUAG-G---------GGU
+X.laevis.1/1-67       G-UGUUUGCA-AAUGACGACCGAUUUU-GAAA-UGGUCUCACGGCC--A-------AAAA
+H.sapiens.7/1-70      U-GGCGUCUU-CAUGAGGGAGGGGCCC--AAA-GCCCUUG--UGGG--C--------GGA
+H.sapiens.6/1-66      G-UGUGCGG---AUGAUAACUACUGAC-GAAAGAGUCAUC---GAC--C-----UCAGUU
+H.sapiens.5/1-57      U-UCACAGA---AUGAUGGCACCUUCC-UAA---ACCCU----CAU-----------GGG
+H.sapiens.4/1-71      G-ACUGACAU-UAUGAAGGCCUGUACU-GAAG-ACAGCAA--GCUG--U-------UAGU
+H.sapiens.3/1-68      G-ACGCUUC---AUGAUAGGAAGGACU-GAAA-AGUCUUG-UGGAC--A-----CCUGGU
+H.sapiens.2/1-65      G-UGUGCGG---AUGAUAACUACUGAC-GAAA-GAGUCAU-CGACU--C-------AGUU
+H.sapiens.1/1-63      G-CCAGAUG---AUGACGACCUGGGUG-GAAA-CCUACCC-UGUGG--G--------CAC
+M.musculus.14/1-67    C-UCUGAUA---AUGAUGUCUCUCCCU-CUAA-CUCCCAGUAAGGA--C--------UGG
+M.musculus.13/1-60    C-AUGCGUC--CAUGAAGUCACUGGCC-UCAA-GCCCAA----GUG-GU--------GGG
+M.musculus.12/1-65    C-UCAGCAG--GAUGAUGAGAAGGGCU-GAAA-UGCUGCC--AAAC--C-------AGGU
+M.musculus.11/1-63    U-AUUUGUG--UAUGAUGGUCACAGUG-UAAA--GUUCC----CAC-----------AGC
+M.musculus.10/1-66    C-CGGCACU--CAUGAAGGUCUGCCUG-AAAA-CCAGCCU--GCUG-GU--------GGG
+B.taurus.7/1-61       U-UUUGCCC---AUGAAGGUGUUCCCUCUAAA--CCUAC----GUG-----------GAG
+B.taurus.6/1-67       G-AUGCGUC--CAUGAAGUCACCAGCC-CCAA-GCCCCUC---GUG-GU--------GGG
+B.taurus.5/1-61       G-CCAGAUG---AUGAGGACCUGUGCG-GAAA-CCCCCCG--CGGG--C--------UGC
+B.taurus.4/1-64       ACUUGCGUU--AAUGAGAACAGAAACG-UAAA--CUAUAA-CCUAG-G---------GGU
+G.gallus.3/1-73       U-AUUUCUU--UGUGAUGACCGAUUUU-GAAA-UGGGUUU---CUC--UAAUGCCAGGAA
+B.taurus.3/1-66       C-CCGGUGCC-UAUGACGGUCUGUCUG-AAAA-CCAGCCC---CUG-GU--------GGG
+G.gallus.2/1-60       U-AUUUGUC---AUGACAGUCACAGCA-UAAA--GCGCA----GAC-----------GGC
+B.taurus.2/1-64       C-UUGCGUU--AAUGAGAACAGAAACG-AAAA--CUAUAA-CCUAG-G---------GGU
+G.gallus.1/1-63       G-UGUGUUU---AUGAAGAGCACUAAC-AAAA-GAGUAAU-UGACU--C-------AGUU
+
+B.taurus.1/1-64       UUC-U-G-UUGGAU--GGUUG-------GCAAC
+D.melanogaster.3/1-68 CAA-U-U-GCUGAU---UACG---AUUAACCAC
+D.melanogaster.2/1-63 AAU-A-G-UCUGAA---CCU--------UAUUG
+D.melanogaster.1/1-65 AUC-G-U-UGAGAA--CCCCU-----UUGCCUU
+R.norvegicus.7/1-66   GCA-G-U-CCCGAG-GACCUG-------GCGUG
+R.norvegicus.6/1-67   CUU-U-C-UUCGAU--GUUCU-------GCGGC
+R.norvegicus.5/1-62   AAA-C-A-CCUGAU-UUCCAG------AAAAAU
+R.norvegicus.4/1-61   -CA-G-G-UUUGAA---CCC--------CUGGC
+R.norvegicus.3/1-67   UGUCG-A-UCUGCU--AAUUG-------GCAAA
+R.norvegicus.2/1-64   UUC-U-G-UUGGAU--AGCUC-------GUAAU
+R.norvegicus.1/1-61   UGU-G-A-CUUGAU--UUUUA-------AAAAU
+O.aries.1/1-68        CCU-U-C-CUUGAU--GUUCU------CACGGC
+M.musculus.9/1-66     GCA-G-U-CCUGAG-GACCUG-------GCGUG
+M.musculus.8/1-67     UGU-AGA-UCUGAU--AAUUG-------GCAAA
+O.niloticus.3/1-65    ACC-G-ACACUGAU--GUUUC------CGACAC
+M.musculus.7/1-64     CCU-C-C-CCUGAG---CCCG----UCUGUGGU
+O.niloticus.2/1-61    UGG-A-G-CCAGAU--GCAUU------CAAACA
+M.musculus.6/1-61     CCA-G-G-UUUGAA---CCC--------CUGGC
+O.niloticus.1/1-59    UGG-A-G-CCAGAU--GCAUU-------GAAAC
+M.musculus.5/1-66     CUU-U-C-CUCGAU--GUUCC------UGCGGC
+M.musculus.4/1-65     UGU-G-G-UUGGAU---GUAG------UCACAC
+M.musculus.3/1-64     AAA-C-A-CCUGAU-UUCCAG-----GAAAAUC
+M.musculus.2/1-64     UUC-U-G-UUGGAU--AGCUU-------GUAAU
+M.musculus.1/1-64     AGG-G-U-GGUGAU--GACCC-------GUGAC
+C.elegans.1/1-64      UCU-G-G-UCUGAU---GC---------GCCUC
+H.sapiens.15/1-63     GAA-C-A-CCUGAU---CUUA-----CAGAAAA
+H.sapiens.14/1-62     CUA-G-U-UCUGAA---UU-G-------CAGGG
+H.sapiens.13/1-64     AGA-G-U-GGGGAU--GGUCU-------GUGAC
+H.sapiens.12/1-67     GAG-A-G-GCAGAGCAAGCCU-------CAGAG
+D.rerio.1/1-66        GUC-U-G-UCUGAU--GUUUG-------GCCAU
+H.sapiens.11/1-63     CCA-U-G-UCCGAG---CCCC-------CUGGC
+H.sapiens.10/1-62     GCA-G-A-CCCGAA-AAUCCA-------GCGUG
+S.mansoni.1/1-67      UGC-C-A-UUUGAU--GAAAUCAGUUUUGUGUG
+S.scrofa.4/1-64       GCA-G-A-CUCGAG-AACCUG-------GCGUG
+S.scrofa.3/1-63       GAA-C-A-CCUGAU-GUCCAG------GAAAAU
+S.scrofa.2/1-65       GCA-G-A-CUCGAG-AACCUG-------GCGUG
+S.scrofa.1/1-68       CCU-U-C-CCUGAU--GUUCU------CAUGGC
+H.sapiens.9/1-58      UGU-G-A-CUUGAU---UCA--------AAAGA
+H.sapiens.8/1-67      UUC-U-G-UUGGAU-AAUUAG-----CAGUUUA
+X.laevis.1/1-67       CUC-GUG-UCCGAC---AUC--------AACCC
+H.sapiens.7/1-70      CCU-C-C-CCUGAG---CCUGUCUGAGGGGCCA
+H.sapiens.6/1-66      AGU-G-G-UUGGAU---GUAG------UCACAU
+H.sapiens.5/1-57      UGG-U-G-UCUGAG--AGGC--------GUGAA
+H.sapiens.4/1-71      ACA-G-A-CCAGAU--GCUUU--CUUGGCAGGC
+H.sapiens.3/1-68      CUU-U-C-CCUGAU--GUUCU------CGUGGC
+H.sapiens.2/1-65      AGU-G-G-UUGGAU---GUAG------UCACAU
+H.sapiens.1/1-63      CCA-U-G-UCCGAG---CCCC-------CUGGC
+M.musculus.14/1-67    GAG-A-G-GCUGAACAAACCU-------CAGAG
+M.musculus.13/1-60    CAG-U-G-ACAGAA---GA---------GCUGC
+M.musculus.12/1-65    CCU-U-U-UCUGAU--GGUGG-------CUGGG
+M.musculus.11/1-63    UGU-G-A-CUUGAU--UUUUA----AAAAUGUC
+M.musculus.10/1-66    GCA-G-U-CCUGAG-GACCUG-------GCGUG
+B.taurus.7/1-61       GAA-U-G-CCUGAU-GUCCAG-------GAAAA
+B.taurus.6/1-67       UGG-U-G-AUGGAA-CCGUCA-----AAGCAGU
+B.taurus.5/1-61       CCA-U-G-UCUGAG---CCC--------CUGGC
+B.taurus.4/1-64       UUC-U-G-UUGGAU--GGUUG-------GCAA-
+G.gallus.3/1-73       AUC-GUG-UCUGAU---GUUG-----UCAAGUA
+B.taurus.3/1-66       GCA-G-A-CCUGAG-AACCUG-------GCGUG
+G.gallus.2/1-60       UGU-G-A-CCUGAU--UUUAG------AAAAUA
+B.taurus.2/1-64       UUC-U-G-UUGGAU--GGUUG-------GCAAC
+G.gallus.1/1-63       GGU-G-U-UCAGAU--GCU---------CUCAC
+