changeset 4:e5e9a09ac2de draft

Uploaded
author iuc
date Wed, 29 Jun 2016 08:26:51 -0400
parents d44c2896957f
children 6f4ba26d4659
files Users/gvk/work/git_workspace/tools-iuc/tools/meme/fimo.xml Users/gvk/work/git_workspace/tools-iuc/tools/meme/fimo_wrapper.py fimo.xml fimo_wrapper.py meme.xml test-data/meme_input_1.fasta test-data/prior30.plib
diffstat 7 files changed, 683 insertions(+), 491 deletions(-) [+]
line wrap: on
line diff
--- a/Users/gvk/work/git_workspace/tools-iuc/tools/meme/fimo.xml	Wed Jun 29 08:24:33 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,294 +0,0 @@
-<tool id="meme_fimo" name="FIMO" version="4.11.0.3">
-    <description>- Scan a set of sequences for motifs.</description>
-    <requirements>
-        <requirement type="package" version="6.9.3">imagemagick</requirement>
-        <requirement type="package" version="4.11.0">meme</requirement>
-    </requirements>
-    <command>
-        <![CDATA[
-            mkdir -p output &&
-            python $__tool_directory__/fimo_wrapper.py
-            --input_motifs "${input_motifs}"
-            #if str($fasta_type.fasta_type_selector) == 'history':
-                --input_fasta "${fasta_type.input_database}"
-            #else:
-                --input_fasta "${fasta_type.input_database.fields.path}"
-            #end if
-            --options_type $options_type.options_type_selector
-            #if str($options_type.options_type_selector) == 'advanced':
-                --alpha "${options_type.alpha}"
-                #if str($options_type.bgfile_type.bgfile_type_selector) == 'motif_file':
-                    --bgfile "motif-file"
-                #elif str($options_type.bgfile_type.bgfile_type_selector) == 'bgfile':
-                    --bgfile "${options_type.bgfile_type.bgfile}"
-                #end if
-                ${options_type.max_strand}
-                --max_stored_scores "${options_type.max_stored_scores}"
-                #if str($options_type.motifs_cond.motifs_selector) == 'no':
-                    #for $motif in $options_type.motifs:
-                        --motif "${motif.motif}"
-                    #end for
-                #end if
-                --output_separate_motifs ${options_type.output_separate_motifs}
-                --motif_pseudo "${options_type.motif_pseudo}"
-                ${options_type.no_qvalue}
-                ${options_type.norc}
-                #if str($options_type.parse_genomic_coord_cond.parse_genomic_coord) == 'yes':
-                    --parse_genomic_coord 'yes'
-                    --remove_duplicate_coords ${options_type.parse_genomic_coord_cond.remove_duplicate_coords}
-                #end if
-                #if str($options_type.psp_cond.psp_selector) == 'yes':
-                    --input_psp "${input_psp}"
-                #end if
-                #if str($options_type.prior_dist_cond.prior_dist_selector) == 'yes':
-                    --input_prior_dist "${input_prior_dist}"
-                #end if
-                ${options_type.qv_thresh}
-                --thresh ${options_type.thresh}
-            #end if
-            --output_path '${html_outfile.files_path}'
-            --html_output "${html_outfile}"
-            --interval_output '${interval_outfile}'
-            --txt_output "${txt_outfile}"
-            --xml_output "${xml_outfile}"
-            --gff_output "${gff_outfile}"
-        ]]>
-    </command>
-    <inputs>
-        <param name="input_motifs" type="data" format="memexml" label="'MEME output' formatted file"/>
-        <conditional name="fasta_type">
-            <param name="fasta_type_selector" type="select" label="Source for sequence to search">
-                <option value="cached">Locally Cached sequences</option>
-                <option value="history" selected="true">Sequences from your history</option>
-            </param>
-            <when value="cached">
-                <param name="input_database" type="select" label="Genome to search">
-                    <options from_data_table="all_fasta" />
-                </param>
-            </when>
-            <when value="history">
-                <param format="fasta" name="input_database" type="data" label="Sequences"/>
-            </when>
-        </conditional>
-        <conditional name="options_type">
-            <param name="options_type_selector" type="select" label="Options configuration">
-                <option value="basic" selected="true">Basic</option>
-                <option value="advanced">Advanced</option>
-            </param>
-            <when value="basic" />
-            <when value="advanced">
-                <param name="alpha" type="float" value="1.0" min="0" max="1.0" label="Alpha parameter for calculating position specific priors" help="Represents the fraction of all transcription factor binding sites that are binding sites for the TF of interest (must be between 0 and 1)."/>
-                <conditional name="bgfile_type">
-                    <param name="bgfile_type_selector" type="select" label="Background file type">
-                        <option value="default" selected="true">Use frequencies embedded in the application from the non-redundant database</option>
-                        <option value="motif_file">Use frequencies from motif file</option>
-                        <option value="bgfile">Use frequencies from background file</option>
-                    </param>
-                    <when value="motif_file" />
-                    <when value="default" />
-                    <when value="bgfile">
-                        <param name="bgfile" type="data" format="txt" optional="True" label="Background Model" help="File must be in MEME background file format."/>
-                    </when>
-                </conditional>
-                <param name="max_strand" label="If matches on both strands at a given position satisfy the output threshold, only report the match for the strand with the higher score" type="boolean" truevalue="--max_strand" falsevalue="" checked="False" help="If the scores are tied, the matching strand is chosen at random.  Leave unchecked to report both matches."/>
-                <param name="max_stored_scores" type="integer" value="100000" label="Maximum number of scores that will be stored" />
-                <conditional name="motifs_cond">
-                    <param name="motifs_selector" type="select" label="Use all motifs in input?">
-                        <option value="yes" selected="true">Yes</option>
-                        <option value="no">No</option>
-                    </param>
-                    <when value="yes"/>
-                    <when value="no">
-                        <repeat name="motifs" title="Limit to specified motif">
-                            <param name="motif" type="text" value="" label="Specify motif by id" />
-                        </repeat>
-                    </when>
-                </conditional>
-                <param name="output_separate_motifs" type="select" label="Output a dataset per motif?" help="Output a collection consisting of a separate dataset for each motif in the input">
-                    <option value="no" selected="true">No</option>
-                    <option value="yes">Yes</option>
-                </param>
-                <param name="motif_pseudo" type="float" value="0.1" label="Pseudocount to add to counts in motif matrix" help="A pseudocount to be added to each count in the motif matrix, after first multiplying by the corresponding background frequency"/>
-                <param name="no_qvalue" label="Do not compute a q-value for each p-value" type="boolean" truevalue="--no_qvalue" falsevalue="" checked="True" help="The q-value calculation is that of Benjamini and Hochberg (1995)."/>
-                <param name="norc" label="Do not score the reverse complement DNA strand" type="boolean" truevalue="--norc" falsevalue="" checked="False" />
-                <conditional name="parse_genomic_coord_cond">
-                    <param name="parse_genomic_coord" label="Check each sequence header for UCSC style genomic coordinates" type="select">
-                        <option value="no" selected="true">No</option>
-                        <option value="yes">Yes</option>
-                    </param>
-                    <when value="yes">
-                        <param name="remove_duplicate_coords" type="select" label="Remove duplicate entries in unique GFF coordinates?" help="Remove duplicate entries as defined by the unique GFF coordinates">
-                        <option value="no" selected="true">No</option>
-                        <option value="yes">Yes</option>
-                    </param>
-                    </when>
-                    <when value="no"/>
-                </conditional>
-                <conditional name="psp_cond">
-                    <param name="psp_selector" type="select" label="Use position-specific priors?">
-                        <option value="no" selected="true">No</option>
-                        <option value="yes">Yes</option>
-                    </param>
-                    <when value="no"/>
-                    <when value="yes">
-                        <param name="input_psp" type="data" format="txt" label="Select dataset containing position specific priors" help="Format must be meme psp or wiggle."/>
-                    </when>
-                </conditional>
-                <conditional name="prior_dist_cond">
-                    <param name="prior_dist_selector" type="select" label="Use binned distribution of priors?">
-                        <option value="no" selected="true">No</option>
-                        <option value="yes">Yes</option>
-                    </param>
-                    <when value="no"/>
-                    <when value="yes">
-                        <param name="input_prior_dist" type="data" format="txt" label="Select dataset containing binned distribution of priors"/>
-                    </when>
-                </conditional>
-                <param name="qv_thresh" label="Use q-values for the output threshold" type="boolean" truevalue="--qv_thresh" falsevalue="" checked="False" help="Leave unchecked to use p-values for the output threshold."/>
-                <param name="thresh" type="float" value="1e-4" label="Output threshold for displaying search results" help="Only search results with a p-value less than the threshold will be output. The threshold can be set to use q-values rather than p-values via the option above."/>
-            </when>
-        </conditional>
-        <param name="non_commercial_use" label="I certify that I am not using this tool for commercial purposes." type="boolean" truevalue="NON_COMMERCIAL_USE" falsevalue="COMMERCIAL_USE" checked="False">
-            <validator type="expression" message="This tool is only available for non-commercial use.">value == True</validator>
-        </param>
-    </inputs>
-    <outputs>
-        <data format="html" name="html_outfile" label="${tool.name} on ${on_string} (html)">
-            <actions>
-                <conditional name="fasta_type.fasta_type_selector">
-                    <when value="cached">
-                        <action type="metadata" name="dbkey">
-                            <option type="from_data_table" name="all_fasta" column="1" offset="0">
-                                <filter type="param_value" column="0" value="seq" keep="True"/>
-                                <filter type="param_value" ref="fasta_type.input_database" column="1"/>
-                            </option>
-                        </action>
-                    </when>
-                </conditional>
-            </actions>
-        </data>
-        <data format="tabular" name="txt_outfile" label="${tool.name} on ${on_string} (text)">
-            <actions>
-                <conditional name="fasta_type.fasta_type_selector">
-                    <when value="cached">
-                        <action type="metadata" name="dbkey">
-                            <option type="from_data_table" name="all_fasta" column="1" offset="0">
-                                <filter type="param_value" ref="fasta_type.input_database" column="0"/>
-                            </option>
-                        </action>
-                    </when>
-                </conditional>
-            </actions>
-        </data>
-        <data format="tabular" name="gff_outfile" label="${tool.name} on ${on_string} (almost-gff)">
-            <filter>options_type['output_separate_motifs'] == 'no'</filter>
-            <actions>
-                <conditional name="fasta_type.fasta_type_selector">
-                    <when value="cached">
-                        <action type="metadata" name="dbkey">
-                            <option type="from_data_table" name="all_fasta" column="1" offset="0">
-                                <filter type="param_value" ref="fasta_type.input_database" column="0"/>
-                            </option>
-                        </action>
-                    </when>
-                </conditional>
-            </actions>
-        </data>
-        <collection name="motifs" type="list" label="Motifs: ${tool.name} on ${on_string}">
-            <discover_datasets pattern="(?P&lt;designation&gt;.*)" directory="output" ext="gff" visible="false" />
-            <filter>options_type['output_separate_motifs'] == 'yes'</filter>
-        </collection>
-        <data format="cisml" name="xml_outfile" label="${tool.name} on ${on_string} (xml)">
-            <actions>
-                <conditional name="fasta_type.fasta_type_selector">
-                    <when value="cached">
-                        <action type="metadata" name="dbkey">
-                            <option type="from_data_table" name="all_fasta" column="1" offset="0">
-                                <filter type="param_value" ref="fasta_type.input_database" column="0"/>
-                            </option>
-                        </action>
-                    </when>
-                </conditional>
-            </actions>
-        </data>
-        <data format="interval" name="interval_outfile" label="${tool.name} on ${on_string} (interval)">
-            <actions>
-                <conditional name="fasta_type.fasta_type_selector">
-                    <when value="cached">
-                        <action type="metadata" name="dbkey">
-                            <option type="from_data_table" name="all_fasta" column="1" offset="0">
-                                <filter type="param_value" ref="fasta_type.input_database" column="0"/>
-                            </option>
-                        </action>
-                    </when>
-                </conditional>
-            </actions>
-        </data>
-    </outputs>
-    <tests>
-        <test>
-            <param name="input_motifs" value="meme_output_xml_1.xml" ftype="memexml"/>
-            <param name="fasta_type_selector" value="history"/>
-            <param name="input_database" value="phiX.fasta" ftype="fasta"/>
-            <param name="options_type_selector" value="basic"/>
-            <param name="non_commercial_use" value="True"/>
-            <output name="html_outfile" file="fimo_output_html_1.html" compare="contains"/>
-            <output name="txt_outfile" file="fimo_output_txt_1.txt" compare="contains"/>
-            <output name="gff_outfile" file="fimo_output_almost-gff_1.txt" compare="contains"/>
-            <output name="xml_outfile" file="fimo_output_xml_1.xml" compare="contains"/>
-            <output name="interval_outfile" file="fimo_output_interval_1.txt" compare="contains"/>
-        </test>
-        <test>
-            <param name="input_motifs" value="meme_output_xml_1.xml" ftype="memexml"/>
-            <param name="fasta_type_selector" value="history"/>
-            <param name="input_database" value="phiX.fasta" ftype="fasta"/>
-            <param name="options_type_selector" value="advanced"/>
-            <param name="non_commercial_use" value="True"/>
-            <output name="html_outfile" file="fimo_output_html_2.html" compare="contains"/>
-            <output name="txt_outfile" file="fimo_output_txt_2.txt" compare="contains"/>
-            <output name="gff_outfile" file="fimo_output_almost-gff_2.txt" compare="contains"/>
-            <output name="xml_outfile" file="fimo_output_xml_2.xml" compare="contains"/>
-            <output name="interval_outfile" file="fimo_output_interval_2.txt" compare="contains"/>
-        </test>
-        <test>
-            <param name="input_motifs" value="meme_output_xml_1.xml" ftype="memexml"/>
-            <param name="fasta_type_selector" value="history"/>
-            <param name="input_database" value="phiX.fasta" ftype="fasta"/>
-            <param name="options_type_selector" value="advanced"/>
-            <param name="parse_genomic_coord" value="--parse_genomic_coord"/>
-            <param name="remove_duplicate_coords" value="yes"/>
-            <param name="output_separate_motifs" value="yes"/>
-            <param name="non_commercial_use" value="True"/>
-            <output name="html_outfile" file="fimo_output_html_2.html" compare="contains"/>
-            <output name="txt_outfile" file="fimo_output_txt_2.txt" compare="contains"/>
-            <output_collection name="motifs" type="list">
-                <element name="MOTIF1.gff" file="motif1.gff" ftype="gff" compare="contains"/>
-            </output_collection>
-            <output name="xml_outfile" file="fimo_output_xml_2.xml" compare="contains"/>
-            <output name="interval_outfile" file="fimo_output_interval_2.txt" compare="contains"/>
-        </test>
-    </tests>
-    <help>
-
-.. class:: warningmark
-
-**WARNING: This tool is only available for non-commercial use. Use for educational, research and non-profit purposes is permitted.
-Before using, be sure to review, agree, and comply with the license.**
-
-FIMO scans a sequence database for individual matches to each of the motifs you provide (sample output for motifs and sequences).
-The name FIMO stands for 'Find Individual Motif Occurrences'.  The program searches a database of sequences for occurrences of
-known motifs, treating each motif independently.  Motifs must be in MEME Motif Format.  You can define the statistical threshold
-(p-value) for motifs and whether FIMO scans just the given sequences or their reverse complements (where applicable).
-
-.. class:: infomark
-
-For detailed information on FIMO, click here_, or view the license_.
-
-.. _here: http://meme-suite.org/doc/fimo.html?man_type=web
-.. _license: http://meme-suite.org/doc/copyright.html?man_type=web
-
-    </help>
-    <citations>
-        <citation type="doi">10.1093/bioinformatics/btr064</citation>
-    </citations>
-</tool>
--- a/Users/gvk/work/git_workspace/tools-iuc/tools/meme/fimo_wrapper.py	Wed Jun 29 08:24:33 2016 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,193 +0,0 @@
-#!/usr/bin/env python
-import argparse
-import os
-import shutil
-import string
-import subprocess
-import sys
-import tempfile
-
-BUFFSIZE = 1048576
-# Translation table for reverse Complement, with ambiguity codes.
-DNA_COMPLEMENT = string.maketrans("ACGTRYKMBDHVacgtrykmbdhv", "TGCAYRMKVHDBtgcayrmkvhdb")
-
-
-def get_stderr(tmp_stderr):
-    tmp_stderr.seek(0)
-    stderr = ''
-    try:
-        while True:
-            stderr += tmp_stderr.read(BUFFSIZE)
-            if not stderr or len(stderr) % BUFFSIZE != 0:
-                break
-    except OverflowError:
-        pass
-    return stderr
-
-
-def reverse(sequence):
-    # Reverse sequence string.
-    return sequence[::-1]
-
-
-def dna_complement(sequence):
-    # Complement DNA sequence string.
-    return sequence.translate(DNA_COMPLEMENT)
-
-
-def dna_reverse_complement(sequence):
-    # Returns the reverse complement of the sequence.
-    sequence = reverse(sequence)
-    return dna_complement(sequence)
-
-
-def stop_err(msg):
-    sys.stderr.write(msg)
-    sys.exit(1)
-
-parser = argparse.ArgumentParser()
-parser.add_argument('--input_motifs', dest='input_motifs', help='MEME output formatted files for input to fimo')
-parser.add_argument('--input_fasta', dest='input_fasta', help='Fassta sequence file')
-parser.add_argument('--options_type', dest='options_type', help='Basic or Advance options')
-parser.add_argument('--input_psp', dest='input_psp', default=None, help='File containing position specific priors')
-parser.add_argument('--input_prior_dist', dest='input_prior_dist', default=None, help='File containing binned distribution of priors')
-parser.add_argument('--alpha', dest='alpha', type=float, default=1.0, help='The alpha parameter for calculating position specific priors')
-parser.add_argument('--bgfile', dest='bgfile', default=None, help='Background file type, used only if not "default"')
-parser.add_argument('--max_strand', action='store_true', help='If matches on both strands at a given position satisfy the output threshold, only report the match for the strand with the higher score')
-parser.add_argument('--max_stored_scores', dest='max_stored_scores', type=int, help='Maximum score count to store')
-parser.add_argument('--motif', dest='motifs', action='append', default=[], help='Specify motif by id')
-parser.add_argument('--output_separate_motifs', dest='output_separate_motifs', default='no', help='Output one dataset per motif')
-parser.add_argument('--motif_pseudo', dest='motif_pseudo', type=float, default=0.1, help='Pseudocount to add to counts in motif matrix')
-parser.add_argument('--no_qvalue', action='store_true', help='Do not compute a q-value for each p-value')
-parser.add_argument('--norc', action='store_true', help='Do not score the reverse complement DNA strand')
-parser.add_argument('--output_path', dest='output_path', help='Output files directory')
-parser.add_argument('--parse_genomic_coord', dest='parse_genomic_coord', default='no', help='Check each sequence header for UCSC style genomic coordinates')
-parser.add_argument('--remove_duplicate_coords', dest='remove_duplicate_coords', default='no', help='Remove duplicate entries in unique GFF coordinates')
-parser.add_argument('--qv_thresh', action='store_true', help='Use q-values for the output threshold')
-parser.add_argument('--thresh', dest='thresh', type=float, help='p-value threshold')
-parser.add_argument('--gff_output', dest='gff_output', help='Gff output file')
-parser.add_argument('--html_output', dest='html_output', help='HTML output file')
-parser.add_argument('--interval_output', dest='interval_output', help='Interval output file')
-parser.add_argument('--txt_output', dest='txt_output', help='Text output file')
-parser.add_argument('--xml_output', dest='xml_output', help='XML output file')
-args = parser.parse_args()
-
-fimo_cmd_list = ['fimo']
-if args.options_type == 'advanced':
-    fimo_cmd_list.append('--alpha %4f' % args.alpha)
-    if args.bgfile is not None:
-        fimo_cmd_list.append('--bgfile "%s"' % args.bgfile)
-    if args.max_strand:
-        fimo_cmd_list.append('--max-strand')
-    fimo_cmd_list.append('--max-stored-scores %d' % args.max_stored_scores)
-    if len(args.motifs) > 0:
-        for motif in args.motifs:
-            fimo_cmd_list.append('--motif "%s"' % motif)
-    fimo_cmd_list.append('--motif-pseudo %4f' % args.motif_pseudo)
-    if args.no_qvalue:
-        fimo_cmd_list.append('--no-qvalue')
-    if args.norc:
-        fimo_cmd_list.append('--norc')
-    if args.parse_genomic_coord == 'yes':
-        fimo_cmd_list.append('--parse-genomic-coord')
-    if args.qv_thresh:
-        fimo_cmd_list.append('--qv-thresh')
-    fimo_cmd_list.append('--thresh %4f' % args.thresh)
-    if args.input_psp is not None:
-        fimo_cmd_list.append('--psp "%s"' % args.input_psp)
-    if args.input_prior_dist is not None:
-        fimo_cmd_list.append('--prior-dist "%s"' % args.input_prior_dist)
-fimo_cmd_list.append('--o "%s"' % (args.output_path))
-fimo_cmd_list.append('--verbosity 1')
-fimo_cmd_list.append(args.input_motifs)
-fimo_cmd_list.append(args.input_fasta)
-
-fimo_cmd = ' '.join(fimo_cmd_list)
-
-try:
-    tmp_stderr = tempfile.NamedTemporaryFile()
-    proc = subprocess.Popen(args=fimo_cmd, shell=True, stderr=tmp_stderr)
-    returncode = proc.wait()
-    if returncode != 0:
-        stderr = get_stderr(tmp_stderr)
-        stop_err(stderr)
-except Exception, e:
-    stop_err('Error running FIMO:\n%s' % str(e))
-
-shutil.move(os.path.join(args.output_path, 'fimo.txt'), args.txt_output)
-
-gff_file = os.path.join(args.output_path, 'fimo.gff')
-if args.remove_duplicate_coords == 'yes':
-    tmp_stderr = tempfile.NamedTemporaryFile()
-    # Identify and eliminating identical motif occurrences.  These
-    # are identical if the combination of chrom, start, end and
-    # motif id are identical.
-    cmd = 'sort -k1,1 -k4,4n -k5,5n -k9.1,9.6 -u -o %s %s' % (gff_file, gff_file)
-    proc = subprocess.Popen(args=cmd, stderr=tmp_stderr, shell=True)
-    returncode = proc.wait()
-    if returncode != 0:
-        stderr = get_stderr(tmp_stderr)
-        stop_err(stderr)
-    # Sort GFF output by a combination of chrom, score, start.
-    cmd = 'sort -k1,1 -k4,4n -k6,6n -o %s %s' % (gff_file, gff_file)
-    proc = subprocess.Popen(args=cmd, stderr=tmp_stderr, shell=True)
-    returncode = proc.wait()
-    if returncode != 0:
-        stderr = get_stderr(tmp_stderr)
-        stop_err(stderr)
-if args.output_separate_motifs == 'yes':
-    # Create the collection output directory.
-    collection_path = (os.path.join(os.getcwd(), 'output'))
-    # Keep track of motif occurrences.
-    header_line = None
-    motif_ids = []
-    file_handles = []
-    for line in open(gff_file, 'r'):
-        if line.startswith('#'):
-            if header_line is None:
-                header_line = line
-            continue
-        items = line.split('\t')
-        attribute = items[8]
-        attributes = attribute.split(';')
-        name = attributes[0]
-        motif_id = name.split('=')[1]
-        file_name = os.path.join(collection_path, 'MOTIF%s.gff' % motif_id)
-        if motif_id in motif_ids:
-            i = motif_ids.index(motif_id)
-            fh = file_handles[i]
-            fh.write(line)
-        else:
-            fh = open(file_name, 'wb')
-            if header_line is not None:
-                fh.write(header_line)
-            fh.write(line)
-            motif_ids.append(motif_id)
-            file_handles.append(fh)
-    for file_handle in file_handles:
-        file_handle.close()
-else:
-    shutil.move(gff_file, args.gff_output)
-shutil.move(os.path.join(args.output_path, 'fimo.xml'), args.xml_output)
-shutil.move(os.path.join(args.output_path, 'fimo.html'), args.html_output)
-
-out_file = open(args.interval_output, 'wb')
-out_file.write("#%s\n" % "\t".join(("chr", "start", "end", "pattern name", "score", "strand", "matched sequence", "p-value", "q-value")))
-for line in open(args.txt_output):
-    if line.startswith('#'):
-        continue
-    fields = line.rstrip("\n\r").split("\t")
-    start, end = int(fields[2]), int(fields[3])
-    sequence = fields[7]
-    if start > end:
-        # Flip start and end and set strand.
-        start, end = end, start
-        strand = "-"
-        # We want sequences relative to strand; FIMO always provides + stranded sequence.
-        sequence = dna_reverse_complement(sequence)
-    else:
-        strand = "+"
-    # Make 0-based start position.
-    start -= 1
-    out_file.write("%s\n" % "\t".join([fields[1], str(start), str(end), fields[0], fields[4], strand, sequence, fields[5], fields[6]]))
-out_file.close()
--- a/fimo.xml	Wed Jun 29 08:24:33 2016 -0400
+++ b/fimo.xml	Wed Jun 29 08:26:51 2016 -0400
@@ -117,7 +117,10 @@
                         <option value="yes">Yes</option>
                     </param>
                     <when value="yes">
-                        <param name="remove_duplicate_coords" type="boolean" truevalue="yes" falsevalue="no" label="Remove duplicate entries in unique GFF coordinates?" help="Remove duplicate entries as defined by the unique GFF coordinates" />
+                        <param name="remove_duplicate_coords" type="select" label="Remove duplicate entries in unique GFF coordinates?" help="Remove duplicate entries as defined by the unique GFF coordinates">
+                        <option value="no" selected="true">No</option>
+                        <option value="yes">Yes</option>
+                    </param>
                     </when>
                     <when value="no"/>
                 </conditional>
--- a/fimo_wrapper.py	Wed Jun 29 08:24:33 2016 -0400
+++ b/fimo_wrapper.py	Wed Jun 29 08:26:51 2016 -0400
@@ -56,13 +56,13 @@
 parser.add_argument('--max_strand', action='store_true', help='If matches on both strands at a given position satisfy the output threshold, only report the match for the strand with the higher score')
 parser.add_argument('--max_stored_scores', dest='max_stored_scores', type=int, help='Maximum score count to store')
 parser.add_argument('--motif', dest='motifs', action='append', default=[], help='Specify motif by id')
-parser.add_argument('--output_separate_motifs', default="no", help='Output one dataset per motif')
+parser.add_argument('--output_separate_motifs', dest='output_separate_motifs', default='no', help='Output one dataset per motif')
 parser.add_argument('--motif_pseudo', dest='motif_pseudo', type=float, default=0.1, help='Pseudocount to add to counts in motif matrix')
 parser.add_argument('--no_qvalue', action='store_true', help='Do not compute a q-value for each p-value')
 parser.add_argument('--norc', action='store_true', help='Do not score the reverse complement DNA strand')
 parser.add_argument('--output_path', dest='output_path', help='Output files directory')
-parser.add_argument('--parse_genomic_coord', default='no', help='Check each sequence header for UCSC style genomic coordinates')
-parser.add_argument('--remove_duplicate_coords', default='no', help='Remove duplicate entries in unique GFF coordinates')
+parser.add_argument('--parse_genomic_coord', dest='parse_genomic_coord', default='no', help='Check each sequence header for UCSC style genomic coordinates')
+parser.add_argument('--remove_duplicate_coords', dest='remove_duplicate_coords', default='no', help='Remove duplicate entries in unique GFF coordinates')
 parser.add_argument('--qv_thresh', action='store_true', help='Use q-values for the output threshold')
 parser.add_argument('--thresh', dest='thresh', type=float, help='p-value threshold')
 parser.add_argument('--gff_output', dest='gff_output', help='Gff output file')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meme.xml	Wed Jun 29 08:26:51 2016 -0400
@@ -0,0 +1,335 @@
+<tool id="meme_meme" name="MEME" version="4.11.0.1">
+    <description>- Multiple Em for Motif Elicitation</description>
+    <requirements>
+        <requirement type="package" version="6.9.3">imagemagick</requirement>
+        <requirement type="package" version="4.11.0">meme</requirement>
+    </requirements>
+    <command>
+        <![CDATA[
+            meme "$input1"
+            -o "${html_outfile.files_path}"
+            -nostatus
+            -maxsize 1000000
+            #if str( $options_type.options_type_selector ) == 'advanced':
+                -sf "${ str( $options_type.sf ).replace( ' ', '_' ) }"
+                -${options_type.alphabet_type.alphabet_type_selector}
+                -mod "${options_type.mod_type.mod_type_selector}"
+                -nmotifs "${options_type.nmotifs}"
+                -wnsites "${options_type.wnsites}"
+                #if $options_type.evt < float('inf'):
+                    -evt "${options_type.evt}"
+                #end if
+                #if str( $options_type.mod_type.mod_type_selector ) != 'oops':
+                    #if str( $options_type.mod_type.motif_occurrence_type.motif_occurrence_type_selector ) == 'nsites':
+                        -nsites "${options_type.mod_type.motif_occurrence_type.nsites}"
+                    #elif str( $options_type.mod_type.motif_occurrence_type.motif_occurrence_type_selector ) == 'min_max_sites':
+                        -minsites "${options_type.mod_type.motif_occurrence_type.minsites}"
+                        -maxsites "${options_type.mod_type.motif_occurrence_type.maxsites}"
+                    #end if
+                #end if
+                #if str( $options_type.motif_width_type.motif_width_type_selector ) == 'exact':
+                    -w "${options_type.motif_width_type.width}"
+                #else
+                    -minw "${options_type.motif_width_type.minw}"
+                    -maxw "${options_type.motif_width_type.maxw}"
+                #end if
+                #if str( $options_type.motif_trim_type.motif_trim_type_selector ) == 'nomatrim':
+                    -nomatrim
+                #else
+                    -wg "${options_type.motif_trim_type.wg}"
+                    -ws "${options_type.motif_trim_type.ws}"
+                    ${options_type.motif_trim_type.noendgaps}
+                #end if
+                #if str( $options_type.bfile ) != 'None':
+                    -bfile "${options_type.bfile}"
+                #end if
+                #if str( $options_type.pspfile ) != 'None':
+                    -psp "${options_type.pspfile}"
+                #end if
+                #if str( $options_type.alphabet_type.alphabet_type_selector ) == "dna":
+                    ${options_type.alphabet_type.revcomp} ${options_type.alphabet_type.pal}
+                #end if
+                -maxiter "${options_type.maxiter}"
+                -distance "${options_type.distance}"
+                -prior "${options_type.alphabet_type.prior_type.prior_type_selector}"
+                #if str( $options_type.alphabet_type.prior_type.prior_type_selector ) != 'addone':
+                    -b "${options_type.alphabet_type.prior_type.prior_b}"
+                    #if str( $options_type.alphabet_type.prior_type.plib ) != 'None':
+                        -plib "${options_type.alphabet_type.prior_type.plib}"
+                    #end if
+                #end if
+                #if str( $options_type.alphabet_type.spmap_type.spmap_type_selector ) == 'cons':
+                    -cons "${options_type.alphabet_type.spmap_type.cons}"
+                #else
+                    -spmap "${options_type.alphabet_type.spmap_type.spmap_type_selector}"
+                    -spfuzz "${options_type.alphabet_type.spmap_type.spfuzz}"
+                #end if
+                #if str( $options_type.branching_type.branching_type_selector ) == 'x_branch':
+                    -x_branch
+                    -bfactor "${options_type.branching_type.bfactor}"
+                    -heapsize "${options_type.branching_type.heapsize}"
+                #end if
+            #end if
+            2>&1 || echo "Error running MEME."
+            && mv ${html_outfile.files_path}/meme.html ${html_outfile}
+            && mv ${html_outfile.files_path}/meme.txt ${txt_outfile}
+            && mv ${html_outfile.files_path}/meme.xml ${xml_outfile}
+        ]]>
+    </command>
+    <inputs>
+        <param format="fasta" name="input1" type="data" label="Sequences"/>
+        <conditional name="options_type">
+            <param name="options_type_selector" type="select" label="Options Configuration">
+                <option value="basic" selected="true">Basic</option>
+                <option value="advanced">Advanced</option>
+            </param>
+            <when value="basic" />
+            <when value="advanced">
+                <param name="sf" type="text" value="Galaxy FASTA Input" label="Name of sequence set" argument="-sf"/>
+                <conditional name="alphabet_type">
+                    <param name="alphabet_type_selector" type="select" label="Sequence Alphabet">
+                        <option value="protein">Protein</option>
+                        <option value="dna" selected="true">DNA</option>
+                    </param>
+                    <when value="protein">
+                        <conditional name="prior_type">
+                            <param name="prior_type_selector" type="select" label="Choice of prior" argument="-prior">
+                                <option value="dirichlet">simple Dirichlet prior</option>
+                                <option value="dmix" selected="true">mixture of Dirichlets prior</option>
+                                <option value="mega">extremely low variance dmix</option>
+                                <option value="megap">mega for all but last iteration of EM; dmix on last iteration</option>
+                                <option value="addone">add +1 to each observed count</option>
+                            </param>
+                            <when value="dirichlet">
+                                <param name="prior_b" type="float" value="0.01" label="strength of prior on model parameters" argument="-b"/>
+                                <param name="plib" type="data" format="txt" optional="True" label="Dirichlet prior file" argument="-plib"/>
+                            </when>
+                            <when value="dmix">
+                                <param name="prior_b" type="float" value="0" label="strength of prior on model parameters" argument="-b"/>
+                                <param name="plib" type="data" format="txt" optional="True" label="Dirichlet prior file" argument="-plib"/>
+                            </when>
+                            <when value="mega">
+                                <param name="prior_b" type="float" value="0" label="strength of prior on model parameters" argument="-b"/>
+                                <param name="plib" type="data" format="txt" optional="True" label="Dirichlet prior file" argument="-plib"/>
+                            </when>
+                            <when value="megap">
+                                <param name="prior_b" type="float" value="0" label="strength of prior on model parameters" argument="-b"/>
+                                <param name="plib" type="data" format="txt" optional="True" label="Dirichlet prior file" argument="-plib"/>
+                            </when>
+                            <when value="addone" />
+                        </conditional>
+                        <conditional name="spmap_type">
+                            <param name="spmap_type_selector" type="select" label="EM starting points" argument="-spmap">
+                                <option value="uni">uni</option>
+                                <option value="pam" selected="true">pam</option>
+                                <option value="cons">Use starting point from string</option>
+                            </param>
+                            <when value="uni">
+                                <param name="spfuzz" type="float" value="0.5" label="Fuzziness of the mapping" argument="-spfuzz"/>
+                            </when>
+                            <when value="pam">
+                                <param name="spfuzz" type="integer" value="120" label="Fuzziness of the mapping" argument="-spfuzz"/>
+                            </when>
+                            <when value="cons">
+                                <param name="cons" type="text" value="" label="Starting point from string" argument="-cons"/>
+                            </when>
+                        </conditional>
+                    </when>
+                    <when value="dna">
+                        <param name="revcomp" label="Check reverse complement" type="boolean" truevalue="-revcomp" falsevalue="" checked="False"/>
+                        <param name="pal" label="Check for palindromes" type="boolean" truevalue="-pal" falsevalue="" checked="False"/>
+                        <conditional name="prior_type">
+                            <param name="prior_type_selector" type="select" label="Sequence Alphabet" argument="-prior">
+                                <option value="dirichlet" selected="true">simple Dirichlet prior</option>
+                                <option value="dmix">mixture of Dirichlets prior</option>
+                                <option value="mega">extremely low variance dmix</option>
+                                <option value="megap">mega for all but last iteration of EM; dmix on last iteration</option>
+                                <option value="addone">add +1 to each observed count</option>
+                            </param>
+                            <when value="dirichlet">
+                                <param name="prior_b" type="float" value="0.01" label="strength of prior on model parameters" argument="-b"/>
+                                <param name="plib" type="data" format="txt" optional="True" label="Dirichlet prior file" argument="-plib"/>
+                            </when>
+                            <when value="dmix">
+                                <param name="prior_b" type="float" value="0" label="strength of prior on model parameters" argument="-b"/>
+                                <param name="plib" type="data" format="txt" optional="True" label="Dirichlet prior file" argument="-plib"/>
+                            </when>
+                            <when value="mega">
+                                <param name="prior_b" type="float" value="0" label="strength of prior on model parameters" argument="-b"/>
+                                <param name="plib" type="data" format="txt" optional="True" label="Dirichlet prior file" argument="-plib"/>
+                            </when>
+                            <when value="megap">
+                                <param name="prior_b" type="float" value="0" label="strength of prior on model parameters" argument="-b"/>
+                                <param name="plib" type="data" format="txt" optional="True" label="Dirichlet prior file" argument="-plib"/>
+                            </when>
+                            <when value="addone" />
+                        </conditional>
+                        <conditional name="spmap_type">
+                            <param name="spmap_type_selector" type="select" label="EM starting points" argument="-spmap">
+                                <option value="uni" selected="true">uni</option>
+                                <option value="pam">pam</option>
+                                <option value="cons">Use starting point from string</option>
+                            </param>
+                            <when value="uni">
+                                <param name="spfuzz" type="float" value="0.5" label="Fuzziness of the mapping" argument="-spfuzz"/>
+                            </when>
+                            <when value="pam">
+                                <param name="spfuzz" type="integer" value="120" label="Fuzziness of the mapping" argument="-spfuzz"/>
+                            </when>
+                            <when value="cons">
+                                <param name="cons" type="text" value="" label="Starting point from string" argument="-cons"/>
+                            </when>
+                        </conditional>
+                    </when>
+                </conditional>
+                <param name="nmotifs" type="integer" value="1" label="Number of different motifs to search" argument="-nmotifs" />
+                <param name="evt" type="float" value="inf" label="E-value to stop looking for motifs" argument="-evt"/>
+                <conditional name="mod_type">
+                    <param name="mod_type_selector" type="select" label="Expected motif distribution" argument="-mod">
+                        <option value="oops">One Occurrence Per Sequence</option>
+                        <option value="zoops" selected="true">Zero or One Occurrence Per Sequence</option>
+                        <option value="anr">Any Number of Repetitions</option>
+                    </param>
+                    <when value="oops" />
+                    <when value="zoops">
+                        <conditional name="motif_occurrence_type">
+                            <param name="motif_occurrence_type_selector" type="select" label="Number of motif occurrences">
+                                <option value="default" selected="true">Use defaults</option>
+                                <option value="nsites">nsites</option>
+                                <option value="min_max_sites">min and max sites</option>
+                            </param>
+                            <when value="default" />
+                            <when value="nsites">
+                                <param name="nsites" type="integer" value="1" label="Search nsites number of occurrences" argument="-nsites"/>
+                            </when>
+                            <when value="min_max_sites">
+                                <param name="minsites" type="integer" value="1" label="minsites" argument="-minsites"/>
+                                <param name="maxsites" type="integer" value="50" label="maxsites" argument="-maxsites"/>
+                            </when>
+                        </conditional>
+                    </when>
+                    <when value="anr">
+                        <conditional name="motif_occurrence_type">
+                            <param name="motif_occurrence_type_selector" type="select" label="Number of motif occurrences">
+                                <option value="default" selected="true">Use defaults</option>
+                                <option value="nsites">nsites</option>
+                                <option value="min_max_sites">min and max sites</option>
+                            </param>
+                            <when value="default" />
+                            <when value="nsites">
+                                <param name="nsites" type="integer" value="1" label="Search nsites number of occurrences" argument="-nsites"/>
+                            </when>
+                            <when value="min_max_sites">
+                                <param name="minsites" type="integer" value="1" label="minsites" argument="-minsites"/>
+                                <param name="maxsites" type="integer" value="50" label="maxsites" argument="-maxsites"/>
+                            </when>
+                        </conditional>
+                    </when>
+                </conditional>
+                <param name="wnsites" type="float" value="0.8" label="Weight on the prior on nsites" argument="-wnsites"/>
+                <conditional name="motif_width_type">
+                    <param name="motif_width_type_selector" type="select" label="Motif width type">
+                        <option value="exact">Exact width</option>
+                        <option value="range" selected="true">Specify a range</option>
+                    </param>
+                    <when value="exact">
+                        <param name="width" type="integer" value="10" label="Width of motif to search" argument="-w"/>
+                    </when>
+                    <when value="range">
+                        <param name="minw" type="integer" value="8" label="Min width of motif to search" argument="-minw"/>
+                        <param name="maxw" type="integer" value="50" label="Max width of motif to search" argument="-maxw"/>
+                    </when>
+                </conditional>
+                <conditional name="motif_trim_type">
+                    <param name="motif_trim_type_selector" type="select" label="Motif trim type">
+                        <option value="nomatrim">No motif trim</option>
+                        <option value="trim" selected="true">Trim motif</option>
+                    </param>
+                    <when value="nomatrim" />
+                    <when value="trim">
+                        <param name="wg" type="integer" value="11" label="Gap cost" argument="-wg"/>
+                        <param name="ws" type="integer" value="1" label="Space cost" argument="-ws"/>
+                        <param name="noendgaps" label="Do not penalize endgaps" type="boolean" truevalue="-noendgaps" falsevalue="" checked="False"/>
+                    </when>
+                </conditional>
+                <param name="bfile" type="data" format="txt" optional="True" label="Background Model" argument="-bfile"/>
+                <param name="pspfile" type="data" format="txt" optional="True" label="Position-Specific Prior" argument="-psp"/>
+                <param name="maxiter" type="integer" value="50" label="Number of iterations of EM to run" argument="-maxiter"/>
+                <param name="distance" type="float" value="0.001" label="Convergence criterion" argument="-distance"/>
+                <conditional name="branching_type">
+                    <param name="branching_type_selector" type="select" label="x-branching type">
+                        <option value="x_branch">Perform x-branching</option>
+                        <option value="no_x_branch" selected="true">No x-branching</option>
+                    </param>
+                    <when value="no_x_branch" />
+                    <when value="x_branch">
+                        <param name="bfactor" type="integer" value="3" label="Number of iterations of branching" argument="-bfactor"/>
+                        <param name="heapsize" type="integer" value="64" label="Maximum number of heaps to use" argument="-heapsize"/>
+                    </when>
+                </conditional>
+            </when>
+        </conditional>
+        <param name="non_commercial_use" label="I certify that I am not using this tool for commercial purposes." type="boolean" truevalue="NON_COMMERCIAL_USE" falsevalue="COMMERCIAL_USE" checked="False">
+            <validator type="expression" message="This tool is only available for non-commercial use.">value == True</validator>
+        </param>
+    </inputs>
+    <outputs>
+        <data format="html" name="html_outfile" label="${tool.name} on ${on_string} (html)"/>
+        <data format="txt" name="txt_outfile" label="${tool.name} on ${on_string} (text)"/>
+        <data format="memexml" name="xml_outfile" label="${tool.name} on ${on_string} (xml)"/>
+    </outputs>
+    <tests>
+        <test>
+            <param name="input1" value="meme_input_1.fasta" ftype="fasta" dbkey="hg19"/>
+            <param name="options_type_selector" value="basic"/>
+            <param name="non_commercial_use" value="True"/>
+            <output name="html_outfile" file="meme_output_html_1.html" compare="contains"/>
+            <output name="txt_outfile" file="meme_output_txt_1.txt" lines_diff="12"/>
+            <output name="xml_outfile" file="meme_output_xml_1.xml" lines_diff="8"/>
+        </test>
+        <test>
+            <param name="input1" value="meme_input_1.fasta" ftype="fasta" dbkey="hg19"/>
+            <param name="options_type_selector" value="advanced"/>
+            <param name="plib" value="prior30.plib" ftype="txt"/>
+            <param name="non_commercial_use" value="True"/>
+            <output name="html_outfile" file="meme_output_html_2.html" compare="contains"/>
+            <output name="txt_outfile" file="meme_output_txt_2.txt" lines_diff="12"/>
+            <output name="xml_outfile" file="meme_output_xml_2.xml" lines_diff="8"/>
+        </test>
+    </tests>
+    <help>
+
+.. class:: warningmark
+
+**WARNING: This tool is only available for non-commercial use. Use for educational, research and non-profit purposes is permitted.
+Before using, be sure to review, agree, and comply with the license.**
+
+If you want to specify sequence weights, you must include them at the top of your input FASTA file.
+
+MEME discovers novel, ungapped motifs (recurring, fixed-length patterns) in your sequences (sample output from sequences).
+MEME splits variable-length patterns into two or more separate motifs.  A motif is a sequence pattern that occurs repeatedly
+in a group of related sequences.  MEME represents motifs as position-dependent letter-probability matrices which describe the
+probability of each possible letter at each position in the pattern.  Individual MEME motifs do not contain gaps.  Patterns
+with variable-length gaps are split by MEME into two or more separate motifs.  MEME takes as input a group of sequences and
+outputs as many motifs as requested.  MEME uses statistical modeling techniques to automatically choose the best width, number
+of occurrences, and description for each motif.
+
+.. class:: infomark
+
+For detailed information on MEME, click here_, or view the license_.
+
+.. _here: http://meme-suite.org/doc/meme.html?man_type=web
+.. _license: http://meme-suite.org/doc/copyright.html?man_type=web
+
+    </help>
+    <citations>
+        <citation type="bibtex">
+            @article{Proceedings of the Second International Conference on Intelligent Systems for Molecular Biology, pp. 28-36, AAAI Press, Menlo Park, California,
+            author = {Bailey,Timothy L. and Elkan, Charles},
+            title = {Fitting a mixture model by expectation maximization to discover motifs in biopolymers},
+            year = {1994},
+            eprint = {None},
+            url = {http://www.sdsc.edu/~tbailey/papers/ismb94.pdf}
+        }</citation>
+    </citations>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/meme_input_1.fasta	Wed Jun 29 08:26:51 2016 -0400
@@ -0,0 +1,66 @@
+>chr21_19617074_19617124_+
+AAAAATTATTACTAGGGAGGGGGCCGGAACCTCGGGACGTGGGTATATAA
+>chr21_26934381_26934431_+
+GCGCCTGGTCGGTTATGAGTCACAAGTGAGTTATAAAAGGGTCGCACGTT
+>chr21_28217753_28217803_-
+CAAAGGGGAGGAGTGGGGTGGGGGTGGGGGTTTCACTGGTCCACTATAAA
+>chr21_31710037_31710087_-
+AACACCCAGGTTTCTGAGTATATAATCGCCGCACCAAAGAATTTAATTTT
+>chr21_31744582_31744632_-
+CCCAGGTCTAAGAGCATATATAACTTGGAGTCCAGACTATGACATTCAAA
+>chr21_31768316_31768366_+
+AACGTATATAAATGGTCCTGTCCAGATGTGGCATGCAAACTCAGAATCTT
+>chr21_31914206_31914256_-
+TGACACCCACTACTTAGAGTATAAAATCATTCTGAGAAGTTAGAGACACC
+>chr21_31933633_31933683_-
+TCAGAGTATATATAAATGTTCCTGTCCAGTCACAGTCACCAAACTGACCT
+>chr21_31962741_31962791_-
+ACATATAACTCAGGTTGGATAAAATAATTTGTACAAATCAGGAGAGTCAA
+>chr21_31964683_31964733_+
+TCTGATTCACTGAGGCATATAAAAGGCCCTCTGCGGAGAAGTGTCCATAC
+>chr21_31973364_31973414_+
+aaacttaaaactctataaacttaaaactCTAGAATCTGATCCTGCTATAC
+>chr21_31992870_31992920_+
+CTCATACACTATTGAAGATGTATAAAATTTCATTTGCAGATGGTGACATT
+>chr21_32185595_32185645_-
+TCACCACCCACCAGAGCTGGGATATATAAAGAAGGTTCTGAGACTAGGAA
+>chr21_32202076_32202126_-
+TGCCCACCAGCTTGAGGTATAAAAAGCCCTGTACGGGAAGAGACCTTCAT
+>chr21_32253899_32253949_-
+AGCCCCACCCACCAGCAAGGATATATAAAAGCTCAGGAGTCTGGAGTGAC
+>chr21_32410820_32410870_-
+TCTACCCCACTAATCACTGAGGATGTATAAAAGTCCCAGGGAAGCTGGTG
+>chr21_36411748_36411798_-
+ATAGTTCTGTATAGTTTCAGTTGGCATCtaaaaattatataactttattt
+>chr21_37838750_37838800_-
+gatggttttataaggggcctcaccctcggctcagccctcattcttctcct
+>chr21_45705687_45705737_+
+CCGGGGCGGAGCGGCCTTTGCTCTTTGCGTGGTCGCGGGGGTATAACAGC
+>chr21_45971413_45971463_-
+CAGGCCCTGGGCATATAAAAGCCCCAGCAGCCAACAGGctcacacacaca
+>chr21_45978668_45978718_-
+CAGAGGGGTATAAAGGTTCCGACCACTCAGAGGCCTGGCACGAtcactca
+>chr21_45993530_45993580_+
+CCAAGGAGGAGTATAAAAGCCCCACAAACCCGAGCACCTCACTCACTCGC
+>chr21_46020421_46020471_+
+GAGACATATAAAAGCCAACATCCCTGAGCACCTAACACACGGactcactc
+>chr21_46031920_46031970_+
+GGAAAATACCCAGGGAGGGTATAAAACCTCAGCAGCCAGGGCACACAAAC
+>chr21_46046964_46047014_+
+ACAAGGCCAGGAGGGGTATAAAAGCCTGAGAGCCCCAAGAACctcacaca
+>chr21_46057197_46057247_+
+ATTGCTGAGTCTCCTGCTGGGAAAACACAGGCCCTGGGCATATAAAAGCC
+>chr21_46086869_46086919_-
+GACAGGTGTGCTTCTGTGCTGTGGGGATGCCTGGGCCCAGGTATAAAGGC
+>chr21_46102103_46102153_-
+AGGTGTGTGCTTCTGTGCTGTGGGGATGCCTGGGTCCAGGTATAAAGGCT
+>chr21_47517957_47518007_+
+CCTGGCGGCGGGGCGGGTCAGGCCGGCGGGGCGGGGTATAAAGGGGGCGG
+>chr21_47517957_47518007_+
+CCTGGCGGCGGGGCGGGTCAGGCCGGCGGGGCGGGGTATAAAGGGGGCGG
+>chr21_47517957_47518007_+
+CCTGGCGGCGGGGCGGGTCAGGCCGGCGGGGCGGGGTATAAAGGGGGCGG
+>chr21_47575506_47575556_-
+TGAGAAGCCGGTGGGGAGGTGCTGCCGGTGAGCGTATAAAGGCCCTGGCG
+>chr21_47575506_47575556_-
+TGAGAAGCCGGTGGGGAGGTGCTGCCGGTGAGCGTATAAAGGCCCTGGCG
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/prior30.plib	Wed Jun 29 08:26:51 2016 -0400
@@ -0,0 +1,275 @@
+Alphabet= ACDEFGHIKLMNPQRSTVWY
+NumDistr= 30
+Number= 0
+Mixture= 0.055795
+B= 5.623820
+Alpha= 0.0855491 0.0221831 0.0111063 0.0209959 0.0505726 0.025437 0.0155389 0.132951 0.0247865 0.150287 0.0577239 0.0209317 0.0166629 0.0220905 0.0244295 0.0497608 0.070277 0.157532 0.0102219 0.0309633 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=    HMM9.4 reestimated in henikoff29.2
+
+Number= 1
+Mixture= 0.198333
+B= 0.097240
+Alpha= 0.0562629 0.0329597 0.0692513 0.0385232 0.0400041 0.143573 0.0428939 0.0226244 0.0442102 0.0665467 0.0117853 0.0447655 0.0833299 0.0395825 0.0611271 0.0588852 0.0513472 0.0317153 0.0237865 0.0368161 
+FullUpdate= 1
+QUpdate= 1
+StructID=       24
+Comment=      Outside
+
+Number= 2
+Mixture= 0.043566
+B= 1.648336
+Alpha= 0.0144564 0.00845337 0.00785519 0.00864933 0.255959 0.0110815 0.0509526 0.0234533 0.0120443 0.0561967 0.015111 0.0190974 0.00857653 0.0167812 0.0164918 0.0197108 0.0151013 0.0252782 0.050139 0.364613 
+FullUpdate= 1
+QUpdate= 1
+StructID=       26
+Comment=       Inside
+
+Number= 3
+Mixture= 0.060170
+B= 2.595432
+Alpha= 0.0452144 0.00587917 0.169731 0.0751478 0.00749471 0.0845832 0.0369819 0.00610072 0.0548186 0.011029 0.00382749 0.212785 0.0206532 0.0416705 0.0280716 0.117267 0.0533742 0.00943157 0.00216149 0.0137784 
+FullUpdate= 1
+QUpdate= 1
+StructID=       19
+Comment=      Outside Alpha
+
+Number= 4
+Mixture= 0.065466
+B= 3.112271
+Alpha= 0.0361167 0.0049157 0.0134924 0.0461325 0.00557631 0.0209043 0.0302551 0.016425 0.307554 0.0338255 0.0139435 0.0360733 0.0127659 0.0873761 0.222668 0.0369042 0.0354442 0.0228891 0.00434827 0.0123906 
+FullUpdate= 1
+QUpdate= 1
+StructID=       21
+Comment=       Outside Beta
+
+Number= 5
+Mixture= 0.067614
+B= 2.053644
+Alpha= 0.0194362 0.00765176 0.00188738 0.00372898 0.0849894 0.00421787 0.00400459 0.152735 0.00407958 0.4568 0.106051 0.00304386 0.00545956 0.00900935 0.00605071 0.00519029 0.016255 0.0861045 0.00787965 0.0154248 
+FullUpdate= 1
+QUpdate= 1
+StructID=       22
+Comment=      Inside alpha
+
+Number= 6
+Mixture= 0.080724
+B= 2.138987
+Alpha= 0.0423172 0.0153891 0.00409306 0.00565735 0.0197117 0.00590607 0.00139926 0.307863 0.00544884 0.115721 0.0285808 0.00522771 0.00474851 0.00328193 0.00351054 0.00892385 0.0348922 0.380003 0.00117673 0.00614917 
+FullUpdate= 1
+QUpdate= 1
+StructID=       23
+Comment=       Inside beta
+
+Number= 7
+Mixture= 0.051030
+B= 3.878926
+Alpha= 0.0548123 0.000759746 0.144127 0.46019 0.00249502 0.0192754 0.0106535 0.00938765 0.0562429 0.0163148 0.00717389 0.0245612 0.0177482 0.0744802 0.0199233 0.0323535 0.0257651 0.018574 0.00087086 0.00429088 
+FullUpdate= 1
+QUpdate= 1
+StructID=       23
+Comment=      Alpha helix
+
+Number= 8
+Mixture= 0.103529
+B= 1.486325
+Alpha= 0.315754 0.0384546 0.0116388 0.0133665 0.0111126 0.107921 0.00752325 0.0154885 0.0111281 0.0231087 0.011626 0.0228375 0.0304785 0.0166632 0.0156345 0.186379 0.0954421 0.0546691 0.00351538 0.00725682 
+FullUpdate= 1
+QUpdate= 1
+StructID=       23
+Comment=      Beta strand
+
+Number= 9
+Mixture= 0.062940
+B= 8.221215
+Alpha= 0.0869919 0.00672577 0.0600995 0.10763 0.0153489 0.0378086 0.0325335 0.023388 0.113765 0.041623 0.0196906 0.0625344 0.0262599 0.0788667 0.0707399 0.0886634 0.0666777 0.0361472 0.00484308 0.0196629 
+FullUpdate= 1
+QUpdate= 1
+StructID=       23
+Comment=      Other
+
+Number= 10
+Mixture= 0.012518
+B= 38.955631
+Alpha= 0.732922 0.0145131 0.00623235 0.00951423 0.00717778 0.0289521 0.00351664 0.0125081 0.00886593 0.0183651 0.00832812 0.00670968 0.00364556 0.00622169 0.00812899 0.0582399 0.0205067 0.0394327 0.00207485 0.00414489 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=      A
+
+Number= 11
+Mixture= 0.004953
+B= 381.562195
+Alpha= 0.00563239 0.959814 0.00144129 0.00213042 0.00158645 0.00168393 0.000989765 0.00325263 0.00148501 0.00343924 0.00168673 0.00159054 0.00121534 0.00129942 0.00195209 0.00296106 0.0039912 0.00266944 0.000327808 0.000851203 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=      C
+
+Number= 12
+Mixture= 0.013849
+B= 90.727570
+Alpha= 0.00897115 0.00169015 0.859473 0.0360829 0.00269485 0.00606504 0.00469816 0.00400134 0.0047981 0.00514968 0.00208395 0.029754 0.00241276 0.0045506 0.00433816 0.0088208 0.00511143 0.00527448 0.00104469 0.00298475 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     D 
+
+Number= 13
+Mixture= 0.008388
+B= 404.591034
+Alpha= 0.00241514 0.000413991 0.0122981 0.96369 0.000665578 0.00187461 0.00106904 0.00149214 0.00121548 0.00129791 0.000554145 0.00253496 0.000624495 0.00316839 0.00115045 0.00171781 0.001468 0.0014564 0.000278652 0.000614791 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=      E 
+
+Number= 14
+Mixture= 0.008064
+B= 83.323669
+Alpha= 0.00839779 0.00428348 0.00298116 0.00358128 0.850936 0.00329382 0.00196832 0.0130534 0.00320345 0.0351883 0.00729724 0.00287304 0.00358482 0.00218728 0.00264753 0.00833798 0.00418729 0.0120684 0.00448366 0.025446 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     F 
+
+Number= 15
+Mixture= 0.032205
+B= 32.644871
+Alpha= 0.0234448 0.00236512 0.0112957 0.00811395 0.00248143 0.868718 0.00345598 0.00342985 0.00859682 0.0040966 0.00239339 0.012342 0.00423123 0.00440054 0.00795347 0.0165095 0.0065024 0.00550512 0.00140604 0.00275817 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     G 
+
+Number= 16
+Mixture= 0.005033
+B= 35.520824
+Alpha= 0.0100058 0.00386024 0.0131498 0.0108984 0.0122851 0.00738691 0.722249 0.00521193 0.00686054 0.0150103 0.00673014 0.0367074 0.00625526 0.0429912 0.0234127 0.0187246 0.0128445 0.00837399 0.00390723 0.0331349 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     H 
+
+Number= 17
+Mixture= 0.007454
+B= 101.265472
+Alpha= 0.0106938 0.00267663 0.00404166 0.00466637 0.00838963 0.00372808 0.00182575 0.681615 0.0059102 0.0770333 0.0184335 0.004676 0.0027124 0.00372663 0.00418165 0.00773357 0.0109237 0.140679 0.00140417 0.00494911 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     I 
+
+Number= 18
+Mixture= 0.009400
+B= 150.415985
+Alpha= 0.00688657 0.00169711 0.00222738 0.00346887 0.00115861 0.00302866 0.00209171 0.00400905 0.903944 0.0037747 0.00186061 0.00449531 0.00249618 0.00324487 0.041775 0.00392196 0.00461714 0.00296607 0.000893256 0.00144282 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=      K 
+
+Number= 19
+Mixture= 0.017057
+B= 31.896633
+Alpha= 0.0114646 0.00367926 0.00296188 0.00596126 0.0190009 0.00382486 0.00338381 0.0401936 0.00650072 0.790038 0.031659 0.00392791 0.0050046 0.00753591 0.00771818 0.00748621 0.0101555 0.0312597 0.00242405 0.00581952 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     L 
+
+Number= 20
+Mixture= 0.002761
+B= 201.346268
+Alpha= 0.00353933 0.00165628 0.0014931 0.00161065 0.00279831 0.00194259 0.00101868 0.00969101 0.00211316 0.0217036 0.928022 0.00162899 0.0015681 0.0015629 0.00138977 0.00294601 0.00311476 0.00723178 0.00156295 0.00340569 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     M 
+
+Number= 21
+Mixture= 0.005734
+B= 108.343185
+Alpha= 0.0067512 0.00239062 0.0140378 0.0043452 0.00365788 0.00689345 0.0148828 0.00715373 0.00789036 0.00614036 0.00289697 0.858995 0.00399721 0.00770961 0.00570515 0.0238176 0.011602 0.00591549 0.00167893 0.00353897 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     N 
+
+Number= 22
+Mixture= 0.022818
+B= 15.153304
+Alpha= 0.0417987 0.00360232 0.0113792 0.0152366 0.00564775 0.0123795 0.00606957 0.0091353 0.0165122 0.0167265 0.00490487 0.00915437 0.755604 0.0131375 0.012587 0.0283392 0.0189623 0.0140029 0.0012848 0.00353553 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     P 
+
+Number= 23
+Mixture= 0.005931
+B= 79.417511
+Alpha= 0.0142993 0.00266984 0.0053289 0.0321605 0.0028715 0.00426743 0.0257509 0.00565307 0.0106106 0.0161186 0.00955753 0.0104696 0.00638107 0.807311 0.0149106 0.0111968 0.00889459 0.00681482 0.00206658 0.00266624 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     Q 
+
+Number= 24
+Mixture= 0.011491
+B= 93.103897
+Alpha= 0.00756896 0.00314197 0.00296652 0.00327634 0.00194604 0.00467894 0.00721049 0.00406061 0.0277257 0.00663852 0.00217868 0.00577047 0.00473306 0.00953551 0.889701 0.00650859 0.00506022 0.00294281 0.00205549 0.00230062 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=      R 
+
+Number= 25
+Mixture= 0.008219
+B= 47.504795
+Alpha= 0.0284818 0.00697155 0.00749796 0.00604665 0.00515171 0.00954817 0.00380684 0.00637929 0.0104463 0.00908885 0.00471437 0.0194592 0.00711823 0.00611827 0.00979722 0.707416 0.139256 0.00656298 0.0015377 0.00460086 
+FullUpdate= 1
+QUpdate= 1
+StructID=    0
+Comment=     S 
+
+Number= 26
+Mixture= 0.019050
+B= 14.027470
+Alpha= 0.0247201 0.00718027 0.00845584 0.0076239 0.00600101 0.0073401 0.00492149 0.0173757 0.0129878 0.0125773 0.0100452 0.0230424 0.00659406 0.0110314 0.0112037 0.107763 0.690341 0.0249364 0.00193884 0.00392074 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     T 
+
+Number= 27
+Mixture= 0.007047
+B= 76.958153
+Alpha= 0.0447488 0.00734525 0.00576457 0.00805666 0.00714188 0.00593389 0.0041663 0.0688592 0.00714299 0.0255115 0.00800708 0.00501678 0.00632646 0.00492002 0.00812967 0.0100074 0.0240134 0.745035 0.00126243 0.00261056 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     V 
+
+Number= 28
+Mixture= 0.003957
+B= 150.973328
+Alpha= 0.00517343 0.00213336 0.00350645 0.00390297 0.018439 0.0041919 0.0023655 0.00404231 0.00420998 0.0171406 0.00379068 0.00363696 0.00245861 0.00387467 0.00502035 0.00465674 0.00417283 0.00620977 0.888513 0.012561 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     W 
+
+Number= 29
+Mixture= 0.004904
+B= 30.653225
+Alpha= 0.0342049 0.00809912 0.0126852 0.0174701 0.156033 0.0118268 0.0431342 0.0204751 0.0164439 0.0363664 0.0129811 0.0131986 0.0103037 0.0116235 0.0159032 0.0287792 0.0176143 0.024986 0.0131845 0.494687 
+FullUpdate= 1
+QUpdate= 1
+StructID=      0
+Comment=     Y 
+
+/* $Header$ */
+/* $Header$ */
+/* $Header$ */